2013-02-12 37 views
3

我解析了一個特定格式的XML,例如如何將JAXB對象編組到不同的模式?

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

在使用Java對象後,我想將它發送到另一個使用不同模式的服務,例如,

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

這可以通過JAXB「輕鬆」完成嗎?

+0

認爲更多的細節將有助於回答。, – 2013-02-12 22:21:33

+0

你有什麼嘗試?您是否在嘗試編制對象時指定了不同的模式?這似乎是一個快速嘗試可能會回答你的問題......另外,也許你可以寫一個方法,將一個Java對象轉換成另一個。 – jahroy 2013-02-12 22:21:54

+0

下面是如何使用EclipseLink JAXB(MOXy)完成的示例:http://blog.bdoughan.com/2011/09/mapping-objects-to-multiple-xml-schemas.html – 2013-02-12 22:23:20

回答

3

使用任何JAXB (JSR-222)實現,你可以使用XSLT在JAXBSourcejavax.xml.transform API來產生一個輔助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); 

完整的例子

1

你可以創建creat e作爲其他服務的代理,並將其bean視爲簡單的數據傳輸對象。

所以當你想調用服務時,你需要根據你正確的模型對象(你玩的那個,包含業務邏輯的)的值手動填充bean,並使用bean調用服務。

如果服務接口發生更改,您可以重新創建代理,編譯器將幫助您修復轉換。

相關問題