axis-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From shame...@apache.org
Subject svn commit: r1578111 - in /axis/axis2/java/core/trunk/modules/json: src/org/apache/axis2/json/gson/ src/org/apache/axis2/json/gson/factory/ test-resources/custom_schema/ test/org/apache/axis2/json/gson/factory/
Date Sun, 16 Mar 2014 16:43:06 GMT
Author: shameera
Date: Sun Mar 16 16:43:06 2014
New Revision: 1578111

URL: http://svn.apache.org/r1578111
Log:
Improved XML Stream based JSON to generate intermediate structure when schema has ref elements
and added a new test case too

Added:
    axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_3.xsd
Modified:
    axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamReader.java
    axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamWriter.java
    axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/factory/XmlNodeGenerator.java
    axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_2.xsd
    axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/gson/factory/XmlNodeGeneratorTest.java

Modified: axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamReader.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamReader.java?rev=1578111&r1=1578110&r2=1578111&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamReader.java
(original)
+++ axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamReader.java
Sun Mar 16 16:43:06 2014
@@ -21,6 +21,7 @@ package org.apache.axis2.json.gson;
 
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonToken;
+import org.apache.axis2.AxisFault;
 import org.apache.axis2.context.ConfigurationContext;
 import org.apache.axis2.json.gson.factory.JSONType;
 import org.apache.axis2.json.gson.factory.JsonConstant;
@@ -87,7 +88,7 @@ public class GsonXMLStreamReader impleme
     }
 
     public GsonXMLStreamReader(JsonReader jsonReader, QName elementQname, List<XmlSchema>
xmlSchemaList,
-                               ConfigurationContext configContext) {
+                               ConfigurationContext configContext) throws AxisFault {
         this.jsonReader = jsonReader;
         initXmlStreamReader(elementQname, xmlSchemaList, configContext);
     }
@@ -96,16 +97,20 @@ public class GsonXMLStreamReader impleme
         return jsonReader;
     }
 
