|
Tags: Concepten | Java | XML
| ||
| ||
Flexibel XML mappen met JiBXDoor Frank van EerdenAls je op zoek gaat naar een tool om een XML structuur te mappen op een Java object, dan kom je een hoop tools tegen waarbij de (gegenereerde) class-structure erg dicht bij die van de XML structuur ligt. In de meeste gevallen is de gegenereerde structuur vervolgens niet aan te passen. Dit heeft nadelige gevolgen als deze structuur veel afwijkt van een logische object structuur.Sinds enkele jaren is er een OpenSource product genaamd JiBX. Dit is een flexibel data binding framework dat de Java structuur als uitgangspunt heeft, en dus niet de XML structuur. Je kunt je class-structure toesnijden op je applicatie en deze hoeft niet één op één overeen te komen met de structuur van de XML die je wilt mappen. Je kunt wijzigingen in je class-structure doorvoeren zonder je XML structuur te hoeven wijzigen. Door deze flexibiliteit kun je 'echte' objecten gebruiken die data en gedrag combineren.In dit artikel zal ik dieper ingaan op de mogelijkheden van JiBX, de ondersteunende tools en de toepassingsgebieden. Vervolgens zal ik afsluiten met een algemene conclusie en een aantal interessante links naar websites die meer informatie over JiBX geven. Concepten (bindings)JiBX gebruikt een binding definitie om de XML structuur te mappen op een class-structure. Voor deterministische XML structuren is het eenvoudig om een binding definitie te maken. Kleine wijzigingen in de XML structuur kunnen worden opgevangen door slechts een aanpassing van de binding, zodat de class-structure ongewijzigd kan blijven. Voor complexere XML structuren is het mogelijk om eigen implementatie classes te leveren die gebruik maken van de JiBX API ten behoeve van de marshalling en unmarshalling van de XML documenten.![]() Je kunt daarmee de functionaliteit van de bestaande binding controls uitbreiden of vervangen. Alle gebruikelijke data typen zoals String, Integer en Date worden uiteraard ondersteund. Voor ongebruikelijke data typen kunnen custom data converters worden geschreven. Zo heb ik een converter geschreven voor het vertalen van de default universal time (UTC) naar de lokale tijd (CET). In mijn werk voor een Zweeds telecom bedrijf gebruik ik JiBX om XML berichten samen te stellen en uit te pakken. Het bericht in fragment 1 zou een ontvangen bericht kunnen zijn. Dit ontvangen bericht moet worden gekoppeld aan de onderstaande class-structure: ![]() Veel frameworks zouden het ontvangen bericht mappen op een class Response met daarin een class Data, wat niet overeenkomt met onze class-structure. Wat veelal niet mogelijk is in andere frameworks is het samenvoegen van alle data elementen in één class, of het verdelen in twee andere classes met omgekeerde afhankelijkheid, zoals wij dat hier zouden willen doen. In fragment 2 staat een voorbeeld van een binding om die omgekeerde afhankelijkheid te bereiken. In deze binding zit de Result class met de property (field) 'error' die mapt op de Error class. De Error class bevat de velden 'error_code' en 'error_message'. De velden ‘key’ en ‘string_value’ zitten in de Result class zelf. In het binding bestand voor de standaard Response-Data binding is er extra code toegevoegd met <structure field="error"> en is een attribute field="data" verwijderd om dit te bereiken. ![]() Je kunt dus de class-structure laten afwijken van de structuur van het XML bericht. Met een beetje meer moeite is het zelfs mogelijk om dezelfde classes te gebruiken voor zowel de mapping naar XML met JiBX als de mapping naar de database met bijvoorbeeld Hibernate. ToepassingsgebiedenVoor Eclipse is er een JiBX plugin beschikbaar die automatisch de in de binding genoemde classes compileert als er wijzigingen zijn. Verder is er een plugin beschikbaar voor Maven2 die hetzelfde doet. Er is een tool jibx-genbinding beschikbaar waarmee je vanuit een set Java classes een binding definitie kunt genereren om als startpunt te gebruiken. Er is tevens een tool jibx-genschema om vanuit een set Java Classes en binding files een XML schema bestand (XSD) te genereren.JibxSoap is een web services framework dat gebouwd is als extension op JiBX. Het ondersteunt het gebruik van document literal web services waarmee de focus op de XML structuur ligt. RPC encoded web services worden niet ondersteunt. JiBX zorgt voor de conversies tussen XML en Java objecten, JibxSoap zorgt voor de SOAP wrappers en het transport van de berichten. JiBX kan ook worden gebruikt in combinatie met het Axis2 web services framework van Apache. Verder is er de beschikking over een tool die vanuit een WSDL een set van Java classes genereerd met bijbehorende binding definitie. Deze Java classes kunnen dan als uitgangspunt dienen en waar nodig aangepast worden voor de uiteindelijke implementatie. OntwikkelingenIn de volgende release (1.2) zal vooral verbetering van de tools rond JiBX centraal staan. Er komt een nieuwe versie van de op dit moment enigszins verouderde tool Xsd2Jibx. Hiermee kan Java code worden gegenereerd op basis van een XML definitie schema (XSD). De hierboven genoemde binding en schema generatie tools zullen ook worden vernieuwd. Verder zal in release 1.2 JibxSoap worden vervangen door JiBX/WS, een volledig nieuw web services framework. JiBX/WS bevat naast SOAP ook uitgebreide support voor Representational State Transfer (REST ) web services en Plain Old XML (POX) web services. Deze release zal medio december 2008 uitkomen.Er is ook een versie 2.0 in ontwikkeling die een volledig nieuw code generatie model bevat die zowel byte code genereert (zoals in de huidige versie) als source code. De beta release van deze versie komt waarschijnlijk in maart 2009 uit. Om op de hoogte te blijven van de laatste ontwikkelingen rondom JiBX kun je je zelf aanmelden op de jibx mailing list (jibx-users@lists.sourceforge.net) door naar de volgende site te gaan: https://lists.sourceforge.net/lists/listinfo/jibx-users ConclusieMet JiBX is het mogelijk om een XML structuur te mappen naar een class-structure die geschikt is voor jouw toepassing. Er is support voor populaire toepassingsgebieden zoals Web Services en ondersteuning van het development werk door middel van diverse tools. Auteur Frank van Eerden. Senior Java Developer bij Qualogy Consultancy.Referentieshttp://jibx.sourceforge.net (of www.jibx.org)http://www.sosnoski.com/jibx-wiki http://ws.apache.org/axis2/1_4_1/jibx/jibx-codegen-integration.html http://www.ibm.com/developerworks/xml/library/x-databdopt/index.html | ||
| Lees meer over Qualogy | ||
| Ga terug naar We Love IT uitgave 5 - 2008 | ||
|







