Spring&Web Service客户端-故障详细信息

时间:2020-03-06 14:25:25  来源:igfitidea点击:

如何获得SoapFaultClientException发送的故障详细信息?
我使用如下所示的WebServiceTemplate:

WebServiceTemplate ws = new WebServiceTemplate();
ws.setMarshaller(client.getMarshaller());
ws.setUnmarshaller(client.getUnMarshaller());
try {
    MyResponse resp = (MyResponse) = ws.marshalSendAndReceive(WS_URI, req);
} catch (SoapFaultClientException e) {
     SoapFault fault =  e.getSoapFault();
     SoapFaultDetail details = e.getSoapFault().getFaultDetail();
      //details always NULL ? Bug?
}

发送的Web服务故障似乎是正确的:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
  <soapenv:Fault>
     <faultcode>soapenv:Client</faultcode>
     <faultstring>Validation error</faultstring>
     <faultactor/>
     <detail>
        <ws:ValidationError xmlns:ws="http://ws.x.y.com">ERR_UNKNOWN</ws:ValidationError>
     </detail>
  </soapenv:Fault>
</soapenv:Body>

谢谢

威乐美

解决方案

来自Javadocs中的marshalSendAndReceive方法
看起来catch块中的SoapFaultClientException永远不会发生。

从API看来,确定故障详细信息的最佳选择是设置自定义故障消息接收器。

问题来自JAXB库