CXF客户端异常:{XXX}的拦截器抛出异常,现在展开 [英] CXF client exception: Interceptor for {XXX} has thrown exception, unwinding now

查看:203
本文介绍了CXF客户端异常:{XXX}的拦截器抛出异常,现在展开的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到以下CXF异常:

I am encountering this following CXF exception:

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属性,这里不太可能有问题。

This exception is thrown in the last line: port.someMethod(). In the configWSProps(...) method I set some WS-Security properties, it is not likely to have problem here.

我打印了cxf日志,我可以看到入站消息有正确的数据。

I printed the cxf logs, i can see that the inbound message has the correct data.

从CXF源代码来看,似乎CXF无法检索soap消息,但我不知道知道如何解决这个问题。请帮助我!

From the CXF source code, it seems that CXF fails to retrieve the soap message, but I don't know how to solve this. Please help me!

这里是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

here is the CXF source code: 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

推荐答案

在cxf代码中调试并在cxf邮件列表中寻求帮助后,我终于解决了这个问题。
问题是由入站消息引起的,http消息缺少content-type标头,导致CXF无法创建XMLStreamReader,然后无法读取内容,因此抛出NullPointerException。
非常感谢CXF社区的人们!

After debugging in the cxf code and seeking help in the cxf mailing list, I finally solved this problem. The problem is caused by the inbound message, the http message lacks the content-type header, which causes the CXF fail to create an XMLStreamReader, and then failed to read the content, thus a NullPointerException is thrown. Many thanks to the guys in the CXF community!

我问了一个问题并在那里得到答案:
http:// cxf .547215.n5.nabble.com / CXF-client-exception-Interceptor-for-XXX-have-thrown-exception-unwinding-now-td5449373.html#a5449764

I asked a question and got answer there: http://cxf.547215.n5.nabble.com/CXF-client-exception-Interceptor-for-XXX-has-thrown-exception-unwinding-now-td5449373.html#a5449764

这篇关于CXF客户端异常:{XXX}的拦截器抛出异常,现在展开的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