[英]jaxb java class to multiple xml mappings
我有幾個Java類,希望使用jaxb轉換為xml。 (我不需要基於架構生成類)我需要能夠將類映射到不同的xml格式,所以我不想使用注釋。 從我所看到的,我最好的選擇似乎是使用外部xml綁定。 所以我想知道:
1)我正在使用日食。 我是JAXB的新手,我想知道如何使用eclipse集成外部綁定?
2)除了外部xml綁定以外,還有哪些其他選項可用?
我認為您最好的選擇是使用MOXy XML綁定:
這允許您以XML文件而不是注釋的形式定義XML <-> Java映射:
<?xml version="1.0" encoding="US-ASCII"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
package-name="example">
<java-types>
<java-type name="Customer">
<xml-root-element name="customer-info" />
<java-attributes>
<xml-attribute java-attribute="custId" name="customer-id" />
<xml-element java-attribute="picture" name="picture-hex">
<xml-schema-type name="hexBinary" />
<xml-java-type-adapter
value="example.adapters.MyHexConverter" />
</xml-element>
</java-attributes>
</java-type>
</java-types>
</xml-bindings>
您可以通過JAXBContextProperties.OXM_METADATA_SOURCE
屬性使用此文件:
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBContextProperties.OXM_METADATA_SOURCE, iStream);
JAXBContext ctx = JAXBContext.newInstance(new Class[] { Customer.class }, properties);
因此,如果您希望為同一類提供多個不同的映射,則只需編寫幾個XML綁定並使用相應的文件創建JAXBContext
。 我認為這是使用MOXy的最佳選擇
使用純JAXB RI,您可以編寫自己的注釋閱讀器。 我曾經和Annox一起做過一次:
另一個選擇是JBoss JAXBIntroductions,它也基於自定義注釋閱讀器:
但是我不確定這是否會繼續存在。
由於您需要多個映射,因此您必須手動編寫它們(除一個以外的所有映射)。 您可以生成一組映射作為注釋,但是進一步的映射將必須手動編寫。 或者說,我不知道會生成例如MOXy XML綁定的插件或工具。 雖然寫一個不是大問題。
您也可以采用完全不同的方法。 您可以將單獨的DTO包映射到這些格式,而不是使用不同的映射/格式映射一個中心模型。 然后在您的DTO和中央模型之間轉換。 就像是
XML(1) <-> DTO(1)|<-\
XML(2) <-> DTO(2)|<--*->Model
XML(3) <-> DTO(3)|<-/
這樣,您將獲得每種交換格式的干凈的DTO(可以從模式中生成)和單個中央業務模型(將它們全部統治)。 您必須在DTO和模型之間進行轉換,這可以使用Dozer之類的工具進行處理。
是否采用這種方法更好,取決於格式的復雜程度以及彼此之間的差異。
關於您的問題:
1)Eclipse沒什么特別的,只需添加MOXy作為依賴項並遵循文檔即可。
2)我已經在上面描述了一些選項。
您可以編寫一個腳本以集成到Eclipse中。 或者,您可以使用Maven或Ant任務。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.