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版本中改进了这种支持: