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