JAXB et les classes abstraites

Je suis en train d'utiliser JAXB pour unmarshall du XML, mais j'obtiens un "Impossible de créer une instance de..." l'exception". Je comprends pourquoi, c'est d'essayer de créer une instance d'une classe abstraite. Ce que je veux, c'est de faire une instance d'une application spécifique de la classe. Mon but est d'avoir de la classe des contrôles spécifiques sur les méthodes de définition. Peut-être "qux" est valide baz valeur pour BarImpl, mais BarImpl2 veut faire quelque chose d'autre.

J'ai obtenu le cadre de la sorte, il n'y en a pas en annotant Foo, mais si je unannotate bar, les choses se corsent.

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 = 
            "<foo>" +
            "  <bar>" +
            "    <baz>qux</baz>" +
            "  </bar>" +
            "</foo>";

        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 { }
}

OriginalL'auteur David Ehrmann | 2012-03-06