Für die Verarbeitung von XML-Daten stehen inzwischen viele Java-Bibliotheken zur Verfügung. Stellvertretend seien hier Castor und XStream aufgeführt. Für das Einlesen (keine Ausgabemöglichkeit vorhanden) von XML-Daten gesellt sich Xmappr dazu. Die Bibliothek steht unter der BSD-Lizenz (Variante aus dem Jahr 2008) zur Verfügung. Als Voraussetzung gilt Java 5. Das Mapping der XML-Daten auf Java-Klassen kann mittels Annotationen oder XML-Konfiguration erfolgen. Für das Parsen setzt Xmappr (aktuelle Version: 0.9.2) auf den JSR-173-Standard StaX (Streaming API for XML). Im Fall von Java 6 ist dieses API durch das Paket javax.xml.stream bereits als Bordmittel dabei. Bei Java 5 muss es noch nachgerüstet werden. In den FAQ zu Xmappr wird als StaX-Parser Woodstock empfohlen.
Integration ins Projekt
Für die Integration in ein Java-6-Projekt reicht der Download der 86 KB großen Bibliothek (Name: xmappr-0.9.2.jar) aus. Im Fall von Java 5 wird noch ein StaX-Parser benötigt. Der empfohlene Parser Woodstock steht auch als Binärdatei zum Download bereit.
Für die Integration in ein Maven-Projekt steht ein Repository zur Verfügung. Nachfolgende Zeilen müssen der Projekt-POM an den entsprechenden Stellen hinzugefügt werden:
<dependency><groupId>org.xmappr</groupId><artifactId>xmappr</artifactId><version>0.9.2</version></dependency><repository><id>xmappr-repo-googlecode</id><name>Xmappr Repository</name><url>http://xmappr.googlecode.com/svn/repo/</url></repository>
Auf Tuchfühlung
Die Stärken von Xmappr zeigen sich am schnellsten in einem Beispiel. Als Grundlage soll nachfolgende XML-Datei dienen.
<book language="de"><name>Buchname</name><isbn>123456</isbn></book>
Wie schon zu Anfang erwähnt, existieren in Xmappr zwei Möglichkeiten zur Abbildung von XML-Daten auf Java-Klassen: über Annotationen und über XML-Konfiguration.
Zunächst zu den Annotationen. Die Klasse selbst muss über die Annotation @RootElement markiert werden. Hierbei wird der Name des Einstiegsknotens angegeben. Elemente werden über die Annotation @Element und Attribute über @Attribute konfiguriert. Wenn keine direkte Korrelation über den Namen hergestellt werden kann, dann ist der Name als Parameter der Annotation anzugeben. Nachfolgendes Quellcodebeispiel mappt die obere XML-Datei auf die entsprechenden Instanzvariablen der Klasse Buch.
@RootElement(name="book")public class Buch {@Elementprivate String name;@Elementprivate String isbn;@Attribute(name="language")private String language;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}public String getLanguage() {return language;}public void setLanguage(String language) {this.language = language;}}














