home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  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 = (Fuhrparkunmarshaller.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();
    }
  }

}