反思JAXB带注释的对象,有没有办法确定类/字段/方法是否会在编组期间产生xsi:type?
是XmlElement注释,
annotation.type != javax.xml.bind.annotation.XmlElement.DEFAULT.class
我需要担心的唯一案例是什么?
我正在编写一个Lua unmarshaler,我们已经删除了大部分常用的xml类型信息,而我正试图弄清楚如何将传入的Lua与JAXB相匹配。
感谢。
- 更新 -
以下是显示问题的简单示例:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
@XmlSeeAlso({ Cat.class, Dog.class })
public class Animal {
@XmlElement()
public List<Animal> critters;
@XmlAttribute
public String type;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Dog extends Animal {
public Dog() {
this.type = "German Shepherd";
}
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Cat extends Animal {
public Cat() {
this.type = "Black";
}
}
当我收到一个Animal对象时,我可以查询生物的注释来检测它应该是狗还是猫而不是动物?
答案 0 :(得分:1)
在某些情况下,JAXB (JSR-222)实现会写出xsi:type属性。
Object
(或注释为@XmlElement(type=Object.class)) and not mapped with
@ XmlAnyElement(lax = true)and holds an instance of an Object that the
,则JAXBContext`具有映射。xsi:type
属性表示子类(请参阅:http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html)。