Mit ‘Castor’ getaggte Artikel

Castor XML

Mittwoch, 04. Juni 2008

Mit Castor XML lassen sich XML Dokumente in Java Objekte umwandeln und umgekehrt. Es handelt sich also um ein so genanntes Databinding Framework. Hierbei werden die Begriffe “marshal” und “unmarshal” benutzt, “marshal” bedeutet die Verarbeitung eines Objekts hin zu einem Stream und “unmarshal” die Gegenrichtung, die Verarbeitung eines Streams zu einem Objekt.

Hinweis: Castor bietet im allgemeinen auch ein Java/SQL Binding an, in diesem Artikel soll es aber nur um die XML Komponente von Castor gehen.

Java Klassen aus XML Schema generieren

Bevor es losgehen kann mit dem ersten Schritt, nämlich aus einer XML Schema Datei (*.xsd) die zugehörigen Java Sources von Castor generieren zu lassen, werden folgende jars benötigt..

..von http://www.castor.org/download.html direkt :

http://dist.codehaus.org/castor/1.2/castor-1.2.jar

http://dist.codehaus.org/castor/1.2/castor-1.2-xml-schema.jar

http://dist.codehaus.org/castor/1.2/castor-1.2-codegen.jar

..von Apache:

http://www.apache.org/dist/velocity/engine/1.5/

Die jars sollten im Classpath enthalten sein bzw. gleich mit angegeben werden. Mit dem folgendem Aufruf aus dem Verzeichnis, in dem sich die beispiel.xsd Datei befindet lassen sich nun die Java Klassen generieren:

java org.exolab.castor.builder.SourceGeneratorMain -i beispiel.xsd

Für die weitere Arbeit mit Castor sind zusätzlich nötig:

http://apache.4any.org/commons/logging/binaries/commons-logging-1.1.tar.gz

http://xerces.apache.org/xerces2-j/download.cgi

Und so kann dann prinzipiell mit den entstandenen Klassen gearbeitet werden..

public class Beispiel {
    public static void main(String[] args) {
        try {
            FileReader reader = new FileReader(“beispiel.xml);
            Object obj = Unmarshaller.unmarshal(Tier.class, reader);
            Tier tier = (Tier) obj;
            System.out.println(tier.getName());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MarshalException e) {
            e.printStackTrace();
        }catch (ValidationException e) {
            e.printStackTrace();
        }
    }
}

Es wird erstmal ein FileReader anhand der XML-Datei erzeugt. Mit Hilfe des FileReader und der Angabe der zur XML-Datei passenden Java Klasse, erzeugt Castor die Java Objekte und füllt diese mit den Daten aus der XML-Datei. Anschließend wird noch ein TypeCast durchgeführt und die Arbeit mit dem erzeugten Java Objekt kann beginnen.

Java Objekte zu XML

Folgender kleiner Code-Schnipsel bewirkt die Gegenrichtung (marshal).

FileWriter writer = new FileWriter("tier.xml");
Marshaller.marshal(tier, writer);
writer.close();

Es wird die Methode “marshal” aufgerufen und ihr ein File Writer mit der zu erzeugenden XML-Datei übergeben. Zusätzlich wird noch das zu verarbeitende Java Objekt (ein Obj. der Klasse Tier in diesem Fall) für den Methodenaufruf benötigt. Castor erzeugt nun automatisch die XML-Struktur.

Weitere Hinweise

Es geht selbstredend viel mehr mit Castor, wie z.B. das Erzeugen von XML-Dateien anhand einer vorgegebenen Mapping Datei, die im XML Format gehalten ist. In ihr werden, wie der Name schon verrät, die Java Objekte und ihre Attribute zu genau spezifizierten XML-Elementen zugeordnet. Damit kann man die Struktur der generierten XML-Datei selbst festlegen und muß sich nicht auf die automatisch von Castor erzeugte Struktur beschränken/verlassen.

Natürlich kann man auch, soweit eine *.xsd Datei vorhanden ist die Java Klassen von Castor generieren lassen, diese mit Werten befüllen und dann in XML-Dateien wandeln, so erhält man eine dem Schema entsprechende Struktur.

Weiterführende Dokumentation/Informationen auf http://www.castor.org/ selbst.


Sven Seiler