Web 服务调用 returns "Fault string, and possibly fault code, not set"

Web service call returns "Fault string, and possibly fault code, not set"

我有一个调用 Web 服务的 java 应用程序 (A)。

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

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

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

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

例外情况是:

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

有什么想法吗?

谢谢。

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

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

我已经添加了 Content-Type: application/soap+xml; charset=utf-8,网络应用程序也能正常工作。

我发现 javax.xml.ws.soap.SOAPFaultException: Fault string, and possibly fault code, not set 主要与丢失的内容类型有关..

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

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