我解组以特定格式出现的 XML,例如
<root>
<a/>
<b/>
<c>
<x/>
</c>
<d/>
</root>
在玩弄了 Java 对象之后,我想将它发送到另一个使用不同模式的服务,例如
<anotherRoot>
<a/>
<x/>
<something>
<d/>
</something>
</anotherRoot>
这可以通过 JAXB “轻松”完成吗?
使用任何JAXB (JSR-222)JAXBSource
实现,您可以在 a和API上使用 XSLTjavax.xml.transform
来生成二级 XML 结构:
JAXBContext jc = JAXBContext.newInstance(Foo.class);
// Output XML conforming to first XML Schema
Marshaller marshaller = jc.createMarshaller();
marshaller.marshal(foo, System.out);
// Create Transformer on Style Sheet that converts XML to
// conform the second XML Schema
TransformerFactory tf = TransformerFactory.newInstance();
StreamSource xslt = new StreamSource(
"src/example/stylesheet.xsl");
Transformer transformer = tf.newTransformer(xslt);
// Source
JAXBSource source = new JAXBSource(jc, foo);
// Result
StreamResult result = new StreamResult(System.out);
// Transform
transformer.transform(source, result);
完整示例
您可以为其他服务创建代理,并将其 bean 视为简单的数据传输对象。
因此,当您希望调用服务时,您可以根据适当模型对象(您使用的模型对象,包含业务逻辑的对象)的值手动填充 bean 并使用 bean 调用服务。
如果服务接口发生变化,您可以重新创建代理,编译器将帮助您修复转换。