【发布时间】:2017-12-20 09:33:53
【问题描述】:
我有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>
某些元素具有特定的嵌套元素和属性。在Java 我创建了普通类及其继承者:
@XmlAccessorType(XmlAccessType.FIELD)
public class UserType {
@XmlAttribute(name = "Id", required = true)
private Integer id;
private UserTypeKind userTypeKindType;
//getters and setters
}
@XmlAccessorType(XmlAccessType.FIELD)
public class StructUserType extends UserType {
@XmlElement(name = "Members")
MembersList membersList = new MembersList();
static class MembersList {
@XmlElement(name = "Member")
List<Member> members = new ArrayList<>();
}
static class Member {
@XmlAttribute(name = "Name", required = true)
String name;
@XmlAttribute(name = "UserTypeId", required = true)
long userTypeId;
}
}
@XmlAccessorType(XmlAccessType.FIELD)
public class ListUserType extends UserType {
@XmlAttribute(name = "ItemUserTypeId", required = true)
private long itemUserTypeId;
public long getItemUserTypeId() {
return itemUserTypeId;
}
public void setItemUserTypeId(long itemUserTypeId) {
this.itemUserTypeId = itemUserTypeId;
}
}
我想将我的对象编组为 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);
但是当我尝试进行编组时,只有落入最终 xml 的元素仅在主类 (UserType) 中定义,所有元素都从中继承。它有什么问题?
需要JAXB进行什么样的配置才能让子类的元素也落入最终的xml中?
【问题讨论】: