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.