我给出了类似的XML(当然还有很多属性):
<inventory>
<item kind="GRILL" tag=123 brand="WEBER"/>
<item kind="CAR" tag=124 make="FORD" model="EXPLORER" />
</inventory>
有大约十几种不同的种类。我正在使用注释来映射到类似于:的java类
@XmlRootElement(name="inventory")
public class Inventory {
@XmlElement(name="item")
public List<Item> itemList = new LinkedList<Item>;
}
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对象?
答案 0 :(得分:4)
有几种不同的方法:
JAXB(JSR-222)
以下方法适用于任何JAXB实现(Metro,MOXy,JaxMe等)。使用XmlAdapter,其中适配对象包含父类和所有子类的属性。在XmlAdapter中添加应该使用特定子类的逻辑。有关示例,请参阅以下类似问题的链接:
EclipseLink JAXB(MOXy)
您可以使用EclipseLink JAXB (MOXy)中的@XmlDescriminatorNode扩展来处理此用例。
查看我对类似问题的回答:
我们在EclipseLink 2.2版本中改进了这种支持: