Peter Barnett
Peter Barnett

Reputation: 201

Can't Serialize My Object

I'm trying to serialize this Configuration object, but for the life of me I can't get it. I've checked everywhere including StackOverflow. Any help would be greatly appreciated.

Serialization Code:

public void serialize(String outFile)
        throws IOException {
    Configuration config = new Configuration().getConfiguration();
    System.out.println(config.email);
      try
      {
         FileOutputStream outputFile =
         new FileOutputStream("/home/jason/Desktop/config.ser");
         ObjectOutputStream objectOutput = new ObjectOutputStream(outputFile);
         objectOutput.writeObject(config);
         objectOutput.close();
         outputFile.close();
      }catch(IOException i)
      {
          i.printStackTrace();
      }
      System.out.println(config);
}

public void deSerialize()
        throws FileNotFoundException, IOException, ClassNotFoundException {

    Configuration config = new Configuration().getConfiguration();
      try
      {
         FileInputStream inputFile = new FileInputStream("/home/jason/Desktop/config.ser");
         ObjectInputStream objectInput = new ObjectInputStream(inputFile);
         config = (Configuration) objectInput.readObject();
         config.setConfiguration(config);
         objectInput.close();
         inputFile.close();
      }catch(Exception e)
      {
          e.printStackTrace();
      }

      System.out.println(config);

}

And then I call it with the following code:

DataStore data = new DataStore().getInstance();
        try {
            data.deSerialize();
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

DataStore is a simple singleton, and takes no input parameters. It doesn't have any real variables, but simply employs the serialization functions.

Finally, here is my Configuration code:

public class Configuration implements Serializable{
private static final long serialVersionUID = 1388190376766023647L;
public static String email = "";
private static String ip = "";
private static String password = "";
private static String importNumber;
private static Configuration configuration;
private static int singleton = 0;
public String value_of_da_message;

public Configuration()
{}

public Configuration getConfiguration()
{
    if(singleton == 0){
        configuration = new Configuration();
        singleton++;
        return configuration;
    }

    else
        return configuration;
}

public void setConfiguration(Configuration config)
{
    configuration = config;
}

Any clue on where I'm going wrong? Thanks for the help.

Upvotes: 2

Views: 1965

Answers (1)

Thomas
Thomas

Reputation: 88707

Have a look here: Java static serialization rules?

Change your fields to be instance fields, which would better fit the singleton approach anyways.

The fields might be serialized but deserialization normally ignores static fields.

Additionally, it looks like you're reading to the temporary object:

config.setConfiguration(config);

This uses the read object twice and doesn't set the data of the singleton unless you keep that a static field (i.e. configuration in the Configuration class is the reference to the singleton and needs to be static)

Update:

Another hint: the static variable singleton might cause problems and is unneeded anyway. Just check configuration == null instead of singleton == 0.

Hint:

I try to help you with serialization in general, but in your special case you might want to use Properties instead which have built-in serialization features (.properties- and xml-files supported) and which are meant for configuration.

Upvotes: 2

Related Questions