JAXB – 解组多态对象

我给的XML看起来像(当然还有很多属性):

    

有十几种不同的种类。 我使用注释来映射到看起来像这样的java类:

 @XmlRootElement(name="inventory") public class Inventory { @XmlElement(name="item") public List itemList = new LinkedList; } abstract public class Item { @XmlAttribute public int tag; } public class Grill extends Item { @XmlAttribute public string brand; } public class Car extends Item { @XmlAttribute public string make; @XmlAttribute public string model; } 

如何让JAXB根据“kind”字段创建子类Item对象?

有几种不同的方法:

JAXB(JSR-222)

以下方法适用于任何JAXB实现(Metro,MOXy,JaxMe等)。 使用XmlAdapter,其中适配对象包含父类和所有子类的属性。 在XmlAdapter中添加应该使用特定子类的逻辑。 有关示例,请参阅以下类似问题的链接:

  • Java / JAXB:将XML属性解组为特定的Java对象属性

EclipseLink JAXB(MOXy)

您可以使用EclipseLink JAXB(MOXy)中的@XmlDescriminatorNode扩展来处理此用例。

看看我对类似问题的回答:

  • Java / JAXB:根据属性将Xml解组到特定的子类

我们在EclipseLink 2.2版本中改进了这种支持: