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.