我遇到以下CXF异常:
warning: Interceptor for {http://example.com/wsdl/esc/2011-12-12/}AmazonEC2#{http://example.com/wsdl/esc/2011-12-12/}NewDescribeImages has thrown exception,unwinding now java.lang.NullPointerException at org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor.handleMessage(StartBodyInterceptor.java:59) at org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor.handleMessage(StartBodyInterceptor.java:37) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:762) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1582) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1467) at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1375) at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47) at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188) at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56) at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:623) at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62) at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:263) at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:510) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:440) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:343) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:295) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124) at $Proxy31.newDescribeImages(Unknown Source) at test.App.main(App.java:62) javax.xml.ws.soap.SOAPFaultException: Fault string,and possibly fault code,not set
导致此异常的代码:
MyService ms =new MyService (); MyServicePort port = ms.getAmazonEC2Port(); BindingProvider bp = (BindingProvider) port; bp.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,"http://192.180.33.12:8773/services/myservice_url/"); Client client = ClientProxy.getClient(portType); client.getInInterceptors().add(new LoggingInInterceptor()); client.getOutInterceptors().add(new LoggingOutInterceptor()); Endpoint endpoint = client.getEndpoint(); Map<String,Object> inProps=new HashMap<String,Object>(); Map<String,Object> outProps = new HashMap<String,Object>(); configWSProps(inProps,outProps); //here is some WS-Security properties WSS4JInInterceptor wssIn = new WSS4JInInterceptor(inProps); WSS4JOutInterceptor wssOut = new WSS4JOutInterceptor(outProps); endpoint.getInInterceptors().add(wssIn); endpoint.getOutInterceptors().add(wssOut); SomeResponseType response = port.someMethod();
最后一行抛出此异常:port.someMethod().
在configWSProps(…)方法中,我设置了一些WS-Security属性,这里不太可能有问题.
我打印了cxf日志,我可以看到入站消息有正确的数据.
从CXF源代码看,CXF似乎无法检索到soap消息,但是我不知道如何解决这个问题.请帮帮我!
这里是CXF的源代码:
http://grepcode.com/file/repo1.maven.org/maven2/org.apache.cxf/cxf-rt-bindings-soap/2.4.1/org/apache/cxf/binding/soap/interceptor/StartBodyInterceptor.java/#59