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!