将SOAP消息转换为Java对象

时间:2017-02-22 04:40:02

标签: java xml soap jaxb xstream

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

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

我们收到的SOAP消息是动态的,它们将根据调用的SOAP方法而改变。因此,无法为SOAP消息创建类结构。至于每次迭代,我们都会获得不同的SOAP响应。

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

是否可以使用JaxB或XStream将xml转换为Java Collection,如Map或Map of Map,而不使用Class表示?

1 个答案:

答案 0 :(得分: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使用简单的get(propertyName)/ set(propertyName,propertyValue)API来操作数据,而不是使用实际的Java类(例如Customer.class或Address.class)。 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