package com.nominanuda.dataobject; import java.io.CharArrayWriter; import java.io.StringReader; import javax.xml.transform.sax.SAXResult; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.TransformerHandler; import org.junit.Assert; import org.junit.Test; import org.xml.sax.InputSource; import com.nominanuda.lang.InstanceFactory; import com.nominanuda.xml.SAXPipeline; import com.nominanuda.xml.XmlSerializer; public class JsonXmlTransformerTest { @Test public void test() { String json = "{a:[1,2],b:{c:{},d:true}}"; Obj o = new JsonLooseParser().parseObject(json); SAXPipeline pipe = new SAXPipeline().add( new InstanceFactory<TransformerHandler>( new SimpleJsonXmlTransformer("root"))).complete(); SAXPipeline nspipe = new SAXPipeline().add( new InstanceFactory<TransformerHandler>( new SimpleJsonXmlTransformer("urn:isbn:1", "i", "root", "_T_"))).complete(); Assert.assertEquals( "<root><a>1</a><a>2</a><b><c/><d>true</d></b></root>", toXml(o, pipe)); Assert.assertEquals( "<i:root xmlns:i=\"urn:isbn:1\"><i:a _T_=\"number\">1</i:a><i:a _T_=\"number\">2</i:a><i:b><i:c/><i:d _T_=\"bool\">true</i:d></i:b></i:root>", toXml(o, nspipe)); } private String toXml(Obj o, SAXPipeline pipe) { CharArrayWriter w = new CharArrayWriter(); pipe.build( new SAXSource(new JsonXmlReader(), new InputSource( new StringReader(o.toString()))), new SAXResult(new XmlSerializer(w))).run(); return new String(w.toCharArray()); } }