Note that there are some explanatory texts on larger screens.

plurals
  1. POJAXB Annotations - Mapping interfaces and @XmlElementWrapper
    primarykey
    data
    text
    <p>I am having trouble with JAXB annotations for a field that is a list whose generified type is an interface. When I have it declared such as:</p> <pre><code>@XmlAnyElement private List&lt;Animal&gt; animals; </code></pre> <p>Every thing works correctly. But when I add a wrapper element, such as:</p> <pre><code>@XmlElementWrapper @XmlAnyElement private List&lt;Animal&gt; animals; </code></pre> <p>I find that the Java object marshals correctly, but when I unmarshal the document created by marshaling, my list is empty. I have posted below the code to demonstrate this problem.</p> <p>Am I doing something wrong, or is this a bug? I have tried it with version 2.1.12 and 2.2-ea with the same result.</p> <p>I am working through the example for mapping interfaces with annotations located here: <a href="https://jaxb.dev.java.net/guide/Mapping_interfaces.html" rel="noreferrer"><a href="https://jaxb.dev.java.net/guide/Mapping_interfaces.html" rel="noreferrer">https://jaxb.dev.java.net/guide/Mapping_interfaces.html</a></a></p> <pre><code>@XmlRootElement class Zoo { @XmlElementWrapper @XmlAnyElement(lax = true) private List&lt;Animal&gt; animals; public static void main(String[] args) throws Exception { Zoo zoo = new Zoo(); zoo.animals = new ArrayList&lt;Animal&gt;(); 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 {} } </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload