Added:
/trunk/jsonTesting/.classpath
/trunk/jsonTesting/.project
/trunk/jsonTesting/.settings
/trunk/jsonTesting/.settings/org.eclipse.jdt.core.prefs
/trunk/jsonTesting/.settings/org.maven.ide.eclipse.prefs
/trunk/jsonTesting/pom.xml
/trunk/jsonTesting/src
/trunk/jsonTesting/src/main
/trunk/jsonTesting/src/main/java
/trunk/jsonTesting/src/main/java/json
/trunk/jsonTesting/src/main/java/json/BasicJSONTest.java
/trunk/jsonTesting/src/main/java/json/FileResource.java
/trunk/jsonTesting/src/main/resources
/trunk/jsonTesting/src/main/resources/example.json
/trunk/jsonTesting/src/test
/trunk/jsonTesting/src/test/java
/trunk/jsonTesting/src/test/java/json
/trunk/jsonTesting/src/test/java/json/BasicJSONFormatTesting.java
/trunk/jsonTesting/src/test/resources
Modified:
/trunk/jsonTesting
=======================================
--- /dev/null
+++ /trunk/jsonTesting/.classpath Thu Oct 15 16:15:03 2009
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" output="target/classes" path="src/main/java"/>
+ <classpathentry excluding="**" kind="src" output="target/classes"
path="src/main/resources"/>
+ <classpathentry kind="src" output="target/test-classes"
path="src/test/java"/>
+ <classpathentry excluding="**" kind="src" output="target/test-classes"
path="src/test/resources"/>
+ <classpathentry kind="con"
path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+ <classpathentry kind="con"
path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
+ <classpathentry kind="output" path="target/classes"/>
+</classpath>
=======================================
--- /dev/null
+++ /trunk/jsonTesting/.project Thu Oct 15 16:15:03 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>jsonTesting</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.maven.ide.eclipse.maven2Builder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ <nature>org.maven.ide.eclipse.maven2Nature</nature>
+ </natures>
+</projectDescription>
=======================================
--- /dev/null
+++ /trunk/jsonTesting/.settings/org.eclipse.jdt.core.prefs Thu Oct 15
16:15:03 2009
@@ -0,0 +1,5 @@
+#Thu Oct 15 11:48:21 CDT 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.source=1.6
=======================================
--- /dev/null
+++ /trunk/jsonTesting/.settings/org.maven.ide.eclipse.prefs Thu Oct 15
16:15:03 2009
@@ -0,0 +1,9 @@
+#Thu Oct 15 11:40:48 CDT 2009
+activeProfiles=
+eclipse.preferences.version=1
+fullBuildGoals=process-test-resources
+includeModules=false
+resolveWorkspaceProjects=true
+resourceFilterGoals=process-resources resources\:testResources
+skipCompilerPlugin=true
+version=1
=======================================
--- /dev/null
+++ /trunk/jsonTesting/pom.xml Thu Oct 15 16:15:03 2009
@@ -0,0 +1,54 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>net.ddaniels</groupId>
+ <artifactId>jsonTesting</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <dependencies>
+ <dependency>
+ <groupId>com.thoughtworks.xstream</groupId>
+ <version>1.4-SNAPSHOT</version>
+ <artifactId>xstream</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jettison</groupId>
+ <artifactId>jettison</artifactId>
+ <version>1.2-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.jackson</groupId>
+ <artifactId>jackson-jaxrs</artifactId>
+ <version>1.2.1</version>
+ </dependency>
+ <!-- Gson: Java to Json conversion -->
+ <dependency>
+ <groupId>com.google.code.gson</groupId>
+ <artifactId>gson</artifactId>
+ <version>1.3</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.3.2</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.5</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
=======================================
--- /dev/null
+++ /trunk/jsonTesting/src/main/java/json/BasicJSONTest.java Thu Oct 15
16:15:03 2009
@@ -0,0 +1,19 @@
+package json;
+
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+
+import org.apache.commons.io.FileUtils;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+
+public class BasicJSONTest {
+
+ public static void main(String[] args) throws IOException,
URISyntaxException, JSONException {
+ String jsonStr = FileUtils.readFileToString(new
FileResource("/example.json"), "UTF-8");
+ JSONObject jsonObj = new JSONObject(jsonStr);
+ System.out.println("JSONObject: \n" + jsonObj.toString(2));
+ }
+
+}
=======================================
--- /dev/null
+++ /trunk/jsonTesting/src/main/java/json/FileResource.java Thu Oct 15
16:15:03 2009
@@ -0,0 +1,12 @@
+package json;
+
+import java.io.File;
+import java.net.URISyntaxException;
+
+public class FileResource extends File {
+
+ public FileResource(String resource) throws URISyntaxException {
+ super(FileResource.class.getResource(resource).toURI());
+ }
+
+}
=======================================
--- /dev/null
+++ /trunk/jsonTesting/src/main/resources/example.json Thu Oct 15 16:15:03
2009
@@ -0,0 +1,16 @@
+{"MessageContainer": {"messages":
+ [
+ {"@class":"Message", "id": 2},
+ {"@class":"Message", "id": 2},
+ {"@class":"NamedMessage",
+ "id": 2,
+ "name": "testName",
+ "idTags": [1,2,3]
+ },
+ {"@class":"NamedMessage",
+ "id": 2,
+ "name": "testName",
+ "idTags": [1,2,3]
+ }
+ ]
+}}
=======================================
--- /dev/null
+++ /trunk/jsonTesting/src/test/java/json/BasicJSONFormatTesting.java Thu
Oct 15 16:15:03 2009
@@ -0,0 +1,298 @@
+package json;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.codehaus.jackson.JsonGenerationException;
+import org.codehaus.jackson.map.JsonMappingException;
+import org.codehaus.jackson.map.ObjectMapper;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.google.gson.Gson;
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;
+import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
+
+class Message {
+ public long id = 2;
+}
+
+class NamedMessage extends Message {
+ public String name = "testName";
+ public long[] idTags = { 1L, 2L, 3L };
+}
+
+class MessageContainer {
+ public List<Message> messages;
+}
+
+class MessageManager {
+ public String managerTopic = "testTopic";
+ public Message message;
+}
+
+abstract class JSONMarshaller {
+ public abstract String toJSON(Object obj) throws Exception;
+
+ public String toString(String jsonStr) throws JSONException {
+ return new JSONObject(jsonStr).toString(2);
+ }
+}
+
+public class BasicJSONFormatTesting {
+
+ public static void main(String[] args) throws Exception {
+ BasicJSONFormatTesting jsonFormatTesting = new BasicJSONFormatTesting();
+ jsonFormatTesting.testXStream();
+ jsonFormatTesting.testGSON();
+ jsonFormatTesting.testJackson();
+ jsonFormatTesting.testXStreamXML();
+
+ }
+
+ private static JSONMarshaller jsonMarshallerXStreamJettison;
+ private static JSONMarshaller jsonMarshallerXStreamXML;
+ private static JSONMarshaller jsonMarshallerGson;
+ private static JSONMarshaller jsonMarshallerJackson;
+ private static JSONMarshaller jsonMarshallerXStreamJSONHierarchical;
+
+ @BeforeClass
+ public static void setupBeforeClass() {
+ setupXStreamJettison();
+ setupXStreamJettisonJSONHierarchical();
+ setupXStreamXML();
+ setupGson();
+ setupJackson();
+
+ }
+
+ private static void setupJackson() {
+ final ObjectMapper mapper = new ObjectMapper();
+ jsonMarshallerJackson = new JSONMarshaller() {
+ public String toJSON(Object obj) throws JsonGenerationException,
+ JsonMappingException, IOException {
+ StringWriter sw = new StringWriter();
+ mapper.writeValue(sw, obj);
+ return sw.toString();
+ }
+
+ @Override
+ public String toString() {
+ return "JacksonJSONMarshaller";
+ }
+ };
+ }
+
+ private static void setupGson() {
+ final Gson gson = new Gson();
+ jsonMarshallerGson = new JSONMarshaller() {
+ public String toJSON(Object obj) {
+ return gson.toJson(obj);
+ }
+
+ @Override
+ public String toString() {
+ return "GSONJSONMarshaller";
+ }
+ };
+ }
+
+ private static void setupXStreamJettison() {
+ final XStream xstream = new XStream(new JettisonMappedXmlDriver());
+ // XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
+
+ xstream.alias("Message", Message.class);
+ xstream.alias("NamedMessage", NamedMessage.class);
+ xstream.alias("MessageContainer", MessageContainer.class);
+ xstream.alias("MessageManager", MessageManager.class);
+
+ jsonMarshallerXStreamJettison = new JSONMarshaller() {
+ public String toJSON(Object obj) {
+ return xstream.toXML(obj);
+ }
+
+ @Override
+ public String toString() {
+ return "XStreamJettisionJSONMarshaller";
+ }
+ };
+ }
+
+ private static void setupXStreamJettisonJSONHierarchical() {
+ final XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
+
+ xstream.alias("Message", Message.class);
+ xstream.alias("NamedMessage", NamedMessage.class);
+ xstream.alias("MessageContainer", MessageContainer.class);
+ xstream.alias("MessageManager", MessageManager.class);
+
+ jsonMarshallerXStreamJSONHierarchical = new JSONMarshaller() {
+ public String toJSON(Object obj) {
+ return xstream.toXML(obj);
+ }
+
+ @Override
+ public String toString() {
+ return "XStreamJSONMarshaller";
+ }
+ };
+ }
+
+
+ private static void setupXStreamXML() {
+ // final XStream xstream = new XStream(new JettisonMappedXmlDriver());
+ final XStream xstream = new XStream();
+ // XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
+
+ xstream.alias("Message", Message.class);
+ xstream.alias("NamedMessage", NamedMessage.class);
+ xstream.alias("MessageContainer", MessageContainer.class);
+ xstream.alias("MessageManager", MessageManager.class);
+
+ jsonMarshallerXStreamXML = new JSONMarshaller() {
+ public String toJSON(Object obj) {
+ return xstream.toXML(obj);
+ }
+
+ @Override
+ public String toString() {
+ return "XStreamJettisionJSONMarshaller";
+ }
+
+ @Override
+ public String toString(String jsonStr) throws JSONException {
+ return jsonStr;
+ }
+ };
+ }
+
+ @Test
+ public void testXStreamJSONHierarchical() throws Exception {
+
+ System.out
+ .println("++++++++++ XSTREAM JSONHierarchical Serialization
+++++++++++++++");
+ runTests(jsonMarshallerXStreamJSONHierarchical);
+ }
+
+ @Test
+ public void testXStreamXML() throws Exception {
+
+ System.out
+ .println("++++++++++ XSTREAM XML Serialization +++++++++++++++");
+ runTests(jsonMarshallerXStreamXML);
+ }
+
+ /**
+ * @throws Exception
+ */
+ @Test
+ public void testXStream() throws Exception {
+
+ System.out
+ .println("++++++++++ XSTREAM JETTISON JSON Serialization
+++++++++++++++");
+ runTests(jsonMarshallerXStreamJettison);
+ }
+
+ @Test
+ public void testGSON() throws Exception {
+ System.out
+ .println("++++++++++ GSON JSON Serialization +++++++++++++++");
+ runTests(jsonMarshallerGson);
+ }
+
+ @Test
+ public void testJackson() throws Exception {
+
+ System.out
+ .println("++++++++++ Jackson JSON Serialization +++++++++++++++");
+ runTests(jsonMarshallerJackson);
+ }
+
+ private void runTests(JSONMarshaller jsonMarshaller) throws Exception {
+
+ MessageContainer msgs = null;
+ String jsonString = null;
+ String jsonPrettyPrint = null;
+ // Convert mixed list of messages to JSON
+ msgs = this.generateListOfMessages();
+ jsonString = jsonMarshaller.toJSON(msgs);
+ jsonPrettyPrint = jsonMarshaller.toString(jsonString);
+ System.out.println("== List of subclassed messages ==");
+ System.out.println(jsonPrettyPrint);
+
+ // Message manager to show a concrete field type and subclass
+ System.out.println("== MessageManager ==");
+ jsonString = jsonMarshaller.toJSON(this.generateMessageManager());
+ jsonPrettyPrint = jsonMarshaller.toString(jsonString);
+ System.out.println(jsonPrettyPrint);
+ System.out.println("== MessageManager(containing NamedMessage) ==");
+ jsonString = jsonMarshaller.toJSON(this.generateNamedMessageManager());
+ jsonPrettyPrint = jsonMarshaller.toString(jsonString);
+ System.out.println(jsonPrettyPrint);
+
+ // Convert single element message to JSON
+ msgs = this.generateSingleElementListOfMessages();
+ jsonString = jsonMarshaller.toJSON(msgs);
+ jsonPrettyPrint = jsonMarshaller.toString(jsonString);
+ System.out.println("== Single element list of messages ==");
+ System.out.println(jsonPrettyPrint);
+
+ // Convert one of each type to JSON
+ msgs = this.generateOneElementOfEachTypeListOfMessages();
+ jsonString = jsonMarshaller.toJSON(msgs);
+ jsonPrettyPrint = jsonMarshaller.toString(jsonString);
+ System.out
+ .println("== Single element of each subclass list of messages ==");
+ System.out.println(jsonPrettyPrint);
+
+ }
+
+ public MessageManager generateMessageManager() {
+
+ MessageManager mgr = new MessageManager();
+ Message m = new Message();
+ mgr.message = m;
+ return mgr;
+ }
+
+ public MessageManager generateNamedMessageManager() {
+ MessageManager mgr = new MessageManager();
+ Message m = new NamedMessage();
+ mgr.message = m;
+ return mgr;
+ }
+
+ public MessageContainer generateSingleElementListOfMessages() {
+ MessageContainer msgContainer = new MessageContainer();
+ List<Message> messages = new ArrayList<Message>();
+ messages.add(new Message());
+ msgContainer.messages = messages;
+ return msgContainer;
+ }
+
+ public MessageContainer generateOneElementOfEachTypeListOfMessages() {
+ MessageContainer msgContainer = new MessageContainer();
+ List<Message> messages = new ArrayList<Message>();
+ messages.add(new Message());
+ messages.add(new NamedMessage());
+ msgContainer.messages = messages;
+ return msgContainer;
+ }
+
+ public MessageContainer generateListOfMessages() {
+ MessageContainer msgContainer = new MessageContainer();
+ List<Message> messages = new ArrayList<Message>();
+ messages.add(new Message());
+ messages.add(new NamedMessage());
+ messages.add(new Message());
+ messages.add(new NamedMessage());
+ msgContainer.messages = messages;
+ return msgContainer;
+ }
+
+}