web-dev-qa-db-fra.com

Qu'est-ce que JAXB et pourquoi devrais-je l'utiliser?

Un type ici jure que le JAXB est la meilleure chose depuis le pain en tranches. Je suis curieux de voir ce que les utilisateurs de Stack Overflow pensent être le cas d'utilisation de JAXB et ce qui en fait une bonne ou une mauvaise solution pour ce cas.

103
Jay R.

Je suis un grand fan de JAXB pour la manipulation de XML. Fondamentalement, il fournit une solution à ce problème (je suppose que je connais bien XML, Java et XML Schemas):

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 pourra ensuite manipuler.

JAXB prend un schéma XML que vous écrivez et crée 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 effectue également l'inverse: prend les classes Java) et génère le code XML correspondant.

J'aime JAXB car il est facile à utiliser et vient avec Java 1.6 (si vous utilisez la version 1.5, vous pouvez télécharger le fichier .jars JAXB.). La façon dont il crée la hiérarchie des classes est intuitive, et selon mon expérience, fait un travail décent en faisant abstraction du "XML" afin que je puisse me concentrer sur les "données".

Donc, pour répondre à votre question: JAXB pourrait être excessif pour les petits fichiers XML. Vous devez créer et gérer un schéma XML, et utiliser des "méthodes de manuel standard" consistant à utiliser les classes Java pour les structures de données. (Classes principales, petites classes internes représentant les "nœuds", et une énorme hiérarchie d'entre eux.) Ainsi, JAXB n'est probablement pas très bon 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 que de nombreuses données y sont contenues, JAXB est fantastique. Dans mon projet, je convertissais de grandes quantités de données entre du binaire (consommé par un programme C) et du XML (afin que les humains puissent consommer et modifier ces données). Le schéma XML résultant était non trivial (beaucoup de niveaux de hiérarchie, certains champs pouvaient être répétés, d'autres non). JAXB était donc utile pour pouvoir manipuler cela.

96
poundifdef

Voici une raison de ne pas l'utiliser: les performances en pâtissent. Il y a beaucoup de frais généraux lors du marshaling et du remembrement. Vous pouvez également envisager une autre API pour la liaison objet-XML, telle que JiBX: http://jibx.sourceforge.net/

24
codefinger

J'utilise JAXB au travail tout le temps et j'adore ça. C'est parfait pour les schémas XML complexes qui changent constamment et particulièrement pour l'accès aléatoire aux balises dans un fichier XML.

Je déteste pimp mais je viens juste de commencer un blog et c'est littéralement la première chose que j'ai postée!

Vérifiez le ici:

http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/

20
artgon

C'est un "ORM pour XML". Le plus souvent utilisé avec JAX-WS (et les implémentations Sun sont développées ensemble) pour les systèmes WS Death Star.

20

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:

  • Générer Java les classes d'un XSD
  • Générez un fichier XSD à partir de vos classes Java

Il existe également des bibliothèques de sérialisation XML plus simples, telles que XStream , Digester ou XMLBeans , qui pourraient constituer des alternatives.

9
Fabian Steeg

JAXB est très utile si vous devez coder vers une spécification XML externe définie en tant que schéma XML (xsd).

Par exemple, vous avez une application de trading et vous devez signaler les transactions à l'application de reporting des transactions Uber Lame et ils vous ont donné ultra.xsd être avec. Utilisez le $Java_HOME/bin/xjc compilateur pour transformer le code XML en un groupe de Java (par exemple, UltraTrade).

Ensuite, vous pouvez simplement écrire un simple calque adaptateur pour convertir vos objets d'échange en UltraTrades et utiliser le JAXB pour marshal. les données à travers Ultra-Corp. Beaucoup plus facile que de déconner de convertir vos transactions en leur format XML.

Là où tout cela tombe en panne, c’est quand Ultra-Corp n’a pas réellement obéi à ses propres spécifications, et le métier price qu’ils ont en tant que xsd:float devrait en fait être exprimé par double!

8
oxbow_lakes

Pourquoi avons-nous besoin de JAXB? Les composants distants (écrits en Java) de 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 avons souvent besoin de convertir ces documents XML en objets et inversement. E.g: Simple Java POJO Employee peut être utilisé pour envoyer des données Employé à un composant distant (également un programme Java)).

class Employee{
 String name;
 String dept;
 ....
}

Ce Pojo doit être converti (Marshall) en document XML comme suit:

<Employee>
  <Name>...</Name>
  <Department>...</Department>
</Employee>

Et au niveau du composant distant, revenez à Java à partir d'un document XML (Un-Marshall).

Qu'est-ce que JAXB?

JAXB est une bibliothèque ou un outil permettant d’effectuer cette opération de Marshalling et UnMarshalling. Cela vous évite ce mal de tête, aussi simple que cela.

6
Prashant_M

Vous pouvez également consulter JIBX aussi. C'est également un très bon classeur de données XML, qui est également spécialisé dans OTA (Open Travel Alliance) et qui est pris en charge par les serveurs AXIS2. Si vous recherchez performances et compatibilité, vous pouvez le vérifier:

http://jibx.sourceforge.net/index.html

4
LostMohican

JAXB améliore les performances via des optimisations de tri par défaut. JAXB définit une API de programmation pour la lecture et l’écriture Java vers et à partir de documents XML, simplifiant ainsi la lecture et l’écriture de XML via Java.

0
user2989087