XML-Serialisierung klappt nicht

Spitfire777

Bekanntes Mitglied
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:
Java:
    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
Java:
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]
 
Java:
xmlEnc.writeObject(settings);

Was ist settings? Was hast du bisher mit dem Objekt gemacht?
Java:
		Settings s = new Settings();
		s.setAutoReconnect(true); 
		s.setMainFrameMode("hallo mainframe");
		s.setStartingUpWithOS(true);

sollte zumindest
Code:
mainFrame
und
Code:
startUpWithOS
schreiben. Beim autoReconnect hat sich nichts geändert, bzw. der Defaultwert ist ja eh true! Deshalb würde auch ein
Code:
xmlEnc.writeObject(new Settings());
nicht viel Sinn machen...
 
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.
 
Bei
Java:
    public boolean isAutoReconnectEnabled() {
        return autoReconnect;
    }

könnte es Probleme geben 🙂
Probiere dort mal
Java:
    public boolean isAutoReconnect() {
        return autoReconnect;
    }

Ansonsten sollte das aber gehen:
Java:
             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]
 
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 🙂
 

Zurück
Oben