java - 将 SOAPMessage 对象转换为 Java 中 XmlType 注释类的实例

标签 java xml soap

我正在使用 javax.xml.soap 包处理 SOAP。

我有一个 javax.xml.soap.SOAPMessage 对象,它对应于对我的 SOAP 请求的响应,我必须将它转换为用 注释的类的实例javax.xml.bind.annotation.XmlType 注释。

我怎样才能进行这种转换?

最佳答案

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 点,但您可能可以使用上面的代码片段解决您的问题。

关于java - 将 SOAPMessage 对象转换为 Java 中 XmlType 注释类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/956015/

相关文章:

logging - CXF 日志拦截器

c - SOAP 请求和响应使用 libcurl - C 读取文件或写入文件

java - 找不到或加载主类java

java - 如何用 1-1000 的整数创建 100 个几乎已排序的数组?

java - 是否可以在 Glassfish 3 上使用 Java 8?

java - MiniMRYarnCluster,在本地运行MR

xml - 为什么在使用 DTD 解析此 XML 文件时出现错误 "StartTag: Invalid element name"

java - 未定义名为 'PlaceDAO' 的 bean

python - LXML,如何将多组属性获取到列表

java - Camel CXF : IllegalArgumentException parameters should be of type X