You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by am...@apache.org on 2012/08/24 08:34:33 UTC

svn commit: r1376838 [2/2] - in /axis/axis2/java/core/trunk/modules/json: src/org/apache/axis2/json/impl/ src/org/apache/axis2/json/impl/rpc/ src/org/apache/axis2/json/impl/utils/ test-resources/custom_schema/ test/org/apache/axis2/json/impl/

Modified: axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/JsonUtils.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/JsonUtils.java?rev=1376838&r1=1376837&r2=1376838&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/JsonUtils.java (original)
+++ axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/JsonUtils.java Fri Aug 24 06:34:32 2012
@@ -31,19 +31,16 @@ import java.lang.reflect.Method;
 
 public class JsonUtils {
 
-    public static Object invokeServiceClass(InputStream inputStream ,
+    public static Object invokeServiceClass(JsonReader jsonReader,
                                             Object service,
                                             Method operation ,
                                             Class[] paramClasses ,
-                                            int paramCount , String charSetEncoding ) throws InvocationTargetException,
+                                            int paramCount ) throws InvocationTargetException,
             IllegalAccessException, IOException  {
 
         Object[] methodParam = new Object[paramCount];
         Gson gson = new Gson();
         String[] argNames = new String[paramCount];
-        JsonReader jsonReader = null;
-
-        jsonReader = new JsonReader(new InputStreamReader(inputStream,charSetEncoding));
 
         if( ! jsonReader.isLenient()){
             jsonReader.setLenient(true);

Added: axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNode.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNode.java?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNode.java (added)
+++ axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNode.java Fri Aug 24 06:34:32 2012
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.json.impl.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class XmlNode {
+
+    private String name;
+    private boolean isAttribute;
+    private boolean isArray;
+    private List<XmlNode> childrenList = new ArrayList<XmlNode>();
+    private String valueType;
+    private String namespaceUri;
+
+    public XmlNode(String name,String namespaceUri, boolean attribute, boolean array , String valueType) {
+        this.name = name;
+        this.namespaceUri = namespaceUri;
+        isAttribute = attribute;
+        isArray = array;
+        this.valueType = valueType;
+    }
+
+
+    public void addChildtoList(XmlNode child) {
+        childrenList.add(child);
+    }
+
+
+    public String getName() {
+        return name;
+    }
+
+    public boolean isAttribute() {
+        return isAttribute;
+    }
+
+    public boolean isArray() {
+        return isArray;
+    }
+
+    public List<XmlNode> getChildrenList() {
+        return childrenList;
+    }
+
+    public String getValueType() {
+        return valueType;
+    }
+
+    public String getNamespaceUri() {
+        return namespaceUri;
+    }
+}

Added: axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNodeGenerator.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNodeGenerator.java?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNodeGenerator.java (added)
+++ axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/impl/utils/XmlNodeGenerator.java Fri Aug 24 06:34:32 2012
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.json.impl.utils;
+
+
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaComplexType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaObjectCollection;
+import org.apache.ws.commons.schema.XmlSchemaParticle;
+import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaSimpleType;
+import org.apache.ws.commons.schema.XmlSchemaType;
+
+import javax.xml.namespace.QName;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+public class XmlNodeGenerator {
+
+    List<XmlSchema> xmlSchemaList;
+
+    QName elementQname;
+
+    private XmlNode mainXmlNode;
+
+    Queue<JsonObject> queue = new LinkedList<JsonObject>();
+
+    public XmlNodeGenerator(List<XmlSchema> xmlSchemaList, QName elementQname) {
+        this.xmlSchemaList = xmlSchemaList;
+        this.elementQname = elementQname;
+    }
+
+    public XmlNodeGenerator() {
+    }
+
+    private void processSchemaList() {
+        // get the response schema and find the type then process.
+        XmlSchema responseSchema = getXmlSchema(elementQname);
+        XmlSchemaElement methodElement = responseSchema.getElementByName(elementQname.getLocalPart());
+        QName methodSchemaTypeName = methodElement.getSchemaTypeName();
+        mainXmlNode = new XmlNode(elementQname.getLocalPart(), elementQname.getNamespaceURI() , false, (methodElement.getMaxOccurs() == 1 ? false : true) , "");
+        XmlSchemaParticle particle = ((XmlSchemaComplexType) methodElement.getSchemaType()).getParticle();
+        XmlSchemaSequence sequence = (XmlSchemaSequence) particle;
+        XmlSchemaObjectCollection xmlSchemaObjectCollection = sequence.getItems();
+
+        Iterator iterator = xmlSchemaObjectCollection.getIterator();
+        while (iterator.hasNext()) {
+            Object nextEle = iterator.next();
+            if (nextEle instanceof XmlSchemaElement) {
+                XmlSchemaElement innerElement = ((XmlSchemaElement) nextEle);   // todo add to xml node
+                XmlSchemaType innerEleType = innerElement.getSchemaType();
+                if (innerEleType == null) {
+                    processSchemaTypeName(innerElement, mainXmlNode);
+                } else if (innerEleType instanceof XmlSchemaComplexType) {
+                    processComplexType(innerElement , mainXmlNode);
+                } else if (innerEleType instanceof XmlSchemaSimpleType) {
+                    processSimpleType(innerElement , mainXmlNode);
+                }
+            }
+        }
+
+/*        XmlSchemaElement argElement = (XmlSchemaElement) xmlSchemaObjectCollection.getItem(0);
+        XmlSchemaType schemaType = argElement.getSchemaType();
+        QName argQname = argElement.getQName();
+        QName schemaTypeName = argElement.getSchemaTypeName();
+        XmlNode temp;
+        if (argQname == null) {
+            temp = new XmlNode(argElement.getName(),elementQname.getNamespaceURI(), false, (argElement.getMaxOccurs() == 1 ? false : true) ,schemaTypeName.getLocalPart());
+        } else {
+            temp = new XmlNode(argQname.getLocalPart(),argQname.getNamespaceURI(), false, (argElement.getMaxOccurs() == 1 ? false : true) ,schemaTypeName.getLocalPart());
+
+        }
+        mainXmlNode.addChildtoList(temp);
+        String pref = schemaTypeName.getPrefix();
+        if (("xs").equals(pref)) {
+        } else {
+            XmlSchema tempXmlSchema = getXmlSchema(schemaTypeName);
+            processXmlSchema(tempXmlSchema, schemaTypeName,temp);
+        }*/
+    }
+
+    private XmlSchema getXmlSchema(QName qName) {
+        for (XmlSchema xmlSchema : xmlSchemaList) {
+            if (xmlSchema.getTargetNamespace().equals(qName.getNamespaceURI())) {
+                return xmlSchema;
+            }
+        }
+        return null;
+    }
+
+    private void processSchemaTypeName(XmlSchemaElement element, XmlNode parentNode) {
+        QName schemaTypeName = element.getSchemaTypeName();
+        QName qName = element.getQName();
+        String pref = schemaTypeName.getPrefix();
+        XmlNode temp;
+        if (qName == null) {
+            temp = new XmlNode(element.getName(), parentNode.getNamespaceUri(), false, (element.getMaxOccurs() == 1 ? false : true), schemaTypeName.getLocalPart());
+
+        } else {
+            temp = new XmlNode(qName.getLocalPart(), qName.getNamespaceURI(), false, (element.getMaxOccurs() == 1 ? false : true), schemaTypeName.getLocalPart());
+        }
+        parentNode.addChildtoList(temp);
+        if (("xs").equals(pref)) {
+        } else {
+            XmlSchema tempXmlSchema = getXmlSchema(schemaTypeName);
+            processXmlSchema(tempXmlSchema, schemaTypeName, temp);
+        }
+    }
+
+    private void processXmlSchema(XmlSchema schema, QName elementQName, XmlNode xmlNode) {
+        XmlSchemaElement element = schema.getElementByName(elementQName);
+        if (element != null) {
+            XmlNode temp = new XmlNode(elementQName.getLocalPart(), elementQName.getNamespaceURI(), false, (element.getMaxOccurs() == 1 ? false : true) , element.getSchemaTypeName().getLocalPart());
+            xmlNode.addChildtoList(temp);
+        } else {
+            XmlSchemaObjectCollection schemaObjectCollection = schema.getItems();
+            if (schemaObjectCollection.getCount() != 0) {
+                Iterator schemaObjIterator = schemaObjectCollection.getIterator();
+                while (schemaObjIterator.hasNext()) {
+                    Object next = schemaObjIterator.next();
+                    if (next instanceof XmlSchemaComplexType) {
+                        XmlSchemaComplexType comtype = (XmlSchemaComplexType) next;
+                        if (elementQName.getLocalPart().equals(comtype.getName())) {
+                            XmlSchemaParticle particle = comtype.getParticle();
+                            if (particle instanceof XmlSchemaSequence) {
+                                XmlSchemaSequence schemaSequence = (XmlSchemaSequence) particle;
+                                XmlSchemaObjectCollection InnerSchemaObjectCollection = schemaSequence.getItems();
+                                Iterator iterator = InnerSchemaObjectCollection.getIterator();
+                                while (iterator.hasNext()) {
+                                    Object nextEle = iterator.next();
+                                    if (nextEle instanceof XmlSchemaElement) {
+                                        XmlSchemaElement innerElement = ((XmlSchemaElement) nextEle);   // todo add to xml node
+                                        XmlSchemaType innerEleType = innerElement.getSchemaType();
+                                        if (innerEleType == null) {
+                                            processSchemaTypeName(innerElement, xmlNode);
+                                        } else if (innerEleType instanceof XmlSchemaComplexType) {
+                                            processComplexType(innerElement , xmlNode);
+                                        } else if (innerEleType instanceof XmlSchemaSimpleType) {
+                                            processSimpleType(innerElement , xmlNode);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    } else {
+                        // process simpletype
+                    }
+                }
+            }
+        }
+    }
+
+    private void generateQueue(XmlNode node) {
+        if (node.isArray()) {
+            if (node.getChildrenList().size() > 0) {
+                queue.add(new JsonObject(node.getName(), JSONType.NESTED_ARRAY, node.getValueType() , node.getNamespaceUri()));
+                processXmlNodeChildren(node.getChildrenList());
+            } else {
+                queue.add(new JsonObject(node.getName(), JSONType.ARRAY , node.getValueType() , node.getNamespaceUri()));
+            }
+        } else {
+            if (node.getChildrenList().size() > 0) {
+                queue.add(new JsonObject(node.getName(), JSONType.NESTED_OBJECT, node.getValueType() , node.getNamespaceUri()));
+                processXmlNodeChildren(node.getChildrenList());
+            } else {
+                queue.add(new JsonObject(node.getName(), JSONType.OBJECT , node.getValueType() , node.getNamespaceUri()));
+            }
+        }
+    }
+
+    private void processComplexType(XmlSchemaElement xmlSchemaElement , XmlNode parentNode) {
+        QName schemaTypeName = xmlSchemaElement.getSchemaTypeName();
+        QName qName = xmlSchemaElement.getQName();
+        XmlNode temp = new XmlNode(qName.getLocalPart(), qName.getNamespaceURI(), false, (xmlSchemaElement.getMaxOccurs() == 1 ? false : true) , schemaTypeName.getLocalPart());
+        parentNode.addChildtoList(temp);
+        XmlSchemaSequence schemaSequence;
+        XmlSchemaParticle particle = ((XmlSchemaComplexType)xmlSchemaElement.getSchemaType()).getParticle();
+        if (particle instanceof XmlSchemaSequence) {
+            schemaSequence = (XmlSchemaSequence) particle;
+            XmlSchemaObjectCollection schemaObjectCollection = schemaSequence.getItems();
+            Iterator iterator = schemaObjectCollection.getIterator();
+            while (iterator.hasNext()) {
+                Object element = iterator.next();
+                if (element instanceof XmlSchemaElement) {
+                    XmlSchemaElement innerElement = ((XmlSchemaElement) element);
+                    XmlSchemaType innerEleType = innerElement.getSchemaType();
+                    if (innerEleType instanceof XmlSchemaComplexType) {
+                        processComplexType(innerElement , temp);
+                    } else if(innerEleType instanceof XmlSchemaSimpleType){
+                        processSimpleType(innerElement , temp);
+                    }
+                }
+            }
+        }
+    }
+
+    private void processSimpleType(XmlSchemaElement xmlSchemaElement , XmlNode parentNode) {
+        QName schemaTypeName= xmlSchemaElement.getSchemaTypeName();
+        QName qName = xmlSchemaElement.getQName();
+        XmlNode temp = new XmlNode(qName.getLocalPart(), qName.getNamespaceURI(), false, (xmlSchemaElement.getMaxOccurs() == 1 ? false : true) , schemaTypeName.getLocalPart());
+        parentNode.addChildtoList(temp);
+    }
+
+    private void processXmlNodeChildren(List<XmlNode> childrenNodes) {
+        for (int i = 0; i < childrenNodes.size(); i++) {
+            generateQueue(childrenNodes.get(i));
+        }
+    }
+
+    public XmlNode getMainXmlNode() {
+        if (mainXmlNode == null) {
+            processSchemaList();
+        }
+        return mainXmlNode;
+    }
+
+    public Queue<JsonObject> getQueue(XmlNode node) {
+        generateQueue(node);
+        return queue;
+    }
+
+}

Added: axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_1.xsd
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_1.xsd?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_1.xsd (added)
+++ axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_1.xsd Fri Aug 24 06:34:32 2012
@@ -0,0 +1,44 @@
+<?xml version="1.0"?>
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements. See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership. The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License. You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied. See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+targetNamespace="http://www.w3schools.com"
+xmlns="http://www.w3schools.com"
+elementFormDefault="qualified">
+
+    <xs:element name="response">
+        <xs:complexType>
+            <xs:sequence>
+                <xs:element name="return" type="Person"/>
+            </xs:sequence>
+        </xs:complexType>
+    </xs:element>
+
+    <xs:complexType name="Person">
+        <xs:sequence>
+            <xs:element name="name" type="xs:string"/>
+            <xs:element name="age" type="xs:string"/>
+            <xs:element name="gender" type="xs:string"/>
+        </xs:sequence>
+    </xs:complexType>
+
+</xs:schema>
\ No newline at end of file

Added: axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamReaderTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamReaderTest.java?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamReaderTest.java (added)
+++ axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamReaderTest.java Fri Aug 24 06:34:32 2012
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.json.impl;
+
+import com.google.gson.stream.JsonReader;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+import java.util.List;
+
+public class GsonXMLStreamReaderTest {
+    
+    
+    @Test
+    public void testGsonXMLStreamReader() throws Exception {
+        String jsonString = "{\"response\":{\"return\":{\"name\":\"kate\",\"age\":\"35\",\"gender\":\"female\"}}}";
+        String xmlString = "<response xmlns=\"http://www.w3schools.com\"><return><name>kate</name><age>35</age><gender>female</gender></return></response>";
+        InputStream inputStream = new ByteArrayInputStream(jsonString.getBytes());
+        JsonReader jsonReader = new JsonReader(new InputStreamReader(inputStream , "UTF-8"));
+        String fileName = "test-resources/custom_schema/testSchema_1.xsd";
+        InputStream is = new FileInputStream(fileName);
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        XmlSchema schema = schemaCol.read(new StreamSource(is), null);
+        List<XmlSchema> schemaList = new ArrayList<XmlSchema>();
+        schemaList.add(schema);
+        QName elementQName = new QName("http://www.w3schools.com", "response");
+        ConfigurationContext configCtxt = new ConfigurationContext(new AxisConfiguration());
+        GsonXMLStreamReader gsonXMLStreamReader = new GsonXMLStreamReader(jsonReader);
+        gsonXMLStreamReader.initXmlStreamReader(elementQName , schemaList , configCtxt);
+        StAXOMBuilder stAXOMBuilder = new StAXOMBuilder(gsonXMLStreamReader);
+        OMElement omElement = stAXOMBuilder.getDocumentElement();
+        String actual = omElement.toString();
+        inputStream.close();
+        is.close();
+        Assert.assertEquals(xmlString , actual);
+
+    }
+}

Added: axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamWriterTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamWriterTest.java?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamWriterTest.java (added)
+++ axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/GsonXMLStreamWriterTest.java Fri Aug 24 06:34:32 2012
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.json.impl;
+
+import com.google.gson.stream.JsonWriter;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class GsonXMLStreamWriterTest {
+    private String jsonString;
+
+    @Test
+    public void testGsonXMLStreamWriter() throws Exception {
+        jsonString = "{\"response\":{\"return\":{\"name\":\"kate\",\"age\":\"35\",\"gender\":\"female\"}}}";
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        OutputStreamWriter outputStreamWriter = new OutputStreamWriter(baos, "UTF-8");
+        JsonWriter jsonWriter = new JsonWriter(outputStreamWriter);
+        String fileName = "test-resources/custom_schema/testSchema_1.xsd";
+        InputStream is = new FileInputStream(fileName);
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        XmlSchema schema = schemaCol.read(new StreamSource(is), null);
+        List<XmlSchema> schemaList = new ArrayList<XmlSchema>();
+        schemaList.add(schema);
+        QName elementQName = new QName("http://www.w3schools.com", "response");
+        ConfigurationContext configCtxt = new ConfigurationContext(new AxisConfiguration());
+
+        GsonXMLStreamWriter gsonXMLStreamWriter = new GsonXMLStreamWriter(jsonWriter, elementQName, schemaList, configCtxt);
+        OMElement omElement = getResponseOMElement();
+        gsonXMLStreamWriter.writeStartDocument();
+        omElement.serialize(gsonXMLStreamWriter);
+        gsonXMLStreamWriter.writeEndDocument();
+
+        String actualString = baos.toString();
+        outputStreamWriter.close();
+        Assert.assertEquals(jsonString, actualString);
+    }
+
+
+    private OMElement getResponseOMElement() {
+        OMFactory omFactory = OMAbstractFactory.getOMFactory();
+        OMNamespace ns = omFactory.createOMNamespace("", "");
+
+        OMElement response = omFactory.createOMElement("response", ns);
+        OMElement ret = omFactory.createOMElement("return", ns);
+        OMElement name = omFactory.createOMElement("name", ns);
+        name.setText("kate");
+        OMElement age = omFactory.createOMElement("age", ns);
+        age.setText("35");
+        OMElement gender = omFactory.createOMElement("gender", ns);
+        gender.setText("female");
+        ret.addChild(name);
+        ret.addChild(age);
+        ret.addChild(gender);
+        response.addChild(ret);
+        return response;
+    }
+}

Added: axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonBuilderTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonBuilderTest.java?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonBuilderTest.java (added)
+++ axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonBuilderTest.java Fri Aug 24 06:34:32 2012
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.json.impl;
+
+import com.google.gson.stream.JsonReader;
+import org.apache.axis2.Constants;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.json.impl.utils.JsonConstant;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+public class JsonBuilderTest {
+
+    @Test
+    public void testProcessDocument() throws Exception {
+        MessageContext messageContext = new MessageContext();
+        String contentType = "application/json-impl";
+        String jsonString = "{\"methodName\":{\"param\":\"value\"}}";
+        ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonString.getBytes("UTF-8"));
+        messageContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, "UTF-8");
+
+        JsonBuilder jsonBuilder = new JsonBuilder();
+        jsonBuilder.processDocument(inputStream, contentType, messageContext);
+
+        Object isJson = messageContext.getProperty(JsonConstant.IS_JSON_STREAM);
+        Assert.assertNotNull(isJson);
+        isJson = Boolean.valueOf(isJson.toString());
+        Assert.assertEquals(true, isJson);
+        Object streamReader = messageContext.getProperty(JsonConstant.GSON_XML_STREAM_READER);
+        Assert.assertNotNull(streamReader);
+        GsonXMLStreamReader gsonXMLStreamReader = (GsonXMLStreamReader) streamReader;
+        JsonReader jsonReader = gsonXMLStreamReader.getJsonReader();
+        Assert.assertNotNull(jsonReader);
+        try {
+            String actualString = readJsonReader(jsonReader);
+            Assert.assertEquals("value", actualString);
+        } catch (IOException e) {
+            Assert.assertFalse(true);
+        }
+
+        inputStream.close();
+
+    }
+
+    private String readJsonReader(JsonReader jsonReader) throws IOException {
+        jsonReader.beginObject();
+        jsonReader.nextName();
+        jsonReader.beginObject();
+        jsonReader.nextName();
+        String name = jsonReader.nextString();
+        jsonReader.endObject();
+        jsonReader.endObject();
+        return name;
+    }
+}

Added: axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonFormatterTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonFormatterTest.java?rev=1376838&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonFormatterTest.java (added)
+++ axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/impl/JsonFormatterTest.java Fri Aug 24 06:34:32 2012
@@ -0,0 +1,211 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.axis2.json.impl;
+
+import com.google.gson.Gson;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.soap.SOAPEnvelope;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axis2.Constants;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
+import org.apache.axis2.description.AxisMessage;
+import org.apache.axis2.description.AxisOperation;
+import org.apache.axis2.description.AxisOperationFactory;
+import org.apache.axis2.description.AxisService;
+import org.apache.axis2.engine.AxisConfiguration;
+import org.apache.axis2.json.impl.utils.JsonConstant;
+import org.apache.axis2.wsdl.WSDLConstants;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.xml.namespace.QName;
+import javax.xml.transform.stream.StreamSource;
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+public class JsonFormatterTest {
+    MessageContext outMsgContext;
+    String contentType;
+    String jsonString;
+    SOAPEnvelope soapEnvelope;
+    OMOutputFormat outputFormat;
+    OutputStream outputStream;
+    @Before
+    public void setUp() throws Exception {
+        contentType = "application/json-impl";
+        SOAPFactory soapFactory = OMAbstractFactory.getSOAP11Factory();
+        soapEnvelope = soapFactory.getDefaultEnvelope();
+        outputFormat = new OMOutputFormat();
+        outputStream = new ByteArrayOutputStream();
+
+        outMsgContext = new MessageContext();
+        outMsgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING, "UTF-8");
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        outputStream.close();
+    }
+
+    @Test
+    public void testWriteToFaultMessage() throws Exception {
+        jsonString = "{\"Fault\":{\"faultcode\":\"soapenv:Server\",\"faultstring\":\"javax.xml.stream.XMLStreamException\",\"detail\":\"testFaultMsg\"}}";
+        outMsgContext.setProcessingFault(true);
+        soapEnvelope.getBody().addChild(createFaultOMElement());
+        outMsgContext.setEnvelope(soapEnvelope);
+        JsonFormatter jsonFormatter = new JsonFormatter();
+        jsonFormatter.writeTo(outMsgContext, outputFormat, outputStream, false);
+        String faultMsg = outputStream.toString();
+        Assert.assertEquals(jsonString , faultMsg);
+    }
+
+
+    @Test
+    public void testWriteToXMLtoJSON() throws Exception {
+        jsonString = "{\"response\":{\"return\":{\"name\":\"kate\",\"age\":\"35\",\"gender\":\"female\"}}}";
+        String fileName = "test-resources/custom_schema/testSchema_1.xsd";
+        InputStream is = new FileInputStream(fileName);
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        XmlSchema schema = schemaCol.read(new StreamSource(is), null);
+        QName elementQName = new QName("http://www.w3schools.com", "response");
+        ConfigurationContext configCtxt = new ConfigurationContext(new AxisConfiguration());
+        outMsgContext.setConfigurationContext(configCtxt);
+        AxisOperation axisOperation = AxisOperationFactory.getAxisOperation(AxisOperation.MEP_CONSTANT_IN_OUT);
+        AxisMessage message = new AxisMessage();
+        message.setElementQName(elementQName);
+        axisOperation.addMessage(message , WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
+        outMsgContext.setAxisOperation(axisOperation);
+        AxisService axisService = new AxisService("testService");
+        axisService.addSchema(schema);
+        outMsgContext.setAxisService(axisService);
+        soapEnvelope.getBody().addChild(getResponseOMElement());
+        outMsgContext.setEnvelope(soapEnvelope);
+        JsonFormatter jsonFormatter = new JsonFormatter();
+        jsonFormatter.writeTo(outMsgContext, outputFormat , outputStream , false);
+        String response = outputStream.toString();
+        Assert.assertEquals(jsonString, response);
+    }
+
+
+    @Test
+    public void testWriteToJSON() throws Exception {
+        Person person = new Person();
+        person.setName("Leo");
+        person.setAge(27);
+        person.setGender("Male");
+        person.setSingle(true);
+        outMsgContext.setProperty(JsonConstant.RETURN_OBJECT, person);
+        outMsgContext.setProperty(JsonConstant.RETURN_TYPE, Person.class);
+        jsonString = "{\""+ JsonConstant.RESPONSE +"\":" + new Gson().toJson(person, Person.class) + "}";
+
+        JsonFormatter jsonFormatter = new JsonFormatter();
+        jsonFormatter.writeTo(outMsgContext, outputFormat, outputStream, false);
+        String personString = outputStream.toString();
+        Assert.assertEquals(jsonString, personString);
+
+    }
+
+
+    private OMElement createFaultOMElement() {
+        OMFactory omFactory = OMAbstractFactory.getOMFactory();
+        OMNamespace ns = omFactory.createOMNamespace("", "");
+        OMElement faultCode = omFactory.createOMElement("faultcode", ns);
+        faultCode.setText("soapenv:Server");
+        OMElement faultString = omFactory.createOMElement("faultstring", ns);
+        faultString.setText("javax.xml.stream.XMLStreamException");
+        OMElement detail = omFactory.createOMElement("detail", ns);
+        detail.setText("testFaultMsg");
+        OMElement fault = omFactory.createOMElement("Fault", ns);
+        fault.addChild(faultCode);
+        fault.addChild(faultString);
+        fault.addChild(detail);
+        return  fault;
+    }
+
+    private OMElement getResponseOMElement() {
+        OMFactory omFactory = OMAbstractFactory.getOMFactory();
+        OMNamespace ns = omFactory.createOMNamespace("", "");
+
+        OMElement response = omFactory.createOMElement("response", ns);
+        OMElement ret = omFactory.createOMElement("return", ns);
+        OMElement name = omFactory.createOMElement("name", ns);
+        name.setText("kate");
+        OMElement age = omFactory.createOMElement("age", ns);
+        age.setText("35");
+        OMElement gender = omFactory.createOMElement("gender", ns);
+        gender.setText("female");
+        ret.addChild(name);
+        ret.addChild(age);
+        ret.addChild(gender);
+        response.addChild(ret);
+        return response;
+    }
+
+    public static class Person {
+
+        private String name;
+        private int age;
+        private String gender;
+        private boolean single;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public int getAge() {
+            return age;
+        }
+
+        public void setAge(int age) {
+            this.age = age;
+        }
+
+        public String getGender() {
+            return gender;
+        }
+
+        public void setGender(String gender) {
+            this.gender = gender;
+        }
+
+        public boolean isSingle() {
+            return single;
+        }
+
+        public void setSingle(boolean single) {
+            this.single = single;
+        }
+    }
+}