Einführung in JiBX

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.