import junit.framework.TestCase; import com.thoughtworks.xstream.XStream; import java.util.*; public class TransientIdFieldTest extends TestCase { public static class TransientIdField { private transient String id; private String name; public TransientIdField(String id, String name) { this.id = id; this.name = name; } public String getName(){ return name; } public String getId() { if(id==null) id=""; return id; } public void setId(String id) { this.id = id; } } public static class Holder { private String name; private Map map; public Holder(String name) { this.name = name; map = new HashMap(); } public String getName() { return name; } public Map getMap() { return map; } } public void test1() throws Exception{ TransientIdFieldTest.TransientIdField transientIdField = new TransientIdFieldTest.TransientIdField("1","name"); TransientIdFieldTest.Holder holder = new TransientIdFieldTest.Holder("holder"); holder.getMap().put("1",transientIdField); XStream xStream = new XStream(); xStream.setMode(XStream.ID_REFERENCES); String xml = xStream.toXML(holder); try { TransientIdFieldTest.Holder deserializedHolder = (TransientIdFieldTest.Holder) xStream.fromXML(xml); TransientIdFieldTest.TransientIdField test = deserializedHolder.getMap().entrySet().iterator().next().getValue(); System.out.println(test.getName()); // prints null } catch (Throwable e) { e.printStackTrace(); } } }