Unmarshall SOAP故障JAXB

时间:2018-07-23 19:54:50

标签: spring jaxb spring-integration

我需要帮助来使用JAXB Java类解组SOAP响应

 <soapenv:Fault>
      <faultcode>soapenv:Server</faultcode>
      <faultstring>DLResponseException</faultstring>
      <detail>...
     ....

我用以下根元素创建了一个Java类

@XmlRootElement(name="Fault", namespace="http://schemas.xmlsoap.org/soap/envelope/")
public class MFaultResponse{
..
}

用法:

 InputStream is = new ByteArrayInputStream(sample.getBytes());

    JAXBContext jaxbContext = JAXBContext.newInstance(MFaultResponse.class);  
    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();  

    MFaultResponse response= (MFaultResponse) jaxbUnmarshaller.unmarshal(is);
    System.out.println(response.getFaultCode());

例外:

由以下原因引起:org.xml.sax.SAXParseException; lineNumber:1; columnNumber:16;元素“ soapenv:Fault”的前缀“ soapenv”未绑定。

1 个答案:

答案 0 :(得分:0)

这个问题与Spring Integration无关,也与Spring无关。

当您有xml片段时,这是典型的JAXB情况。我知道这是SOAP响应的主体,但是如您所见,soapenv的真实名称空间是在SOAP信封的根上声明的。

如果您没有该前缀,则可以解组文档,但是由于它是一个片段,而不是整个SOAP响应,因此建议您执行手动XPath来提取这3个标记。值并手动构建这样的MFaultResponse

但是不确定,为什么Spring WS中的标准SoapFault方法对您不起作用。