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 &lt; <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 &lt; <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 &lt; <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)">&amp;&amp; <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)">&amp;&amp; <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() &amp;&amp; !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() &amp;&amp; !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() &amp;&amp; !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() &amp;&amp; !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