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