以编程方式确定JAXB注释是否会导致xsi:type注释?

时间:2012-08-24 15:26:45

标签: jaxb

反思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对象时,我可以查询生物的注释来检测它应该是狗还是猫而不是动物?

1 个答案:

答案 0 :(得分:1)

在某些情况下,JAXB (JSR-222)实现会写出xsi:type属性。

  1. 如果字段/属性的类型为Object(或注释为@XmlElement(type=Object.class)) and not mapped with @ XmlAnyElement(lax = true)and holds an instance of an Object that the,则JAXBContext`具有映射。
  2. 表示继承的默认机制将导致xsi:type属性表示子类(请参阅:http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html)。