# XML-Datei schreiben - InstantiationException



## Recapture (9. Mai 2006)

Hallo zusammen,
ich möchte gerne meine Objekte in eine XML-Datei schreiben (und lesen), ich bekomme jedoch immer die Meldung:
java.lang.InstantiationException: methoden.lager
Continuing ...
java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new();
Continuing ...

Also, wieso geht das nicht so, wie ich möchte?

Und das Objekt *lager *ist einer Erweiterung von *ersatzteile*, kann java nicht anhand der übergebenen Variabeln das 'richtige' Objekt benutzen?


Ich habe mal meinen Code etwas gekürzte gepostet ...


```
[...]
public class haupt {
[...]
public static void main(String[] args) {
        lager[] ersatz_db;
        ersatz_db = new lager[20];
        ersatz_db[0] = new lager("dond3",45,"fs","sdfsf","sonfsdfsg67");

        ersatz_db[1] = new lager("asda3",55,"ewr","werw","werewrwe");

        ersatz_db[2] = new lager("tttt",55,"ewr","d "," d");
        ersatz_db[3] = new lager("tttt",55,"ewr","d "," d");
        serialize(ersatz_db);
}
[...]
    static void serialize(lager[] db){
        try{
            XMLEncoder o = new XMLEncoder(new FileOutputStream("db.ser.xml"));
            o.writeObject(db);
            o.close();
        }catch( IOException e){}
    }
}
```


```
class ersatzteile {

    String name ;
    float preis ;
    String hersteller;

    public ersatzteile(String name, float preis, String hersteller) {
        this.hersteller = hersteller;
        this.name = name;
        this.preis = preis;

    }

    public void print() {

        System.out.println("Name: " + this.name+ "\nPreise: " + this.preis +
                           "\nHersteller: " + this.hersteller);
    }
}

public class lager extends ersatzteile {


    String Art_Nr;
    String Lager_Nr;

    public lager(String name, float preis, String hersteller, String Art_Nr,
                 String Lager_Nr) {
        super(name, preis, hersteller);
        this.Art_Nr = Art_Nr;
        this.Lager_Nr = Lager_Nr;

    }

    public void print() {
        System.out.print("Lager:\nName: ");
        System.out.print(this.name);
        System.out.print("\tPreis: ");
        System.out.print(this.preis);
        System.out.print("\tHersteller: ");
        System.out.print(this.hersteller);
        System.out.print("\tArt_Nr: ");
        System.out.print(this.Art_Nr);
        System.out.print("\tLager_Nr: ");
        System.out.print(this.Lager_Nr);

    }
}
```


----------



## André Uhres (9. Mai 2006)

Allgemein: Klassennamen mit grossem Anfangsbuchstaben, Variablennamen mit kleinem Anfangsbuchstaben.
So oft wie möglich _final _einsetzten. Alle properties sind _private _.

XMLEncoder/XMLDecoder benötigt get...() und set...() Methoden für alle properties.
Der Name einer get...() oder set...() Methode besteht aus _get _ oder _set _ 
gefolgt von dem Variablennamen der property, aber diesmal mit grossem Anfangsbuchstaben.
Ausserdem wird ein Defaultkonstruktor für das zu (de)codierenden Objekt benötigt (Lager).

```
/* 
* Haupt.java 
*/ 
package methoden; 
import java.beans.*; 
import java.io.*; 
public class Haupt { 
    public static void main(final String[] args) { 
        Lager[] ersatz_db; 
        ersatz_db = new Lager[20]; 
        ersatz_db[0] = new Lager("dond3",45,"fs","sdfsf","sonfsdfsg67"); 
        ersatz_db[1] = new Lager("asda3",55,"ewr","werw","werewrwe"); 
        ersatz_db[2] = new Lager("tttt",55,"ewr","d "," d"); 
        ersatz_db[3] = new Lager("tttt",55,"ewr","d "," d"); 
        serialize(ersatz_db); 
        ersatz_db = deSerialize(); 
        for (int i = 0; i < ersatz_db.length && ersatz_db[i] != null; i++) { 
            System.out.println(ersatz_db[i]); 
        } 
    } 
    private static void serialize(final Lager[] db){ 
        try{ 
            XMLEncoder o = new XMLEncoder(new BufferedOutputStream(new FileOutputStream("db.ser.xml"))); 
            o.writeObject(db); 
            o.close(); 
        }catch( IOException e){ 
            e.printStackTrace(); 
        } 
    } 
    private static Lager[] deSerialize(){ 
        XMLDecoder d = null; 
        try { 
            d = new XMLDecoder(new BufferedInputStream(new FileInputStream("db.ser.xml"))); 
        } catch (FileNotFoundException ex) { 
            ex.printStackTrace(); 
        } 
        Object result = d.readObject(); 
        d.close(); 
        return (Lager[])result; 
    } 
}
```


```
/* 
* Lager.java 
*/ 
package methoden; 
public class Lager extends Ersatzteile { 
    private String art_Nr; 
    private String lager_Nr; 
    public Lager(){ 
        this("", 0f, "", "", ""); 
    } 
    public Lager(final String name, final float preis, final String hersteller, final String art_Nr, 
            final String lager_Nr) { 
        super(name, preis, hersteller); 
        this.art_Nr = art_Nr; 
        this.lager_Nr = lager_Nr; 
    } 
    public String getArt_Nr(){ 
        return art_Nr; 
    } 
    public void setArt_Nr(final String nr){ 
        art_Nr = nr; 
    } 
    public String getLager_Nr(){ 
        return lager_Nr; 
    } 
    public void setLager_Nr(final String nr){ 
        lager_Nr = nr; 
    } 
    public String toString() { 
        return "Lager:\n" + super.toString() + "\tArt_Nr: " + art_Nr 
                + "\tLager_Nr: " + lager_Nr; 
    } 
}
```


```
/* 
* Ersatzteile.java 
*/ 
package methoden; 
public class Ersatzteile { 
    private String name ; 
    private float preis ; 
    private String hersteller; 
    public Ersatzteile(final String name, final float preis, final String hersteller) { 
        this.hersteller = hersteller; 
        this.name = name; 
        this.preis = preis; 
    } 
    public String getName(){ 
        return name; 
    } 
    public void setName(final String str){ 
        name = str; 
    } 
    public float getPreis(){ 
        return preis; 
    } 
    public void setPreis(final float pr){ 
        preis = pr; 
    } 
    public String getHersteller(){ 
        return hersteller; 
    } 
    public void setHersteller(final String str){ 
        hersteller = str; 
    } 
    public String toString() { 
        return "Name: " + name+ "\tPreis: " + preis + 
                "\tHersteller: " + hersteller +"\t"; 
    } 
}
```


----------



## Recapture (9. Mai 2006)

*erstmal vielen Dank, deine Antwort hat mir sehr geholfen !* [schild=1 fontcolor=000000 shadowcolor=C0C0C0 shieldshadow=1]super Forum[/schild]

Fuktioniert nun alles !

Daniel


----------

