XmlElement注释可以有多种类型吗?

时间:2013-06-18 11:33:20

标签: java serialization jaxb

我有一个超级类型的列表,即

List<IFoo> foo

该列表包含来自两个不同子类型的对象:

public class FooBar implements IFoo{
}

public class FooType implements IFoo{
}

是否有办法将多种类型添加到XmlElement注释中,即

XmlElement(type={FooBar.class, FooType.class)
List<IFoo> foo

2 个答案:

答案 0 :(得分:1)

您可以使用注释XmlElements为列表设置多种类型。

E.g。

@XmlElements({
    @XmlElement(type=FooBar.class),
    @XmlElement(type=FooType.class)
})
List<IFoo> foo;

答案 1 :(得分:-1)

集合属性可以包含多种类型。使用此用例如果您希望能够往返文档,则需要某种类型指示符。

选项1 - @XmlElements

@XmlElements注释采用@XmlElement注释数组。这样做的目的是分配一个唯一的元素来识别每种类型。

选项2 - @XmlElement(type=Object.class)

如果您告诉JAXB该类型为Object,它将强制使用xsi:type属性写出每个值以唯一标识该类型。由于不会自动发现值类型,因此您需要先传递以创建JAXBContext或使用@XmlSeeAlso注释引用。