XStream – Java Object to XML and XML to Java Object | Code Factory


Donate : Link

Medium Blog : Link

Applications : Link

XStreamTranslator.java

package com.codeFactory;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilderFactory;

import org.apache.commons.io.IOUtils;
import org.w3c.dom.Document;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentCollectionConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentMapConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentSortedMapConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernatePersistentSortedSetConverter;
import com.thoughtworks.xstream.hibernate.converter.HibernateProxyConverter;
import com.thoughtworks.xstream.hibernate.mapper.HibernateMapper;
import com.thoughtworks.xstream.mapper.MapperWrapper;

/**
 * @author code.factory
 *
 */
public final class XStreamTranslator {
	
	private XStream xstream = null;

	private XStreamTranslator() {
		xstream = new XStream();
		xstream.ignoreUnknownElements();
	}

	/**
	 * Convert Object to a XML String
	 * 
	 * @param object
	 * @return String
	 */
	public String toXMLString(Object object) {
		return xstream.toXML(object);
	}

	/**
	 * Convert xml String to an Object
	 * 
	 * @param xml
	 * @return Object
	 */
	public Object toObject(String xml) {
		return (Object) xstream.fromXML(xml);
	}

	/**
	 * Returns an Object from File
	 * 
	 * @param xmlFile
	 * @return Object
	 * @throws IOException
	 */
	public Object toObject(File xmlFile) throws IOException {
		return xstream.fromXML(new FileReader(xmlFile));
	}

	/**
	 * Create File from the Object
	 * 
	 * @param objTobeXMLTranslated
	 * @param fileName
	 * @throws IOException
	 */
	public void toXMLFile(Object objTobeXMLTranslated, String fileName)
			throws IOException {
		FileWriter writer = new FileWriter(fileName);
		xstream.toXML(objTobeXMLTranslated, writer);
		writer.close();
	}

	/**
	 * Create File from the Object, File name is generated automatically
	 * 
	 * @param objTobeXMLTranslated
	 * @throws IOException
	 */
	public void toXMLFile(Object objTobeXMLTranslated) throws IOException {
		toXMLFile(objTobeXMLTranslated, objTobeXMLTranslated.getClass().getName() + ".xml");
	}

	/**
	 * Create Document from String
	 * 
	 * @param input
	 * @return Document
	 * @throws Exception
	 */
	public Document readFromXml(String input) throws Exception {
		try {
			return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(IOUtils.toInputStream(input));
		} catch (Exception e) {
			throw new Exception("Exception occured while converting input String into document", e);
		}
	}

	/**
	 * Create String from Object, Initialize Java Object and create XML
	 * 
	 * @param objectToWrite
	 * @return
	 */
	public String initializeAndWriteToXml(Object objectToWrite) {
		final XStream xstream = new XStream() {
			@Override
			protected MapperWrapper wrapMapper(final MapperWrapper next) {
				return new HibernateMapper(next);
			}
		};
		
		xstream.registerConverter(new HibernateProxyConverter());
		xstream.registerConverter(new HibernatePersistentCollectionConverter(xstream.getMapper()));
		xstream.registerConverter(new HibernatePersistentMapConverter(xstream.getMapper()));
		xstream.registerConverter(new HibernatePersistentSortedMapConverter(xstream.getMapper()));
		xstream.registerConverter(new HibernatePersistentSortedSetConverter(xstream.getMapper()));

		return xstream.toXML(objectToWrite);
	}

	/**
	 * Create Object from String and targeted Object
	 * 
	 * @param xmlContent
	 * @param targetObjectClass
	 * @return T
	 */
	public <T> T readFromXml(String xmlContent, Class<T> targetObjectClass) {
		return targetObjectClass.cast(xstream.fromXML(xmlContent));
	}

	/**
	 * Java main method
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String... args) throws Exception {
		String xmlString;
		Employee xmlEmployee;
		XStreamTranslator xStreamTranslator = new XStreamTranslator();
		
		xmlString = xStreamTranslator.toXMLString(new Employee());
		System.out.println(xmlString);
		
		xmlEmployee = (Employee) xStreamTranslator.toObject(xmlString);
		System.out.println(xmlEmployee);
		
		System.out.println(xStreamTranslator.toObject(new File("XmlFile.xml")));
		
		xStreamTranslator.toXMLFile(xmlEmployee, "XmlFile1.xml");
		
		xStreamTranslator.toXMLFile(xmlEmployee);
		
		System.out.println(xStreamTranslator.readFromXml(xmlString).getFirstChild().getTextContent());
		
		System.out.println(xStreamTranslator.initializeAndWriteToXml(xmlEmployee)); // new Employee()
		
		System.out.println(xStreamTranslator.readFromXml(xmlString, Employee.class));
	}
}

Employee.java

package com.codeFactory;

/**
 * @author code.factory
 *
 */
public class Employee {
	String name;

	public Employee() {
		name = "Code Factory";
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Employee [name : " + name + "]";
	}
}

XmlFile.xml

<?xml version="1.0" encoding="UTF-8"?>
<com.codeFactory.Employee>
	<name>Hello Code Factory</name>
</com.codeFactory.Employee>

Advertisement

2 thoughts on “XStream – Java Object to XML and XML to Java Object | Code Factory”

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s