解组 SOAP 故障 JAXB
Unmarshall SOAP fault JAXB
我需要帮助来使用 JAXB 解组 SOAP 响应 java class
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>DLResponseException</faultstring>
<detail>...
....
我创建了一个 java class 根元素如下
@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;行号:1;列数:16;元素 "soapenv:Fault" 的前缀 "soapenv" 未绑定。
问题与 Spring 集成无关,与 Spring 完全无关。
这是典型的 JAXB 情况,当您有一个 xml 片段时。我知道这是 SOAP 响应的主体,但正如您所见,soapenv
的真正名称空间是在 SOAP 信封的根部声明的。
如果您没有该前缀,您可以解组文档,但由于它是关于一个片段,而不是整个 SOAP 响应,我建议执行手动 XPath 来提取这 3 个标签的值并手动构建这样的 MFaultResponse
。
不过不确定,为什么 Spring WS 中的标准 SoapFault
方法不适合你..
我需要帮助来使用 JAXB 解组 SOAP 响应 java class
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>DLResponseException</faultstring>
<detail>...
....
我创建了一个 java class 根元素如下
@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;行号:1;列数:16;元素 "soapenv:Fault" 的前缀 "soapenv" 未绑定。
问题与 Spring 集成无关,与 Spring 完全无关。
这是典型的 JAXB 情况,当您有一个 xml 片段时。我知道这是 SOAP 响应的主体,但正如您所见,soapenv
的真正名称空间是在 SOAP 信封的根部声明的。
如果您没有该前缀,您可以解组文档,但由于它是关于一个片段,而不是整个 SOAP 响应,我建议执行手动 XPath 来提取这 3 个标签的值并手动构建这样的 MFaultResponse
。
不过不确定,为什么 Spring WS 中的标准 SoapFault
方法不适合你..