web-dev-qa-db-ja.com

CXFクライアント例外:{XXX}のインターセプターが例外をスローし、現在巻き戻しています

次の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()。いくつかのWS-Securityプロパティを設定したconfigWSProps(...)メソッドでは、ここで問題が発生することはほとんどありません。

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

13
Wint

Cxfコードでデバッグし、cxfメーリングリストで助けを求めた後、私は最終的にこの問題を解決しました。問題の原因はインバウンドメッセージです。httpメッセージにcontent-typeヘッダーがないため、CXFはXMLStreamReaderの作成に失敗し、コンテンツの読み取りに失敗したため、NullPointerExceptionがスローされます。 CXFコミュニティのみんなに感謝します!

私は質問をしてそこで回答を得ました: http://cxf.547215.n5.nabble.com/CXF-client-exception-Interceptor-for-XXX-has-thrown-exception-unwinding-now-td5449373 .html#a5449764

18
Wint

エンドポイントが正しいか、コンポーネントがデプロイされている環境からアクセスできることを確認してください。

エンドポイントを通過しないプロキシの問題である可能性があります。

0
Ajay Kumar