jaxb java类到多个xml映射

时间:2015-10-12 23:15:38

标签: java xml jaxb

我想使用jaxb将一些java类转换为xml。 (我不需要根据模式生成类)我需要能够将类映射到不同的xml格式,所以我不想使用注释。从我所看到的,我最好的选择似乎是使用外部xml绑定。所以我想知道:

1)我正在使用eclipse。我是JAXB的新手,我想知道如何使用eclipse集成外部绑定?

2)除了外部xml绑定之外还有哪些其他选项?

2 个答案:

答案 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)

  1. 请参阅&#34;将自定义文件传递给JAXB绑定编译器&#34;这里: https://docs.oracle.com/javase/tutorial/jaxb/intro/custom.html
  2. 您可以编写一个脚本以集成到Eclipse中。或者您可以使用Maven或Ant任务。

    1. 您唯一的选择是注释或XML绑定。