JAXB lässt @XmlRootElement-Annotation aus
Problem
Beim Generieren von Java-Klassen aus einem XML-Schema Wenn Sie JAXB (Java Architecture for XML Binding) verwenden, tritt möglicherweise ein Fehler auf, wenn keine Klassen über das verfügen @XmlRootElement-Annotation. Dies führt zu einer Ausnahme während der Serialisierung.
Lösung
JAXB-Annotationsregeln verstehen
JAXB XJC verwendet bestimmte Regeln zur Bestimmung wann die Annotation @XmlRootElement eingefügt werden soll. Diese Regeln sind komplex, wie in [diesem Artikel](Link zum Artikel) besprochen.
Alternative zu @XmlRootElement
Auch wenn @XmlRootElement Komfort bietet, ist es das auch nicht erforderlich. Sie können stattdessen [JAXBElement-Wrapper-Objekte] (Link zur Dokumentation) verwenden. Sie sind jedoch weniger einfach zu erstellen, da sie Kenntnisse über XML-Elementnamen und Namespace erfordern.
ObjectFactory verwenden
XJC generiert neben dem generierten Klassenmodell eine ObjectFactory-Klasse. Diese Klasse enthält Factory-Methoden, die JAXBElement-Wrapper um Ihre Objekte erstellen und den XML-Namen und Namespace für Sie verwalten. Erkunden Sie die ObjectFactory-Methoden, um die Methode zu finden, die das JAXBElement für Ihr Zielobjekt erstellt.
Beispiel
<code class="java">import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.Marshaller; import org.fpml._2008.fpml_4_5.ObjectFactory; import org.fpml._2008.fpml_4_5.PositionReport; // ... // Create the JAXB context JAXBContext context = JAXBContext.newInstance(PositionReport.class); // Create the ObjectFactory ObjectFactory factory = new ObjectFactory(); // Create a PositionReport instance PositionReport positionReport = factory.createPositionReport(); // Create the JAXBElement wrapper JAXBElement<PositionReport> element = factory.createPositionReport(positionReport); // Create the Marshaller Marshaller marshaller = context.createMarshaller(); // Marshal the JAXBElement marshaller.marshal(element, System.out);</code>
Das obige ist der detaillierte Inhalt vonWarum lässt JAXB beim Generieren von Java-Klassen die Annotation @XmlRootElement weg?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!