Introduzione a JiBX

1. Panoramica

JiBX è uno strumento per associare dati XML a oggetti Java. Fornisce prestazioni solide rispetto ad altri strumenti comuni come JAXB.

JiBX è anche abbastanza flessibile rispetto ad altri strumenti Java-XML, utilizzando definizioni di binding per separare la struttura Java dalla rappresentazione XML in modo che ciascuna possa essere modificata in modo indipendente.

In questo articolo, esploreremo i diversi modi forniti da JiBX per associare l'XML agli oggetti Java.

2. Componenti di JiBX

2.1. Documento di definizione vincolante

Il documento di definizione del collegamento specifica come gli oggetti Java vengono convertiti in o da XML.

Il compilatore di binding JiBX accetta una o più definizioni di binding come input, insieme ai file di classe effettivi. Compila la definizione di associazione nel bytecode Java aggiungendola ai file di classe. Una volta che i file di classe sono stati migliorati con questo codice di definizione del binding compilato, sono pronti per funzionare con il runtime JiBX.

2.2. Utensili

Ci sono tre strumenti principali che utilizzeremo:

  • BindGen - per generare le definizioni di schema di associazione e corrispondenza dal codice Java
  • CodeGen - per creare il codice Java e una definizione di binding da uno schema XML
  • JiBX2Wsdl : per creare la definizione di associazione e un WSDL corrispondente insieme a una definizione di schema dal codice Java esistente

3. Configurazione Maven

3.1. Dipendenze

Dobbiamo aggiungere la dipendenza jibx-run nel pom.xml :

 org.jibx jibx-run 1.3.1 

L'ultima versione di questa dipendenza può essere trovata qui.

3.2. Plugin

Per eseguire i diversi passaggi in JiBX come la generazione di codice o la generazione di binding, dobbiamo configurare maven-jibx-plugin in pom.xml .

Nel caso in cui dobbiamo partire dal codice Java e generare il binding e la definizione dello schema, configuriamo il plugin:

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

Quando abbiamo uno schema e generiamo il codice Java e la definizione del binding, il plug-in maven-jibx viene configurato con le informazioni sul percorso del file dello schema e il percorso della directory del codice sorgente:

 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. Definizioni vincolanti

Le definizioni di binding sono la parte centrale di JiBX. Un file di associazione di base specifica la mappatura tra i campi oggetto XML e Java:

  ...   

4.1. Mappatura della struttura

La mappatura della struttura rende la struttura XML simile alla struttura degli oggetti:

  ...  ...   ...  

Le classi corrispondenti per questa struttura saranno:

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

4.2. Raccolta e mapping di array

L'associazione JiBX fornisce un modo semplice per lavorare con una raccolta di oggetti:

    ...  ... 

Vediamo la mappatura corrispondente degli oggetti Java:

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

4.3. Mappature avanzate

Finora abbiamo visto una definizione di mappatura di base. La mappatura JiBX fornisce diversi tipi di mappatura come la mappatura astratta e l'ereditarietà della mappatura.

Vediamo come possiamo definire una mappatura astratta:

   ...          

Vediamo come si lega agli oggetti Java:

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

Qui abbiamo specificato più campi Telefono nella classe Cliente . Il telefono stesso è di nuovo un POJO:

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

Oltre alle mappature regolari, possiamo anche definire estensioni. Ogni mappatura di estensione fa riferimento a una mappatura di base. Al momento del marshalling, il tipo di oggetto effettivo decide quale mapping XML viene applicato.

Vediamo come funzionano le estensioni:

    ...   ...  ... 

Diamo un'occhiata agli oggetti Java corrispondenti:

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

5. conclusione

In questo rapido articolo, abbiamo esplorato diversi modi in cui possiamo utilizzare JiBX per convertire XML in / da oggetti Java. Abbiamo anche visto come utilizzare definizioni di binding per lavorare con rappresentazioni diverse.

Il codice completo per questo articolo è disponibile su GitHub.