# XML-Serialisierung klappt nicht



## Spitfire777 (24. Apr 2011)

Hi,

irgendwie will bei mir die Serialisierung von Objekten nicht so recht klappen..  Das grobe Gerüst der XML-Datei wird geschrieben, der Inhalt fehlt aber.


Methode zur Serialisierung:

```
public static void write() throws IOException  {
        File outputFile = new File(CONFIG_FILE_PATH);
        if (!outputFile.exists()) outputFile.createNewFile();
        
        try {
            FileOutputStream fos = new FileOutputStream(outputFile);
            XMLEncoder xmlEnc = new XMLEncoder(new BufferedOutputStream(fos));
            xmlEnc.writeObject(settings);
            xmlEnc.close();
        }
        catch (FileNotFoundException exc) {
            exc.printStackTrace();
            throw new IOException();
        }
    }
```

Die Klasse des zu serialisierenden Objektes

```
public class Settings implements Serializable {
    private String defaultConfigFile = "XXXXXXXX_Default";
    private boolean startUpWithOS = false;
    private String lookAndFeel = "SystemLookAndFeel";
    private String mainFrameMode = "windowed";
    private boolean autoReconnect = true;
    

    public String getDefaultConfigFile() {
        return defaultConfigFile;
    }

    public void setDefaultConfigFile(String defaultConfigFile) {
        this.defaultConfigFile = defaultConfigFile;
    }

    public boolean isStartingUpWithOS() {
        return startUpWithOS;
    }

    public void setStartingUpWithOS(boolean startUpWithOS) {
        this.startUpWithOS = startUpWithOS;
    }

    public String getLookAndFeel() {
        return lookAndFeel;
    }

    public void setLookAndFeel(String lookAndFeel) {
        this.lookAndFeel = lookAndFeel;
    }
    
    public String getMainFrameMode() {
        return mainFrameMode;
    }

    public void setMainFrameMode(String mainFrameMode) {
        this.mainFrameMode = mainFrameMode;
    }

    public boolean isAutoReconnectEnabled() {
        return autoReconnect;
    }

    public void setAutoReconnect(boolean autoReconnect) {
        this.autoReconnect = autoReconnect;
    }
}
```

Der Output:

[XML]
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.6.0_20" class="java.beans.XMLDecoder">
 <object class="XXXXXXXX.Settings"/>
</java>
[/XML]


----------



## eRaaaa (24. Apr 2011)

```
xmlEnc.writeObject(settings);
```

Was ist settings? Was hast du bisher mit dem Objekt gemacht? 

```
Settings s = new Settings();
		s.setAutoReconnect(true); 
		s.setMainFrameMode("hallo mainframe");
		s.setStartingUpWithOS(true);
```

sollte zumindest 
	
	
	
	





```
mainFrame
```
 und 
	
	
	
	





```
startUpWithOS
```
 schreiben. Beim autoReconnect hat sich nichts geändert, bzw. der Defaultwert ist ja eh true! Deshalb würde auch ein 
	
	
	
	





```
xmlEnc.writeObject(new Settings());
```
 nicht viel Sinn machen...


----------



## Spitfire777 (24. Apr 2011)

Gemacht noch nichts, ich bin davon ausgegangen, dass er die Standardwerte serialisiert.
Hab wie in deinem Beispiel den Attributen nun nachträglich mal Werte zugewiesen, jedoch tut er nun nur die String-Attribute serialisieren. Die boolean-Attribute nicht.
Auch dann wenn die zugewiesenen Werte von den Standardwerten abweichen.


----------



## eRaaaa (24. Apr 2011)

Bei

```
public boolean isAutoReconnectEnabled() {
        return autoReconnect;
    }
```

könnte es Probleme geben 
Probiere dort mal

```
public boolean isAutoReconnect() {
        return autoReconnect;
    }
```

Ansonsten sollte das aber gehen:

```
XMLEncoder xmlEnc = new XMLEncoder(new BufferedOutputStream(fos));
             Settings s = new Settings();
             s.setAutoReconnect(false); 
             s.setMainFrameMode("hallo mainframe");
             s.setStartingUpWithOS(true);
             xmlEnc.writeObject(s);
             xmlEnc.close();
```
-->
[xml]
<?xml version="1.0" encoding="UTF-8"?> 
<java version="1.6.0_24" class="java.beans.XMLDecoder"> 
 <object class="Settings"> 
  <void property="autoReconnect"> 
   <boolean>false</boolean> 
  </void> 
  <void property="mainFrameMode"> 
   <string>hallo mainframe</string> 
  </void> 
  <void property="startingUpWithOS"> 
   <boolean>true</boolean> 
  </void> 
 </object> 
</java> 
[/xml]


----------



## Spitfire777 (24. Apr 2011)

Hi,

lag an mir, hab bei den boolean-Feldern immer das eingegeben, was als Standard schon drin war.
Ein Programm ist immer nur schlau wie sein Benutzer xD

Danke dir trotzdem


----------



## dattutorial (24. Apr 2011)

Schlau,wie der programmierer ^^


----------

