項目中有些認證的需要用到第三方認證介面,第三方提供的是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.InvocationTargetException14: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/BeansException14: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 more14: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產生的用戶端代碼不能用。