package br.com.caelum.vraptor.serialization.xstream; import br.com.caelum.vraptor.serialization.ProxyInitializer; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; public final class ProxyConverter implements Converter { private final ProxyInitializer initializer; private final XStream xstream; public ProxyConverter(ProxyInitializer initializer, XStream xstream) { this.initializer = initializer; this.xstream = xstream; } public boolean canConvert(Class clazz) { return initializer.isProxy(clazz); } public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { throw new AssertionError(); } public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { Converter converter = xstream.getConverterLookup().lookupConverterForType(initializer.getActualClass(value)); initializer.initialize(value); converter.marshal(value, writer, context); } }