| home | suche | kontakt/johner | institut | hinweise studierende | tech-docs | blog | mindmailer |
![]() |
Beispiel
Das vollständige Beispiel können Sie sich als Eclipse-Projekt herunterladen.
Fuhrpark
package johner.java2xml.dateien;
import java.util.Collection;
import java.util.Vector;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Fuhrpark {
private String name;
//Diese Annotation ist wichtig,
//weil sonst die Fahrzeuge nicht serialisiert werden
@XmlElement(required = true)
private Collection<Fahrzeug> fahrzeuge = new Vector<Fahrzeug>();
public Collection<Fahrzeug> getFahrzeuge() {
return fahrzeuge;
}
public void addFahrzeug(Fahrzeug fahrzeug) {
fahrzeuge.add(fahrzeug);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Fahrzeug
package johner.java2xml.dateien;
import javax.xml.bind.annotation.XmlType;
@XmlType
public class Fahrzeug {
public enum FahrzeugTyp {kombi, sport, limousine};
private FahrzeugTyp fahrzeugtyp;
private String typ;
private int ps;
private String kennzeichen;
public Fahrzeug() {
}
public Fahrzeug(int ps, String typ) {
this.ps = ps;
this.typ = typ;
}
public int getPs() {
return ps;
}
public void setPs(int ps) {
this.ps = ps;
}
public String getTyp() {
return typ;
}
public void setTyp(String typ) {
this.typ = typ;
}
private String getKennzeichen() {
return kennzeichen;
}
private void setKennzeichen(String kennzeichen) {
this.kennzeichen = kennzeichen;
}
public FahrzeugTyp getFahrzeugtyp() {
return fahrzeugtyp;
}
public void setFahrzeugtyp(FahrzeugTyp fahrzeugtyp) {
this.fahrzeugtyp = fahrzeugtyp;
}
}
Marshalling
package johner.java2xml;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.PropertyException;
import johner.xsd2java.generated.*;
public class Marshall {
public static void main(String[] args) {
try {
/* Folgende Änderungen sind notwendig, um mit den generierten, statt den Original-Java-Dateien zu arbeiten
* 1. Klassen können nur mit Default-Konstruktor genutzt werden (sonst müsste der hinzugefügt werden)
* 2. Der generierten Klasse Fuhrpark fehlte die Methode addFahrzeug
* 3. Der generierten Klasse Fuhrpark fehlte die Annotation @XmlRootElement
* 4. In der Zeile JAXBContext ... muss das richtige Package genutzt werden
*/
Fahrzeug fahrzeug1 = new Fahrzeug();
fahrzeug1.setFahrzeugtyp(FahrzeugTyp.KOMBI);
fahrzeug1.setPs(12);
fahrzeug1.setTyp("X3");
Fahrzeug fahrzeug2 = new Fahrzeug();
fahrzeug2.setFahrzeugtyp(FahrzeugTyp.LIMOUSINE);
fahrzeug2.setPs(120);
fahrzeug2.setTyp("A18");
Fuhrpark fuhrpark = new Fuhrpark();
fuhrpark.setName("Ines Fuhrpark");
fuhrpark.addFahrzeug(fahrzeug1);
fuhrpark.addFahrzeug(fahrzeug2);
JAXBContext jaxbContext = JAXBContext.newInstance("johner.xsd2java.generated");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(fuhrpark, System.out);
} catch (PropertyException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
Unmarshalling
package johner.java2xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Collection;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import johner.java2xml.dateien.Fahrzeug;
import johner.java2xml.dateien.Fuhrpark;
public class Unmarshall {
public static void main(String[] args) {
try {
//Unmarshalling
JAXBContext jaxbContext = JAXBContext.newInstance("johner.java2xml.dateien");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
Fuhrpark fuhrpark = (Fuhrpark) unmarshaller.unmarshal(
new FileInputStream("./src/johner/java2xml/dateien/input.xml"));
//Ausgabe von Fuhrpark und Fahrzeugen
System.out.println("Der Fuhrpark heißt: " + fuhrpark.getName());
Collection<Fahrzeug> fahrzeuge = fuhrpark.getFahrzeuge();
Fahrzeug fahrzeug = fahrzeuge.iterator().next();
System.out.println("Das Fahrzeug hat " + fahrzeug.getPs() + " und ist ein " + fahrzeug.getTyp());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
