Introduksjon til JiBX
1. Oversikt
JiBX er et verktøy for å binde XML-data til Java-objekter. Det gir solid ytelse sammenlignet med andre vanlige verktøy som JAXB.
JiBX er også ganske fleksibel sammenlignet med andre Java-XML-verktøy, ved å bruke bindende definisjoner for å koble Java-strukturen fra XML-representasjon, slik at hver kan endres uavhengig.
I denne artikkelen vil vi utforske de forskjellige måtene JiBX gir for å binde XML til Java-objekter.
2. Komponenter av JiBX
2.1. Bindende definisjonsdokument
Forbindelsesdefinisjonsdokumentet spesifiserer hvordan Java-objektene dine konverteres til eller fra XML.
JiBX bindende kompilator tar en eller flere bindende definisjoner som input, sammen med faktiske klassefiler. Den kompilerer bindingsdefinisjonen i Java bytecode ved å legge den til klassefilene. Når klassefilene er forbedret med denne kompilerte bindende definisjonskoden, er de klare til å jobbe med JiBX-kjøretid.
2.2. Verktøy
Det er tre hovedverktøy som vi skal bruke:
- BindGen - å generere bindende og matchende skjemadefinisjoner fra Java-kode
- CodeGen - for å opprette Java-koden og en bindende definisjon fra et XML-skjema
- JiBX2Wsdl - å lage bindingsdefinisjonen og en matchende WSDL sammen med en skjemadefinisjon fra eksisterende Java-kode
3. Maven-konfigurasjon
3.1. Avhengigheter
Vi må legge til jibx-kjørt avhengighet i pom.xml:
org.jibx jibx-run 1.3.1
Den siste versjonen av denne avhengigheten finner du her.
3.2. Plugins
For å utføre de forskjellige trinnene i JiBX som kodegenerering eller bindingsgenerering, må vi konfigurere maven-jibx-plugin i pom.xml.
For det tilfellet når vi trenger å starte fra Java-koden og generere bindings- og skjemadefinisjonen, la oss konfigurere pluginet:
org.jibx maven-jibx-plugin ... src / main / resources * -binding.xml template-binding.xml true process-classes bind
Når vi har et skjema og vi genererer Java-kode og bindingsdefinisjon, blir maven-jibx-plugin er konfigurert med informasjonen om skjemafilen og banen til kildekodekatalogen:
org.jibx maven-jibx-plugin ... generer-java-kode-fra-skjema skjema-kodegen src / main / jibx kunde-skjema.xsd sann kompilering-bindende bindemål / genererte kilder sant sant sant
4. Bindende definisjoner
Bindende definisjoner er kjernen i JiBX. En grunnleggende bindingsfil spesifiserer kartleggingen mellom XML- og Java-objektfelt:
...
4.1. Strukturkartlegging
Strukturkartlegging får XML-strukturen til å ligne objektstrukturen:
... ... ...
De tilsvarende klassene for denne strukturen kommer til å være:
offentlig klasse kunde {privatperson person; ... // standard getters and setters} public class Person {private String lastName; ... // standard getters and setters}
4.2. Samling og Array Kartlegginger
JiBX-binding gir en enkel måte å jobbe med en samling objekter på:
... ...
La oss se tilsvarende kartlegging av Java-objekter:
public class Order {List addressList = new ArrayList (); ... // getters og setters her} offentlig statisk klasse Adresse {private Strengnavn; ... // standard getters og setter}
4.3. Avanserte kartlegginger
Så langt har vi sett en grunnleggende kartdefinisjon. JiBX-kartlegging gir forskjellige smaker av kartlegging som abstrakt kartlegging og kartlegging av arv.
La oss se hvordan vi kan definere en abstrakt kartlegging:
...
La oss se hvordan dette binder seg til Java-objekter:
offentlig klasse kunde {privatperson person; ... privat telefon hjemmeTelefon; privat telefonkontorTelefon; // standard getters og setters}
Her har vi spesifisert flere Telefon felt i Kunde klasse. De Telefon i seg selv er igjen en POJO:
offentlig klasse Telefon {privat Stringnummer; // standard getters og setters}
I tillegg til vanlige tilordninger kan vi også definere utvidelser. Hver utvidelseskartlegging refererer til noen basiskartlegging. På tidspunktet for marshaling bestemmer den faktiske objekttypen hvilken XML-kartlegging som skal brukes.
La oss se hvordan utvidelsene fungerer:
... ... ...
La oss se på de tilsvarende Java-objektene:
offentlig klasse Identitet {privat lang kundeId; // standard getters og setters}
5. Konklusjon
I denne raske artikkelen har vi utforsket forskjellige måter vi kan bruke JiBX til å konvertere XML til / fra Java-objekter. Vi har også sett hvordan vi kan bruke bindende definisjoner til å jobbe med forskjellige representasjoner.
Full kode for denne artikkelen er tilgjengelig på GitHub.