Il y a des gars ici qui jurent que JAXB est la meilleure chose depuis le pain tranché. Je suis curieux de voir ce que les utilisateurs de Stack Overflow pensent que le cas d'utilisation est pour JAXB et ce qui en fait une bonne ou une mauvaise solution pour ce cas.
109
Réponses:
Je suis un grand fan de JAXB pour manipuler XML. Fondamentalement, il fournit une solution à ce problème (je suppose que je suis familier avec XML, les structures de données Java et les schémas XML):
Travailler avec XML est difficile. Il faut trouver un moyen de prendre un fichier XML - qui est essentiellement un fichier texte - et de le convertir en une sorte de structure de données, que votre programme peut ensuite manipuler.
JAXB prendra un schéma XML que vous écrivez et créera un ensemble de classes correspondant à ce schéma. Les utilitaires JAXB créeront la hiérarchie des structures de données pour manipuler ce XML.
JAXB peut ensuite être utilisé pour lire un fichier XML, puis créer des instances des classes générées - chargées des données de votre XML. JAXB fait également l'inverse: prend les classes Java et génère le XML correspondant.
J'aime JAXB car il est facile à utiliser et est livré avec Java 1.6 (si vous utilisez 1.5, vous pouvez télécharger le JAXB .jars.) La façon dont il crée la hiérarchie des classes est intuitive et, d'après mon expérience, fait un travail décent abstraction du "XML" afin que je puisse me concentrer sur les "données".
Donc, pour répondre à votre question: je m'attendrais à ce que, pour les petits fichiers XML, JAXB soit excessif. Cela nécessite que vous créiez et mainteniez un schéma XML et que vous utilisiez des «méthodes de manuel standard» d'utilisation des classes Java pour les structures de données. (Classes principales, petites classes internes pour représenter les "nœuds", et une énorme hiérarchie d'entre eux.) Ainsi, JAXB n'est probablement pas si génial pour une simple liste linéaire de "préférences" pour une application.
Mais si vous avez un schéma XML plutôt complexe, et beaucoup de données qu'il contient, alors JAXB est fantastique. Dans mon projet, je convertissais de grandes quantités de données entre binaires (qui étaient consommées par un programme C) et XML (afin que les humains puissent consommer et modifier ces données). Le schéma XML résultant n'était pas trivial (plusieurs niveaux de hiérarchie, certains champs pouvaient être répétés, d'autres pas), donc JAXB était utile pour pouvoir manipuler cela.
la source
Voici une raison pour ne pas l'utiliser: les performances en souffrent. Il y a beaucoup de frais généraux lors du marshaling et du démarshaling. Vous pouvez également envisager une autre API pour la liaison d'objets XML - telle que JiBX: http://jibx.sourceforge.net/
la source
C'est un "ORM pour XML". Le plus souvent utilisé avec JAX-WS (et en fait les implémentations de Sun sont développées ensemble) pour les systèmes WS Death Star.
la source
J'utilise JAXB au travail tout le temps et je l'aime vraiment. Il est parfait pour les schémas XML complexes qui changent constamment et particulièrement pour l'accès aléatoire des balises dans un fichier XML.
Je déteste le proxénète mais je viens de commencer un blog et c'est littéralement la première chose que j'ai publiée!
Vérifiez le ici:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
la source
Avec JAXB, vous pouvez créer automatiquement des représentations XML de vos objets (marshalling) et des représentations d'objets du XML (unmarshalling).
En ce qui concerne le schéma XML, vous avez deux choix:
Il existe également des bibliothèques de sérialisation XML plus simples comme XStream , Digester ou XMLBeans qui pourraient être des alternatives.
la source
JAXB est idéal si vous devez coder selon une spécification XML externe définie comme un schéma XML (
xsd
).Par exemple, vous avez une application de trading et vous devez signaler les transactions à l'application Uber Lame Trade Reporting et ils vous ont donné
ultra.xsd
pour continuer. Utilisez le$JAVA_HOME/bin/xjc
compilateur pour transformer le XML en un tas de classes Java (par exempleUltraTrade
).Ensuite, vous pouvez simplement écrire une simple couche d' adaptateur vers laquelle convertir vos objets d'échange
UltraTrades
et utiliserJAXB
pour rassembler les données vers Ultra-Corp. Beaucoup plus facile que de déconner pour convertir vos transactions dans leur format XML.Là où tout tombe en panne, c'est quand Ultra-Corp n'a pas réellement obéi à ses propres spécifications, et que le commerce
price
qu'ils ont en tant que axsd:float
devrait en fait être exprimé par undouble
!la source
Pourquoi avons-nous besoin de JAXB? Les composants distants (écrits en Java) des services Web utilisent XML comme moyen d'échanger des messages entre eux. Pourquoi XML? Parce que XML est considéré comme une option légère pour échanger des messages sur des réseaux avec des ressources limitées. Nous devons très souvent convertir ces documents XML en objets et vice versa. Par exemple: Simple Java POJO Employee peut être utilisé pour envoyer des données Employee à un composant distant (également un programme Java).
Ce Pojo doit être converti (Marshall) en document XML comme suit:
Et au niveau du composant distant, retour à l'objet Java à partir du document XML (Un-Marshall).
Qu'est-ce que JAXB?
JAXB est une bibliothèque ou un outil pour effectuer cette opération de Marshalling et UnMarshalling. Cela vous épargne ce mal de tête, aussi simple que cela.
la source
Vous pouvez également consulter JIBX. C'est aussi un très bon classeur de données xml, également spécialisé en OTA (Open Travel Alliance) et supporté par les serveurs AXIS2. Si vous recherchez des performances et une compatibilité, vous pouvez les vérifier:
http://jibx.sourceforge.net/index.html
la source
JAXB offre des performances améliorées via des optimisations de marshalling par défaut. JAXB définit une API de programmation pour la lecture et l'écriture d'objets Java vers et depuis des documents XML, simplifiant ainsi la lecture et l'écriture de XML via Java.
la source