import java.io.IOException; import java.io.ObjectOutputStream; import java.io.OutputStreamWriter; import java.io.Serializable; import com.thoughtworks.xstream.XStream; class Class2 implements Serializable { int i = 3; private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); } } public class Class1 implements Serializable { String name; // problem caused by transient Class2 with custom writeObject(); works // correctly if class2 non-transient or does not have custom writeObject() transient Class2 class2; public Class1() { name = "Class1"; class2 = new Class2(); } private void writeObject(ObjectOutputStream out) throws IOException { out.writeObject(class2); out.defaultWriteObject(); } static public void main(String args[]) { try { XStream xstream = new XStream(); OutputStreamWriter writer = new OutputStreamWriter(System.out); ObjectOutputStream os = xstream.createObjectOutputStream(writer); os.writeObject(new Class1()); os.close(); } catch (IOException ex) { ex.printStackTrace(); } } }