Heim  >  Artikel  >  Java  >  Warum lässt JAXB beim Generieren von Java-Klassen die Annotation @XmlRootElement weg?

Warum lässt JAXB beim Generieren von Java-Klassen die Annotation @XmlRootElement weg?

Linda Hamilton
Linda HamiltonOriginal
2024-11-01 19:42:29501Durchsuche

Why Does JAXB Omit the @XmlRootElement Annotation When Generating Java Classes?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn