You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by aj...@apache.org on 2005/10/18 12:51:51 UTC
svn commit: r326082 - in /webservices/axis2/trunk/java/modules/codegen:
src/org/apache/axis2/databinding/schema/
src/org/apache/axis2/databinding/schema/template/ test-resources/xsd/
test/org/apache/axis2/databinding/schema/
Author: ajith
Date: Tue Oct 18 03:51:12 2005
New Revision: 326082
URL: http://svn.apache.org/viewcvs?rev=326082&view=rev
Log:
Added support for minOccurs/maxOccurs (Array support). The generation of validation code is yet to be done!
Added:
webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs.xsd
webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs2.xsd
webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlMaxOccurs2.java
webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlmaxOccursTest.java
Modified:
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java
webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java?rev=326082&r1=326081&r2=326082&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/BeanWriterMetaInfoHolder.java Tue Oct 18 03:51:12 2005
@@ -62,7 +62,7 @@
}
public void registerMapping(QName qName,QName schemaName,String javaClassName){
- registerMapping(qName,schemaName,javaClassName,SchemaConstants.ELEMENT_TYPE);
+ registerMapping(qName,schemaName,javaClassName,SchemaConstants.ELEMENT_TYPE);
}
public void registerMapping(QName qName,QName schemaName,String javaClassName,Integer type){
@@ -76,7 +76,7 @@
return (QName)this.elementToSchemaQNameMap.get(eltQName);
}
- public String getJavaClassNameForQName(QName eltQName){
+ public String getJavaClassNameForQName(QName eltQName){
return (String)this.elementToJavaClassMap.get(eltQName);
}
@@ -84,11 +84,17 @@
Integer attribState = (Integer) specialTypeFlagMap.get(qName);
return attribState != null && attribState.equals(SchemaConstants.ATTRIBUTE_TYPE);
}
-
+
public boolean getAnyStatusForQName(QName qName){
Integer anyState = (Integer) specialTypeFlagMap.get(qName);
return anyState != null && anyState.equals(SchemaConstants.ANY_TYPE);
}
+
+ public boolean getArrayStatusForQName(QName qName){
+ Integer anyState = (Integer) specialTypeFlagMap.get(qName);
+ return anyState != null && anyState.equals(SchemaConstants.ANY_ARRAY_TYPE);
+ }
+
public void clearTables(){
this.elementToJavaClassMap.clear();
this.elementToSchemaQNameMap.clear();
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java?rev=326082&r1=326081&r2=326082&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/JavaBeanWriter.java Tue Oct 18 03:51:12 2005
@@ -144,12 +144,17 @@
}
XSLTUtils.addAttribute(model,"shorttypename",shortTypeName,property);
+
if (metainf.getAnyStatusForQName(name)){
XSLTUtils.addAttribute(model,"any","yes",property);
}
+
+ if (metainf.getArrayStatusForQName(name)){
+ XSLTUtils.addAttribute(model,"array","yes",property);
+ }
}
-
+
//create the file
OutputStream out = createOutFile(packageName,className);
//parse with the template and create the files
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java?rev=326082&r1=326081&r2=326082&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaCompiler.java Tue Oct 18 03:51:12 2005
@@ -1,7 +1,6 @@
package org.apache.axis2.databinding.schema;
import org.apache.ws.commons.schema.*;
-import org.apache.axis2.util.URLProcessor;
import org.apache.axis2.om.OMElement;
import javax.xml.namespace.QName;
@@ -103,6 +102,8 @@
Iterator xmlSchemaElement1Iterator = elements.getValues();
while (xmlSchemaElement1Iterator.hasNext()) {
//this is the set of outer elements so we need to generate classes
+ //The outermost elements do not contain occurence counts (!) so we do not need
+ //to check for arraytypes
processElement((XmlSchemaElement)xmlSchemaElement1Iterator.next(),true);
}
@@ -126,24 +127,34 @@
BeanWriterMetaInfoHolder metainf = new BeanWriterMetaInfoHolder();
QName qName = schemaType.getQName();
//find the class name
- String className = findClassName(schemaType);
+ String className = findClassName(schemaType,isArray(schemaElement));
metainf.registerMapping(schemaElement.getQName(),
qName,
className);
String writtenClassName = writer.write(schemaElement,processedTypemap,metainf);
processedElementmap.put(schemaElement.getQName(),writtenClassName);
}
-
-
}
-
/**
*
* @param xsElt
+ * @param isOuter
+ * @throws SchemaCompilationException
*/
private void processElement(XmlSchemaElement xsElt,boolean isOuter) throws SchemaCompilationException{
+ processElement(xsElt,isOuter,false);
+ }
+
+ /**
+ *
+ * @param xsElt
+ * @param isOuter
+ * @param isArray
+ * @throws SchemaCompilationException
+ */
+ private void processElement(XmlSchemaElement xsElt,boolean isOuter,boolean isArray) throws SchemaCompilationException{
//The processing element logic seems to be quite simple. Look at the relevant schema type
//for each and every element and process that accordingly.
//this means that any unused type definitions would not be generated!
@@ -162,7 +173,7 @@
//later
if (!isOuter){
- String className = findClassName(schemaType);
+ String className = findClassName(schemaType,isArray);
this.processedElementmap.put(xsElt.getQName(),className);
}
this.processedElementList.add(xsElt.getQName());
@@ -179,7 +190,7 @@
* @param schemaType
* @return
*/
- private String findClassName(XmlSchemaType schemaType) {
+ private String findClassName(XmlSchemaType schemaType,boolean isArray) {
//find the class name
QName qName = schemaType.getQName();
String className;
@@ -192,6 +203,11 @@
//contained schema type. We better set the default then
className = OMElement.class.getName();
}
+ if (isArray){
+ //append the square braces that say this is an array
+ //hope this works for all cases!!!!!!!
+ className = className + "[]";
+ }
return className;
}
@@ -261,9 +277,9 @@
private void processAnyAttribute(BeanWriterMetaInfoHolder metainf) {
//The best thing we can do here is to add a set of OMAttributes
metainf.registerMapping(new QName("extraAttributes"),
- null,
- OMElement[].class.getName(),
- SchemaConstants.ANY_ATTRIBUTE_TYPE);
+ null,
+ OMElement[].class.getName(),
+ SchemaConstants.ANY_ATTRIBUTE_TYPE);
}
@@ -311,15 +327,16 @@
BeanWriterMetaInfoHolder metainfHolder,
boolean order) throws SchemaCompilationException {
int count = items.getCount();
- List processedElements = new ArrayList();
+ Map processedElements = new HashMap();
for (int i = 0; i < count; i++) {
XmlSchemaObject item = items.getItem(i);
if (item instanceof XmlSchemaElement){
//recursively process the element
XmlSchemaElement xsElt = (XmlSchemaElement) item;
- processElement(xsElt,false); //we know for sure this is not an outer type
- processedElements.add(xsElt);
+ boolean isArray = isArray(xsElt);
+ processElement(xsElt,false,isArray); //we know for sure this is not an outer type
+ processedElements.put(xsElt, (isArray) ? Boolean.TRUE : Boolean.FALSE);
}else if (item instanceof XmlSchemaComplexContent){
// process the extension
XmlSchemaContent content = ((XmlSchemaComplexContent)item).getContent();
@@ -338,13 +355,16 @@
}
// loop through the processed items and add them to the matainf object
- int processedCount = processedElements.size();
- for (int i = 0; i < processedCount; i++) {
- XmlSchemaElement elt = (XmlSchemaElement)processedElements.get(i);
+ Iterator processedElementsIterator= processedElements.keySet().iterator();
+ while(processedElementsIterator.hasNext()){
+ XmlSchemaElement elt = (XmlSchemaElement)processedElementsIterator.next();
String clazzName = (String)processedElementmap.get(elt.getQName());
metainfHolder.registerMapping(elt.getQName(),
elt.getSchemaTypeName()
- ,clazzName);
+ ,clazzName,
+ ((Boolean)processedElements.get(elt)).booleanValue()?
+ SchemaConstants.ANY_ARRAY_TYPE:
+ SchemaConstants.ELEMENT_TYPE);
}
//set the ordered flag in the metainf holder
@@ -356,12 +376,12 @@
*/
private void processAny(XmlSchemaAny any,BeanWriterMetaInfoHolder metainf) {
//handle the minoccurs/maxoccurs here.
- // However since the any element does not have a name
+ //However since the any element does not have a name
//we need to put a name here
- metainf.registerMapping(new QName(ANY_ELEMENT_FIELD_NAME),
- null,
- OMElement.class.getName(),
- SchemaConstants.ANY_TYPE);
+ metainf.registerMapping(new QName(ANY_ELEMENT_FIELD_NAME),
+ null,
+ OMElement.class.getName(),
+ SchemaConstants.ANY_TYPE);
}
@@ -375,11 +395,15 @@
}
-/* Utility methods */
- private String getJavaClassNameFromComplexTypeQName(QName name){
- String className = name.getLocalPart();
- String packageName = URLProcessor.getNameSpaceFromURL(name.getNamespaceURI());
- return packageName + "." +className;
+ private boolean isArray(XmlSchemaParticle particle) throws SchemaCompilationException{
+ long minOccurs = particle.getMinOccurs();
+ long maxOccurs = particle.getMaxOccurs();
+ if (maxOccurs < minOccurs){
+ throw new SchemaCompilationException();
+ }else{
+ return (maxOccurs>1);
+ }
}
+
}
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java?rev=326082&r1=326081&r2=326082&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/SchemaConstants.java Tue Oct 18 03:51:12 2005
@@ -43,7 +43,8 @@
public static final Integer ATTRIBUTE_TYPE = new Integer(0);
public static final Integer ANY_TYPE = new Integer(1);
public static final Integer ELEMENT_TYPE = new Integer(2);
- public static final Integer ANY_ATTRIBUTE_TYPE = new Integer(3);
+ public static final Integer ANY_ATTRIBUTE_TYPE = new Integer(3);
+ public static final Integer ANY_ARRAY_TYPE = new Integer(4);
}
Modified: webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl?rev=326082&r1=326081&r2=326082&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/codegen/src/org/apache/axis2/databinding/schema/template/BeanTemplate.xsl Tue Oct 18 03:51:12 2005
@@ -34,6 +34,8 @@
/**
* field for <xsl:value-of select="$javaName"/>
<xsl:if test="@attribute">* This was an Attribute!</xsl:if>
+ <xsl:if test="@array">* This was an Array!</xsl:if>
+
*/
private <xsl:value-of select="$propertyType"/> local<xsl:value-of select="$javaName"/>;
Added: webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs.xsd?rev=326082&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs.xsd (added)
+++ webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs.xsd Tue Oct 18 03:51:12 2005
@@ -0,0 +1,15 @@
+<schema targetNamespace="http://soapinterop.org/xsd"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsd1="http://soapinterop.org/xsd"
+ elementFormDefault="qualified">
+ <complexType name="SOAPStruct">
+ <sequence>
+ <element name="varFloat" type="xsd:float"/>
+ <element name="varInt" type="xsd:int"/>
+ <element name="varString" type="xsd:string" maxOccurs="10"/>
+ </sequence>
+ </complexType>
+ <element name="myobject" type="xsd1:SOAPStruct" />
+</schema>
\ No newline at end of file
Added: webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs2.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs2.xsd?rev=326082&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs2.xsd (added)
+++ webservices/axis2/trunk/java/modules/codegen/test-resources/xsd/simple_maxOccurs2.xsd Tue Oct 18 03:51:12 2005
@@ -0,0 +1,20 @@
+<schema targetNamespace="http://soapinterop.org/xsd"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsd1="http://soapinterop.org/xsd"
+ elementFormDefault="qualified">
+ <complexType name="SOAPStruct">
+ <sequence>
+ <element name="varFloat" type="xsd:float"/>
+ <element name="varInt" type="xsd:int"/>
+ <element name="varString" type="xsd:string" maxOccurs="10"/>
+ </sequence>
+ </complexType>
+ <complexType name="SOAPStructArray">
+ <sequence>
+ <element name="soapStructures" type="xsd1:SOAPStruct" maxOccurs="10"></element>
+ </sequence>
+ </complexType>
+ <element name="myobject" type="xsd1:SOAPStructArray" />
+</schema>
\ No newline at end of file
Added: webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlMaxOccurs2.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlMaxOccurs2.java?rev=326082&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlMaxOccurs2.java (added)
+++ webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlMaxOccurs2.java Tue Oct 18 03:51:12 2005
@@ -0,0 +1,24 @@
+package org.apache.axis2.databinding.schema;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class XmlMaxOccurs2 extends AbstractSchemaCompilerTester{
+ protected void setUp() throws Exception {
+ this.fileName = "test-resources/xsd/simple_maxOccurs2.xsd";
+ super.setUp();
+ }
+
+}
Added: webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlmaxOccursTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlmaxOccursTest.java?rev=326082&view=auto
==============================================================================
--- webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlmaxOccursTest.java (added)
+++ webservices/axis2/trunk/java/modules/codegen/test/org/apache/axis2/databinding/schema/XmlmaxOccursTest.java Tue Oct 18 03:51:12 2005
@@ -0,0 +1,23 @@
+package org.apache.axis2.databinding.schema;
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+public class XmlmaxOccursTest extends AbstractSchemaCompilerTester{
+ protected void setUp() throws Exception {
+ this.fileName = "test-resources/xsd/simple_maxOccurs.xsd";
+ super.setUp();
+ }
+}