项目中有些认证的需要用到第三方认证接口,第三方提供的是WSDL形式的WebService接口。为了调用方便,使用Apache CXF工具生成客户端代码。本地开发时,用的是Apache Tomcat7服务器,调用WebService客户端没有问题。部署到测试环境时,用的是Jboss7.1.1服务器。问题出现了,运行报错。
报错信息:
4:20:49,987 INFO [stdout] (http--0.0.0.0-8080-2) java.lang.reflect.InvocationTargetException
14:20:49,992 INFO [stdout] (http--0.0.0.0-8080-2) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
14:20:49,995 INFO [stdout] (http--0.0.0.0-8080-2) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
14:20:49,998 INFO [stdout] (http--0.0.0.0-8080-2) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
14:20:50,001 INFO [stdout] (http--0.0.0.0-8080-2) at java.lang.reflect.Method.invoke(Method.java:606)
14:20:50,005 INFO [stdout] (http--0.0.0.0-8080-2) at com.huxin.cd.servlet.ChaodaiServlet.processRequest(ChaodaiServlet.java:149)
14:20:50,007 INFO [stdout] (http--0.0.0.0-8080-2) at com.huxin.base.servlet.AbstractBaseServlet.doPost(AbstractBaseServlet.java:126)
14:20:50,014 INFO [stdout] (http--0.0.0.0-8080-2) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
14:20:50,015 INFO [stdout] (http--0.0.0.0-8080-2) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
14:20:50,016 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329)
14:20:50,018 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248)
14:20:50,021 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275)
14:20:50,024 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161)
14:20:50,026 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153)
14:20:50,028 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155)
14:20:50,030 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
14:20:50,031 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
14:20:50,033 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368)
14:20:50,035 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877)
14:20:50,036 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671)
14:20:50,038 INFO [stdout] (http--0.0.0.0-8080-2) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930)
14:20:50,040 INFO [stdout] (http--0.0.0.0-8080-2) at java.lang.Thread.run(Thread.java:745)
14:20:50,042 INFO [stdout] (http--0.0.0.0-8080-2) Caused by: java.lang.NoClassDefFoundError: org/springframework/beans/BeansException
14:20:50,045 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.wsf.stack.cxf.client.configuration.JBossWSBusFactory.getSpringBusFactory(JBossWSBusFactory.java:120)
14:20:50,047 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.wsf.stack.cxf.client.configuration.JBossWSBusFactory.createBus(JBossWSBusFactory.java:54)
14:20:50,050 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.wsf.stack.cxf.client.ProviderImpl.setValidThreadDefaultBus(ProviderImpl.java:213)
14:20:50,055 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.wsf.stack.cxf.client.ProviderImpl.createServiceDelegate(ProviderImpl.java:140)
14:20:50,058 INFO [stdout] (http--0.0.0.0-8080-2) at javax.xml.ws.Service.<init>(Service.java:57)
14:20:50,059 INFO [stdout] (http--0.0.0.0-8080-2) at com.huxin.cd.webservice.client.junyu.ocr.JYOcrWebservice.<init>(JYOcrWebservice.java:47)
14:20:50,060 INFO [stdout] (http--0.0.0.0-8080-2) at com.huxin.cd.servlet.HuxinChaoDaiLoanServletBLL.CdOcr(HuxinChaoDaiLoanServletBLL.java:2283)
14:20:50,063 INFO [stdout] (http--0.0.0.0-8080-2) ... 21 more
14:20:50,065 INFO [stdout] (http--0.0.0.0-8080-2) Caused by: java.lang.ClassNotFoundException: org.springframework.beans.BeansException from [Module "org.apache.cxf:main" from local module loader @35481fbd (roots: F:\work\web_server\jboss-as-7.1.1.Final\modules)]
14:20:50,070 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)
14:20:50,072 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468)
14:20:50,074 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456)
14:20:50,076 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
14:20:50,078 INFO [stdout] (http--0.0.0.0-8080-2) at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120)
14:20:50,080 INFO [stdout] (http--0.0.0.0-8080-2) ... 28 more
找到关键性错误信息:
Caused by: java.lang.ClassNotFoundException: org.springframework.beans.BeansException from [Module "org.apache.cxf:main" from local module loader @35481fbd
由错误信息,可以大概得知是缺少spring-beans-version.jar,但是该项目中是有beans的jar包的。网上搜了很多,说的是不兼容Spring。打开Jboss安装目录,Jboss7中modules中自带cxf的jar包,看到modules.xml中配置的依赖中有spring,但是是可选的。试了很多方法,还是不行。
无奈之中,使用cxf生成的客户端代码不行,那就换种方式。使用Apache axis生成客户端代码后,问题解决。
有时间还是要研究下,为什么使用CXF生成的客户端代码不能用。