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
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