Bu yüzden, genel bir nesne listesi marshal'ı çalıştırmaya çalışıyorum, ancak her listenin belirli bir XmlRootElement öğesine sahip olmasını istiyorum (name ..). Yaptığım şekilde, her bir nesne türü için belirli bir sarmalayıcı sınıfı yazmadan ve XmlRootElement öğesini bildirmeden gerçekten mümkün olmadığını biliyorum. Ama belki başka bir yolu var ...JAXB Değişken kök öğesi adına sahip genel liste listesi
Beklendiği gibiabstract 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);
}
}
, bu üretir:
<entityList>
<user>
<username>user1</username>
</user>
<user>
<username>user2</username>
</user>
</entityList>
İstediğim i oluşturmak Varlık türüne bağlı olarak, bu etiket adını değiştirmek için muktedir olduğunu
aşağıdaki sınıfları düşünün EntityList ile.
Burada derleme ve çalışma zamanı hakkında konuştuğumuzu biliyorum, ama belki de ana öğe sarıcısını çocuktan değiştirmek için bir çeşit yol var mı?
Teşekkür ... Bu, basitleştirilmiş bir örnektir. Fakat JAXBElement'i çalışma zamanında bir sarıcı olarak kullanabileceğimi bildiğim için, bahar için kendi mareşal uygulamamı yazabilirim ve çalışma zamanında bir tür özel açıklama ekleyebilirim. Teşekkürler! – user1301841