package com.thoughtworks.acceptance; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.AttributeConverter; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.HierarchicalStreamReader; /** * @author Paul Hammant and Ian Cartwright */ public class AttributeAliasTest extends AbstractAcceptanceTest { public void testSerializationOfAttributePossibleWithAliasAndConverter() { One one = new One(); one.two = new Two(); one.id = new ID("hullo"); xstream.attributeAlias("id", ID.class, new MyAttributeConverter()); assertEquals( "\n" + " \n" + "", xstream.toXML(one)); } public void testDeSerializationOfAttributePossibleWithAliasAndConverter() { xstream.attributeAlias("id", ID.class, new MyAttributeConverter()); One one = (One) xstream.fromXML( "\n" + " \n" + ""); assertEquals(one.id.value, "hullo"); assertNotNull(one.two); } public static class One implements HasID { public ID id; public Two two; public void setID(ID id) { this.id = id; } } public static interface HasID { void setID(ID id); } public static class Two {} public static class ID { public ID(String value) { this.value = value; } public String value; } private static class MyAttributeConverter implements AttributeConverter { public boolean canConvert(Class type) { return type.equals(ID.class); } public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { writer.addAttribute("id", ((ID) source).value); } public void unmarshal(Object instance, HierarchicalStreamReader reader) { ((AttributeAliasTest.HasID) instance).setID(new ID(reader.getAttribute("id"))); } } }