Kriterien für die Auswahl eines "XML Data Binding"-Frameworks

Seite 4: JAXB & Apache XMLBeans

Inhaltsverzeichnis

An erster Stelle ist JAXB (Java Architecture for XML Binding) zu nennen. Es stellt sozusagen die Standardlösung dar, da es seit Java 6 integraler Bestandteil des Java SDK (Software Development Kit) ist. Zudem ist es Bestandteil von Java EE 5, benötigt aber zur Ausführung mindestens Java SE 5. Inzwischen liegt JAXB in einer ausgereiften Version 2.x vor, es ist aber nicht automatisch die beste Lösung. Das ist unter anderem dadurch begründet, dass JAXB stark auf dem Einsatz von Annotationen beruht. In Umgebungen, in denen Java 5 (noch) nicht eingesetzt werden kann, scheidet JAXB daher als Alternative aus.

Liegt ein XML Schema vor, so lässt sich der JAXB Binding Compiler verwenden, um Java-Code für die darin definierten Typen und Elemente zu generieren. Dieser Code ist mit den entsprechenden Annotationen angereichert. Die JAXB-Laufzeitbibliothek stellt Methoden für unterschiedliche (Un)Marshalling-Varianten zur Verfügung. Unter anderem unterstützt JAXB die Verwendung von SAX. Alternativ lässt sich auch ohne Code-Generator arbeiten. In diesem Fall sind die fachlichen Klassen selbst zu implementieren und mit den notwendigen Annotationen anzureichern. Hier bietet JAXB einiges an Flexibilität. Beispielsweise lässt sich über Annotationen festlegen, ob eine Property beim Umwandeln in XML als Element oder als Attribut abzubilden ist. Mit einer anderen Annotation ist zu bestimmen, wie sich ein bestimmter Java-Typ auf einen XML-Schema-Typ abbilden lässt. Nach Implementierung der benötigten Klassen kann der Entwickler mit dem JAXB-Schema-Generator ein passendes Schema generieren. Seit Version 2.x bietet JAXB vollen XML-Schema-Support.

Ein populäres XML-Framework der vergangenen Jahre war sicherlich Apache XMLBeans. Es wurde 2003 von BEA entwickelt und wenig später an die Apache Software Foundation (ASF) übergeben. XMLBeans ist bis heute in manchen Disziplinen konkurrenzlos, während es in anderen ein wenig von den neuen technischen Entwicklungen überholt zu sein scheint. Eine der Stärken des Frameworks liegt in der traditionell guten Unterstützung von XML Schema. Zwar haben konkurrierende Frameworks mit der Zeit aufgeholt. Generell darf aber weiterhin gelten: Je komplexer ein XML Schema, desto geringer ist die Anzahl der Frameworks, die diese verwendeten Schema-Features unterstützt. XMLBeans ist in komplizierten Fällen oft der einzige Vertreter, der zum Erfolg führt. Darüber hinaus erhält das Framework beim Parsen das XML Infoset. Dieses ist also nicht nur nach dem Unmarshalling zur Laufzeit zugänglich, sondern lässt sich insbesondere wieder herstellen, wenn eine Rückumwandlung nach XML erfolgt. Minuspunkte sammelt XMLBeans dagegen bei vielen Entwicklern auf Code-Ebene. Für alle in einem Schema definierten Typen und Elemente generiert XMLBeans sowohl eine Klasse als auch ein Interface, die jeweils von einer Klasse (XmlObject) beziehungsweise einem Interface des Frameworks abgeleitet sind. Es ergeben sich also erhebliche Code-Abhängigkeiten zwischen den fachlichen Klassen und XMLBeans. Zudem fühlt sich das Erzeugen und Befüllen von Instanzen ungewöhnlich an. Statt des new-Operators sind beispielsweise Factories zu verwenden. Komplexe Properties lassen sich mit einer add-Methode befüllen.

Als besonderes Feature bietet XMLBeans gleich drei APIs an: Neben dem Zugriff auf alle im Schema definierten Elemente über XmlObject lässt sich ein XmlCursor anfordern, der einen effizienten Zugriff auf das XML Infoset ermöglicht. Schließlich erlaubt SchemaType den Zugriff auf die zugrunde liegenden Schema-Metainformationen eines Objekts. Beispielsweise sind so die erlaubten Werte einer Enumeration herauszufinden und lassen sich etwa in einer Auswahlbox anzeigen. XMLBeans benötigt keine Java-5-Sprachfeatures.