Commit 8aed7ccb authored by Vladislav Kiselev's avatar Vladislav Kiselev

SerializationHelper removed

parent f3aab528
package inport;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.stream.util.StreamReaderDelegate;
import javax.xml.transform.stream.StreamResult;
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author topazh_ag
*/
public class SerializationHelper {
public String serialize(Object object) throws Exception{
StringWriter resultWriter = new StringWriter();
StreamResult result = new StreamResult( resultWriter );
XMLStreamWriter xmlStreamWriter =
XMLOutputFactory.newInstance().createXMLStreamWriter(result);
JAXBContext context = JAXBContext.newInstance(object.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(new JAXBElement(new QName(object.getClass().getSimpleName()), object.getClass(), object), xmlStreamWriter);
String res = resultWriter.toString();
return res;
}
public Object deserialize(String str, Class klass) throws Exception{
InputStream is = new ByteArrayInputStream(str.getBytes("UTF-8"));
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(is);
reader = new CamelCaseTransfomingReaderDelegate(reader, klass);
JAXBContext context = JAXBContext.newInstance(klass);
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement elem = unmarshaller.unmarshal(reader, klass);
Object object = elem.getValue();
return object;
}
//adapts to Java property naming style
private static class CamelCaseTransfomingReaderDelegate extends StreamReaderDelegate {
Class klass = null;
public CamelCaseTransfomingReaderDelegate(XMLStreamReader xsr, Class klass) {
super(xsr);
this.klass = klass;
}
@Override
public String getLocalName() {
String nodeName = super.getLocalName();
if (!nodeName.equals(klass.getSimpleName()))
{
nodeName = nodeName.substring(0, 1).toLowerCase() +
nodeName.substring(1, nodeName.length());
}
return nodeName.intern(); //NOTE: intern very important!..
}
}
}
\ No newline at end of file
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment