【问题标题】:Convert SOAP messages to Java objects将 SOAP 消息转换为 Java 对象
【发布时间】:2017-07-11 23:48:27
【问题描述】:

我正在尝试找到一个合适的库,它将 SOAP 消息转换为 Java 对象。

我遇到过 XStream 和 JaxB。这些库在将 xml 转换为对象时需要类表示。

我们收到的 SOAP 消息是动态的,这意味着它们会根据调用的 SOAP 方法而改变。所以不可能为 SOAP 消息创建一个类结构。对于每次迭代,我们都会得到不同的 SOAP 响应。

是否有任何 java api 可用于将传入的 SOAP xml 转换为 Java 类,然后使用 JaxB 或 XStream 中的那些将 xml 转换为 java 对象?

是否可以使用 JaxB 或 XStream 将 xml 转换为 Java 集合,如 Map 或 Map 的 Map 而无需 Class 表示?

【问题讨论】:

  • 尝试使用 xerces.jar 将 xml 转换为 java 对象

标签: java xml soap jaxb xstream


【解决方案1】:

EclipseLink's Moxy 提供动态 JAXB OXM 功能。

使用 EclipseLink Dynamic MOXy,您可以从各种元数据源引导 JAXBContext,并使用现有的 JAXB API 来编组和解组数据……而无需在类路径上编译 Java 类文件。这允许您根据需要更改元数据,而无需更新和重新编译之前生成的 Java 源代码。

FileInputStream xmlInputStream = new FileInputStream("src/example/dynamic/customer.xml");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
DynamicEntity customer = (DynamicEntity) unmarshaller.unmarshal(xmlInputStream);

Dynamic MOXy 不使用实际的 Java 类(例如 Customer.class 或 Address.class),而是使用简单的 get(propertyName)/set(propertyName, propertyValue) API 来操作数据。 EclipseLink 生成(在内存中)与每个 DynamicEntity 关联的 DynamicType。

System.out.println(customer.<String>get("name"));

推荐阅读:

https://wiki.eclipse.org/EclipseLink/Examples/MOXy/Dynamic/XmlToDynamicEntity https://docs.oracle.com/middleware/1212/toplink/TLJAX/dynamic_jaxb.htm#TLJAX442

【讨论】:

  • 听起来有点像我 10 多年前使用的 XmlBeans
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-07
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
相关资源
最近更新 更多