View Javadoc
1 package com.thoughtworks.xstream; 2 3 import com.thoughtworks.xstream.alias.DefaultClassMapper; 4 import com.thoughtworks.xstream.converters.Converter; 5 import com.thoughtworks.xstream.converters.ConverterLookup; 6 import com.thoughtworks.xstream.converters.basic.*; 7 import com.thoughtworks.xstream.converters.collections.ArrayConverter; 8 import com.thoughtworks.xstream.converters.collections.CollectionConverter; 9 import com.thoughtworks.xstream.converters.collections.MapConverter; 10 import com.thoughtworks.xstream.converters.composite.ObjectWithFieldsConverter; 11 import com.thoughtworks.xstream.converters.lookup.DefaultConverterLookup; 12 import com.thoughtworks.xstream.objecttree.ObjectTree; 13 import com.thoughtworks.xstream.objecttree.reflection.ObjectFactory; 14 import com.thoughtworks.xstream.objecttree.reflection.ReflectionObjectGraph; 15 import com.thoughtworks.xstream.objecttree.reflection.SunReflectionObjectFactory; 16 import com.thoughtworks.xstream.xml.XMLReader; 17 import com.thoughtworks.xstream.xml.XMLReaderDriver; 18 import com.thoughtworks.xstream.xml.XMLWriter; 19 import com.thoughtworks.xstream.xml.dom.DomXMLReaderDriver; 20 import com.thoughtworks.xstream.xml.text.PrettyPrintXMLWriter; 21 22 import java.io.StringWriter; 23 import java.io.Writer; 24 import java.util.*; 25 26 public class XStream { 27 28 private DefaultClassMapper classMapper = new DefaultClassMapper(); 29 private ConverterLookup converterLookup = new DefaultConverterLookup(); 30 private XMLReaderDriver xmlReaderDriver = new DomXMLReaderDriver(); 31 32 public XStream() { 33 alias("int", Integer.class); 34 alias("float", Float.class); 35 alias("double", Double.class); 36 alias("long", Long.class); 37 alias("short", Short.class); 38 alias("char", Character.class); 39 alias("byte", Byte.class); 40 alias("boolean", Boolean.class); 41 alias("number", Number.class); 42 alias("object", Object.class); 43 44 alias("string-buffer", StringBuffer.class); 45 alias("string", String.class); 46 alias("java-class", Class.class); 47 alias("date", Date.class); 48 49 alias("map", Map.class, HashMap.class); 50 alias("list", List.class, ArrayList.class); 51 alias("set", Set.class, HashSet.class); 52 53 alias("linked-list", LinkedList.class); 54 alias("tree-map", TreeMap.class); 55 alias("tree-set", TreeSet.class); 56 57 registerConverter(new ObjectWithFieldsConverter(classMapper)); 58 59 registerConverter(new IntConverter()); 60 registerConverter(new FloatConverter()); 61 registerConverter(new DoubleConverter()); 62 registerConverter(new LongConverter()); 63 registerConverter(new ShortConverter()); 64 registerConverter(new CharConverter()); 65 registerConverter(new BooleanConverter()); 66 registerConverter(new ByteConverter()); 67 68 registerConverter(new StringConverter()); 69 registerConverter(new StringBufferConverter()); 70 registerConverter(new DateConverter()); 71 registerConverter(new JavaClassConverter()); 72 73 registerConverter(new ArrayConverter(classMapper)); 74 registerConverter(new CollectionConverter(classMapper)); 75 registerConverter(new MapConverter(classMapper)); 76 77 } 78 79 public void alias(String elementName, Class type, Class defaultImplementation) { 80 classMapper.alias(elementName, type, defaultImplementation); 81 } 82 83 public void alias(String elementName, Class type) { 84 alias(elementName, type, type); 85 } 86 87 public String toXML(Object obj) { 88 Writer stringWriter = new StringWriter(); 89 XMLWriter xmlWriter = new PrettyPrintXMLWriter(stringWriter); 90 toXML(obj, xmlWriter); 91 return stringWriter.toString(); 92 } 93 94 public void toXML(Object obj, XMLWriter xmlWriter) { 95 ObjectFactory objectFactory = new SunReflectionObjectFactory(); 96 ObjectTree objectGraph = new ReflectionObjectGraph(obj, objectFactory); 97 Converter rootConverter = converterLookup.lookupConverterForType(obj.getClass()); 98 xmlWriter.startElement(classMapper.lookupName(obj.getClass())); 99 rootConverter.toXML(objectGraph, xmlWriter, converterLookup); 100 xmlWriter.endElement(); 101 } 102 103 public Object fromXML(String xml) { 104 return fromXML(xmlReaderDriver.createReader(xml)); 105 } 106 107 public Object fromXML(XMLReader xmlReader) { 108 Class type = classMapper.lookupType(xmlReader.name()); 109 ObjectFactory objectFactory = new SunReflectionObjectFactory(); 110 ObjectTree objectGraph = new ReflectionObjectGraph(type, objectFactory); 111 Converter rootConverter = converterLookup.lookupConverterForType(type); 112 rootConverter.fromXML(objectGraph, xmlReader, converterLookup, type); 113 return objectGraph.get(); 114 } 115 116 public void registerConverter(Converter converter) { 117 converterLookup.registerConverter(converter); 118 } 119 120 }

This page was automatically generated by Maven