Java 在JAXB中使用继承

Java 在JAXB中使用继承,java,xml,jaxb,Java,Xml,Jaxb,我有xml: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <UserTypes> <UserType Id="1"> <Members> <Member UserTypeId="4" Name="Name1" /> <Member UserTypeId="1" Name="Name2" /&g

我有xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<UserTypes>
    <UserType Id="1">
        <Members>
            <Member UserTypeId="4" Name="Name1" />
            <Member UserTypeId="1" Name="Name2" />
        </Members>
    </UserType>
    <UserType Id="23" ItemUserTypeId="232">
        <Description />
    </UserType>
</UserTypes>
我想把我的对象整理成xml。我有:

List<UserType> userTypes = new ArrayList<>();

StructUserType structUserType = new StructUserType();
smbpStructUserType.setId(1);
SmbpStructUserType.Member member1  = new SmbpStructUserType.Member();
member1.name = "Name1";
member1.userTypeId = 4;
SmbpStructUserType.Member member2  = new SmbpStructUserType.Member();
member2.name = "Name2";
member2.userTypeId = 1;
structUserType.membersList.members.add(member1);
structUserType.membersList.members.add(member2);


ListUserType listUserType = new ListUserType();
listUserType.setId(23);
smbpListUserType.setItemUserTypeId(232);

userTypes.add(structUserType);
List userTypes=new ArrayList();
StructUserType StructUserType=新的StructUserType();
smbpStructUserType.setId(1);
SmbpStructUserType.Member member1=新的SmbpStructUserType.Member();
member1.name=“Name1”;
member1.userTypeId=4;
SmbpStructUserType.Member member2=新的SmbpStructUserType.Member();
member2.name=“Name2”;
member2.userTypeId=1;
structUserType.membersList.members.add(member1);
structUserType.membersList.members.add(member2);
ListUserType ListUserType=新ListUserType();
setId(23);
smbpListUserType.setItemUserTypeId(232);
添加(structUserType);
但是,当我尝试进行封送处理时,只有属于最终xml的元素只在主类(
UserType
)中定义,所有元素都从主类继承。怎么了?
需要什么样的
JAXB
配置才能使子类的元素也归入最终的xml?

我认为有几种选择。最简单的方法是给
UserType
标记两个不同的名称,如
StructUserType
ListUserType
。然后,您需要在根元素中指定适合于哪个类的名称

@XmlElements({
            @XmlElement(name = "StructUserType", type = StructUserType.class),
            @XmlElement(name = "ListUserType", type = ListUserType.class)
    })
    private List<UserType> userTypse;
@XmlElements({
@XmlElement(name=“StructUserType”,type=StructUserType.class),
@XmlElement(name=“ListUserType”,type=ListUserType.class)
})
私有列表用户类型;

另一个选项是使用
@XmlJavaTypeAdapter(YourAddapter.class)
,在YourAddapter类中扩展XmlAdapter类,并重写
封送
方法,在该方法中,您可以指定如何封送您的UserType标记。

我在我的类上使用了一个注释
@xmlseea({structurusertype.class,ListUserType.class})
。成功了。对吗?
@XmlElements({
            @XmlElement(name = "StructUserType", type = StructUserType.class),
            @XmlElement(name = "ListUserType", type = ListUserType.class)
    })
    private List<UserType> userTypse;