/ / alternative zu @XmlSeeAlso - java, jaxb

Alternative zu @XmlSeeAlso - java, jaxb

abstract Class A{

}


Class B extends A{

}


@XmlRootElement
Class C {
@XmlElement(name = "tobeserialized")
A tobeserialized;
}


Class D{
public void marshal(){
C all = getData();
JAXB.marshal(all, new File("saved.xml");

}

}

Damit JAXB weiß, dass Klasse B eine Unterklasse von Klasse A ist, müsste ich der Klasse A ein @XmlSeeAlso (value = {B.class}) zuweisen. Wir haben ungefähr 50 Unterklassen von A.

Die Projektabhängigkeit ist jedoch so, dass Klasse A in einem Paket liegt, das nicht auf Klasse B zugreifen kann. Daher kann ich die Annotation nicht auf Klasse A setzen.

Was können die Alternativen sein, damit JAXB die Unterklassen der Klasse A serialisieren kann?

Antworten:

3 für die Antwort № 1

Das @XmlSeeAlso Anmerkung ist beim Zuordnen einer Vererbungsbeziehung nicht erforderlich, wird jedoch am häufigsten verwendet. Die Rolle von @XmlSeeAlso soll JAXB anweisen, Metadaten für Klassen zu generieren, die nicht aus dem Durchlaufen der Klasse abgeleitet werden können.

In Ihrem Beispiel, wenn Sie das erstellt haben JAXBContext nur auf die C Klasse (JAXBContext.newInstance(C.class)) dann ist die A Klasse würde auch wegen der verarbeitet werden tobeserialized Feld, aber B würde nicht "t", weil es in Java keinen Mechanismus gibt, um Unterklassen zu finden. Sie könnten dies lösen, indem Sie setzen @XmlSeeAlso(B.class) auf A oder indem Sie die Unterklassen in die Klassen aufnehmen, die zum Bootstrap des JAXBContext:

JAXBContext.newInstance(B.class, C.class);

0 für die Antwort № 2

Es war lange für mich, aber Sie können versuchen, hinzuzufügen @XmlTransient auf Klasse A und @XmlType auf Klasse B.

Oder @XmlTransient auf Klassen A und B (da sie abstrakt sind) und hinzufügen @XmlType zu konkreten Unterklassen.