说明:通过cxf根据WSDL来生成的客户端代码,代码的本身并没有引入CXF包中的东西,理论上移到weblogic(我们用WEBLOGIC来开发的webservice)是没任何问题的
但事实上移进去之后就会报下面一些异常。
异常信息:
javax.xml.ws.soap.SOAPFaultException: java.lang.NullPointerException
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:156)
at $Proxy119.computePSRStatisticByDept(Unknown Source)
at cn.creaway.webgis.sggis.business.SpatialAnalysisServiceBusiness.computePSRStatisticByDept(SpatialAnalysisServiceBusiness.java:107)
at cn.creaway.webgis.sggis.services.SpatialAnalysisService.computePSRStatisticByDept(SpatialAnalysisService.java:130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
.........
Caused by: org.apache.cxf.binding.soap.SoapFault: java.lang.NullPointerException
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
.........
原因分析:由于我在生成客户端代码时,配置的根目录为cn.creaway.webgis.proxy,而在发布时将生成的代码COPY到了cn.creaway.webgis.sggis.proxy下,结果导致了上面异常。打开生成的主要源文件,发现如图一,里面的classname还是指向原来的包目录,所以会抛此异常。
扩展:CXF客户端所需的最少的包commons-logging-1.1.1.jar,cxf-2.6,wsdl4j-2.6,XmlSchema-2.6就行了。