Gründe warum man Objekte direkt in XML umwandeln will (oder anders herum) gibt es viele. Mit JAXB steht im Java SDK 1.6 jetzt eine besonders einfache Möglichkeit zur Verfügung.
Für die Umwandlung eines einfachen Objektes reicht bereits eine Annotation an der Klasse sowie der Aufruf des JAXB Marschallers.
Eine einfache Klasse mit der @XmlRootElement annotation:
@XmlRootElement public class Person { private String firstname; private String name; public Person() { } public String getFirstname() { return firstname; } public void setFirstname(final String firstname) { this.firstname = firstname; } public String getName() { return name; } public void setName(final String name) { this.name = name; } } |
Mit dem Marshaller wird aus einem Objekt eine XML Datei.
public class Test { public static void main(final String[] args) throws Exception { final Person person = new Person(); person.setFirstname("Max"); person.setName("Mustermann"); // JAXBContext erstellen mit final JAXBContext jc = JAXBContext.newInstance(Person.class); // Marshaller erstellen final Marshaller marshaller = jc.createMarshaller(); // person objekt nach XML wandeln und in eine Datei schreiben. marshaller.marshal(person,new File("person.xml")); } } |
Unmarshalling einer XML Datei in ein Objekt:
public class Test { public static void main(final String[] args) throws Exception { // JAXBContext erstellen mit final JAXBContext jc = JAXBContext.newInstance(Person.class); // Marshaller erstellen final Unmarshaller unmarshaller = jc.createUnmarshaller(); // XML auslesen und person Objekt befuellen final Person person = (Person) unmarshaller.unmarshal(new File("person.xml")); System.out.println(person.getFirstname()); System.out.println(person.getName()); } } |
Um Einfluss auf die Struktur des erzeugten XMLs zu nehmen bietet sich ein Blick in das Paket javax.xml.bind.annotation an. Mit Hilfe dieser Annotations kann die Struktur des erstellten XML beeinflusst werden, bzw. die Klasse kann an ein bestehendes XML angepasst werden.
Wenn große XML Dateien eingelesen werden sollen, so ist dies in den seltensten Fällen mit einer passenden Klasse erledigt. Wenn aber viele kleine Klassen erstellt werden, muss man dem JAXBContext beim erstellen sehr viele Klassen bekannt machen. Einfacher ist es in das Paket neben die Klassen für die XML Umwandlung eine Datei jaxb.index zu legen. In dieser Datei werden alle Klassen aufgeführt werden die dem JAXBContext bekannt gemacht werden sollen. Beim erzeugen des JAXBContext brauchen nun keine Klassennamen mehr übergeben werden.