2
私は次のスレッドで同じ例を実行しようとした:JAXB非整列化問題
JAXB Annotations - Mapping interfaces and @XmlElementWrapper
が、私は次の例外受け付けております:
予想外の要素を(URI: ""、ローカル:"犬")。予想される要素は< {奇妙な疑問符}>のcatchAllです>
...
私はこの例外を取得していますなぜ任意のアイデア?
私は次のスレッドで同じ例を実行しようとした:JAXB非整列化問題
JAXB Annotations - Mapping interfaces and @XmlElementWrapper
が、私は次の例外受け付けております:
予想外の要素を(URI: ""、ローカル:"犬")。予想される要素は< {奇妙な疑問符}>のcatchAllです>
...
私はこの例外を取得していますなぜ任意のアイデア?
私は例を実行するために管理し、しかしjava.uill.List でXmlElementsタグを使用した後、ここでは、コードです:
@XmlRootElement class Zoo {
@XmlElements({
@XmlElement(name = "Dog" , type = Dog.class),
@XmlElement(name = "Cat" , type = Cat.class)
})
private List<Animal> animals;
public static void main(String[] args) throws Exception {
Zoo zoo = new Zoo();
zoo.animals = new ArrayList<Animal>();
Dog doggy = new Dog();
doggy.setDogProp("Doggy");
Cat catty = new Cat();
catty.setCatProp("Catty");
zoo.animals.add(doggy);
zoo.animals.add(catty);
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();
unmarshaller.setEventHandler(new javax.xml.bind.helpers.DefaultValidationEventHandler());
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 {
private String dogProp;
public String getDogProp() {
return dogProp;
}
public void setDogProp(String dogProp) {
this.dogProp = dogProp;
}
}
@XmlRootElement
public static class Cat implements Animal {
private String catProp;
public String getCatProp() {
return catProp;
}
public void setCatProp(String catProp) {
this.catProp = catProp;
}
}
}