Einführung in JiBX

1. Übersicht

JiBX ist ein Tool zum Binden von XML-Daten an Java-Objekte. Es bietet eine solide Leistung im Vergleich zu anderen gängigen Tools wie JAXB.

JiBX ist auch im Vergleich zu anderen Java-XML-Tools sehr flexibel und verwendet Bindungsdefinitionen, um die Java-Struktur von der XML-Darstellung zu entkoppeln, sodass jede unabhängig geändert werden kann.

In diesem Artikel werden die verschiedenen von JiBX bereitgestellten Möglichkeiten zum Binden des XML an Java-Objekte untersucht.

2. Komponenten von JiBX

2.1. Bindungsdefinitionsdokument

Das Bindungsdefinitionsdokument gibt an, wie Ihre Java-Objekte in oder aus XML konvertiert werden.

Der JiBX-Bindungscompiler verwendet eine oder mehrere Bindungsdefinitionen als Eingabe zusammen mit den tatsächlichen Klassendateien. Die Bindungsdefinition wird in Java-Bytecode kompiliert, indem sie zu den Klassendateien hinzugefügt wird. Sobald die Klassendateien mit diesem kompilierten Bindungsdefinitionscode erweitert wurden, können sie mit der JiBX-Laufzeit arbeiten.

2.2. Werkzeuge

Es gibt drei Hauptwerkzeuge, die wir verwenden werden:

  • BindGen - um die verbindlichen und übereinstimmenden Schemadefinitionen aus Java-Code zu generieren
  • CodeGen - zum Erstellen des Java-Codes und einer Bindungsdefinition aus einem XML-Schema
  • JiBX2Wsdl - um die Bindungsdefinition und eine übereinstimmende WSDL zusammen mit einer Schemadefinition aus vorhandenem Java-Code zu erstellen

3. Maven-Konfiguration

3.1. Abhängigkeiten

Wir müssen die Jibx-Run-Abhängigkeit in der pom.xml hinzufügen :

 org.jibx jibx-run 1.3.1 

Die neueste Version dieser Abhängigkeit finden Sie hier.

3.2. Plugins

Um die verschiedenen Schritte in JiBX wie Codegenerierung oder Bindungsgenerierung auszuführen, müssen wir das maven-jibx-Plugin in pom.xml konfigurieren .

Für den Fall, dass wir vom Java-Code ausgehen und die Bindungs- und Schemadefinition generieren müssen, konfigurieren wir das Plugin:

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

Wenn wir ein Schema haben und den Java-Code und die Bindungsdefinition generieren, wird das Maven-Jibx-Plugin mit den Informationen zum Pfad der Schemadatei und zum Pfad zum Quellcodeverzeichnis konfiguriert:

 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. Bindungsdefinitionen

Bindungsdefinitionen sind der Kernbestandteil von JiBX. Eine grundlegende Bindungsdatei gibt die Zuordnung zwischen XML- und Java-Objektfeldern an:

  ...   

4.1. Strukturabbildung

Durch die Strukturzuordnung sieht die XML-Struktur der Objektstruktur ähnlich:

  ...  ...   ...  

Die entsprechenden Klassen für diese Struktur sind:

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

4.2. Sammlungs- und Array- Zuordnungen

Die JiBX-Bindung bietet eine einfache Möglichkeit, mit einer Sammlung von Objekten zu arbeiten:

    ...  ... 

Sehen wir uns die entsprechenden Mapping-Java-Objekte an:

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

4.3. Erweiterte Zuordnungen

Bisher haben wir eine grundlegende Mapping-Definition gesehen. Das JiBX-Mapping bietet verschiedene Mapping-Varianten wie abstraktes Mapping und Mapping-Vererbung.

Mal sehen, wie wir ein abstraktes Mapping definieren können:

   ...          

Mal sehen, wie dies an Java-Objekte bindet:

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

Hier haben wir mehrere Telefonfelder in der Kundenklasse angegeben . Das Telefon selbst ist wieder ein POJO:

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

Neben regulären Zuordnungen können wir auch Erweiterungen definieren. Jede Erweiterungszuordnung bezieht sich auf eine Basiszuordnung. Zum Zeitpunkt des Marshallings entscheidet der tatsächliche Objekttyp, welche XML-Zuordnung angewendet wird.

Mal sehen, wie die Erweiterungen funktionieren:

    ...   ...  ... 

Schauen wir uns die entsprechenden Java-Objekte an:

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

5. Schlussfolgerung

In diesem kurzen Artikel haben wir verschiedene Möglichkeiten untersucht, wie wir den JiBX zum Konvertieren von XML in / von Java-Objekten verwenden können. Wir haben auch gesehen, wie wir verbindliche Definitionen verwenden können, um mit verschiedenen Darstellungen zu arbeiten.

Der vollständige Code für diesen Artikel ist auf GitHub verfügbar.