title: JAXB Annotations - Mapping interfaces and @XmlElementWrapper
body: <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>