1

回顾 JAXB 注释对象,有没有办法确定一个类/字段/方法是否会在封送处理期间导致 xsi:type 属性?

XmlElement 注释是
annotation.type != javax.xml.bind.annotation.XmlElement.DEFAULT.class
我唯一需要担心的情​​况吗?

我正在编写一个 Lua 解组器,我们在其中删除了许多常用的 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 对象时,我可以查询 critter 的注释以检测它应该是 Dog 还是 Cat 而不是 Animal?

4

1 回答 1

2

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

  1. 如果字段/属性是类型Object(或用 注释@XmlElement(type=Object.class))并且未映射@XmlAnyElement(lax=true)并保存具有映射的 Object 的实例JAXBContext
  2. 表示继承的默认机制将产生一个xsi:type表示子类的属性(参见: http ://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html )。
于 2012-08-24T15:43:39.137 回答