Introduction à JiBX

1. Vue d'ensemble

JiBX est un outil de liaison de données XML à des objets Java. Il offre des performances solides par rapport à d'autres outils courants tels que JAXB.

JiBX est également assez flexible par rapport à d'autres outils Java-XML, utilisant des définitions de liaison pour découpler la structure Java de la représentation XML afin que chacune puisse être modifiée indépendamment.

Dans cet article, nous explorerons les différentes manières fournies par JiBX de lier le XML aux objets Java.

2. Composants de JiBX

2.1. Document de définition de reliure

Le document de définition de liaison spécifie comment vos objets Java sont convertis vers ou à partir de XML.

Le compilateur de liaison JiBX prend une ou plusieurs définitions de liaison en entrée, ainsi que les fichiers de classe réels. Il compile la définition de liaison en bytecode Java en l'ajoutant aux fichiers de classe. Une fois que les fichiers de classe ont été améliorés avec ce code de définition de liaison compilé, ils sont prêts à fonctionner avec le runtime JiBX.

2.2. Outils

Nous allons utiliser trois outils principaux:

  • BindGen - pour générer la liaison et les définitions de schéma correspondantes à partir du code Java
  • CodeGen - pour créer le code Java et une définition de liaison à partir d'un schéma XML
  • JiBX2Wsdl - pour créer la définition de liaison et un WSDL correspondant avec une définition de schéma à partir du code Java existant

3. Configuration Maven

3.1. Dépendances

Nous devons ajouter la dépendance jibx-run dans le pom.xml :

 org.jibx jibx-run 1.3.1 

La dernière version de cette dépendance peut être trouvée ici.

3.2. Plugins

Pour effectuer les différentes étapes de JiBX comme la génération de code ou la génération de liaison, nous devons configurer maven-jibx-plugin dans pom.xml .

Pour le cas où nous devons partir du code Java et générer la liaison et la définition du schéma, configurons le plugin:

 org.jibx maven-jibx-plugin ...  src/main/resources  *-binding.xml   template-binding.xml  true    process-classes  bind    

Lorsque nous avons un schéma et que nous générons le code Java et la définition de liaison, le maven-jibx-plugin est configuré avec les informations sur le chemin du fichier de schéma et le chemin vers le répertoire du code source:

 org.jibx maven-jibx-plugin ...   generate-java-code-from-schema  schema-codegen   src/main/jibx  customer-schema.xsd  true    compile-binding  bind   target/generated-sources true true true    

4. Définitions contraignantes

Les définitions de liaison sont au cœur de JiBX. Un fichier de liaison de base spécifie le mappage entre les champs d'objet XML et Java:

  ...   

4.1. Cartographie de la structure

Le mappage de structure rend la structure XML similaire à la structure d'objet:

  ...  ...   ...  

Les classes correspondantes pour cette structure vont être:

public class Customer { private Person person; ... // standard getters and setters } public class Person { private String lastName; ... // standard getters and setters } 

4.2. Collection et multidisque Mappages

La liaison JiBX offre un moyen simple de travailler avec une collection d'objets:

    ...  ... 

Voyons les objets Java de mappage correspondants:

public class Order { List addressList = new ArrayList(); ... // getters and setters here } public static class Address { private String name; ... // standard getters and setter }

4.3. Mappages avancés

Jusqu'à présent, nous avons vu une définition cartographique de base. Le mappage JiBX fournit différentes saveurs de mappage comme le mappage abstrait et l'héritage de mappage.

Voyons comment pouvons-nous définir un mapping abstrait:

   ...          

Voyons comment cela se lie aux objets Java:

public class Customer { private Person person; ... private Phone homePhone; private Phone officePhone; // standard getters and setters }

Ici, nous avons spécifié plusieurs champs Téléphone dans la classe Client . Le téléphone lui-même est à nouveau un POJO:

public class Phone { private String number; // standard getters and setters }

En plus des mappages réguliers, nous pouvons également définir des extensions. Chaque mappage d'extension fait référence à un mappage de base. Au moment du marshaling, le type d'objet réel décide quel mappage XML est appliqué.

Voyons comment fonctionnent les extensions:

    ...   ...  ... 

Regardons les objets Java correspondants:

public class Identity { private long customerId; // standard getters and setters }

5. Conclusion

Dans cet article rapide, nous avons exploré différentes manières d'utiliser le JiBX pour convertir du XML vers / à partir d'objets Java. Nous avons également vu comment nous pouvons utiliser des définitions de liaison pour travailler avec différentes représentations.

Le code complet de cet article est disponible à l'adresse over sur GitHub.