Maison  >  Article  >  Java  >  Pourquoi JAXB omet-il l'annotation @XmlRootElement lors de la génération de classes Java ?

Pourquoi JAXB omet-il l'annotation @XmlRootElement lors de la génération de classes Java ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 19:42:29500parcourir

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

JAXB omet l'annotation @XmlRootElement

Problème

Lors de la génération de classes Java à partir d'un schéma XML en utilisant JAXB (Java Architecture for XML Binding), vous pouvez rencontrer une erreur où aucune classe n'a l'annotation @XmlRootElement. Cela entraîne une exception lors de la sérialisation.

Solution

Comprendre les règles d'annotation JAXB

JAXB XJC utilise des règles spécifiques pour déterminer quand inclure l’annotation @XmlRootElement. Ces règles sont complexes, comme indiqué dans [cet article](lien vers l'article).

Alternative à @XmlRootElement

Bien que @XmlRootElement soit pratique, il est pas obligatoire. Vous pouvez utiliser à la place des [objets wrapper JAXBElement] (lien vers la documentation). Cependant, ils sont moins pratiques à construire car ils nécessitent une connaissance du nom et de l'espace de noms des éléments XML.

Utiliser ObjectFactory

XJC génère une classe ObjectFactory à côté du modèle de classe généré. Cette classe contient des méthodes d'usine qui créent des wrappers JAXBElement autour de vos objets, en gérant le nom XML et l'espace de noms pour vous. Explorez les méthodes ObjectFactory pour trouver celle qui crée le JAXBElement pour votre objet cible.

Exemple

<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>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn