You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by am...@apache.org on 2007/05/04 07:34:33 UTC
svn commit: r535100 - in
/webservices/axis2/branches/java/1_2/modules/adb-codegen: ./
src/org/apache/axis2/schema/ src/org/apache/axis2/schema/template/
src/org/apache/axis2/schema/writer/ test-resources/testsuite/
test/org/apache/axis2/schema/innerCho...
Author: amilas
Date: Thu May 3 22:34:32 2007
New Revision: 535100
URL: http://svn.apache.org/viewvc?view=rev&rev=535100
Log:
Add support to the sequence/choice minOccurs,maxOccurs and inner partical types
Added:
webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/ExtendedSequenceLax.xsd
Modified:
webservices/axis2/branches/java/1_2/modules/adb-codegen/maven.xml
webservices/axis2/branches/java/1_2/modules/adb-codegen/pom.xml
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaConstants.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/BeanWriter.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/CStructWriter.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java
webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/testattribute.xsd
webservices/axis2/branches/java/1_2/modules/adb-codegen/test/org/apache/axis2/schema/innerChoice/InnerChoiceTest.java
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/maven.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/maven.xml?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/maven.xml (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/maven.xml Thu May 3 22:34:32 2007
@@ -271,7 +271,28 @@
<arg file="${testsuite.source.dir}/boolean.xsd"/>
<arg file="${schema.generated.src.dir}"/>
</java>
+
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling particalMaxOccures.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/particalMaxOccures.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling innerParticles.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/innerParticles.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
<!-- ################################################################### -->
<!-- Compile the generated classes -->
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/pom.xml?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/pom.xml (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/pom.xml Thu May 3 22:34:32 2007
@@ -338,6 +338,30 @@
<arg file="${testsuite.source.dir}/boolean.xsd"/>
<arg file="${schema.generated.src.dir}"/>
</java>
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling particalMaxOccures.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/particalMaxOccures.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
+
+ <!-- ################################################################### -->
+ <!-- All simple derived types xsd -->
+ <ant:echo>Compiling innerParticles.xsd</ant:echo>
+ <java classname="org.apache.axis2.schema.XSD2Java" fork="true">
+ <jvmarg line="${maven.junit.jvmargs}"/>
+ <classpath refid="maven.dependency.classpath"/>
+ <classpath location="${compiled.classes.dir}"/>
+ <arg file="${testsuite.source.dir}/innerParticles.xsd"/>
+ <arg file="${schema.generated.src.dir}"/>
+ </java>
+
+
+
</tasks>
</configuration>
<goals>
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java Thu May 3 22:34:32 2007
@@ -63,6 +63,10 @@
protected boolean isUnion;
protected boolean isList;
+ protected boolean isParticleClass;
+ // keep whether this class has a partical class type variable
+ protected boolean hasParticleType;
+
protected List nillableQNameList = new ArrayList();
//the parent metainfo holder, useful in handling extensions and
@@ -410,6 +414,18 @@
}
/**
+ *
+ * @param qName
+ * @return whether the attribute is a partical class or not
+ */
+
+ public boolean getParticleTypeStatusForQName(QName qName){
+ Integer state = (Integer) specialTypeFlagMap.get(qName);
+ return state != null && getStatus(state.intValue(),
+ SchemaConstants.PARTICLE_TYPE_ELEMENT);
+ }
+
+ /**
* Gets whether a given QName has the any attribute status.
*
* @param qName
@@ -794,8 +810,6 @@
this.memberTypes.put(qname,className);
}
-
-
public boolean isList() {
return isList;
}
@@ -820,5 +834,20 @@
this.itemTypeClassName = itemTypeClassName;
}
+ public boolean isParticleClass() {
+ return isParticleClass;
+ }
+
+ public void setParticleClass(boolean particleClass) {
+ isParticleClass = particleClass;
+ }
+
+ public boolean isHasParticleType() {
+ return hasParticleType;
+ }
+
+ public void setHasParticleType(boolean hasParticleType) {
+ this.hasParticleType = hasParticleType;
+ }
}
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java Thu May 3 22:34:32 2007
@@ -328,7 +328,7 @@
//populate the map with the partname - class name
//attached to the schema element
XmlSchemaElement xmlSchemaElement = (XmlSchemaElement) item;
- boolean isArray = (xmlSchemaElement.getMaxOccurs() - xmlSchemaElement.getMinOccurs()) > 1;
+ boolean isArray = xmlSchemaElement.getMaxOccurs() > 1;
XmlSchemaType schemaType = xmlSchemaElement.getSchemaType();
String partName = null;
@@ -352,7 +352,7 @@
// for it for now
XmlSchemaAny xmlSchemaAny = (XmlSchemaAny) item;
- boolean isArray = xmlSchemaAny.getMaxOccurs() - xmlSchemaAny.getMinOccurs() > 1;
+ boolean isArray = xmlSchemaAny.getMaxOccurs() > 1;
QName partQName = WSDLUtil.getPartQName(opName,
qnameSuffix,
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java Thu May 3 22:34:32 2007
@@ -869,9 +869,11 @@
* @param complexType
* @throws SchemaCompilationException
*/
- private void processAnonymousComplexSchemaType(XmlSchemaElement elt, XmlSchemaComplexType complexType, XmlSchema parentSchema)
+ private void processAnonymousComplexSchemaType(XmlSchemaElement elt,
+ XmlSchemaComplexType complexType,
+ XmlSchema parentSchema)
throws SchemaCompilationException {
- BeanWriterMetaInfoHolder metaInfHolder = processComplexType(complexType, parentSchema);
+ BeanWriterMetaInfoHolder metaInfHolder = processComplexType(elt.getQName(),complexType, parentSchema);
//since this is a special case (an unnamed complex type) we'll put the already processed
//metainf holder in a special map to be used later
@@ -883,7 +885,8 @@
*
* @param complexType
*/
- private void processNamedComplexSchemaType(XmlSchemaComplexType complexType, XmlSchema parentSchema) throws SchemaCompilationException {
+ private void processNamedComplexSchemaType(XmlSchemaComplexType complexType,
+ XmlSchema parentSchema) throws SchemaCompilationException {
if (processedTypemap.containsKey(complexType.getQName())
|| baseSchemaTypeMap.containsKey(complexType.getQName())) {
@@ -898,7 +901,7 @@
complexType.addMetaInfo(SchemaConstants.SchemaCompilerInfoHolder.CLASSNAME_KEY,
fullyQualifiedClassName);
- BeanWriterMetaInfoHolder metaInfHolder = processComplexType(complexType, parentSchema);
+ BeanWriterMetaInfoHolder metaInfHolder = processComplexType(complexType.getQName(),complexType, parentSchema);
//add this information to the metainfo holder
metaInfHolder.setOwnQname(complexType.getQName());
metaInfHolder.setOwnClassName(fullyQualifiedClassName);
@@ -918,11 +921,28 @@
*/
private String writeComplexType(XmlSchemaComplexType complexType, BeanWriterMetaInfoHolder metaInfHolder)
throws SchemaCompilationException {
- String javaClassName = writer.write(complexType, processedTypemap, metaInfHolder);
+ String javaClassName = writer.write(complexType.getQName(), processedTypemap, metaInfHolder);
processedTypeMetaInfoMap.put(complexType.getQName(), metaInfHolder);
return javaClassName;
}
+
+ /**
+ * Writes complex Sequence,Choice, all elements
+ * @param qname complex type qname
+ * @param metaInfHolder
+ * @return written java class name
+ * @throws SchemaCompilationException
+ */
+
+
+ private String writeComplexParticle(QName qname,BeanWriterMetaInfoHolder metaInfHolder)
+ throws SchemaCompilationException {
+ String javaClassName = writer.write(qname, processedTypemap, metaInfHolder);
+ processedTypeMetaInfoMap.put(qname, metaInfHolder);
+ return javaClassName;
+ }
+
/**
* Writes a complex type
*
@@ -936,12 +956,15 @@
processedTypeMetaInfoMap.put(simpleType.getQName(), metaInfHolder);
}
- private BeanWriterMetaInfoHolder processComplexType(XmlSchemaComplexType complexType, XmlSchema parentSchema) throws SchemaCompilationException {
+ private BeanWriterMetaInfoHolder processComplexType(
+ QName parentElementQName,
+ XmlSchemaComplexType complexType,
+ XmlSchema parentSchema) throws SchemaCompilationException {
XmlSchemaParticle particle = complexType.getParticle();
BeanWriterMetaInfoHolder metaInfHolder = new BeanWriterMetaInfoHolder();
if (particle != null) {
//Process the particle
- processParticle(particle, metaInfHolder, parentSchema);
+ processParticle(parentElementQName, particle, metaInfHolder, parentSchema);
}
//process attributes - first look for the explicit attributes
@@ -1029,7 +1052,7 @@
//process the particle of this node
if (extension.getParticle() != null) {
- processParticle(extension.getParticle(), metaInfHolder, parentSchema);
+ processParticle(null,extension.getParticle(), metaInfHolder, parentSchema);
}
// process attributes
@@ -1085,7 +1108,7 @@
copyMetaInfoHierarchy(metaInfHolder, restriction.getBaseTypeName(), parentSchema);
//process the particle of this node
- processParticle(restriction.getParticle(), metaInfHolder, parentSchema);
+ processParticle(null,restriction.getParticle(), metaInfHolder, parentSchema);
//process attributes - first look for the explicit attributes
XmlSchemaObjectCollection attribs = restriction.getAttributes();
@@ -1630,39 +1653,115 @@
/**
* Process a particle- A particle may be a sequence,all or a choice
- *
- * @param particle
- * @param metainfHolder
+ * @param parentElementQName - this can either be parent element QName or parent Complex type qname
+ * @param particle - particle being processed
+ * @param metainfHolder -
+ * @param parentSchema
* @throws SchemaCompilationException
*/
- private void processParticle(XmlSchemaParticle particle, //particle being processed
- BeanWriterMetaInfoHolder metainfHolder // metainf holder
+ private void processParticle(QName parentElementQName,
+ XmlSchemaParticle particle,
+ BeanWriterMetaInfoHolder metainfHolder
, XmlSchema parentSchema) throws SchemaCompilationException {
+
if (particle instanceof XmlSchemaSequence) {
- XmlSchemaObjectCollection items = ((XmlSchemaSequence) particle).getItems();
- if (options.isBackwordCompatibilityMode()) {
- process(items, metainfHolder, false, parentSchema);
+ XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence) particle;
+
+ //remove this : only for testing
+ if (parentElementQName != null) {
+ QName qname = new QName("http://mynamespace.com/testparticlemaxoccurs", "TestCustomType");
+ if (!qname.equals(parentElementQName)) {
+ if (parentElementQName.getNamespaceURI().equals("http://mynamespace.com/testparticlemaxoccurs")) {
+ xmlSchemaSequence.setMaxOccurs(5);
+ xmlSchemaSequence.setMinOccurs(0);
+ }
+ }
+ }
+
+
+ XmlSchemaObjectCollection items = xmlSchemaSequence.getItems();
+ //TODO: support parentElementQName null instances. i.e for extensions
+ if ((xmlSchemaSequence.getMaxOccurs() > 1) && (parentElementQName != null)) {
+ // we have to process many sequence types
+ BeanWriterMetaInfoHolder beanWriterMetaInfoHolder = new BeanWriterMetaInfoHolder();
+ process(parentElementQName, items, beanWriterMetaInfoHolder, true, parentSchema);
+ beanWriterMetaInfoHolder.setParticleClass(true);
+ QName sequenceQName = new QName(parentElementQName.getNamespaceURI(),
+ parentElementQName.getLocalPart() + "Sequence");
+ String javaClassName = writeComplexParticle(sequenceQName,beanWriterMetaInfoHolder);
+ processedTypemap.put(sequenceQName, javaClassName);
+
+ // add this as an array to the original class
+ metainfHolder.registerMapping(sequenceQName,
+ sequenceQName,
+ findClassName(sequenceQName,true),
+ SchemaConstants.ARRAY_TYPE);
+ metainfHolder.setOrdered(true);
+ metainfHolder.registerQNameIndex(sequenceQName,metainfHolder.getOrderStartPoint() + 1);
+ metainfHolder.setHasParticleType(true);
+ metainfHolder.addtStatus(sequenceQName,SchemaConstants.PARTICLE_TYPE_ELEMENT);
+ metainfHolder.addMaxOccurs(sequenceQName,xmlSchemaSequence.getMaxOccurs());
+ metainfHolder.addMinOccurs(sequenceQName,xmlSchemaSequence.getMinOccurs());
+
+
} else {
- process(items, metainfHolder, true, parentSchema);
+ if (options.isBackwordCompatibilityMode()) {
+ process(parentElementQName,items, metainfHolder, false, parentSchema);
+ } else {
+ process(parentElementQName,items, metainfHolder, true, parentSchema);
+ }
}
+
} else if (particle instanceof XmlSchemaAll) {
XmlSchemaObjectCollection items = ((XmlSchemaAll) particle).getItems();
- process(items, metainfHolder, false, parentSchema);
+ process(parentElementQName,items, metainfHolder, false, parentSchema);
} else if (particle instanceof XmlSchemaChoice) {
+ XmlSchemaChoice xmlSchemaChoice = (XmlSchemaChoice) particle;
XmlSchemaObjectCollection items = ((XmlSchemaChoice) particle).getItems();
- metainfHolder.setChoice(true);
- process(items, metainfHolder, false, parentSchema);
+
+ if ((xmlSchemaChoice.getMaxOccurs() > 1)) {
+ // we have to process many sequence types
+ BeanWriterMetaInfoHolder beanWriterMetaInfoHolder = new BeanWriterMetaInfoHolder();
+ beanWriterMetaInfoHolder.setChoice(true);
+ process(parentElementQName,items, beanWriterMetaInfoHolder, false, parentSchema);
+ beanWriterMetaInfoHolder.setParticleClass(true);
+ QName choiceQName = new QName(parentElementQName.getNamespaceURI(),
+ parentElementQName.getLocalPart() + "Choice");
+ String javaClassName = writeComplexParticle(choiceQName,beanWriterMetaInfoHolder);
+ processedTypemap.put(choiceQName, javaClassName);
+
+ // add this as an array to the original class
+ metainfHolder.registerMapping(choiceQName,
+ choiceQName,
+ findClassName(choiceQName,true),
+ SchemaConstants.ARRAY_TYPE);
+ metainfHolder.setOrdered(true);
+ metainfHolder.setHasParticleType(true);
+ metainfHolder.registerQNameIndex(choiceQName,metainfHolder.getOrderStartPoint() + 1);
+ metainfHolder.addtStatus(choiceQName,SchemaConstants.PARTICLE_TYPE_ELEMENT);
+ metainfHolder.addMaxOccurs(choiceQName,xmlSchemaChoice.getMaxOccurs());
+ metainfHolder.addMinOccurs(choiceQName,xmlSchemaChoice.getMinOccurs());
+
+ } else {
+ metainfHolder.setChoice(true);
+ process(parentElementQName,items, metainfHolder, false, parentSchema);
+ }
+
}
}
/**
+ *
+ * @param parentElementQName - this could either be the complex type parentElementQName or element parentElementQName
* @param items
* @param metainfHolder
* @param order
+ * @param parentSchema
* @throws SchemaCompilationException
*/
- private void process(XmlSchemaObjectCollection items,
+ private void process(QName parentElementQName,
+ XmlSchemaObjectCollection items,
BeanWriterMetaInfoHolder metainfHolder,
boolean order,
XmlSchema parentSchema) throws SchemaCompilationException {
@@ -1671,6 +1770,8 @@
Map processedElementTypeMap = new LinkedHashMap();
List localNillableList = new ArrayList();
+ Map particleQNameMap = new HashMap();
+
// this list is used to keep the details of the
// elements within a choice withing sequence
List innerChoiceElementList = new ArrayList();
@@ -1704,6 +1805,53 @@
}
//we do not register the array status for the any type
processedElementArrayStatusMap.put(any, isArray(any) ? Boolean.TRUE : Boolean.FALSE);
+ } else if (item instanceof XmlSchemaSequence) {
+ // we have to process many sequence types
+
+ XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence) item;
+ if (xmlSchemaSequence.getItems().getCount() > 0) {
+ BeanWriterMetaInfoHolder beanWriterMetaInfoHolder = new BeanWriterMetaInfoHolder();
+ process(parentElementQName, xmlSchemaSequence.getItems(), beanWriterMetaInfoHolder, true, parentSchema);
+ beanWriterMetaInfoHolder.setParticleClass(true);
+ QName sequenceQName = new QName(parentElementQName.getNamespaceURI(),
+ parentElementQName.getLocalPart() + "Sequence" + getNextTypeSuffix());
+ String javaClassName = writeComplexParticle(sequenceQName, beanWriterMetaInfoHolder);
+ processedTypemap.put(sequenceQName, javaClassName);
+
+ //put the partical to array
+ Boolean isArray = xmlSchemaSequence.getMaxOccurs() > 1 ? Boolean.TRUE : Boolean.FALSE;
+ processedElementArrayStatusMap.put(item, isArray);
+ particleQNameMap.put(item, sequenceQName);
+
+ if (order) {
+ elementOrderMap.put(item, new Integer(sequenceCounter));
+ }
+ }
+
+ } else if (item instanceof XmlSchemaChoice) {
+ // we have to process many sequence types
+
+ XmlSchemaChoice xmlSchemaChoice = (XmlSchemaChoice) item;
+ if (xmlSchemaChoice.getItems().getCount() > 0) {
+ BeanWriterMetaInfoHolder beanWriterMetaInfoHolder = new BeanWriterMetaInfoHolder();
+ beanWriterMetaInfoHolder.setChoice(true);
+ process(parentElementQName, xmlSchemaChoice.getItems(), beanWriterMetaInfoHolder, false, parentSchema);
+ beanWriterMetaInfoHolder.setParticleClass(true);
+ QName choiceQName = new QName(parentElementQName.getNamespaceURI(),
+ parentElementQName.getLocalPart() + "Choice" + getNextTypeSuffix());
+ String javaClassName = writeComplexParticle(choiceQName, beanWriterMetaInfoHolder);
+ processedTypemap.put(choiceQName, javaClassName);
+
+ //put the partical to array
+ Boolean isArray = xmlSchemaChoice.getMaxOccurs() > 1 ? Boolean.TRUE : Boolean.FALSE;
+ processedElementArrayStatusMap.put(item, isArray);
+ particleQNameMap.put(item, choiceQName);
+
+ if (order) {
+ elementOrderMap.put(item, new Integer(sequenceCounter));
+ }
+ }
+
} else if (order && (item instanceof XmlSchemaChoice)) {
// this is a tempory patch for process only inner sequence choices
@@ -1849,6 +1997,52 @@
//record the order in the metainf holder for the any
Integer integer = (Integer) elementOrderMap.get(any);
metainfHolder.registerQNameIndex(anyElementFieldName,
+ startingItemNumberOrder + integer.intValue());
+ }
+ } else if (child instanceof XmlSchemaSequence) {
+ XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence) child;
+ QName sequenceQName = (QName) particleQNameMap.get(child);
+ boolean isArray = xmlSchemaSequence.getMaxOccurs() > 1;
+
+ // add this as an array to the original class
+ metainfHolder.registerMapping(sequenceQName,
+ sequenceQName,
+ findClassName(sequenceQName, isArray));
+ if (isArray) {
+ metainfHolder.addtStatus(sequenceQName, SchemaConstants.ARRAY_TYPE);
+ }
+ metainfHolder.addtStatus(sequenceQName, SchemaConstants.PARTICLE_TYPE_ELEMENT);
+ metainfHolder.addMaxOccurs(sequenceQName, xmlSchemaSequence.getMaxOccurs());
+ metainfHolder.addMinOccurs(sequenceQName, xmlSchemaSequence.getMinOccurs());
+ metainfHolder.setHasParticleType(true);
+
+ if (order) {
+ //record the order in the metainf holder for the any
+ Integer integer = (Integer) elementOrderMap.get(child);
+ metainfHolder.registerQNameIndex(sequenceQName,
+ startingItemNumberOrder + integer.intValue());
+ }
+ } else if (child instanceof XmlSchemaChoice) {
+ XmlSchemaChoice xmlSchemaChoice = (XmlSchemaChoice) child;
+ QName choiceQName = (QName) particleQNameMap.get(child);
+ boolean isArray = xmlSchemaChoice.getMaxOccurs() > 1;
+
+ // add this as an array to the original class
+ metainfHolder.registerMapping(choiceQName,
+ choiceQName,
+ findClassName(choiceQName, isArray));
+ if (isArray) {
+ metainfHolder.addtStatus(choiceQName, SchemaConstants.ARRAY_TYPE);
+ }
+ metainfHolder.addtStatus(choiceQName, SchemaConstants.PARTICLE_TYPE_ELEMENT);
+ metainfHolder.addMaxOccurs(choiceQName, xmlSchemaChoice.getMaxOccurs());
+ metainfHolder.addMinOccurs(choiceQName, xmlSchemaChoice.getMinOccurs());
+ metainfHolder.setHasParticleType(true);
+
+ if (order) {
+ //record the order in the metainf holder for the any
+ Integer integer = (Integer) elementOrderMap.get(child);
+ metainfHolder.registerQNameIndex(choiceQName,
startingItemNumberOrder + integer.intValue());
}
}
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaConstants.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaConstants.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/SchemaConstants.java Thu May 3 22:34:32 2007
@@ -81,14 +81,15 @@
public static final QName XSD_TOKEN = new QName(URI_DEFAULT_SCHEMA_XSD, "token");
//bit patterns for the types
- public static final int ATTRIBUTE_TYPE = 0x01;
- public static final int ELEMENT_TYPE = 0x02;
- public static final int ARRAY_TYPE = 0x04;
- public static final int ANY_TYPE = 0x08;
- public static final int BINARY_TYPE = 0x10;
- public static final int OPTIONAL_TYPE = 0x20;
- public static final int SIMPLE_TYPE_OR_CONTENT = 0x40;
- public static final int INNER_CHOICE_ELEMENT = 0x80;
+ public static final int ATTRIBUTE_TYPE = 0x0001;
+ public static final int ELEMENT_TYPE = 0x0002;
+ public static final int ARRAY_TYPE = 0x0004;
+ public static final int ANY_TYPE = 0x0008;
+ public static final int BINARY_TYPE = 0x0010;
+ public static final int OPTIONAL_TYPE = 0x0020;
+ public static final int SIMPLE_TYPE_OR_CONTENT = 0x0040;
+ public static final int INNER_CHOICE_ELEMENT = 0x0080;
+ public static final int PARTICLE_TYPE_ELEMENT = 0x0100;
public static class SchemaPropertyNames{
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl Thu May 3 22:34:32 2007
@@ -48,6 +48,8 @@
<xsl:variable name="extension" select="@extension"/>
<xsl:variable name="restriction" select="@restriction"/>
<xsl:variable name="mapperClass" select="@mapperClass"/>
+ <xsl:variable name="particleClass" select="@particleClass"/>
+ <xsl:variable name="hasParticleType" select="@hasParticleType"/>
<!-- write the class header. this should be done only when unwrapped -->
<xsl:if test="not(not(@unwrapped) or (@skip-write))">
@@ -793,27 +795,36 @@
</xsl:when>
<xsl:when test="@type or @anon">
- <!-- For a type write the passed in QName first-->
+ <!-- For a type write the passed in QName first
+ we create special particle classes for Sequence,Choice and all elements to
+ handle maxOccurs correctly. So these classes should not write parent Qname-->
- java.lang.String prefix = parentQName.getPrefix();
- java.lang.String namespace = parentQName.getNamespaceURI();
- if (namespace != null) {
- java.lang.String writerPrefix = xmlWriter.getPrefix(namespace);
- if (writerPrefix != null) {
- xmlWriter.writeStartElement(namespace, parentQName.getLocalPart());
- } else {
- if (prefix == null) {
- prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
- }
+ java.lang.String prefix = null;
+ java.lang.String namespace = null;
+ <xsl:if test="not($particleClass)">
- xmlWriter.writeStartElement(prefix, parentQName.getLocalPart(), namespace);
- xmlWriter.writeNamespace(prefix, namespace);
- xmlWriter.setPrefix(prefix, namespace);
+ prefix = parentQName.getPrefix();
+ namespace = parentQName.getNamespaceURI();
+
+ if (namespace != null) {
+ java.lang.String writerPrefix = xmlWriter.getPrefix(namespace);
+ if (writerPrefix != null) {
+ xmlWriter.writeStartElement(namespace, parentQName.getLocalPart());
+ } else {
+ if (prefix == null) {
+ prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
+ }
+
+ xmlWriter.writeStartElement(prefix, parentQName.getLocalPart(), namespace);
+ xmlWriter.writeNamespace(prefix, namespace);
+ xmlWriter.setPrefix(prefix, namespace);
+ }
+ } else {
+ xmlWriter.writeStartElement(parentQName.getLocalPart());
}
- } else {
- xmlWriter.writeStartElement(parentQName.getLocalPart());
- }
+ </xsl:if>
+
<!-- write the type attribute if needed -->
<xsl:if test="$extension">
@@ -915,6 +926,7 @@
<xsl:variable name="propertyType"><xsl:value-of select="@type"/></xsl:variable>
<xsl:variable name="propertyBaseType"><xsl:value-of select="@arrayBaseType"/></xsl:variable>
+ <xsl:variable name="particleClassType" select="@particleClassType"></xsl:variable>
<xsl:if test="$min=0 or $choice or (@innerchoice='yes')"> if (<xsl:value-of select="$settingTracker"/>){</xsl:if>
<xsl:choose>
@@ -953,89 +965,126 @@
}
</xsl:when>
<xsl:otherwise>
- if (<xsl:value-of select="$varName"/>==null){
- throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
- }
- <xsl:value-of select="$varName"/>.serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
- factory,xmlWriter);
+ <xsl:choose>
+ <xsl:when test="$particleClassType">
+ if (<xsl:value-of select="$varName"/>==null){
+ throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
+ }
+ <xsl:value-of select="$varName"/>.serialize(null,factory,xmlWriter);
+ </xsl:when>
+ <xsl:otherwise>
+ if (<xsl:value-of select="$varName"/>==null){
+ throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
+ }
+ <xsl:value-of select="$varName"/>.serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+ factory,xmlWriter);
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:when test="@ours and @array and not(@default)">
- if (<xsl:value-of select="$varName"/>!=null){
- for (int i = 0;i < <xsl:value-of select="$varName"/>.length;i++){
- if (<xsl:value-of select="$varName"/>[i] != null){
- <xsl:value-of select="$varName"/>[i].serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
- factory,xmlWriter);
- } else {
- <xsl:choose>
- <xsl:when test="@nillable">
- // write null attribute
- java.lang.String namespace2 = "<xsl:value-of select="$namespace"/>";
- if (! namespace2.equals("")) {
- java.lang.String prefix2 = xmlWriter.getPrefix(namespace2);
-
- if (prefix2 == null) {
- prefix2 = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
-
- xmlWriter.writeStartElement(prefix2,"<xsl:value-of select="$propertyName"/>", namespace2);
- xmlWriter.writeNamespace(prefix2, namespace2);
- xmlWriter.setPrefix(prefix2, namespace2);
+ <xsl:choose>
+ <xsl:when test="$particleClassType">
+ <!-- if it is a particle clase that can only be minOccurs zero or not -->
+ if (<xsl:value-of select="$varName"/>!=null){
+ for (int i = 0;i < <xsl:value-of select="$varName"/>.length;i++){
+ if (<xsl:value-of select="$varName"/>[i] != null){
+ <xsl:value-of select="$varName"/>[i].serialize(null,factory,xmlWriter);
+ } else {
+ <xsl:choose>
+ <xsl:when test="$min=0">
+ // we don't have to do any thing since minOccures is zero
+ </xsl:when>
+ <xsl:otherwise>
+ throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
+ </xsl:otherwise>
+ </xsl:choose>
+ }
- } else {
- xmlWriter.writeStartElement(namespace2,"<xsl:value-of select="$propertyName"/>");
- }
+ }
+ } else {
+ throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
+ }
+ </xsl:when>
+ <xsl:otherwise>
+ if (<xsl:value-of select="$varName"/>!=null){
+ for (int i = 0;i < <xsl:value-of select="$varName"/>.length;i++){
+ if (<xsl:value-of select="$varName"/>[i] != null){
+ <xsl:value-of select="$varName"/>[i].serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+ factory,xmlWriter);
+ } else {
+ <xsl:choose>
+ <xsl:when test="@nillable">
+ // write null attribute
+ java.lang.String namespace2 = "<xsl:value-of select="$namespace"/>";
+ if (! namespace2.equals("")) {
+ java.lang.String prefix2 = xmlWriter.getPrefix(namespace2);
+
+ if (prefix2 == null) {
+ prefix2 = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
+
+ xmlWriter.writeStartElement(prefix2,"<xsl:value-of select="$propertyName"/>", namespace2);
+ xmlWriter.writeNamespace(prefix2, namespace2);
+ xmlWriter.setPrefix(prefix2, namespace2);
- } else {
- xmlWriter.writeStartElement("<xsl:value-of select="$propertyName"/>");
- }
+ } else {
+ xmlWriter.writeStartElement(namespace2,"<xsl:value-of select="$propertyName"/>");
+ }
- // write the nil attribute
- writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
- xmlWriter.writeEndElement();
- </xsl:when>
- <xsl:when test="$min=0">
- // we don't have to do any thing since minOccures is zero
- </xsl:when>
- <xsl:otherwise>
- throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
- </xsl:otherwise>
- </xsl:choose>
- }
+ } else {
+ xmlWriter.writeStartElement("<xsl:value-of select="$propertyName"/>");
+ }
- }
- } else {
- <xsl:choose>
- <xsl:when test="@nillable">
- // write null attribute
- java.lang.String namespace2 = "<xsl:value-of select="$namespace"/>";
- if (! namespace2.equals("")) {
- java.lang.String prefix2 = xmlWriter.getPrefix(namespace2);
+ // write the nil attribute
+ writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
+ xmlWriter.writeEndElement();
+ </xsl:when>
+ <xsl:when test="$min=0">
+ // we don't have to do any thing since minOccures is zero
+ </xsl:when>
+ <xsl:otherwise>
+ throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
+ </xsl:otherwise>
+ </xsl:choose>
+ }
- if (prefix2 == null) {
- prefix2 = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
+ }
+ } else {
+ <xsl:choose>
+ <xsl:when test="@nillable">
+ // write null attribute
+ java.lang.String namespace2 = "<xsl:value-of select="$namespace"/>";
+ if (! namespace2.equals("")) {
+ java.lang.String prefix2 = xmlWriter.getPrefix(namespace2);
+
+ if (prefix2 == null) {
+ prefix2 = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
+
+ xmlWriter.writeStartElement(prefix2,"<xsl:value-of select="$propertyName"/>", namespace2);
+ xmlWriter.writeNamespace(prefix2, namespace2);
+ xmlWriter.setPrefix(prefix2, namespace2);
- xmlWriter.writeStartElement(prefix2,"<xsl:value-of select="$propertyName"/>", namespace2);
- xmlWriter.writeNamespace(prefix2, namespace2);
- xmlWriter.setPrefix(prefix2, namespace2);
+ } else {
+ xmlWriter.writeStartElement(namespace2,"<xsl:value-of select="$propertyName"/>");
+ }
- } else {
- xmlWriter.writeStartElement(namespace2,"<xsl:value-of select="$propertyName"/>");
- }
+ } else {
+ xmlWriter.writeStartElement("<xsl:value-of select="$propertyName"/>");
+ }
- } else {
- xmlWriter.writeStartElement("<xsl:value-of select="$propertyName"/>");
- }
+ // write the nil attribute
+ writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
+ xmlWriter.writeEndElement();
+ </xsl:when>
+ <xsl:otherwise>
+ throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
+ </xsl:otherwise>
+ </xsl:choose>
+ }
+ </xsl:otherwise>
+ </xsl:choose>
- // write the nil attribute
- writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
- xmlWriter.writeEndElement();
- </xsl:when>
- <xsl:otherwise>
- throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
- </xsl:otherwise>
- </xsl:choose>
- }
</xsl:when>
<xsl:when test="@default and @array">
@@ -1478,7 +1527,9 @@
</xsl:for-each>
<!-- write the end element for the type-->
- xmlWriter.writeEndElement();
+ <xsl:if test="not($particleClass)">
+ xmlWriter.writeEndElement();
+ </xsl:if>
<!-- end of when for type & anon -->
</xsl:when>
@@ -2445,7 +2496,7 @@
</xsl:for-each>
- <xsl:if test="($isType or $anon) and not($simple)">
+ <xsl:if test="($isType or $anon) and not($simple) and not($particleClass)">
<!-- Skip the outer start element in order to process the subelements. -->
reader.next();
</xsl:if>
@@ -2459,7 +2510,7 @@
</xsl:for-each>
<xsl:if test="property[not(@attribute)]">
- <xsl:if test="$unordered"> <!-- Properties can be in any order -->
+ <xsl:if test="$unordered and not($particleClass)"> <!-- Properties can be in any order -->
while(!reader.isEndElement()) {
if (reader.isStartElement() <xsl:if test="$simple"> || reader.hasText()</xsl:if>){
</xsl:if>
@@ -2481,11 +2532,12 @@
<xsl:variable name="basePropertyType"><xsl:value-of select="@arrayBaseType"/></xsl:variable>
<xsl:variable name="namespace"><xsl:value-of select="@nsuri"/></xsl:variable>
<xsl:variable name="min"><xsl:value-of select="@minOccurs"/></xsl:variable>
+ <xsl:variable name="particleClassType" select="@particleClassType"></xsl:variable>
<xsl:variable name="propQName">new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>")</xsl:variable>
<xsl:choose>
- <xsl:when test="$unordered"> <!-- One property per iteration if unordered -->
+ <xsl:when test="$unordered and not($choice and $hasParticleType)"> <!-- One property per iteration if unordered -->
<xsl:if test="position()>1">
else
</xsl:if>
@@ -2502,7 +2554,12 @@
if (reader.isStartElement()){
</xsl:when>
<xsl:otherwise>
- if (reader.isStartElement() <xsl:if test="$simple"> || reader.hasText()</xsl:if> <xsl:if test="not($simple)">&& <xsl:value-of select="$propQName"/>.equals(reader.getName())</xsl:if>){
+ <xsl:if test="$particleClassType and ($choice or ($min=0))">
+ <!-- since we can not validate the parser before going to next class
+ we have to sollow an excpetions : todo find a better solsution-->
+ try{
+ </xsl:if>
+ if (reader.isStartElement() <xsl:if test="$simple"> || reader.hasText()</xsl:if> <xsl:if test="not($simple) and not($particleClassType)">&& <xsl:value-of select="$propQName"/>.equals(reader.getName())</xsl:if>){
</xsl:otherwise>
</xsl:choose>
@@ -2515,58 +2572,85 @@
<xsl:variable name="basePropertyType"><xsl:value-of select="@arrayBaseType"/></xsl:variable>
<xsl:choose>
<xsl:when test="@ours">
- <xsl:if test="@nillable">
- nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance","nil");
- if ("true".equals(nillableValue) || "1".equals(nillableValue)){
- <xsl:value-of select="$listName"/>.add(null);
- reader.next();
- } else {
- </xsl:if>
- <xsl:value-of select="$listName"/>.add(<xsl:value-of select="$basePropertyType"/>.Factory.parse(reader));
- <xsl:if test="@nillable">}</xsl:if>
- //loop until we find a start element that is not part of this array
- boolean <xsl:value-of select="$loopBoolName"/> = false;
- while(!<xsl:value-of select="$loopBoolName"/>){
- // We should be at the end element, but make sure
- while (!reader.isEndElement())
- reader.next();
- // Step out of this element
- reader.next();
- // Step to next element event.
- while (!reader.isStartElement() && !reader.isEndElement())
- reader.next();
- if (reader.isEndElement()){
- //two continuous end elements means we are exiting the xml structure
- <xsl:value-of select="$loopBoolName"/> = true;
- } else {
- if (<xsl:value-of select="$propQName"/>.equals(reader.getName())){
- <xsl:if test="@nillable">
+ <xsl:choose>
+ <xsl:when test="$particleClassType">
+ <xsl:value-of select="$listName"/>.add(<xsl:value-of select="$basePropertyType"/>.Factory.parse(reader));
+ //loop until we find a start element that is not part of this array
+ boolean <xsl:value-of select="$loopBoolName"/> = false;
+ while(!<xsl:value-of select="$loopBoolName"/>){
+
+ // Step to next element event.
+ while (!reader.isStartElement() && !reader.isEndElement())
+ reader.next();
+ if (reader.isEndElement()){
+ //two continuous end elements means we are exiting the xml structure
+ <xsl:value-of select="$loopBoolName"/> = true;
+ } else {
+ <xsl:value-of select="$listName"/>.add(<xsl:value-of select="$basePropertyType"/>.Factory.parse(reader));
+ }
+ }
+ // call the converter utility to convert and set the array
+ object.set<xsl:value-of select="$javaName"/>((<xsl:value-of select="$propertyType"/>)
+ org.apache.axis2.databinding.utils.ConverterUtil.convertToArray(
+ <xsl:value-of select="$basePropertyType"/>.class,
+ <xsl:value-of select="$listName"/>));
+
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="@nillable">
nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance","nil");
if ("true".equals(nillableValue) || "1".equals(nillableValue)){
<xsl:value-of select="$listName"/>.add(null);
reader.next();
} else {
</xsl:if>
- <xsl:value-of select="$listName"/>.add(<xsl:value-of select="$basePropertyType"/>.Factory.parse(reader));
+ <xsl:value-of select="$listName"/>.add(<xsl:value-of select="$basePropertyType"/>.Factory.parse(reader));
<xsl:if test="@nillable">}</xsl:if>
- }else{
- <xsl:value-of select="$loopBoolName"/> = true;
- }
- }
- }
- // call the converter utility to convert and set the array
- <xsl:choose>
- <xsl:when test="$basePropertyType='java.lang.String'">
- object.set<xsl:value-of select="$javaName"/>((<xsl:value-of select="$propertyType"/>)
- <xsl:value-of select="$listName"/>.toArray(new <xsl:value-of select="$basePropertyType"/>[<xsl:value-of select="$listName"/>.size()]));
- </xsl:when>
- <xsl:otherwise>
- object.set<xsl:value-of select="$javaName"/>((<xsl:value-of select="$propertyType"/>)
- org.apache.axis2.databinding.utils.ConverterUtil.convertToArray(
- <xsl:value-of select="$basePropertyType"/>.class,
- <xsl:value-of select="$listName"/>));
- </xsl:otherwise>
- </xsl:choose>
+ //loop until we find a start element that is not part of this array
+ boolean <xsl:value-of select="$loopBoolName"/> = false;
+ while(!<xsl:value-of select="$loopBoolName"/>){
+ // We should be at the end element, but make sure
+ while (!reader.isEndElement())
+ reader.next();
+ // Step out of this element
+ reader.next();
+ // Step to next element event.
+ while (!reader.isStartElement() && !reader.isEndElement())
+ reader.next();
+ if (reader.isEndElement()){
+ //two continuous end elements means we are exiting the xml structure
+ <xsl:value-of select="$loopBoolName"/> = true;
+ } else {
+ if (<xsl:value-of select="$propQName"/>.equals(reader.getName())){
+ <xsl:if test="@nillable">
+ nillableValue = reader.getAttributeValue("http://www.w3.org/2001/XMLSchema-instance","nil");
+ if ("true".equals(nillableValue) || "1".equals(nillableValue)){
+ <xsl:value-of select="$listName"/>.add(null);
+ reader.next();
+ } else {
+ </xsl:if>
+ <xsl:value-of select="$listName"/>.add(<xsl:value-of select="$basePropertyType"/>.Factory.parse(reader));
+ <xsl:if test="@nillable">}</xsl:if>
+ }else{
+ <xsl:value-of select="$loopBoolName"/> = true;
+ }
+ }
+ }
+ // call the converter utility to convert and set the array
+ <xsl:choose>
+ <xsl:when test="$basePropertyType='java.lang.String'">
+ object.set<xsl:value-of select="$javaName"/>((<xsl:value-of select="$propertyType"/>)
+ <xsl:value-of select="$listName"/>.toArray(new <xsl:value-of select="$basePropertyType"/>[<xsl:value-of select="$listName"/>.size()]));
+ </xsl:when>
+ <xsl:otherwise>
+ object.set<xsl:value-of select="$javaName"/>((<xsl:value-of select="$propertyType"/>)
+ org.apache.axis2.databinding.utils.ConverterUtil.convertToArray(
+ <xsl:value-of select="$basePropertyType"/>.class,
+ <xsl:value-of select="$listName"/>));
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:when>
<!-- End of Array handling of ADB classes -->
@@ -2947,7 +3031,7 @@
}else{
</xsl:if>
object.set<xsl:value-of select="$javaName"/>(<xsl:value-of select="$propertyType"/>.Factory.parse(reader));
- <xsl:if test="$isType or $anon"> <!-- This is a subelement property to be consumed -->
+ <xsl:if test="($isType or $anon) and not($particleClassType)"> <!-- This is a subelement property to be consumed -->
reader.next();
</xsl:if>
<xsl:if test="@nillable">}</xsl:if>
@@ -3174,26 +3258,35 @@
throw new java.lang.RuntimeException("Unexpected subelement " + reader.getLocalName());
}
</xsl:if>
+ <xsl:if test="$particleClassType and ($choice or ($min=0))">
+ <!-- since we can not validate the parser before going to next class
+ we have to sollow an excpetions : todo find a better solsution-->
+ } catch (java.lang.Exception e) {}
+ </xsl:if>
</xsl:for-each>
<xsl:if test="$ordered"> <!-- pick up trailing cruft after final property before outer endElement and verify no trailing properties -->
while (!reader.isStartElement() && !reader.isEndElement())
reader.next();
- if (reader.isStartElement())
+ <xsl:if test="not($particleClass)">
+ if (reader.isStartElement())
// A start element we are not expecting indicates a trailing invalid property
throw new java.lang.RuntimeException("Unexpected subelement " + reader.getLocalName());
+ </xsl:if>
</xsl:if>
<xsl:if test="property[not(@attribute)]"> <!-- this if is needed to skip all this when there are no propoerties-->
- <xsl:if test="$unordered">
- <xsl:if test="not(property/enumFacet)">
+ <xsl:if test="$unordered and not($particleClass)">
+ <xsl:if test="not(property/enumFacet) and not($choice and $hasParticleType)">
else{
// A start element we are not expecting indicates an invalid parameter was passed
throw new java.lang.RuntimeException("Unexpected subelement " + reader.getLocalName());
}
</xsl:if>
- } else reader.next(); <!-- At neither a start nor an end element, skip it -->
- } // end of while loop
+ } else {
+ reader.next();
+ } <!-- At neither a start nor an end element, skip it -->
+ } // end of while loop
</xsl:if>
</xsl:if>
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/BeanWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/BeanWriter.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/BeanWriter.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/BeanWriter.java Thu May 3 22:34:32 2007
@@ -69,7 +69,7 @@
* @return Returns String.
* @throws SchemaCompilationException
*/
- public String write(XmlSchemaComplexType complexType, Map typeMap, BeanWriterMetaInfoHolder metainf)
+ public String write(QName qname, Map typeMap, BeanWriterMetaInfoHolder metainf)
throws SchemaCompilationException;
/**
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/CStructWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/CStructWriter.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/CStructWriter.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/CStructWriter.java Thu May 3 22:34:32 2007
@@ -181,12 +181,11 @@
*
* @see org.apache.axis2.schema.writer.BeanWriter
*/
- public String write(XmlSchemaComplexType complexType, Map typeMap, BeanWriterMetaInfoHolder metainf)
+ public String write(QName qName, Map typeMap, BeanWriterMetaInfoHolder metainf)
throws SchemaCompilationException {
try {
//determine the package for this type.
- QName qName = complexType.getQName();
return process(qName, metainf, typeMap, false);
} catch (SchemaCompilationException e) {
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java Thu May 3 22:34:32 2007
@@ -9,7 +9,6 @@
import org.apache.axis2.util.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.ws.commons.schema.XmlSchemaComplexType;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaSimpleType;
import org.apache.axiom.om.OMElement;
@@ -227,13 +226,12 @@
* @see BeanWriter#write(org.apache.ws.commons.schema.XmlSchemaComplexType,
* java.util.Map, org.apache.axis2.schema.BeanWriterMetaInfoHolder)
*/
- public String write(XmlSchemaComplexType complexType, Map typeMap,
+ public String write(QName qName, Map typeMap,
BeanWriterMetaInfoHolder metainf)
throws SchemaCompilationException {
try {
// determine the package for this type.
- QName qName = complexType.getQName();
return process(qName, metainf, typeMap, false);
} catch (SchemaCompilationException e) {
@@ -244,6 +242,8 @@
}
+
+
/**
* @throws Exception
* @see BeanWriter#writeBatch()
@@ -476,8 +476,7 @@
XSLTUtils.addAttribute(model, "name", className, rootElt);
XSLTUtils.addAttribute(model, "originalName", originalName, rootElt);
XSLTUtils.addAttribute(model, "package", packageName, rootElt);
- XSLTUtils
- .addAttribute(model, "nsuri", qName.getNamespaceURI(), rootElt);
+ XSLTUtils.addAttribute(model, "nsuri", qName.getNamespaceURI(), rootElt);
XSLTUtils.addAttribute(model, "nsprefix", isSuppressPrefixesMode ? "" : getPrefixForURI(qName
.getNamespaceURI(), qName.getPrefix()), rootElt);
@@ -534,6 +533,14 @@
XSLTUtils.addAttribute(model, "nillable", "yes", rootElt);
}
+ if (metainf.isParticleClass()) {
+ XSLTUtils.addAttribute(model, "particleClass", "yes", rootElt);
+ }
+
+ if (metainf.isHasParticleType()){
+ XSLTUtils.addAttribute(model, "hasParticleType", "yes", rootElt);
+ }
+
// populate all the information
populateInfo(metainf, model, rootElt, propertyNames, typeMap, false);
@@ -715,6 +722,11 @@
XSLTUtils.addAttribute(model, "restricted", "yes", property);
XSLTUtils.addAttribute(model, "occuranceChanged", "yes", property);
+ }
+
+ // set the is particle class
+ if (metainf.getParticleTypeStatusForQName(name)){
+ XSLTUtils.addAttribute(model, "particleClassType", "yes", property);
}
// what happed if this contain attributes
Added: webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/ExtendedSequenceLax.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/ExtendedSequenceLax.xsd?view=auto&rev=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/ExtendedSequenceLax.xsd (added)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/ExtendedSequenceLax.xsd Thu May 3 22:34:32 2007
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:p="http://www.w3.org/2002/ws/databinding/patterns/6/09/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ex="http://www.w3.org/2002/ws/databinding/examples/6/09/" targetNamespace="http://www.w3.org/2002/ws/databinding/examples/6/09/" elementFormDefault="qualified" attributeFormDefault="unqualified">
+ <xs:element xmlns:wsdl11="http://schemas.xmlsoap.org/wsdl/" xmlns:soap11enc="http://schemas.xmlsoap.org/soap/encoding/" name="extendedSequenceLax" type="ex:ExtendedSequenceLax"/>
+ <xs:complexType xmlns:wsdl11="http://schemas.xmlsoap.org/wsdl/" xmlns:soap11enc="http://schemas.xmlsoap.org/soap/encoding/" name="ExtendedSequenceLax">
+ <xs:sequence>
+ <xs:element name="firstName" type="xs:string"/>
+ <xs:element name="lastName" type="xs:string"/>
+ <xs:element name="extension" type="ex:LaxExtension" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:complexType xmlns:wsdl11="http://schemas.xmlsoap.org/wsdl/" xmlns:soap11enc="http://schemas.xmlsoap.org/soap/encoding/" name="LaxExtension">
+ <xs:sequence>
+ <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##targetNamespace"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema>
\ No newline at end of file
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/testattribute.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/testattribute.xsd?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/testattribute.xsd (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/test-resources/testsuite/testattribute.xsd Thu May 3 22:34:32 2007
@@ -32,5 +32,22 @@
</xs:attribute>
</xs:complexType>
</xs:element>
+ <xs:attributeGroup name="TestAttributeGroup">
+ <xs:attribute name="Attribute1"/>
+ <xs:attribute name="Attribute2"/>
+ </xs:attributeGroup>
+
+ <xs:element name="TestAttributeGroupElement">
+ <xs:complexType>
+ <xs:attributeGroup ref="tns:TestAttributeGroup"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="TestAll">
+ <xs:complexType>
+ <xs:all>
+ <xs:element name="test1" maxOccurs="1" minOccurs="0"/>
+ </xs:all>
+ </xs:complexType>
+ </xs:element>
</xs:schema>
Modified: webservices/axis2/branches/java/1_2/modules/adb-codegen/test/org/apache/axis2/schema/innerChoice/InnerChoiceTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/adb-codegen/test/org/apache/axis2/schema/innerChoice/InnerChoiceTest.java?view=diff&rev=535100&r1=535099&r2=535100
==============================================================================
--- webservices/axis2/branches/java/1_2/modules/adb-codegen/test/org/apache/axis2/schema/innerChoice/InnerChoiceTest.java (original)
+++ webservices/axis2/branches/java/1_2/modules/adb-codegen/test/org/apache/axis2/schema/innerChoice/InnerChoiceTest.java Thu May 3 22:34:32 2007
@@ -19,21 +19,25 @@
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.StAXUtils;
-import test.axis2.apache.org.TestInnerSequence1;
-import test.axis2.apache.org.TestInnerSequence2;
-import test.axis2.apache.org.TestInnerSequence3;
+import test.axis2.apache.org.*;
import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
import java.io.ByteArrayInputStream;
+import com.mynamespace.testinnerparticle.TestInnerParticle1Sequence_type0;
+
public class InnerChoiceTest extends TestCase {
public void testInnerChoice1() {
TestInnerSequence1 testSequence = new TestInnerSequence1();
testSequence.setSequence1("test sequence");
testSequence.setSequence2(3);
- testSequence.setChoice1("test choice");
- testSequence.setChoice2(5);
+
+ TestInnerSequence1Choice_type2 testInnerSequence1Choice_type2 = new TestInnerSequence1Choice_type2();
+ testInnerSequence1Choice_type2.setChoice1("test choice");
+ testInnerSequence1Choice_type2.setChoice2(5);
+ testSequence.setTestInnerSequence1Choice_type2(testInnerSequence1Choice_type2);
OMElement omElement = testSequence.getOMElement(TestInnerSequence1.MY_QNAME,
OMAbstractFactory.getSOAP12Factory());
@@ -44,7 +48,14 @@
TestInnerSequence1 result = TestInnerSequence1.Factory.parse(xmlReader);
assertEquals(result.getSequence1(), "test sequence");
assertEquals(result.getSequence2(), 3);
- assertEquals(result.getChoice2(), 5);
+ assertEquals(result.getTestInnerSequence1Choice_type2().getChoice2(), 5);
+
+ // writtig result back
+ XMLStreamWriter xmlStreamWriter = StAXUtils.createXMLStreamWriter(System.out);
+ result.serialize(new javax.xml.namespace.QName("org.apache.axis2.test", "TestInnerSequence1", "foo")
+ , OMAbstractFactory.getSOAP11Factory(), xmlStreamWriter);
+ xmlStreamWriter.flush();
+
} catch (Exception e) {
fail();
}
@@ -54,7 +65,9 @@
TestInnerSequence2 testSequence = new TestInnerSequence2();
testSequence.setSequence1("sequence");
testSequence.setSequence2(3);
- testSequence.setChoice1(new String[]{"choice1", "choice2"});
+ TestInnerSequence2Choice_type1 testInnerSequence2Choice_type1 = new TestInnerSequence2Choice_type1();
+ testInnerSequence2Choice_type1.setChoice1(new String[]{"choice1", "choice2"});
+ testSequence.setTestInnerSequence2Choice_type1(testInnerSequence2Choice_type1);
OMElement omElement = testSequence.getOMElement(TestInnerSequence2.MY_QNAME,
OMAbstractFactory.getSOAP12Factory());
@@ -65,7 +78,7 @@
TestInnerSequence2 result = TestInnerSequence2.Factory.parse(xmlReader);
assertEquals(result.getSequence1(), "sequence");
assertEquals(result.getSequence2(), 3);
- assertTrue(isEqual(result.getChoice1(), new String[]{"choice1", "choice2"}));
+ assertTrue(isEqual(result.getTestInnerSequence2Choice_type1().getChoice1(), new String[]{"choice1", "choice2"}));
} catch (Exception e) {
fail();
}
@@ -75,7 +88,9 @@
TestInnerSequence2 testSequence = new TestInnerSequence2();
testSequence.setSequence1("sequence");
testSequence.setSequence2(3);
- testSequence.setChoice2(new int[]{2, 4});
+ TestInnerSequence2Choice_type1 testInnerSequence2Choice_type1 = new TestInnerSequence2Choice_type1();
+ testInnerSequence2Choice_type1.setChoice2(new int[]{2, 4});
+ testSequence.setTestInnerSequence2Choice_type1(testInnerSequence2Choice_type1);
OMElement omElement = testSequence.getOMElement(TestInnerSequence2.MY_QNAME,
OMAbstractFactory.getSOAP12Factory());
@@ -86,7 +101,7 @@
TestInnerSequence2 result = TestInnerSequence2.Factory.parse(xmlReader);
assertEquals(result.getSequence1(), "sequence");
assertEquals(result.getSequence2(), 3);
- assertTrue(isEqual(result.getChoice2(), new int[]{2, 4}));
+ assertTrue(isEqual(result.getTestInnerSequence2Choice_type1().getChoice2(), new int[]{2, 4}));
} catch (Exception e) {
fail();
}
@@ -96,7 +111,9 @@
TestInnerSequence3 testSequence = new TestInnerSequence3();
testSequence.setSequence1("sequence");
testSequence.setSequence2(3);
- testSequence.setChoice1(new String[]{"choice1",null, "choice2"});
+ TestInnerSequence3Choice_type0 testInnerSequence3Choice_type0 = new TestInnerSequence3Choice_type0();
+ testInnerSequence3Choice_type0.setChoice1(new String[]{"choice1", null, "choice2"});
+ testSequence.setTestInnerSequence3Choice_type0(testInnerSequence3Choice_type0);
OMElement omElement = testSequence.getOMElement(TestInnerSequence3.MY_QNAME,
OMAbstractFactory.getSOAP12Factory());
@@ -107,32 +124,35 @@
TestInnerSequence3 result = TestInnerSequence3.Factory.parse(xmlReader);
assertEquals(result.getSequence1(), "sequence");
assertEquals(result.getSequence2(), 3);
- assertTrue(isEqual(result.getChoice1(), new String[]{"choice1",null, "choice2"}));
+ assertTrue(isEqual(result.getTestInnerSequence3Choice_type0().getChoice1(), new String[]{"choice1", null, "choice2"}));
} catch (Exception e) {
fail();
}
}
public void testInnerChoice32() {
- TestInnerSequence3 testSequence = new TestInnerSequence3();
- testSequence.setSequence1("sequence");
- testSequence.setSequence2(3);
- testSequence.setChoice2(new int[]{2,Integer.MIN_VALUE,6});
-
- OMElement omElement = testSequence.getOMElement(TestInnerSequence3.MY_QNAME,
- OMAbstractFactory.getSOAP12Factory());
- try {
- String omElementString = omElement.toStringWithConsume();
- System.out.println("OMelement ==> " + omElementString);
- XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
- TestInnerSequence3 result = TestInnerSequence3.Factory.parse(xmlReader);
- assertEquals(result.getSequence1(), "sequence");
- assertEquals(result.getSequence2(), 3);
- assertTrue(isEqual(result.getChoice2(), new int[]{2,Integer.MIN_VALUE,6}));
- } catch (Exception e) {
- fail();
- }
+ TestInnerSequence3 testSequence = new TestInnerSequence3();
+ testSequence.setSequence1("sequence");
+ testSequence.setSequence2(3);
+ TestInnerSequence3Choice_type0 testInnerSequence3Choice_type0 = new TestInnerSequence3Choice_type0();
+ testInnerSequence3Choice_type0.setChoice2(new int[]{2, Integer.MIN_VALUE, 6});
+ testSequence.setTestInnerSequence3Choice_type0(testInnerSequence3Choice_type0);
+
+
+ OMElement omElement = testSequence.getOMElement(TestInnerSequence3.MY_QNAME,
+ OMAbstractFactory.getSOAP12Factory());
+ try {
+ String omElementString = omElement.toStringWithConsume();
+ System.out.println("OMelement ==> " + omElementString);
+ XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+ TestInnerSequence3 result = TestInnerSequence3.Factory.parse(xmlReader);
+ assertEquals(result.getSequence1(), "sequence");
+ assertEquals(result.getSequence2(), 3);
+ assertTrue(isEqual(result.getTestInnerSequence3Choice_type0().getChoice2(), new int[]{2, Integer.MIN_VALUE, 6}));
+ } catch (Exception e) {
+ fail();
}
+ }
private boolean isEqual(String[] test1, String[] test2) {
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org