Web服务调用返回“故障字符串,可能还有故障代码,未设置”

时间:2016-07-15 07:30:01

标签: java web-services soap-client

我有一个调用webservice的java应用程序( A )。

1)然后我有另一个使用 A jar的app( B )。 调用成功,返回所需的数据。

2)然后我的网络应用程序也使用 A jar。 在这种情况下,从A app调用Web服务方法时,会抛出异常。

由于执行webservice调用的类在两种情况下都是相同的,所以我不确定问题出在哪里。 Web服务位于https服务器上。但我使用凭据进行身份验证。

我想也许应该在Web应用程序中设置一些东西,但我不知道是什么......

例外是:

09:21:48.009 [http-nio-8084-exec-33] WARN  o.a.cxf.phase.PhaseInterceptorChain - Interceptor for {http://www.myserver.com/ci}ci2#{http://www.myserver.com/ci}GetCertPath has thrown exception, unwinding now
java.lang.UnsupportedOperationException: null
    at java.util.AbstractMap.put(AbstractMap.java:209) ~[na:1.8.0_92]
    at org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor.setSoapAction(SoapPreProtocolOutInterceptor.java:122) ~[cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
javax.xml.ws.soap.SOAPFaultException: Fault string, and possibly fault code, not set
    at org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor.handleMessage(SoapPreProtocolOutInterceptor.java:63) ~[cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:158)
    at org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor.handleMessage(SoapPreProtocolOutInterceptor.java:47) ~[cxf-rt-bindings-soap-2.7.16.jar:2.7.16]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272) ~[cxf-api-2.7.16.jar:2.7.16]
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:572) [cxf-api-2.7.16.jar:2.7.16]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:481) [cxf-api-2.7.16.jar:2.7.16]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382) [cxf-api-2.7.16.jar:2.7.16]
    at com.sun.proxy.$Proxy318.getCertPath(Unknown Source)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335) [cxf-api-2.7.16.jar:2.7.16]
..... more lines here :) .....
    at java.util.AbstractMap.put(AbstractMap.java:209)
    at org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor.setSoapAction(SoapPreProtocolOutInterceptor.java:122)
    at org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor.handleMessage(SoapPreProtocolOutInterceptor.java:63)
Fault string, and possibly fault code, not set
    at org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor.handleMessage(SoapPreProtocolOutInterceptor.java:47)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:572)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:481)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:136)
    ... 59 more

有什么想法吗?

谢谢。

编辑: 是否必须设置任何标头?在案例1中连接时,没有任何特定的设置,它正在工作。

2 个答案:

答案 0 :(得分:1)

好的,所以我发现了这个问题。请求应包含内容类型。奇怪的是,它没有在第一种情况下抛出异常......

我添加了Content-Type: application/soap+xml; charset=utf-8,网络应用程序也在运行。

我发现j avax.xml.ws.soap.SOAPFaultException: Fault string, and possibly fault code, not set主要与缺少的内容类型相关联..

答案 1 :(得分:0)

就我而言,这是由于占位符中格式错误的URL造成的。 http:/xxx.yyu(注意单/)

CXF在JDK6中运行并不是很清楚,但在JDK8中运行更明确