-    public void initXmlStreamReader(QName elementQname, List<XmlSchema> xmlSchemaList,
ConfigurationContext configContext) {
+    public void initXmlStreamReader(QName elementQname, List<XmlSchema> xmlSchemaList,
ConfigurationContext configContext) throws AxisFault {
         this.elementQname = elementQname;
         this.xmlSchemaList = xmlSchemaList;
         this.configContext = configContext;
-        process();
+        try {
+            process();
+        } catch (AxisFault axisFault) {
+            throw new AxisFault("Error while initializing XMLStreamReader ", axisFault);
+        }
         isProcessed = true;
 
     }
 
-    private void process() {
+    private void process() throws AxisFault {
         Object ob = configContext.getProperty(JsonConstant.XMLNODES);
         if (ob != null) {
             Map<QName, XmlNode> nodeMap = (Map<QName, XmlNode>) ob;

Modified: axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamWriter.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamWriter.java?rev=1578111&r1=1578110&r2=1578111&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamWriter.java
(original)
+++ axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/GsonXMLStreamWriter.java
Sun Mar 16 16:43:06 2014
@@ -653,9 +653,11 @@ public class GsonXMLStreamWriter impleme
 
     public void writeStartDocument(String encoding, String version) throws XMLStreamException
{
         if (!isProcessed) {
-            xmlNodeGenerator.getMainXmlNode();
-            queue = xmlNodeGenerator.getQueue(mainXmlNode);
-            isProcessed = true;
+            try {
+                process();
+            } catch (IOException e) {
+                throw new XMLStreamException("Error occur while trying to write start document
element", e);
+            }
         }
     }
 
@@ -672,7 +674,7 @@ public class GsonXMLStreamWriter impleme
             try {
                 process();
             } catch (IOException e) {
-                throw new XMLStreamException("Error occur while trying to write first begin
object ");
+                throw new XMLStreamException("Error occur while trying to write first begin
object ", e);
             }
         }
         try {

Modified: axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/factory/XmlNodeGenerator.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/factory/XmlNodeGenerator.java?rev=1578111&r1=1578110&r2=1578111&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/factory/XmlNodeGenerator.java
(original)
+++ axis/axis2/java/core/trunk/modules/json/src/org/apache/axis2/json/gson/factory/XmlNodeGenerator.java
Sun Mar 16 16:43:06 2014
@@ -19,6 +19,8 @@
 
 package org.apache.axis2.json.gson.factory;
 
+import org.apache.axis2.AxisFault;
+import org.apache.ws.commons.schema.utils.XmlSchemaRef;
 
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaComplexType;
@@ -52,7 +54,7 @@ public class XmlNodeGenerator {
     public XmlNodeGenerator() {
     }
 
-    private void processSchemaList() {
+    private void processSchemaList() throws AxisFault {
         // get the operation schema and process.
         XmlSchema operationSchema = getXmlSchema(elementQname);
         XmlSchemaElement messageElement = operationSchema.getElementByName(elementQname.getLocalPart());
@@ -81,7 +83,7 @@ public class XmlNodeGenerator {
         }
     }
 
-    private void processElement(XmlSchemaElement element, XmlNode parentNode , XmlSchema
schema) {
+    private void processElement(XmlSchemaElement element, XmlNode parentNode , XmlSchema
schema) throws AxisFault {
         String targetNamespace = schema.getTargetNamespace();
         XmlNode xmlNode;
         QName schemaTypeName = element.getSchemaTypeName();
@@ -106,11 +108,34 @@ public class XmlNodeGenerator {
             xmlNode = new XmlNode(element.getName(), targetNamespace, false, (element.getMaxOccurs()
== 1 ? false : true), schemaType.getQName().getLocalPart());
             parentNode.addChildToList(xmlNode);
             processSchemaType(schemaType, xmlNode, schema);
+        }else if (element.getRef() != null) {
+            // Handle ref element
+            XmlSchemaRef xmlSchemaRef = element.getRef();
+            QName targetQname = xmlSchemaRef.getTargetQName();
+            if (targetQname == null) {
+                throw new AxisFault("target QName is null while processing ref:" + element.getName());
+            }
+            getXmlSchema(targetQname);
+            xmlNode = new XmlNode(targetQname.getLocalPart(), targetNamespace, false, (element.getMaxOccurs()
!= 1), targetQname.getLocalPart());
+            parentNode.addChildToList(xmlNode);
+            if (("http://www.w3.org/2001/XMLSchema").equals(targetQname.getNamespaceURI()))
{
+            } else {
+                XmlSchema schemaOfType;
+                // see whether Schema type is in the same schema
+                XmlSchemaType childSchemaType = schema.getTypeByName(targetQname.getLocalPart());
+                if (childSchemaType == null) {
+                    schemaOfType = getXmlSchema(targetQname);
+                    childSchemaType = schemaOfType.getTypeByName(targetQname.getLocalPart());
+                } else {
+                    schemaOfType = schema;
+                }
+                processSchemaType(childSchemaType, xmlNode, schemaOfType);
+            }
         }
     }
 
 
-    private void processSchemaType(XmlSchemaType xmlSchemaType , XmlNode parentNode , XmlSchema
schema) {
+    private void processSchemaType(XmlSchemaType xmlSchemaType , XmlNode parentNode , XmlSchema
schema) throws AxisFault {
         if (xmlSchemaType instanceof XmlSchemaComplexType) {
             XmlSchemaComplexType complexType = (XmlSchemaComplexType)xmlSchemaType;
             XmlSchemaParticle particle = complexType.getParticle();
@@ -162,9 +187,13 @@ public class XmlNodeGenerator {
     }
 
 
-    public XmlNode getMainXmlNode() {
+    public XmlNode getMainXmlNode() throws AxisFault {
         if (mainXmlNode == null) {
-            processSchemaList();
+            try {
+                processSchemaList();
+            } catch (AxisFault axisFault) {
+                throw new AxisFault("Error while creating intermeidate xml structure ", axisFault);
+            }
         }
         return mainXmlNode;
     }

Modified: axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_2.xsd
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_2.xsd?rev=1578111&r1=1578110&r2=1578111&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_2.xsd
(original)
+++ axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_2.xsd
Sun Mar 16 16:43:06 2014
@@ -20,10 +20,10 @@
   -->
 
 
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
-targetNamespace="http://test.json.axis2.apache.org"
-xmlns="http://test.json.axis2.apache.org"
-elementFormDefault="qualified">
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.json.axis2.apache.org"
+xmlns="http://test.json.axis2.apache.org" xmlns:ns1="http://test.json.axis2.apache.org/employee"
+xmlns:tns="http://test.json.axis2.apache.org" elementFormDefault="qualified">
+    <xs:import namespace="http://test.json.axis2.apache.org/employee" schemaLocation="test-resources/custom_schema/testSchema_3.xsd"></xs:import>
 
     <xs:element name="echoPerson">
         <xs:complexType>
@@ -49,4 +49,23 @@ elementFormDefault="qualified">
         </xs:sequence>
     </xs:complexType>
 
+    <xs:element name="Offices" type="tns:Offices"></xs:element>
+
+    <xs:complexType name="Offices">
+        <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="Office" type="tns:Office"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="Office">
+        <xs:sequence>
+            <xs:element name="phone" nillable="true" type="xs:string"></xs:element>
+            <xs:element name="officeCode" nillable="true" type="xs:integer"></xs:element>
+            <xs:element ref="ns1:Employees"></xs:element>
+            <xs:element name="country" nillable="true" type="xs:string"></xs:element>
+            <xs:element name="city" nillable="true" type="xs:string"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+
+
 </xs:schema>
\ No newline at end of file

Added: axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_3.xsd
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_3.xsd?rev=1578111&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_3.xsd
(added)
+++ axis/axis2/java/core/trunk/modules/json/test-resources/custom_schema/testSchema_3.xsd
Sun Mar 16 16:43:06 2014
@@ -0,0 +1,16 @@
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://test.json.axis2.apache.org/employee"
+           xmlns:ns1="http://test.json.axis2.apache.org/employee" attributeFormDefault="unqualified"
elementFormDefault="qualified" >
+    <xs:element name="Employees" type="ns1:Employees"></xs:element>
+    <xs:complexType name="Employees">
+        <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="Employee" type="ns1:Employee"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+    <xs:complexType name="Employee">
+        <xs:sequence>
+            <xs:element name="email" nillable="true" type="xs:string"></xs:element>
+            <xs:element name="firstName" nillable="true" type="xs:string"></xs:element>
+            <xs:element name="employeeNumber" nillable="true" type="xs:integer"></xs:element>
+        </xs:sequence>
+    </xs:complexType>
+</xs:schema>

Modified: axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/gson/factory/XmlNodeGeneratorTest.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/gson/factory/XmlNodeGeneratorTest.java?rev=1578111&r1=1578110&r2=1578111&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/gson/factory/XmlNodeGeneratorTest.java
(original)
+++ axis/axis2/java/core/trunk/modules/json/test/org/apache/axis2/json/gson/factory/XmlNodeGeneratorTest.java
Sun Mar 16 16:43:06 2014
@@ -22,6 +22,7 @@ package org.apache.axis2.json.gson.facto
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.junit.Assert;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 import javax.xml.namespace.QName;
@@ -34,21 +35,11 @@ import java.util.List;
 
 public class XmlNodeGeneratorTest {
 
+    static List<XmlSchema> schemaList = null;
     @Test
     public void testMainXMLNode() throws Exception {
-
         QName elementQName = new QName("http://test.json.axis2.apache.org" ,"echoPerson");
-
-        String fileName = "test-resources/custom_schema/testSchema_2.xsd";
-        InputStream is = new FileInputStream(fileName);
-        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
-        XmlSchema schema = schemaCol.read(new StreamSource(is));
-
-        List<XmlSchema> schemaList = new ArrayList<XmlSchema>();
-        schemaList.add(schema);
-
         XmlNodeGenerator xmlNodeGenerator = new XmlNodeGenerator(schemaList, elementQName);
-
         XmlNode mainXmlNode = xmlNodeGenerator.getMainXmlNode();
 
         Assert.assertNotNull(mainXmlNode);
@@ -67,7 +58,50 @@ public class XmlNodeGeneratorTest {
 
         Assert.assertEquals("gender", mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).getName());
         Assert.assertEquals(0, mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).getChildrenList().size());
+    }
+
+    @Test
+    public void testXMLNodeGenWithRefElement() throws Exception {
+        QName eleQName = new QName("http://test.json.axis2.apache.org", "Offices");
+        XmlNodeGenerator xmlNodeGenerator = new XmlNodeGenerator(schemaList, eleQName);
+        XmlNode mainXmlNode = xmlNodeGenerator.getMainXmlNode();
 
+        Assert.assertNotNull(mainXmlNode);
+        Assert.assertEquals(true, mainXmlNode.getChildrenList().get(0).isArray());
+        Assert.assertEquals(5, mainXmlNode.getChildrenList().get(0).getChildrenList().size());
+        Assert.assertEquals("Employees", mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).getName());
+        Assert.assertEquals(false, mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).isArray());
+        Assert.assertEquals("Employee", mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).getChildrenList().get(0).getName());
+        Assert.assertEquals(true, mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).getChildrenList().get(0).isArray());
+        Assert.assertEquals(3, mainXmlNode.getChildrenList().get(0).getChildrenList().get(2).getChildrenList().get(0).getChildrenList().size());
 
     }
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+        InputStream is2 = null;
+        InputStream is3 = null;
+        try {
+            String testSchema2 = "test-resources/custom_schema/testSchema_2.xsd";
+            String testSchema3 = "test-resources/custom_schema/testSchema_3.xsd";
+            is2 = new FileInputStream(testSchema2);
+            is3 = new FileInputStream(testSchema3);
+            XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+            XmlSchema schema2 = schemaCol.read(new StreamSource(is2));
+            XmlSchema schema3 = schemaCol.read(new StreamSource(is3));
+
+            schemaList = new ArrayList<XmlSchema>();
+            schemaList.add(schema2);
+            schemaList.add(schema3);
+        } finally {
+            if (is2 != null) {
+                is2.close();
+            }
+            if (is3 != null) {
+                is3.close();
+            }
+        }
+
+    }
+
 }



Mime
View raw message