java - spring-ws中如何解析SoapFaultClientException

标签 java spring web-services spring-ws soapfault

我正在使用 spring-ws-2.3.1,在为 web 服务创建客户端时,有时我会遇到 SoapFaultClientException,如下所示,

<SOAP-ENV:Body>
  <SOAP-ENV:Fault>
     <faultcode>SOAP-ENV:Server</faultcode>
     <faultstring>There was a problem with the server so the message could not proceed</faultstring>
     <faultactor>InvalidAPI</faultactor>
     <detail>
        <ns0:serviceException xmlns:ns0="http://www.books.com/interface/v1">
           <ns1:messageId xmlns:ns1="http://www.books.org/schema/common/v3_1">5411</ns1:messageId>
           <ns1:text xmlns:ns1="http://www.books.org/schema/common/v3_1">Locale is invalid.</ns1:text>
        </ns0:serviceException>
     </detail>
  </SOAP-ENV:Fault>

我正在尝试获取 ServiceException 的“messageId”和“Text”,但我不能。请在下面找到代码,

catch (SoapFaultClientException ex) {
        SoapFaultDetail soapFaultDetail = ex.getSoapFault().getFaultDetail(); // <soapFaultDetail> node
        // if there is no fault soapFaultDetail ...
        if (soapFaultDetail == null) {
            throw ex;
        }
        SoapFaultDetailElement detailElementChild = soapFaultDetail.getDetailEntries().next();
        Source detailSource = detailElementChild.getSource();
        Object detail = webServiceTemplate.getUnmarshaller().unmarshal(detailSource);
        System.out.println("Detail"+detail.toString());//This object prints the jaxb element
    }

“detail”对象返回 JaxbElement。有没有优雅的方法来解析 soap 错误。

如有任何帮助,我们将不胜感激。

最佳答案

最后,我可以解析 soap 错误异常了,

catch (SoapFaultClientException ex) {
    SoapFaultDetail soapFaultDetail = ex.getSoapFault().getFaultDetail(); // <soapFaultDetail> node
    // if there is no fault soapFaultDetail ...
    if (soapFaultDetail == null) {
        throw ex;
    }
    SoapFaultDetailElement detailElementChild = soapFaultDetail.getDetailEntries().next();
    Source detailSource = detailElementChild.getSource();
    Object detail = webServiceTemplate.getUnmarshaller().unmarshal(detailSource);
    JAXBElement<serviceException> source = (JAXBElement<serviceException>)detail;
    System.out.println("Text::"+source.getText()); //prints : Locale is invalid.
}

我没有找到任何其他优雅的方式,所以我希望这应该是解决方案。

关于java - spring-ws中如何解析SoapFaultClientException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43329256/

相关文章:

java - 将数组作为参数传递 - 棋盘

web-services - 在 RemObjects Web 服务中获取客户端 IP 地址

java - 如何正确向Spring Restful WebService提交特殊字符?

java - 从 wsdl 创建 Web 服务

java - 如何使用 JavaFX 从实体设置 TableView<> 中的值

java - 如何从 bean 类型数组列表中获取元素的索引

java - 如何创建一个仅返回 Java 中不同元素的迭代器?

java SocketException : Connection reset

java - 修改在 Spring Data REST 投影后面生成的 SQL 查询

java - 如何在 Spring Boot 中禁用一项服务的身份验证?