我正在使用javax.xml.soap包来处理SOAP。
我有一个 javax.xml.soap.SOAPMessage 对象,该对象对应于我的SOAP请求的响应,我必须将其转换为使用注释的类的实例javax.xml.bind.annotation.XmlType 注释。
我该如何进行转换?
答案 0 :(得分:6)
javax.xml.soap.SOAPMessage
是SAAJ API类。该链接提供了有关SAAJ API的一些详细信息以及参考实现。请记住,您的环境中的实现可能与参考实现不同,但您应该只关注API本身而不是实现的任何细节。由于您正在讨论JAX-B 2.x带注释的类型,我们可以假设您正在处理SAAJ 3.许多SAAJ 3类扩展了DOM类(我非常确定这在SAAJ 2中是正确的,但不是SAAJ 1) 。恰好javax.xml.soap.SOAPMessage
extends org.w3c.dom.Node
发生了这种情况。方便的是,JAX-B 2.x提供了一种简单的方法将unmarshall DOM树(或子树)转换为Java类型。
以下代码是单向的:
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
JAXBContext jc = JAXBContext.newInstance("test.jaxb");
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.unmarshal(soapBody);
或者,您可以将soapBody
转换为JAX-P DOMSource
,然后取消隐藏它。如果您感兴趣,还有其他更迂回的方法可以从A点到B点,但您可以使用上面的代码片段来解决您的问题。