Bonjour,
j'ai un problème lors de l'écriture d'un fichier XML. Ce problème semble se produire lors de l'utilisation de types complexes nécessitant la création d'une classe (ce n'est pas le cas pour des éléments simples).
Le nom de l'élément ROOT (toto pour l'exemple) spécifié dans le fichier XSD est différent du nom du type (tata) de cet élément.
Lors de la création des classes avec xjc, l'annotation @XmlRootElement ne contient pas le nom de l'élément.
Lors de l'opération unmarshal sans validation, l'élément racine dans le fichier XML généré est le nom de la classe en minuscule, et non le nom de l'élément dans le XSD (ce qui est normal puisque la classe est mal annotée ...)
En cas de validation, une exception est générée indiquant que la classe n'est pas trouvée.Si j'annote manuellement la classe 'tata' avec @XmlRootElement(name="toto"), dans le fichier XML créé l'élément ROOT porte le bon nom "toto", par contre lors de la validation, la même exception est générée, au détail près que le nom de l'élément a bien été détecté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 javax.xml.bind.MarshalException - with linked exception: [org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'tata'.]
Les deux questions sont donc les suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 javax.xml.bind.MarshalException - with linked exception: [org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'toto'.]
1- Comment faire pour que JAXB annote automatiquement le nom de l'élément ROOT et qu'il ne soit pas nécessaire de le faire à la main ?
2- Comment faire pour créer et valider les fichiers XML avec un nom d'élément ROOT différent du nom du type (de la classe)
Merci d'avance
Partager