Introduktion til JiBX
1. Oversigt
JiBX er et værktøj til binding af XML-data til Java-objekter. Det giver solid ydeevne sammenlignet med andre almindelige værktøjer som JAXB.
JiBX er også ret fleksibel sammenlignet med andre Java-XML-værktøjer ved hjælp af bindende definitioner til at afkoble Java-strukturen fra XML-repræsentation, så hver kan ændres uafhængigt.
I denne artikel undersøger vi de forskellige måder, som JiBX leverer til at binde XML til Java-objekter.
2. Komponenter i JiBX
2.1. Bindende definitionsdokument
Bindedefinitionsdokumentet specificerer, hvordan dine Java-objekter konverteres til eller fra XML.
JiBX-bindingscompileren tager en eller flere bindende definitioner som input sammen med faktiske klassefiler. Det kompilerer bindingsdefinitionen i Java bytecode ved at føje den til klassefilerne. Når klassefilerne er blevet forbedret med denne kompilerede bindende definitionskode, er de klar til at arbejde med JiBX-runtime.
2.2. Værktøjer
Der er tre hovedværktøjer, som vi skal bruge:
- BindGen - at generere bindende og matchende skemadefinitioner fra Java-kode
- CodeGen - at oprette Java-koden og en bindende definition fra et XML-skema
- JiBX2Wsdl - at lave bindingsdefinitionen og en matchende WSDL sammen med en skemadefinition fra eksisterende Java-kode
3. Maven-konfiguration
3.1. Afhængigheder
Vi er nødt til at tilføje den jibx-kørende afhængighed i pom.xml:
org.jibx jibx-run 1.3.1
Den seneste version af denne afhængighed kan findes her.
3.2. Plugins
For at udføre de forskellige trin i JiBX som kodegenerering eller bindingsgenerering skal vi konfigurere maven-jibx-plugin i pom.xml.
I det tilfælde, hvor vi skal starte fra Java-koden og generere bindings- og skemadefinitionen, lad os konfigurere pluginet:
org.jibx maven-jibx-plugin ... src / main / resources * -binding.xml template-binding.xml true process-classes bind
Når vi har et skema, og vi genererer Java-kode og bindingsdefinition, bliver maven-jibx-plugin er konfigureret med oplysningerne om skema-filsti og sti til kildekodebiblioteket:
org.jibx maven-jibx-plugin ... generer-java-kode-fra-skema skema-codegen src / main / jibx kunde-skema.xsd sand kompilering-bindende bindemål / genererede kilder sand sand sand
4. Bindende definitioner
Bindende definitioner er kernedelen af JiBX. En grundlæggende bindingsfil specificerer kortlægningen mellem XML- og Java-objektfelter:
...
4.1. Strukturkortlægning
Strukturmapping får XML-strukturen til at ligne objektstrukturen:
... ... ...
De tilsvarende klasser for denne struktur vil være:
offentlig klasse kunde {privatperson person; ... // standard getters and setters} public class Person {private String lastName; ... // standard getters og setters}
4.2. Kollektion og Array Kortlægninger
JiBX-binding giver en nem måde at arbejde med en samling objekter på:
... ...
Lad os se tilsvarende kortlægning af Java-objekter:
public class Order {List addressList = new ArrayList (); ... // getters og settere her} offentlig statisk klasse Adresse {privat Navn på streng; ... // standard getters og setter}
4.3. Avancerede kortlægninger
Indtil videre har vi set en grundlæggende kortlægningsdefinition. JiBX-kortlægning giver forskellige varianter af kortlægning som abstrakt kortlægning og kortlægning af arv.
Lad os se, hvordan vi kan definere en abstrakt kortlægning:
...
Lad os se, hvordan dette binder til Java-objekter:
offentlig klasse kunde {privatperson person; ... privat telefon hjemTelefon; privat telefon kontor; telefon; // standard getters og setter}
Her har vi angivet flere telefon felter i Kunde klasse. Det telefon i sig selv er igen en POJO:
offentlig klasse Telefon {privat String nummer; // standard getters og setter}
Ud over regelmæssige tilknytninger kan vi også definere udvidelser. Hver udvidelseskortlægning refererer til en eller anden basiskortlægning. På tidspunktet for marskalering bestemmer den faktiske objekttype, hvilken XML-kortlægning der anvendes.
Lad os se, hvordan udvidelserne fungerer:
... ... ...
Lad os se på de tilsvarende Java-objekter:
offentlig klasse Identitet {privat lang kundeId; // standard getters og setter}
5. Konklusion
I denne hurtige artikel har vi undersøgt forskellige måder, hvorpå vi kan bruge JiBX til at konvertere XML til / fra Java-objekter. Vi har også set, hvordan vi kan bruge bindende definitioner til at arbejde med forskellige repræsentationer.
Fuld kode til denne artikel er tilgængelig på GitHub.