首次在weblogic环境调用webservice接口经历

2 篇文章 0 订阅
2 篇文章 0 订阅

1、对方webservice接口

wsdl: http://ip:port/services/BusinessObject

namespace: http://businessobject.webservice.legion/

接口方法:update(String loginId,i nt bosid, BusinessobjectDto businessobjectDto);


2、采用调用webservice接口的方法

1)、原先准备采用直接AXIS调用远程的web service,后来发现接口方法中的update第三个参数BusinessobjectDto,为一个类对象,一直传递不成功,后面放弃了该方法;

2)、后面准备采用直接SOAP调用远程的webservice,也是各种传值过去后,报错,应该是update第三个参数BusinessobjectDto的问题;

3)、最后只好采用了使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用;


3、使用wsdl2java把WSDL文件转成本地类,然后像本地类一样使用

1)、生成本地类

下载apache-cxf-3.1.4,运行bin目录下wsdl2java,命令如下:

wsdl2java -encoding utf-8 -d C:/webservice/src  http://ip:port/services/BusinessObject?wsdl


C:/webservice/src为生成的本地类存放目录,utf-8为生成本地类的编码格式


2)、将生成的本地类包直接放在项目代码中,像本地类一样访问;

String webserviceIpPort = "xx.xx.xx.xx: port";
		
		URL url = null;
        try {
            url = new URL("http://" +webserviceIpPort + "/services/BusinessObject?wsdl");
        } catch (MalformedURLException e) {
            java.util.logging.Logger.getLogger(BusinessobjectServiceImpService.class.getName())
                .log(java.util.logging.Level.INFO, 
                     "Can not initialize the default wsdl from {0}", "http://ip:port/services/BusinessObject?wsdl");
        }
        
		BusinessobjectServiceImpService bsi = new BusinessobjectServiceImpService(url);

		BusinessobjectService bs = bsi.getBusinessobjectServiceImpPort();
/* 参数赋值 ... */

ResultDto result = bs.update(loginId,bosid, bbd);

在eclipse中运行项目,测试了一下,运行一遍就调用成功了。


4、部署weblogic上调用webservice接口问题

weblogic版本:WebLogic Server 12.1.3.0.0

java版本:java version "1.7.0_55"


开发好后,打成war包部署到weblogic上后,调用webservice接口,一直报错, 错误如下:

java.lang.ClassCastException: weblogic.wsee.jaxws.spi.WLSProvider cannot be cast to javax.xml.ws.spi.Provider
        at javax.xml.ws.spi.Provider.provider(Provider.java:43)
        at javax.xml.ws.Service.<init>(Service.java:35)
        at legion.webservice.businessobject.BusinessobjectServiceImpService.<init>(BusinessobjectServiceImpService.java:41)
        at com.xxxxx.cust.server.GfjjCommonService.oAWebserviceApi(GfjjCommonService.java:514)
        at com.xxxxx.cust.server.GfjjCommonService$$FastClassBySpringCGLIB$$35a646d0.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
        at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281)
        at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
        at com.xxxx.cust.server.GfjjCommonService$$EnhancerBySpringCGLIB$$162c909a.oAWebserviceApi(<generated>)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.xxxxxx.gui.data.server.command.executer.CommandExecutor.execute(CommandExecutor.java:136)
        at com.xxxxxx.gui.data.server.GUIGWTServer.updateData(GUIGWTServer.java:1888)
        at com.xxxxxx.gui.data.server.GUIGWTServer.updateData(GUIGWTServer.java:1)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:751)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
        at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
        at com.xxxxx.gal.web.filter.LoggerContextFilter.doFilter(l:211)
        at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3436)
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3402)
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
        at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2285)
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2201)
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1572)
        at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:255)
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
        

后来百度了下,发现weblogic本身就有一套webservice实现,故这个报错应该是两套调webservice接口方法冲突了。


最后的解决办法:

1、修改服务器的weblogic,删除/opt/bea/wlserver_12.13/oracle_common/modules目录下
com.oracle.webservices.wls.wls-soap-stack-impl_12.1.3.jar包的weblogic/wsee/jaxws/spi/WLSProvider.class文件;


2、将调用webservice接口的jar包放到war包的WEB-INF/lib目录下,所需最简jar包有:
cxf-core-3.0.4.jar
cxf-rt-bindings-soap-3.0.4.jar
cxf-rt-databinding-jaxb-3.0.4.jar
cxf-rt-frontend-jaxws-3.0.4.jar
cxf-rt-frontend-simple-3.0.4.jar
cxf-rt-transports-http-3.0.4.jar
cxf-rt-transports-udp-3.0.4.jar
cxf-rt-ws-addr-3.0.4.jar
cxf-rt-wsdl-3.0.4.jar
cxf-rt-ws-policy-3.0.4.jar
cxf-rt-wsdl-3.0.4.jar
neethi-3.0.3.jar
slf4j-api-1.7.9.jar
xmlschema-core-2.2.1.jar


3、这样修改后,weblogic启动会报两个WLSProvider类有关的错,不过不影响项目启动与运行;



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值