title: JAXB and abstract classes
body: <p>I'm trying to use JAXB to unmarshall some XML, but I'm getting an "Unable to create an instance of..." exception.  I understand why--it's trying to make an instance of an abstract class.  What I want is to have it make an instance of a specific implementing class.  My goal with this is to have class-specific checks on setter methods.  Maybe "qux" is a valid baz value for BarImpl, but BarImpl2 wants to do something else.</p>
  
  <p>I got part of the way there by not annotating Foo, but if I unannotate bar, things get ugly.</p>
  
  <pre><code>import javax.xml.bind.annotation.XmlElement;
  import javax.xml.bind.annotation.XmlRootElement;
  
  import org.junit.Test;
  
  
  public class JAXBTest {
  
      @Test
      public void test() throws javax.xml.bind.JAXBException {
          String xml = 
              "&lt;foo&gt;" +
              "  &lt;bar&gt;" +
              "    &lt;baz&gt;qux&lt;/baz&gt;" +
              "  &lt;/bar&gt;" +
              "&lt;/foo&gt;";
  
          javax.xml.bind.JAXBContext context = javax.xml.bind.JAXBContext.newInstance(
                  FooImpl.class,
                  BarImpl.class
          );
  
          javax.xml.bind.Unmarshaller unmarshaller = context.createUnmarshaller();
  
          unmarshaller.unmarshal(new java.io.StringReader(xml));
      }
  
      @XmlRootElement(name="foo")
      public static abstract class Foo {
          @XmlElement(name="bar")
          Bar bar;
      }
  
      @XmlRootElement(name="bar")
      public static abstract class Bar {
          @XmlElement(name="baz")
          String baz;
      }
  
      public static class FooImpl extends Foo { }
      public static class BarImpl extends Bar { }
  }
  </code></pre>