Details
-
Type: Bug
-
Status: Closed
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: 1.3
-
Component/s: None
-
Labels:None
-
JDK version and platform:Sun 1.5.0.01 for Windows
Description
Hi,
I'm rather new to XStream. The library's great, but I still have a problem I cannot solve. I couldn't find an answer in the docs, nor in the mailing list.
I have two objects p1 and p2. p2 contains a reference to p1. If I put them both in a list and serialize the list, everything's ok. If I try to serialize them one after the other, I get duplicates.
Is this OK, and I'm missing something?
Thank you very much.
Francesco
File Person.java:
------------------------------------------
import java.io.*;
public class Person implements Serializable
{
Person(String n, int a, Person s)
public String name;
public int age;
public Person secretary;
}
------------------------------------------
File TestMultipleRefs.java
------------------------------------------
import java.util.*;
import java.io.*;
import com.thoughtworks.xstream.*;
import com.thoughtworks.xstream.io.xml.*;
public class TestMultipleRefs
{
public static void main(String[] args)
{
Person p1;
Person p2;
p1 = new Person("Alice", 50, null);
p2 = new Person("Joe", 35, p1);
ArrayList list = new ArrayList();
list.add(p1);
list.add(p2);
// Serialize
XStream xstream = new XStream(new DomDriver());
java.io.StringWriter writer = new java.io.StringWriter();
try
catch (IOException e)
{e.printStackTrace();}// Write down XML
System.out.println(writer.toString());
// Deserialize
java.io.StringReader reader = new java.io.StringReader(writer.toString());
try
{ ObjectInputStream in = xstream.createObjectInputStream(reader); // ObjectInputStream in = // new ObjectInputStream(new FileInputStream("prova.dat")); p1 = (Person)in.readObject(); p2 = (Person)in.readObject(); list = (ArrayList)in.readObject(); in.close(); }
catch (IOException e) {e.printStackTrace();}
catch (ClassNotFoundException e)
{e.printStackTrace();} Person p1List = (Person) list.get(0);
Person p2List = (Person) list.get(1);
p1.age=25;
System.out.println("Alice's age: "+p1.age);
System.out.println("Age of Joe's secretary: "+p2.secretary.age);
p1List.age = 35;
System.out.println("Alice's age: "+p1List.age);
System.out.println("Age of Joe's secretary: "+p2List.secretary.age);
}
}
A bugfix for this shall appear shortly.
thanks
-Joe