使用JAXB映射包含超类型和子类型的Java集合

我正在尝试用JAXB生成这样的东西:

 Foo Bar   <some_elements....    

的子元素都来自一个普通的超类。

在Java中,它是这样的:

 @XmlRootElement(name = "person") public class Person { public String firstName; public String lastName; @XmlElementWrapper(name = "identities") public Set identities = new HashSet(); } 

IdentityBlueGreen和其他人的超级类。

 public class Identity { @XmlID @XmlAttribute public String id; } @XmlRootElement(name = "blue") public class Blue extends Identity { public String oneOfManyFields; } @XmlRootElement(name = "green") public class Green extends Identity {} 

如何正确地注释类以获得我需要的东西? 目前,输出是这样的:

    

只需修改您的示例,即可在identities属性上使用@XmlElementRef注释。

 import java.util.HashSet; import java.util.Set; import javax.xml.bind.annotation.XmlElementRef; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "person") public class Person { public String firstName; public String lastName; @XmlElementWrapper(name = "identities") @XmlElementRef public Set identities = new HashSet(); }