2012-11-25 4 views
1

je suis en train de générer des classes que je peux utiliser des fichiers xsd validateurs trouvés dans:erreur en utilisant JAXB xjc généré des classes de schéma qbxml xsd

C:\Program Files\Intuit\IDN\Common\tools\validator

je lance:

xjc qbxmltypes.xsd qbxml.xsd qbxmlso.xsd qbxmlops.xsd

et l'outil génère le répertoire 'généré' et les fichiers de classe comme prévu. Cependant, ces classes ne semblent pas fonctionner correctement. J'ajoute les classes à mon projet, les reconditionne, et tout compile bien. quand je crée un nouvel objet JAXBContext ainsi:

JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);

de façon normale, ce compile très bien, mais je reçois des erreurs d'exécution (beaucoup d'entre eux, en répétant la même ligne) dans System.err laquelle on pouvait lire:

No XmlSchema annotation found for [packagenamehere]

je recherche le chemin du package pour les usages de la XmlSchema, et aucun ne se trouve. JAXB l'exige apparemment à l'exécution.

Est-ce que j'utilise les mauvais fichiers .xsd? devrais-je ajouter l'annotation XmlSchema à la classe ObjectFactory.java? qu'est-ce que je fais mal ici? Je pense que je construis juste les mauvaises classes avec xjc. Quels fichiers .xsd devrais-je compiler?

Répondre

1

L'utilitaire XJC génère des classes dans un nom de package basé sur l'espace de noms cible. S'il n'y en a pas par défaut, il les mettra dans un paquet appelé generated. Vous pouvez fournir un nom de package en tant que paramètre.

xjc -p com.example.foo schema.xsd 

Je vous recommande de générer chacun de vos schémas dans un paquet séparé. Lors de la création d'un JAXBContext à partir de classes générées à partir d'un schéma XML, je recommande toujours de le faire sur le nom du package. Lorsqu'il y a plusieurs noms de paquets, séparez-les simplement avec le caractère ..

JAXBContect jc = JAXBContext.newInstance("com.example.foo:com.example.bar"); 
+0

cela n'a rien à voir avec le problème actuel lol. et vous n'avez pas lu la question à fond. – moonlightcheese

+1

@moonlightcheese - Je relis ta question et je crois que tout ce que j'ai dit s'applique toujours. La spécification de l'indicateur '-p' élimine le besoin de reconditionner vos classes. Et créer un 'JAXBContext' sur le nom du paquet et non sur' ObjectFactory' fonctionnera mieux pour vous. –

+0

merci pour la réponse. J'ai essayé exactement ce que vous avez posté ici, à la lettre. reconstruit les classes à partir du schéma et utilise 'JAXBContext.newInstance (" com.example.qbxml.jaxb ")' qui est le paquet dans lequel résident les classes JAXB. le même problème persiste. J'ai jeté un coup d'oeil à travers ceci: [XmlSchema] (http://jaxb.java.net/nonav/2.2.4/docs/api/javax/xml/bind/annotation/XmlSchema.html) et il semble que JAXB veut que cette annotation soit définie dans un fichier appelé package-info.java. – moonlightcheese

Questions connexes