我遇到JAXB批註的字段是一個列表,它的generified類型是一個接口。當我宣佈如:JAXB註釋 - 映射接口和@XmlElementWrapper
@XmlAnyElement
private List<Animal> animals;
每件事情都正常工作。但是,當我添加一個包裝元素,如:
@XmlElementWrapper
@XmlAnyElement
private List<Animal> animals;
我發現了Java對象正確乘警,但是當我通過取消編組編組創建的文檔,我的列表是空的。我已經在代碼下面公佈了這個問題。
我做錯了什麼,或者這是一個錯誤?我用版本2.1.12和2.2-ea嘗試過,結果相同。
我通過對位於這裏的註解映射接口例如工作: https://jaxb.dev.java.net/guide/Mapping_interfaces.html
@XmlRootElement
class Zoo {
@XmlElementWrapper
@XmlAnyElement(lax = true)
private List<Animal> animals;
public static void main(String[] args) throws Exception {
Zoo zoo = new Zoo();
zoo.animals = new ArrayList<Animal>();
zoo.animals.add(new Dog());
zoo.animals.add(new Cat());
JAXBContext jc = JAXBContext.newInstance(Zoo.class, Dog.class, Cat.class);
Marshaller marshaller = jc.createMarshaller();
ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(zoo, os);
System.out.println(os.toString());
Unmarshaller unmarshaller = jc.createUnmarshaller();
Zoo unmarshalledZoo = (Zoo) unmarshaller.unmarshal(new ByteArrayInputStream(os.toByteArray()));
if (unmarshalledZoo.animals == null) {
System.out.println("animals was null");
} else if (unmarshalledZoo.animals.size() == 2) {
System.out.println("it worked");
} else {
System.out.println("failed!");
}
}
public interface Animal {}
@XmlRootElement
public static class Dog implements Animal {}
@XmlRootElement
public static class Cat implements Animal {}
}
什麼版本的JAXB? – codefinger 2010-11-04 19:41:25