Announcement

Collapse
No announcement yet.

Beispiele zu JAXB

Collapse
This is a sticky topic.
X
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Beispiele zu JAXB

    JAXB (Java Architecture for XML Binding) ist ein Framework zur Umwandlung von Javaklassen in eine XML-Datei und umgekehrt.

    Hier ein kleines Demo, wie das funktioniert. Oftmals möchte man Einstellungen seines Programmes abspeichern und diese bei Programmstart wieder zur Verfügung stellen. Die Daten kann man in Textdateien halten oder auch die Properties Klassen nutzen. Eine weitere Möglichkeit ist es, diese in XML-Dateien zu speichern. Mit JAXB ist das schneller realisiert, als mit einer Textdatei oder Properties.

    Ab Java 1.6 ist JAXB in der EE und SE Version enthalten. Ansonsten ist ein Download hier möglich

    Hier und hier gibt es weiterführende Erklärungen.

    Üblicherweise hat man für seine Programmeinstellungen, ein Instanz einer Klasse, die die Daten vorhält. Hier bietet sich die Nutzung einer Singeltonklasse an.

    Abgesehen von den diversen Möglichkeiten eine Singeltonklasse anzulegen, enthält die Klasse den String "demoString" und den int "demoInt". Diese beiden Variablen stellen die Daten dar, die gepspeichert werden sollen.

    Code:
    public class DemoDaten implements Serializable
    {
    private static DemoDaten instance;
    private String demoString="";
    private int demoInt=200;
    
    private DemoDaten()
    {
    }
    
    public synchronized static DemoDaten getInstance()
    {
    if(instance==null)
    {
    instance=new DemoDaten();
    }
    return instance;
    }
    
    public String getDemoString()
    {
    return demoString;
    }
    
    public void setDemoString(String demoString)
    {
    this.demoString=demoString;
    }
    
    public int getDemoInt()
    {
    return demoInt;
    }
    
    public void setDemoInt(int demoInt)
    {
    this.demoInt=demoInt;
    }
    
    }
    Um eine Speicherung der Klasse als XML-Datei vorzunehmen, sind Annotationen zu verwenden.

    Zunächst können wir den Namen des Rootelementes bestimmen.
    Mit @XmlRootElement(name="programmeinstellungen") wird dieser festgelegt.

    Weiterhin muss JAXB "wissen" wie es eine Instanz unserer Klasse anlegen kann, da es sich ja um ein Singelton handelt. Mit der Annotation @XmlType(factoryMethod="getInstance") "teilen" wir JAXB mit, dass die Instanz der Klasse über die Methode "getInstance" angelegt wird.

    In der XML-Datei sollen auch nur die Daten gespeichert werden, die für die Einstellungen des Programmes wichtig sind. Die Instanz der Klasse, die in der Variablen "DemoDaten instance" ist, gehört nicht zu den Daten, die wir abspeichern wollen. Dazu kann "@XmlTransient" genutzt werden, um dieses Datum auszuschließen. Die statische Variable kann hier über dem Feld annotiert werden. ansonsten über der GET-Methode.

    Da wir sonst keine Besonderheiten haben, waren das schon alle Annotationen:

    Code:
    @XmlRootElement(name="programmeinstellungen")
    @XmlType(factoryMethod="getInstance")
    public class DemoDaten implements Serializable
    {
    @XmlTransient
    private static DemoDaten instance;
    private String demoString="";
    private int demoInt=200;
    
    private DemoDaten()
    {
    }
    
    public synchronized static DemoDaten getInstance()
    {
    if(instance==null)
    {
    instance=new DemoDaten();
    }
    return instance;
    }
    
    public String getDemoString()
    {
    return demoString;
    }
    
    public void setDemoString(String demoString)
    {
    this.demoString=demoString;
    }
    
    public int getDemoInt()
    {
    return demoInt;
    }
    
    public void setDemoInt(int demoInt)
    {
    this.demoInt=demoInt;
    }
    
    }
    Nun kann die Speicherung der Daten erfolgen. Dazu versehen wir die Klassen zunächst mit einigen Daten:

    Code:
    DemoDaten.getInstance().setDemoInt(1000);
    DemoDaten.getInstance().setDemoString("Speicherung erfolgt");
    Danach erfolgt die Speicherung unter Angabe der Klasseninstanz und des Speicherortes:

    Code:
    JAXB.marshal(DemoDaten.getInstance(),new FileOutputStream("c:\\demodaten.xml"));
    Damit ist im Wurzelverzeichnis von c:\\ die XML-Datei angelegt worden:
    Code:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <programmeinstellungen>
        <demoInt>1000</demoInt>
        <demoString>Speicherung erfolgt</demoString>
    </programmeinstellungen>
    Das einlesen der Daten ist ähnlich unkompliziert unter Angabe des Speicherortes und der Klasse:
    Code:
    JAXB.unmarshal("c:\\demodaten.xml", DemoDaten.class);
    Einfacher geht es kaum, mal ein paar Daten zu speichern. Natürlich können auch komplexere Strukturen erzeugt werden. Beispielsweise führt die Aufnahme der Variablen

    Code:
    private List<String> demoListe=new ArrayList<>();
    in die Demoklasse dazu, das die ArrayList gespeichert wird. Solange die Elemente alle serialisiert werden können, können sie auch gespeichert werden.
    Zuletzt editiert von Christian Marquardt; 01.09.2022, 08:16.
    Christian

  • #2
    Etwas mehr auch unter http://openbook.galileocomputing.de/...07_07_004.html.

    __________________
    @author Christian Ullenboom
    @url http://www.tutego.de/
    @blog http://www.tutego.de/blog/javainsel/
    Die Retrobu.de (http://retrobude.de/) freut sich auf neue alte HEIMCOMPUTER und SPIELKONSOLEN/PONGs.

    Comment

    Working...
    X