我想使用jaxb将一些java类转换为xml。 (我不需要根据模式生成类)我需要能够将类映射到不同的xml格式,所以我不想使用注释。从我所看到的,我最好的选择似乎是使用外部xml绑定。所以我想知道:
1)我正在使用eclipse。我是JAXB的新手,我想知道如何使用eclipse集成外部绑定?
2)除了外部xml绑定之外还有哪些其他选项?
答案 0 :(得分:1)
我认为您最好的选择是使用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)我已经描述了上面几个选项。
答案 1 :(得分:0)
您可以编写一个脚本以集成到Eclipse中。或者您可以使用Maven或Ant任务。