Neues rund um JAXB: Java An Xml – Bitte kommen!

Falk Hartmann Dieser Artikel wurde von geschrieben. Falk ist leitet die Softwareentwicklung bei der Firma ubigrate. Sein besonderes Interesse gilt der modellgetriebenen Entwicklung in den Bereichen intelligente Geräte und Geräteintegration.

Interessante Dinge haben sich in den letzten Jahren im JAXB-Umfeld getan. Während diese Technologie 2004 noch nahezu unbrauchbar recht hakelig war, ist mit JAXB 2.0 (aka JSR-222) bzw. JAXB 2.1 ein Entwicklungsstand erreicht, welcher zusammen mit nicht-standardisierten Features (z.B. innerhalb der Referenzimplementierung JAXB RI) den Einsatz von JAXB in industriellen Anwendungen erlaubt. Im folgenden soll speziell auf XJC, den XML-to-Java-Compiler der Referenzimplementierung, eingegangen werden. Im Zusammenhang mit allen JAXB-Fragen sollte stets Kohsuke Kawaguchi’s Blog besucht werden – Herr Koshuke ist sicher der Hauptentwickler der Referenzimplementierung.

Eine wichtige Weiterentwicklung des XJC betrifft die Erzeugung und Verwendung sogenannter episode-Files, welche die Ergebnisse einer Compilierung mittels XJC festhält. Damit ist die Compilierung voneinander (typischerweise durch import-Anweisungen) abhängiger XML-Schemata möglich. XJC kann diese episode-Files bei der Compilierung eines Schemas A erzeugen und bei der Compilierung eines Schemas B konsumieren. Letztere Compilierung erzeugt damit nicht neue Klassen für die in B referenzierten Elemente von A, sondern benutzt die bei der Compilierung von A erzeugten. Dieses Feature erlaubt eine echte Modularisierung der aus XML-Schemata mittels XJC gewonnenen Klassen. Bei der Verwendung von substitution groups über Schemata-Grenzen hinweg sollte man unbedingt die Dokumentation des <xjc:substitutable>-Elements beachten.

XJC bietet zudem einen Plugin-Mechanismus, der u.a. die Erzeugung nahezu beliebiger Klassen aus XML-Schemata erlaubt. Sinnvolle Einsatzgebiete solcher Plugins sind z.B. die Erzeugung weiterer, nur indirekt mit dem Java/XML Binding verbundener Klassen (wie z.B. Factory- und Visitor-Klassen) sowie die Änderung der für die XML-Schemata erzeugten Klassen selbst. Plugins können auch benutzt werden, um das Namensmapping zwischen Java und XML zu beeinflussen. Auch wenn die Vorgehensweise solcher Plugins (sie registrieren einen sogenannten NameConverter in einer sonst nicht kaum benutzten Methode) seltsam aufgesetzt wirkt, bieten sie enorme Möglichkeiten, welche sich auf anderen Wegen nur schwer erreichen lassen. Wir setzen ein solches Plugin ein, um Namenskonventionen wie z.B. die Großschreibung von URI oder HTTP in Methodennamen generierter Klassen zu erzwingen – der eigentliche Verfasser der Schemata bzw. der Binding-Informationen wird dadurch von der Beachtung derartiger Details entbunden.

Ein weiteres Plugin, welches unbedingte Beachtung verdient, ist das JAXB 2.0 Default Value Plugin (ein Unterprojekt des JAXB 2.0 Commons-Projektes), welches die Behandlung von element-default-Werten an die von attribute-default-Werten angleicht, d.h. auch den aus <xsd:element>-Tags resultierenden Member-Variablen werden durch das Plugin korrekte Initialisierungen hinzufügt.

Zwei weitere Entwicklungen im JAXB-Umfeld sind definitiv erwähnenswert. Als erstes ist an dieser Stelle das Java-Codemodel zu erwähnen, welches vom XJC zur Erzeugung der Java-Quellcode-Dateien verwendet wird – dieses bildet eine mächtige API zur Erzeugung von Java-ASTs, welche sich in Java-Quellcode-Dateien umwandeln lassen. Weiterhin muß das JAXB-Verification-Projekt erwähnt werden, welche sich der Verifikation (ein absichtlich gewählter Begriff, um sich von der typischen XML-Validation abzusetzen) von Objektmodellen gegen XML-Schemata verschrieben hat. Mit JAXB-Verification soll es möglich sein, basierend auf Java-Objekten zu prüfen, ob die Serialisierung der Java-Objekte eine einem gegebenen XML-Schema genügende XML-Datei erzeugt. Sicher sind uns beide Entwicklungen früher oder später Folgeartikel wert.

Post to Twitter

Schlagworte:

2 Kommentare bisher »

  1. Karsten sagt

    am 18. Juli 2008 @ 17:01

    Hab den Artikel nur kurz überflogen. Aber falls es jemanden interessiert: Für Java in Verbindung mit XML und XML-Schema kann ich XMLBeans (http://xmlbeans.apache.org/) nur wärmstens empfehlen. Unbedingt mal anschauen. Es ist eine Freude damit zu arbeiten.

  2. Karsten sagt

    am 18. Juli 2008 @ 17:05

    Hab mal was kopiert von der XMLBeans-Webseite. Das Dingens kann weit mehr als JAXB und die Arbeit geht noch leichter von der Hand. So zumindest meine Erfahrungen damit ;)

    What Makes XMLBeans Different

    There are at least two major things that make XMLBeans unique from other XML-Java binding options.

    1. Full XML Schema support. XMLBeans fully supports XML Schema and the corresponding java classes provide constructs for all of the major functionality of XML Schema. This is critical since often times you do not have control over the features of XML Schema that you need to work with in Java. Also, XML Schema oriented applications can take full advantage of the power of XML Schema and not have to restrict themselvs to a subset.
    2. Full XML Infoset fidelity.When unmarshalling an XML instance the full XML infoset is kept and is available to the developer. This is critical because because of the subset of XML that is not easily represented in java. For example, order of the elements or comments might be needed in a particular application.

Komentar RSS · TrackBack URI

Hinterlasse einen Kommentar

Name:

eMail:

Website:

Kommentar:

 

google

google

asus