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;
+ }
+ }
+}