JAXB-Vererbung, unmarshal zur Unterklasse der Marshalling-Klasse

Bin ich mit JAXB zum Lesen und schreiben von XML. Was ich will, ist die Verwendung einer base JAXB-Klasse für marshalling und eine geerbte JAXB-Klasse für das unmarshalling. Dies ermöglicht es einem sender-Java-Anwendung zum senden von XML zu einem anderen Empfänger-Java-Anwendung. Sender und Empfänger teilen sich eine gemeinsame JAXB-Bibliothek. Ich will den Empfänger zu unmarshall die XML-Daten in eine Empfänger-spezifische JAXB-Klasse, die erweitert die generische JAXB-Klasse.

Beispiel:

Dies ist die gemeinsame JAXB-Klasse, die vom sender verwendet wird.

@XmlRootElement(name="person")
public class Person {
    public String name;
    public int age;
}

Ist der Empfänger spezifische JAXB-Klasse verwendet, wenn unmarshalling der XML. Die receiver-Klasse enthält die Logik der spezifisch auf die receiver-Anwendung.

@XmlRootElement(name="person")
public class ReceiverPerson extends Person {
    public doReceiverSpecificStuff() ...
}

Marshalling funktioniert wie erwartet. Das problem ist mit unmarshalling es noch unmarshals zu Person trotz der JAXBContext mit dem Paket-Namen der Unterklassen ReceiverPerson.

JAXBContext jaxbContext = JAXBContext.newInstance(package name of ReceiverPerson);

Was ich will, ist zu unmarshall zu ReceiverPerson. Der einzige Weg, ich habe in der Lage, dies zu tun ist, zu entfernen @XmlRootElement aus Person. Leider tun dies verhindert, dass Person aus gemarshallt. Es ist, als ob JAXB beginnt an der Basis-Klasse und arbeitet seinen Weg nach unten, bis es findet die erste @XmlRootElement mit dem entsprechenden Namen. Ich habe versucht, das hinzufügen einer createPerson() Methode gibt ReceiverPerson zu ObjectFactory aber das hilft nicht.

InformationsquelleAutor der Frage Steve Kuo | 2009-03-06

Schreibe einen Kommentar