Inleiding tot JiBX
1. Overzicht
JiBX is een tool om XML-gegevens aan Java-objecten te binden. Het biedt solide prestaties in vergelijking met andere veelgebruikte tools zoals JAXB.
JiBX is ook vrij flexibel in vergelijking met andere Java-XML-tools, met behulp van bindende definities om de Java-structuur los te koppelen van de XML-weergave, zodat ze allemaal onafhankelijk kunnen worden gewijzigd.
In dit artikel zullen we de verschillende manieren onderzoeken die JiBX biedt om de XML aan Java-objecten te binden.
2. Componenten van JiBX
2.1. Bindend definitiedocument
Het bindende definitiedocument specificeert hoe uw Java-objecten worden geconverteerd naar of van XML.
De JiBX-bindingscompiler neemt een of meer bindingsdefinities als invoer, samen met echte klassebestanden. Het compileert de bindingsdefinitie in Java-bytecode door deze toe te voegen aan de klassebestanden. Zodra de klassebestanden zijn verbeterd met deze gecompileerde bindingsdefinitiecode, zijn ze klaar om met JiBX-runtime te werken.
2.2. Hulpmiddelen
Er zijn drie belangrijke tools die we gaan gebruiken:
- BindGen - om de bindende en overeenkomende schemadefinities te genereren uit Java-code
- CodeGen - om de Java-code en een bindende definitie te maken op basis van een XML-schema
- JiBX2Wsdl - om de bindingsdefinitie en een bijpassende WSDL samen met een schemadefinitie te maken op basis van bestaande Java-code
3. Maven-configuratie
3.1. Afhankelijkheden
We moeten de afhankelijkheid van jibx-run toevoegen in het pom.xml:
org.jibx jibx-run 1.3.1
De laatste versie van deze afhankelijkheid is hier te vinden.
3.2. Plug-ins
Om de verschillende stappen in JiBX uit te voeren, zoals het genereren van code of het genereren van binding, moeten we configureren maven-jibx-plugin in pom.xml.
Voor het geval dat we moeten beginnen met de Java-code en de binding en schemadefinitie moeten genereren, laten we de plug-in configureren:
org.jibx maven-jibx-plugin ... src / main / resources * -binding.xml template-binding.xml true procesklassen binden
Als we een schema hebben en we genereren de Java-code en de bindingsdefinitie, dan is de maven-jibx-plugin is geconfigureerd met de informatie over het pad naar het schemabestand en het pad naar de broncodemap:
org.jibx maven-jibx-plugin ... genereer-java-code-uit-schema schema-codegen src / main / jibx klant-schema.xsd true compileer-binding bind doel / gegenereerde-bronnen waar waar waar
4. Bindende definities
Bindende definities vormen het kernonderdeel van JiBX. Een basisbindingsbestand specificeert de toewijzing tussen XML- en Java-objectvelden:
...
4.1. Structuur in kaart brengen
Door structuurtoewijzing lijkt de XML-structuur op de objectstructuur:
... ... ...
De overeenkomstige klassen voor deze structuur zullen zijn:
openbare klasse Klant {particulier persoon; ... // standaard getters en setters} public class Person {private String lastName; ... // standaard getters en setters}
4.2. Verzameling en Array Toewijzingen
JiBX-binding biedt een gemakkelijke manier om met een verzameling objecten te werken:
... ...
Laten we de bijbehorende Java-objecten in kaart brengen:
openbare klasse Order {List addressList = new ArrayList (); ... // getters and setters here} public static class Address {private String name; ... // standaard getters en setter}
4.3. Geavanceerde toewijzingen
Tot dusver hebben we een basis-mappingdefinitie gezien. JiBX-mapping biedt verschillende soorten mapping, zoals abstracte mapping en mapping-overerving.
Laten we eens kijken hoe we een abstracte mapping kunnen definiëren:
...
Laten we eens kijken hoe dit zich bindt aan Java-objecten:
openbare klasse Klant {particulier persoon; ... privé telefoon homePhone; privé telefoon kantoorPhone; // standaard getters en setters}
Hier hebben we meerdere gespecificeerd Telefoon velden in Klant klasse. De Telefoon zelf is weer een POJO:
openbare klasse Telefoon {privé String-nummer; // standaard getters en setters}
Naast reguliere mappings kunnen we ook extensies definiëren. Elke extensietoewijzing verwijst naar een aantal basistoewijzingen. Op het moment van rangschikking bepaalt het feitelijke objecttype welke XML-toewijzing wordt toegepast.
Laten we eens kijken hoe de extensies werken:
... ... ...
Laten we eens kijken naar de overeenkomstige Java-objecten:
public class Identity {private long customerId; // standaard getters en setters}
5. Conclusie
In dit korte artikel hebben we verschillende manieren onderzocht waarop we de JiBX kunnen gebruiken voor het converteren van XML naar / van Java-objecten. We hebben ook gezien hoe we bindende definities kunnen gebruiken om met verschillende representaties te werken.
De volledige code voor dit artikel is beschikbaar op GitHub.