2014-03-27 51 views
0

我需要對未由我管理的後端執行一些調用。重點是他們使用不同的XML格式來傳輸數據。即使對於相同的呼叫請求和響應也是不同的:相同的數據但不同的根標籤。 起初我試圖用不同的豆使用註釋(moxy jaxb)來映射它們,但是我必須設法對其中的許多豆類進行轉換,並且改變成本太高。然後我切換到xml文件映射:它似乎比以前的選擇更好,但仍然需要管理大量的xml文件(douzen)。 您是否有任何建議,以保持項目輕和可擴展?如何用jaxb/moxy管理多個xml格式

在此先感謝您的幫助。

+0

[你嘗試過這麼遠嗎?(http://mattgemmell.com/what-have-you-tried) –

+0

正如我所說,我試圖創建不同的咖啡豆,但這樣做我必須管理超過15個對象僅用於通信。 XML綁定文件的選擇似乎更好,但它不符合我,因爲我將複雜性從java對象移動到xml文件。仍在搜索.... – Pirulino

回答

2

的原因之一,我們添加了外部映射文件中的EclipseLink JAXB(莫西)是允許你申請額外的XML交涉對象模型:

一件事請注意根目錄xml-bindings上的xml-mapping-metadata-complete屬性。當它被設置爲true時,XML文檔將替換所有其他映射,並且當它爲假或不存在時,它將修改元數據。

<?xml version="1.0"?> 
<xml-bindings 
    xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm" 
    package-name="blog.weather" 
    xml-mapping-metadata-complete="true"> 

使用修改元數據的方法,您可以在多個綁定文件傳給創造一個後續的映射文件可用於逐步調整的元數據Context

Map<String, Object> properties = new HashMap<String, Object>(1); 
    List<String> bindingFiles = new ArrayList<String>(2); 
    bindingFiles.add("version2.xml"); 
    bindingFiles.add("version3.xml"); 
    properties.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, bindingFiles); 
    JAXBContext jc = JAXBContext.newInstance(new Class[] {WeatherReport.class}, properties); 
+1

我同意這是一個很好的解決方案,但這樣做我會有幾個綁定文件。非常感謝您的幫助。 – Pirulino