CXF中could not find matching RPC/Literal part问题处理

来源:互联网 发布:未加工数据跑统计模型 编辑:程序博客网 时间:2024/05/16 07:46
        前段时间,项目中涉及到和别的系统之间交互,对方的系统使用的是.NET,我们是J2EE平台,使用的WebService中的CXF框架。主要是我们这边调用对方系统公开的WebService。我使用Myeclipse工具生成的客户端存根。程序非常简单,但是总是报以下的错误:

        Interceptor for {http://这个部分是Webservice的地址部分,省去}ExpertChoiceService#{http://这个部分是Webservice的地址部分,省去}Insert has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Found element {http://这个部分是Webservice的地址部分,省去}InsertReturn but could not find matching RPC/Literal part
        at org.apache.cxf.binding.soap.interceptor.RPCInInterceptor.handleMessage(RPCInInterceptor.java:171)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
        at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:700)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2261)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2134)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1988)
        at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
        at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
        at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)

        最后经过查看到上边错误堆栈标红的部分,再查看WSDL文件后确定是WebService之间信息交互的编码格式问题,WebService的编码格式有两种Literal、Encoded。其中Encoded是比较古老的编码方式,现在WebServcie标准官方已经不建议使用了。CXF不支持这种编码格式,所以最简便的办法是换其他框架。而我所知道的支持这种编码格式的只有Axis1.x,换成这个版本,问题解决。