JAXB中的自定义继承表示

时间:2014-05-26 16:52:10

标签: java inheritance jaxb

我使用JAXB读取以下XML结构:

<root>
    <record>
        <animal>Dog</animal>
        <trait>Swim</trait>
        <subrecord>
            <name>Charlie</name>
            <likes>Beef</likes>
        </subrecord>
        <subrecord>
            <name>Rocky</name>
            <likes>Pork</likes>
        </subrecord>
    </record>
    <record>
        <animal>Cat</animal>
        <likes>Fish</likes>
        <subrecord>
            <name>Bella</name>
            <trait>Bite</trait>
        </subrecord>
        <subrecord>
            <name>Molly</name>
            <trait>Claw</trait>
        </subrecord>
    </record>
</root>

代码<trait><likes>可以在<record><subrecord>中。如果同时在<record><subrecord>中定义,那么<subrecord>中的值应该会隐藏<record>中的值。

子记录应该扩展记录并允许我调用下面的方法。即因为查理&#34;我应该得到:

subrecord.getAnimal() -> Dog
subrecord.getName() -> Charlie
subrecord.getTrait() -> Swim
subrecord.getLikes() -> Beef

请帮我编写JAXB映射的代码类。

1 个答案:

答案 0 :(得分:0)

因此,您希望调用子记录对象中的方法来获取记录值。这不是一个好主意。

使用JAXB的最简单方法是首先定义XSD(如果您不想手动定义XSD,请使用从XML生成XSD的工具。)并使用xjc从XSD生成类。任何偏离此标准做法的事情都必须手动完成,并且您不希望将机器生成的代码与您编写的代码混合在一起。

你应该创建一个辅助方法或包装类,它可以找出子记录的值,但我个人认为首先应该正确定义XML Schema。