Einführung in JiBX
1. Überblick
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 recht flexibel und verwendet Bindungsdefinitionen, um die Java-Struktur von der XML-Darstellung zu entkoppeln, sodass jede davon 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-Bindungs-Compiler verwendet eine oder mehrere Bindungsdefinitionen als Eingabe zusammen mit den tatsächlichen Klassendateien. Es kompiliert die Bindungsdefinition in Java-Bytecode, indem es sie den Klassendateien hinzufügt. Sobald die Klassendateien mit diesem kompilierten Bindungsdefinitionscode erweitert wurden, können sie mit JiBX Runtime verwendet werden.
2.2. Werkzeuge
Es gibt drei Hauptwerkzeuge, die wir verwenden werden:
-
BindGen - um die verbindenden und übereinstimmenden Schemadefinitionen aus Java-Code zu generieren
-
CodeGen - um den Java-Code und eine Bindungsdefinition aus einem XML-Schema zu erstellen
-
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 inpom.xml hinzufügen:
org.jibx
jibx-run
1.3.1
Die neueste Version dieser Abhängigkeit befindet sich inhere.
3.2. Plugins
Um die verschiedenen Schritte in JiBX wie Codegenerierung oder Bindungsgenerierung auszuführen, müssen wirmaven-jibx-plugin inpom.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, wirdmaven-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
Verbindliche Definitionen sind das Kernstück von JiBX. Eine grundlegende Bindungsdatei gibt die Zuordnung zwischen XML- und Java-Objektfeldern an:
...
4.1. Strukturabbildung
Durch die Strukturzuordnung wird 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. Collection undArray 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. JiBX-Mapping bietet verschiedene Arten des Mappings wie abstraktes Mapping und Mapping-Vererbung.
Mal sehen, wie wir ein abstraktes Mapping definieren können:
...
Mal sehen, wie dies an Java-Objekte gebunden wird:
public class Customer {
private Person person;
...
private Phone homePhone;
private Phone officePhone;
// standard getters and setters
}
Hier haben wir mehrerePhone Felder inCustomer Klasse angegeben. DasPhone selbst ist wieder ein POJO:
public class Phone {
private String number;
// standard getters and setters
}
Zusätzlich zu regulären Zuordnungen können wir auch Erweiterungen definieren. Jede Erweiterungszuordnung bezieht sich auf eine Basiszuordnung. Zum Zeitpunkt des Marshalls 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. Fazit
In diesem kurzen Artikel haben wir verschiedene Möglichkeiten untersucht, wie wir 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 verfügbarover on GitHub.