JAXB und abstrakte Klassen

Ich versuche, JAXB zu unmarshall einige XML, aber ich bin immer ein "kann Nicht zum erstellen einer Instanz von..." - Ausnahme. Ich verstehe, warum-es ist Versuch, eine Instanz einer abstrakten Klasse. Was ich will, ist, es zu haben stellen Sie eine Instanz einer konkreten Implementierung der Klasse. Mein Ziel dabei ist, auf Klassen-spezifische Prüfungen auf setter-Methoden. Vielleicht "qux" ist eine gültige baz Wert für BarImpl, aber BarImpl2 will etwas anderes tun.

Bekam ich einen Teil des Weges es durch nicht kommentieren Foo, aber wenn ich unannotate bar, die Dinge hässlich.

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 { }
}
Schreibe einen Kommentar