Coś musiałeś namieszać. Zrobiłem mały teścik i śmiga jak należy:
Data.java:
import java.io.Serializable;
public class Data implements Serializable {
private String a;
private String b;
public Data(String a, String b) {
this.a = a;
this.b = b;
}
@Override
public String toString() {
return "Data{" + "a=" + a + ", b=" + b + '}';
}
}
ObjectWrapper.java:
import java.io.Serializable;
public class ObjectWrapper implements Serializable {
private Object object;
public ObjectWrapper(Object object) {
this.object = object;
}
public Object getObject() {
return object;
}
@Override
public String toString() {
return "ObjectWrapper{" + "object=" + object + '}';
}
}
Test.java:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class Test {
public static void main(String[] args) throws Exception {
String fileName = "serialize-test.bin";
Data test1 = new Data("Ala", "Kot");
Data test2 = new Data("Foo", "Bar");
ObjectWrapper ow = new ObjectWrapper(test2);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fileName));
oos.writeObject(test1);
oos.writeObject(ow);
oos.close();
System.out.println("Zapis - dane: "+ test1 +"; wrapper: "+ ow);
ObjectInputStream iis = new ObjectInputStream(new FileInputStream(fileName));
Data readTest1 = (Data) iis.readObject();
ObjectWrapper readOw = (ObjectWrapper) iis.readObject();
iis.close();
System.out.println("Odczyt - dane: "+ readTest1 +"; wrapper: "+ readOw);
}
}
W wyniku dostaje:
Zapis - dane: Data{a=Ala, b=Kot}; wrapper: ObjectWrapper{object=Data{a=Foo, b=Bar}}
Odczyt - dane: Data{a=Ala, b=Kot}; wrapper: ObjectWrapper{object=Data{a=Foo, b=Bar}}
Edit:
Aha, do serializacji - nawet dla pól prywatnych - settery i gettery nie są konieczne.
I druga kwestia - musisz pamiętać żeby po drugiej stronie (bo przecież wysyłasz po sieci) mieć definicje wszystkich przesyłanych klas. Czyli w najprostszym przypadku ten sam jar
po obu stronach.