1 package com.freemindcafe.serialization;
3 import java.io.BufferedReader;
4 import java.io.ByteArrayInputStream;
5 import java.io.ByteArrayOutputStream;
6 import java.io.FileNotFoundException;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.io.InputStreamReader;
10 import java.util.zip.GZIPInputStream;
11 import java.util.zip.GZIPOutputStream;
13 import javax.xml.parsers.DocumentBuilder;
14 import javax.xml.parsers.DocumentBuilderFactory;
15 import javax.xml.parsers.ParserConfigurationException;
18 import org.w3c.dom.Document;
19 import org.w3c.dom.NamedNodeMap;
20 import org.w3c.dom.Node;
21 import org.w3c.dom.NodeList;
22 import org.xml.sax.SAXException;
24 import com.thoughtworks.xstream.XStream;
25 import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider;
26 import com.thoughtworks.xstream.io.HierarchicalStreamDriver;
27 import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
28 import com.thoughtworks.xstream.io.xml.StaxDriver;
29 import com.thoughtworks.xstream.mapper.ClassAliasingMapper;
30 import com.thoughtworks.xstream.mapper.Mapper;
31 import com.thoughtworks.xstream.mapper.MapperWrapper;
35 private final String aliasConfFileClassPath;
36 private final XStream xstream;
37 private final XStream jsonxstream;
41 this.aliasConfFileClassPath =
"/com/freemindcafe/serialization/sample1/XMLAliasing.xml";
44 jsonxstream.setMode(XStream.NO_REFERENCES);
51 this.aliasConfFileClassPath = aliasConfFileClassPath;
54 jsonxstream.setMode(XStream.NO_REFERENCES);
58 public SerializationSvc(String aliasConfFileClassPath, XStream xstream, XStream jsonxstream)
60 this.aliasConfFileClassPath = aliasConfFileClassPath;
61 this.xstream = xstream;
62 this.jsonxstream = jsonxstream;
63 jsonxstream.setMode(XStream.NO_REFERENCES);
67 public void addAlias(String alias, Class klass)
69 xstream.alias(alias, klass);
70 jsonxstream.alias(alias, klass);
72 public String toXML(Object obj)
74 return xstream.toXML(obj);
77 public Object fromXML(String s)
79 return xstream.fromXML(s);
81 public String toJSON(Object obj)
83 return jsonxstream.toXML(obj);
86 public Object fromJSON(String s)
88 return jsonxstream.fromXML(s);
91 public byte[] toBytes(Object obj)
93 return this.compress(this.toXML(obj));
95 public Object fromBytes(byte[] bytes)
97 String xml = this.deCompress(bytes);
98 return this.fromXML(xml);
103 private void loadSvcAliases()
108 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
110 DocumentBuilder db = dbf.newDocumentBuilder();
111 InputStream inputStream =
SerializationSvc.class.getResourceAsStream(aliasConfFileClassPath);
112 Document dom = db.parse(inputStream);
113 NodeList nodeL = dom.getElementsByTagName(
"class");
115 for(
int i = 0; i< nodeL.getLength(); i++)
117 Node node = nodeL.item(i);
118 NamedNodeMap map = node.getAttributes();
119 Node classN = map.getNamedItem(
"className");
120 Node aliasN = map.getNamedItem(
"aliasName");
121 String className= classN.getNodeValue();
125 klass = Class.forName(className);
126 String aliasName = aliasN.getNodeValue();
127 xstream.alias(aliasName, klass);
128 jsonxstream.alias(aliasName, klass);
129 }
catch (ClassNotFoundException e) {
130 System.err.println(
"Class not found for configuring XStream's Alias : "+className);
134 }
catch (FileNotFoundException e1) {
135 System.err.println(
"Configuration File not found for configuring XStream's Alias : "+e1);
137 }
catch (SAXException e) {
138 System.err.println(
"Configuration File not parsable for configuring XStream's Alias : "+e);
139 }
catch (IOException e) {
140 System.err.println(
"Configuration File not readable for configuring XStream's Alias : "+e);
141 }
catch (ParserConfigurationException e) {
142 System.err.println(
"Configuration File not parsable because of configuration for configuring XStream's Alias : "+e);
145 public String getAliasConfFileName() {
146 return aliasConfFileClassPath;
149 public String deCompress(byte[] bytes)
153 if (bytes == null || bytes.length == 0) {
156 ByteArrayInputStream in =
new ByteArrayInputStream(bytes);
157 GZIPInputStream gzip =
new GZIPInputStream(in);
158 InputStreamReader reader =
new InputStreamReader(gzip);
159 BufferedReader bReader =
new BufferedReader(reader);
160 StringBuffer readedBuffer =
new StringBuffer();
161 String readed = null;
162 while ((readed = bReader.readLine()) != null)
164 readedBuffer.append(readed);
167 return readedBuffer.toString();
168 }
catch (IOException e)
171 throw new RuntimeException(
"Could not compress the string. "+e);
175 public byte[] compress(String str)
179 if (str == null || str.length() == 0) {
182 ByteArrayOutputStream out =
new ByteArrayOutputStream();
183 GZIPOutputStream gzip;
184 gzip =
new GZIPOutputStream(out);
185 gzip.write(str.getBytes());
187 return out.toByteArray();
188 }
catch (IOException e)
191 throw new RuntimeException(
"Could not compress the string. "+e);