impossible de classer le type en tant qu’élément car il manque une annotation @XmlRootElement pour les classes générées automatiquement

Je dois valider l’object Class par rapport à mon schéma dans lequel j’ai fourni une expression régulière pour valider les champs des classes JAXB générées automatiquement. Lorsque j’essaie de valider mon object de classe, j’obtiens l’erreur suivante:

impossible de classer le type “xyz” en tant qu’élément car il manque une annotation @XmlRootElement

Voici le code que j’utilise pour valider mon object de classe généré automatiquement:

jc = JAXBContext.newInstance(obj.getClass()); source = new JAXBSource(jc, obj); Schema schema = schemaInjector.getSchema(); Validator validator = schema.newValidator(); validator.validate(source); 

Y a-t-il un autre moyen de résoudre ce problème?

Si votre classe n’a pas d’annotation @XmlRootElement vous pouvez l’envelopper dans une instance de JAXBElement . Si vous avez généré vos classes à partir d’un schéma XML, l’ ObjectFactory généré peut avoir une méthode pratique pour vous.

J’ai écrit plus sur ce cas d’utilisation sur mon blog:

Je vous suggère d’utiliser le plugin maven “maven-plugin-jaxb2” pour générer des classes à partir d’un fichier XSD. Utilisez un fichier de liaison *. xjb pour append des annotations @XmlRootElement.

Après quelques exemples

p.ex. fichier de liaison

       

p.ex. Plugin Maven

http://confluence.highsource.org/display/MJIIP/User+Guide

   org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 0.8.1   generate-sources  generate      -Xannotate -nv  true true ${basedir}/src/main/resources/schema/xjb  *.xjb     ${basedir}/src/main/resources/schema/  *.xsd     true true   org.jvnet.jaxb2_commons jaxb2-basics 0.6.2   org.jvnet.jaxb2_commons jaxb2-basics-annotate 0.6.2   org.jvnet.jaxb2_commons jaxb2-namespace-prefix 1.1