用于重复元素块的JAXB注释

时间:2017-11-03 19:30:44

标签: xml annotations jaxb

我有以下示例XML我想使用jaxb注释解组:

<root>
    <AAA>
        <a>stuff</a>
        <b>1</b>
        <c>8</c>
        <BBB>
            <a>more stuff</a>
            <b>2</b>
            <c>10</c>
            <CCC>
                <a>other stuff</a>
                <b>2</b>
                <c>10</c>
            </CCC>
        </BBB>
    </AAA>
</root>

我想将重复元素分解为类,例如:

@XmlAccessorType(XmlAccessType.FIELD)
public class SomeName {
    private String a;
    private String b;
    private String c;
}

有没有办法对此进行注释,而不必重复每个类AAA,BBB,CCC中的属性?

@XmlAccessorType(XmlAccessType.FIELD)
public class AAA {
    **@WhatToUseHere?**
    private SomeName someName;

    private BBB bbb;
}

1 个答案:

答案 0 :(得分:0)

你已经走在正确的轨道上了。 你的班级SomeName没问题。

但是你需要定义其他类AAABBBCCC 通过延长SomeName (如果您还是Java新手,那么您可能需要先阅读有关Inheritance的更多信息。)

通过这样做,这3个类包含所有成员(abc) 来自他们的超类SomeName JAXB与Java继承一起使用。 因此,3个XML元素<AAA><BBB><CCC> 自动包含所有子元素<a><b><c>

@XmlAccessorType(XmlAccessType.FIELD)
public class AAA extends SomeName {

    @XmlElement(name="BBB")
    private BBB bbb;
}


@XmlAccessorType(XmlAccessType.FIELD)
public class BBB extends SomeName {

    @XmlElement(name="CCC")
    private CCC ccc;
}


@XmlAccessorType(XmlAccessType.FIELD)
public class CCC extends SomeName {

}

最后是根元素:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Root {

    @XmlElement(name = "AAA")
    private AAA aaa;
}

另请注意:
一些Java成员使用@XmlElement(name="something")进行注释 显式设置相应XML元素的名称。 如果您不这样做,那么Java成员将映射到XML元素 使用相同的名称。 例如:将映射Java成员private AAA aaa 到XML元素<aaa>(不是<AAA>)。