3

我解组以特定格式出现的 XML,例如

<root>
   <a/>
   <b/>
   <c>
     <x/>
   </c>
   <d/>
</root>

在玩弄了 Java 对象之后,我想将它发送到另一个使用不同模式的服务,例如

<anotherRoot>
   <a/>
   <x/>
   <something>
      <d/>
   </something>
</anotherRoot>

这可以通过 JAXB “轻松”完成吗?

4

2 回答 2

3

使用任何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);

完整示例

于 2013-02-12T22:26:38.870 回答
1

您可以为其他服务创建代理,并将其 bean 视为简单的数据传输对象。

因此,当您希望调用服务时,您可以根据适当模型对象(您使用的模型对象,包含业务逻辑的对象)的值手动填充 bean 并使用 bean 调用服务。

如果服务接口发生变化,您可以重新创建代理,编译器将帮助您修复转换。

于 2013-02-12T22:33:09.637 回答