Mini-Howto: XML an Java-Klassen binden mit Jaxb

Mittels Jaxb lässt sich einfach eine XML-Quelle in Java-Objekte umwandeln. Nötig ist hierfür zum einen die Jaxb-Library und ein XSD.

Hat man ein XSD geschrieben (oder vielleicht auch vorliegen) ist es ein leichtes daraus die nötigen POJOs generieren zu lassen (hier benutze ich die Netbeans-eigene Kopie des xml-java-converter:

java -jar "path/to/NetBeans/ide10/modules/ext/jaxb/jaxb-xjc.jar" -d your/target/src/dir -p your.package.name path/to/your/xsd.xsd

Ist das XSD fehlerfrei wurden die POJOs generiert und in dem unter dem Parameter -d angegeben Verzeichnis abgelegt. Mit folgendem Stück Code lässt sich jetzt ein XML-Abruf in POJOs umsetzen (die rot markierten Zeilen müssen jeweils angepasst werden):

HttpURLConnection conn;
MyObject my = null;
JAXBContext jc = null;
InputStreamReader sr;

try {
jc = JAXBContext.newInstance("namespace.of.mapped.pojos");
} catch (JAXBException ex) {
System.out.println(ex.getMessage());
}

try {
//Authenticator.setDefault(this.getAuthenticator()); // Wenn nötig
conn = (HttpURLConnection) new URL(url).openConnection();
conn.addRequestProperty("Accept-language", "de"); // Beispiel & Platz für eigene Header
conn.setRequestMethod("GET"); // Oder Post, je nachdem
} catch (MalformedURLException ex) {
return null;
} catch (IOException ex) {
return null;
}

// Header im Result überspringen
int i=1;
String hKey;
while ((hKey = conn.getHeaderFieldKey(i)) != null) {
conn.getHeaderField(i);
i++;
}

try {
Unmarshaller u = jc.createUnmarshaller();
my = (MyObject) u.unmarshal(conn.getInputStream());
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
catch (JAXBException ex) {
System.out.println(ex.getMessage());
}

MyObject my ist nun eine Instanz des POJOs, dass den Rootknoten im XML entspricht. Mittels der Getter kann entsprechend auf die jeweiligen Attribute zugegriffen werden. Das ganze lässt sich vermutlich eleganter und schöner lösen (ich bin für Vorschläge dankbar!), aber es funktioniert erstaunlich gut.

Kommentar hinzufügen 21.04.2009

Einen Kommentar hinterlassen

Pflicht

Required, versteckt

Erlaubte Tags:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackback zu diesem Artikel  |  Diese Kommentare als RSS


    Kalender

    July 2010
    M T W T F S S
    « Jan    
     1234
    567891011
    12131415161718
    19202122232425
    262728293031  

    Feeds

    Meta: