我需要帮助来使用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”未绑定。
答案 0 :(得分:0)
这个问题与Spring Integration无关,也与Spring无关。
当您有xml片段时,这是典型的JAXB情况。我知道这是SOAP响应的主体,但是如您所见,soapenv
的真实名称空间是在SOAP信封的根上声明的。
如果您没有该前缀,则可以解组文档,但是由于它是一个片段,而不是整个SOAP响应,因此建议您执行手动XPath来提取这3个标记。值并手动构建这样的MFaultResponse
。
但是不确定,为什么Spring WS中的标准SoapFault
方法对您不起作用。