2011-02-25 5 views
0

J'utilise JAXB (version xjc « 2.0-b26-EA3 »)avec JAXB

Je suis en mesure de générer les classes pour le schéma (.xsd) en utilisant xjc mais cependant lorsque je tente de compiler le classes générées je reçois des erreurs disant ... « paquet javax.xml.bind.annotation » existent doesnot. »

J'utilise jdk1.5.0_14. Je suis en train de courir à travers l'invite de commande.

Toute aide sera apprécié

Merci d'avance !!

Répondre

2

Ce paquet fait partie de jaxb 2.0 api. vous pouvez le télécharger here. Ces types de questions peuvent être facilement résolues avec l'aide de http://www.jarfinder.com

4

Les fichiers source Java générés par XJC utilisent des annotations de l'API JAXB. Pour les compiler, ces types d'annotation doivent être sur le chemin de classe.

Pour utiliser JAXB (pour permettre le rassemblement et unmarshalling à/à partir de documents XML), vous aurez besoin de ces choses:

  • Les définitions de l'API JAXB.
  • Une implémentation JAXB.
  • Toutes les bibliothèques dont dépend l'implémentation.

Une implémentation est distincte de l'API et interchangeable. Il sera localisé via le mécanisme du fournisseur de services Java. Je ne vais pas entrer dans les détails de cela ici, mais disons qu'il devrait suffire d'avoir un pot avec une implémentation sur votre chemin de classe. Normalement, vous ne faites des appels qu'aux classes de l'API JAXB. Par exemple, JAXBContext.newInstance("my.sample.pack");.

L'implémentation réelle est située au moment de l'exécution et chargée via vos appels d'API. Cela signifie que pour compiler du code JAXB, un jar avec l'API devrait suffire. Une implémentation et ses dépendances sont uniquement requises lors de l'exécution. Maintenant, pour un JDK 1.6.x, vous n'avez pas besoin d'ajouter quoi que ce soit d'autre sur votre chemin de classe. À partir de Java SE 6, l'API JAXB était incluse dans l'API Java SE standard. Java Runtime Environment inclut également une implémentation de cette API. Ceci est l'implémentation de référence disponible sur the java.net JAXB site.

Pour JDK 1.5.x, les choses sont un peu différentes. L'API JAXB n'était pas encore incluse en tant qu'API Java standard. Vous devrez donc le rendre disponible manuellement. À tout le moins, vous aurez besoin de l'API; l'implémentation que vous allez utiliser est libre de choisir, même si je n'en connais pas d'autre que l'implémentation de référence du haut de ma tête. C'est probablement le meilleur pour commencer. Cliquez sur le bouton "Télécharger maintenant" sur le site de JAXB ci-dessus. Vous verrez un lien pour télécharger un fichier jar. Obtenez-le et ouvrez-le en double-cliquant dessus dans votre système de fichiers ou en l'exécutant via la ligne de commande. Cela va extraire du contenu dans un dossier dans le même emplacement que le pot. Vous verrez un certain nombre de dossiers. Le dossier bin contient des runnables pour xjc et schemagen. Il y a aussi de la documentation et des exemples de dossiers. Le dossier lib est celui qui nous intéresse. Voici un aperçu:

  • jaxb-api.jar: il s'agit de l'API JAXB; vous en aurez besoin pour compiler votre code généré
  • jaxb-impl.pot: l'implémentation de référence; ne sont pas nécessaires pour la compilation mais vous voulez que cela lors de l'exécution
  • JAXB-xjc.jar: utile pour invoquer ou xjc programme Ant
  • jaxb1-impl.jar: l'implémentation de référence de l'API JAXB 1; Je suppose que vous en tenir à JAXB 2 donc ignorer
  • activation.jar: une dépendance, pas nécessaire à la compilation, mais pourraient être nécessaires à l'exécution
  • jsr173_1.0_api.jar: c'est en fait l'API Java en streaming pour XML (StAX); il est utilisé par l'implémentation de référence JAXB

Ce dernier fonctionne comme JAXB en termes d'implémentation. C'est une API avec des implémentations interchangeables. Et tout comme JAXB, il n'est pas disponible par défaut dans Java 5 mais a été inclus dans l'API Java 6. Vous aurez probablement besoin d'une implémentation pour cela aussi dans Java 5. Je vous laisse pour le trouver et l'utiliser; les étapes suivront ressembleront étroitement à ce que j'ai décrit pour JAXB. Donc, pour envelopper le tout dans une vue d'ensemble concise ... Si vous pouvez utiliser Java 6, à peu près toutes les dépendances sont disponibles et vous n'aurez pas besoin de choses supplémentaires sur votre chemin de classe pour compiler JAXB code lié et lancez-le. Pour Java 5, vous aurez au moins besoin de l'API JAXB pour la compilation et de l'API plus une implémentation à l'exécution. L'implémentation peut avoir ses propres dépendances, donc si vous obtenez toujours des erreurs ClassNotFound, essayez de savoir de quel projet est partie la classe manquante.

Le site jarfinder suggéré par Pangea peut être très utile pour cela. Mais ne sautez pas l'étape de vérifier le site du projet réel pour vous assurer que vous obtenez toutes les dépendances, la dernière version et voir ce que les termes de licence sont.

Bonne chance!