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 sh...@apache.org on 2014/03/16 17:43:06 UTC
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/
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();
+ }
+ }
+
+ }
+
}