IT Werkstatt

Dominiks IT Werkstatt! Mein Blog und Dienstleistungen über Webdesign, 3D Animationen, Java, HTML5, PHP, CSS, Blender 3D, GIMP und vieles mehr.


Von Java, XML und JAXB

Das XML ist ein beliebtes Format in der IT-Welt, um verschiedenste Informationen zwischen zwei Systemen auszutauschen. Damit das funktioniert, muss die Struktur klar definiert sein.

Man erstellt also zunächst ein sogenanntes XSD. Mit diesem Schema können wir ab JDK6 mit Bordmitteln Java-Klassen generieren lassen, mit deren Hilfe ohne viel Aufwand XMLs eingelesen und erzeugt werden können.

Java-Klassen aus einer XSD erzeugen

Mit dem Kommandozeilenbefehl

xjc <Pfad zur XSD-Datei>

werden die benötigten Java-Klassen wie auch eine ObjectFactory.java generiert (im Unterverzeichnis "generated"). Es gibt hier noch nützliche Schalter

-d "Pfad" : Verschiebt die erzeugten Dateien in das angegebene Unterverzeichnis

-p "Packagename" : Gibt den Package-Namen für die erzeugten Dateien an (und erzeugt eine entsprechende Verzeichnisstruktur)

Der Befehl

xjc -d src -p de.itwerkstatt.jaxb Test.xsd

erzeugt also im Verzeichnis "src" ein Unterverzeichnis "de", darin ist ein Verzeichnis "itwerkstatt" und darin wiederrum ein Verzeichnis "jaxb". In diesem werden dann die generierten Java-Dateien abgelegt.

XML in Java-Objekte umwandeln

Im folgenden gehen wir davon aus, dass wir in der XSD das Wurzel-Element "Test" erzeugen.

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

public class XML_to_JavaObject
{

    public static void main( String[] args )
    {
        File xml = new File( "test.xml" );
        try
        {
            JAXBContext context = JAXBContext.newInstance( Test.class );
            Unmarshaller unmarshaller = context.createUnmarshaller();
            Test test = (Test) unmarshaller.unmarshal( xml );
        }
        catch ( JAXBException ex )
        {
            //Exceptionhandling
        }
    }
}

XML aus Java-Objekten erzeugen

import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JavaObject_to_XML
{

    public static void main( String[] args )
    {
        File dest_xml = new File( "ergebnis.xml" );

        Test t = new Test();
        t.setName( "Dominik" );
        t.setNachname( "Sust" );
        try
        {
            JAXBContext context = JAXBContext.newInstance( Test.class );
            Marshaller marshaller = context.createMarshaller();

            //Ausgabe formatieren
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            //Ausgabe als Datei
            marshaller.marshal( t, dest_xml);
            //Ausgabe als Konsolenausgabe
            marshaller.marshal( t, System.out);
        }
        catch ( JAXBException ex )
        {
            //Exceptionhandling
        }
    }
}
3.gif0.gif9.gif8.gif2.gif