【发布时间】:2012-03-29 21:01:36
【问题描述】:
所以我试图编组一个通用的对象列表,但我希望每个列表都有一个特定的 XmlRootElement(name..)。我这样做的方式是,我知道如果不为每种类型的对象编写特定的包装类并声明 XmlRootElement,这是不可能的。但也许还有其他方法...?
考虑以下类:
abstract public class Entity {
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="user")
public class User extends Entity {
private String username;
public String getUsername() {
return username;
}
public void setUsername( String username ) {
this.username = username;
}
}
@XmlRootElement
public class EntityList<T extends Entity> {
@XmlAnyElement(lax=true)
private List<T> list = new ArrayList<T>();
public void add( T entity ) {
list.add( entity );
}
public List<T> getList() {
return list;
}
}
public class Test {
public static void main( String[] args ) throws JAXBException {
User user1 = new User();
user1.setUsername( "user1" );
User user2 = new User();
user2.setUsername( "user2" );
EntityList<User> list = new EntityList<User>();
list.add( user1 );
list.add( user2 );
JAXBContext jc = JAXBContext.newInstance( EntityList.class, User.class );
Marshaller m = jc.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal( list, System.out );
}
}
正如预期的那样,这会产生:
<entityList>
<user>
<username>user1</username>
</user>
<user>
<username>user2</username>
</user>
</entityList>
我想要的是能够修改该标签名称,具体取决于我创建 EntityList 的实体类型。
我知道我们在这里谈论的是编译与运行时,但也许有某种骇人听闻的方法来更改子元素的父元素包装器?
【问题讨论】:
标签: java arraylist jaxb marshalling