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/02/08 12:03:36 UTC

svn commit: r504857 - in /webservices/axis2/trunk/java/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/choice/ test/or...

Author: amilas
Date: Thu Feb  8 03:03:35 2007
New Revision: 504857

URL: http://svn.apache.org/viewvc?view=rev&rev=504857
Log:
Add list support to ADB

Added:
    webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/choice.xsd
    webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/list.xsd
    webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/choice/
    webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/choice/ChiceTest.java
    webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/list/
    webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/list/ListTest.java
Modified:
    webservices/axis2/trunk/java/modules/adb-codegen/maven.xml
    webservices/axis2/trunk/java/modules/adb-codegen/pom.xml
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java

Modified: webservices/axis2/trunk/java/modules/adb-codegen/maven.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/maven.xml?view=diff&rev=504857&r1=504856&r2=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/maven.xml (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/maven.xml Thu Feb  8 03:03:35 2007
@@ -207,7 +207,27 @@
             <arg file="${testsuite.source.dir}/restrictions.xsd"/>
             <arg file="${schema.generated.src.dir}"/>
         </java> 
+        <!-- ################################################################### -->
+        <!-- All simple derived types xsd -->
+        <ant:echo>Compiling choice.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}/choice.xsd"/>
+            <arg file="${schema.generated.src.dir}"/>
+        </java>
 
+        <!-- ################################################################### -->
+        <!-- All simple derived types xsd -->
+        <ant:echo>Compiling list.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}/list.xsd"/>
+            <arg file="${schema.generated.src.dir}"/>
+        </java>
 
 
         <!-- ################################################################### -->

Modified: webservices/axis2/trunk/java/modules/adb-codegen/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/pom.xml?view=diff&rev=504857&r1=504856&r2=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/pom.xml (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/pom.xml Thu Feb  8 03:03:35 2007
@@ -296,6 +296,28 @@
             <arg file="${testsuite.source.dir}/restrictions.xsd"/>
             <arg file="${schema.generated.src.dir}"/>
         </java>
+       
+        <!-- ################################################################### -->
+        <!-- All simple derived types xsd -->
+        <ant:echo>Compiling choice.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}/choice.xsd"/>
+            <arg file="${schema.generated.src.dir}"/>
+        </java>
+
+        <!-- ################################################################### -->
+        <!-- All simple derived types xsd -->
+        <ant:echo>Compiling list.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}/list.xsd"/>
+            <arg file="${schema.generated.src.dir}"/>
+        </java>
 
 
 			  </tasks>

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java?view=diff&rev=504857&r1=504856&r2=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/BeanWriterMetaInfoHolder.java Thu Feb  8 03:03:35 2007
@@ -58,7 +58,10 @@
     protected String minInclusiveFacet = null;
 
     protected Map memberTypes = new HashMap();
+    protected QName itemTypeQName;
+    protected String itemTypeClassName;
     protected boolean isUnion;
+    protected boolean isList;
 
     protected List nillableQNameList = new ArrayList();
 
@@ -778,4 +781,32 @@
     public void addMemberType(QName qname,String className){
         this.memberTypes.put(qname,className);
     }
+
+
+
+    public boolean isList() {
+        return isList;
+    }
+
+    public void setList(boolean list) {
+        isList = list;
+    }
+
+    public QName getItemTypeQName() {
+        return itemTypeQName;
+    }
+
+    public void setItemTypeQName(QName itemTypeQName) {
+        this.itemTypeQName = itemTypeQName;
+    }
+
+    public String getItemTypeClassName() {
+        return itemTypeClassName;
+    }
+
+    public void setItemTypeClassName(String itemTypeClassName) {
+        this.itemTypeClassName = itemTypeClassName;
+    }
+
+
 }

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java?view=diff&rev=504857&r1=504856&r2=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java Thu Feb  8 03:03:35 2007
@@ -2006,9 +2006,21 @@
                 metaInfHolder.setUnion(true);
 
             } else if (content instanceof XmlSchemaSimpleTypeList) {
-                //todo - Handle lists here
-                throw new SchemaCompilationException(
-                        SchemaCompilerMessages.getMessage("schema.unsupportedcontenterror", "Simple Type List in " + simpleType.getQName()));
+                XmlSchemaSimpleTypeList simpleTypeList = (XmlSchemaSimpleTypeList) content;
+                QName itemTypeQName = simpleTypeList.getItemTypeName();
+
+                if (!isAlreadyProcessed(itemTypeQName)){
+                    XmlSchemaType simpleSchemaType = getType(parentSchema,itemTypeQName);
+                    if (simpleSchemaType instanceof XmlSchemaSimpleType){
+                        processSimpleSchemaType((XmlSchemaSimpleType)simpleSchemaType,null,parentSchema);
+                    }
+                }
+
+                String className = findClassName(itemTypeQName,false);
+                metaInfHolder.setList(true);
+                metaInfHolder.setItemTypeQName(itemTypeQName);
+                metaInfHolder.setItemTypeClassName(className);
+
             }
         }
         return metaInfHolder;

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl?view=diff&rev=504857&r1=504856&r2=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl Thu Feb  8 03:03:35 2007
@@ -40,6 +40,7 @@
         <xsl:variable name="isType" select="@type"/>
         <xsl:variable name="anon" select="@anon"/>
         <xsl:variable name="union" select="@union"/>
+        <xsl:variable name="list" select="@list"/>
 
         <xsl:variable name="nsuri" select="@nsuri"/>
         <xsl:variable name="originalName" select="@originalName"/>
@@ -551,6 +552,41 @@
 
         </xsl:if>
 
+        <xsl:if test="$list" >
+             <xsl:variable name="javaName"><xsl:value-of select="itemtype/@javaname"/></xsl:variable>
+             <xsl:variable name="varName">local<xsl:value-of select="itemtype/@javaname"/></xsl:variable>
+             <xsl:variable name="varType"><xsl:value-of select="itemtype/@type"/></xsl:variable>
+             <xsl:variable name="primitive"><xsl:value-of select="itemtype/@primitive"/></xsl:variable>
+
+             protected <xsl:value-of select="$varType"/>[]  <xsl:value-of select="$varName"/>;
+
+             public <xsl:value-of select="$varType"/>[] get<xsl:value-of select="$javaName"/>(){
+                return <xsl:value-of select="$varName"/>;
+             }
+
+             public void set<xsl:value-of select="$javaName"/>(<xsl:value-of select="$varType"/>[] itemList){
+                this.<xsl:value-of select="$varName"/> = itemList;
+             }
+
+            public java.lang.String toString() {
+                java.lang.StringBuffer outString = new java.lang.StringBuffer();
+                if (<xsl:value-of select="$varName"/> != null){
+                    for(int i = 0; i &lt; <xsl:value-of select="$varName"/>.length;i++){
+                        <xsl:choose>
+                            <xsl:when test="$primitive">
+                                outString.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(<xsl:value-of select="$varName"/>[i])).append(" ");
+                            </xsl:when>
+                            <xsl:otherwise>
+                                outString.append(<xsl:value-of select="$varName"/>[i].toString()).append(" ");
+                            </xsl:otherwise>
+                        </xsl:choose>
+
+                    }
+                }
+                return outString.toString().trim();
+            }
+        </xsl:if>
+
      /**
      * isReaderMTOMAware
      * @return true if the reader supports MTOM
@@ -608,6 +644,7 @@
          public void serialize(
                                   javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
             <xsl:choose>
+
             <xsl:when test="$simple and $union">
                 // fist write the start element
                 java.lang.String namespace = parentQName.getNamespaceURI();
@@ -651,6 +688,46 @@
                       }
                 xmlWriter.writeEndElement();
             </xsl:when>
+
+            <xsl:when test="$simple and $list">
+
+                 <xsl:variable name="javaName"><xsl:value-of select="itemtype/@javaname"/></xsl:variable>
+                 <xsl:variable name="varType"><xsl:value-of select="itemtype/@type"/></xsl:variable>
+
+                // first write the start element
+                java.lang.String namespace = parentQName.getNamespaceURI();
+                java.lang.String localName = parentQName.getLocalPart();
+
+                if (! namespace.equals("")) {
+                    java.lang.String prefix = xmlWriter.getPrefix(namespace);
+
+                    if (prefix == null) {
+                        prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
+
+                        xmlWriter.writeStartElement(prefix, localName, namespace);
+                        xmlWriter.writeNamespace(prefix, namespace);
+                        xmlWriter.setPrefix(prefix, namespace);
+
+                    } else {
+                        xmlWriter.writeStartElement(namespace, localName);
+                    }
+
+                } else {
+                    xmlWriter.writeStartElement(localName);
+                }
+
+                <xsl:choose>
+                   <xsl:when test="$varType='javax.xml.namespace.QName'">
+                        writeQNames(local<xsl:value-of select="$javaName"/>,xmlWriter);
+                   </xsl:when>
+                   <xsl:otherwise>
+                       xmlWriter.writeCharacters(<xsl:value-of select="$name"/>.this.toString());
+                   </xsl:otherwise>
+                </xsl:choose>
+
+                xmlWriter.writeEndElement();
+            </xsl:when>
+
             <xsl:when test="@type or @anon">
                 <!-- For a type write the passed in QName first-->
 
@@ -1457,6 +1534,39 @@
             }
         }
 
+        private void writeQNames(javax.xml.namespace.QName[] qnames,
+                                 javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+
+            if (qnames != null) {
+                // we have to store this data until last moment since it is not possible to write any
+                // namespace data after writing the charactor data
+                java.lang.StringBuffer stringToWrite = new java.lang.StringBuffer();
+                java.lang.String namespaceURI = null;
+                java.lang.String prefix = null;
+
+                for (int i = 0; i &lt; qnames.length; i++) {
+                    if (i > 0) {
+                        stringToWrite.append(" ");
+                    }
+                    namespaceURI = qnames[i].getNamespaceURI();
+                    if (namespaceURI != null) {
+                        prefix = xmlWriter.getPrefix(namespaceURI);
+                        if ((prefix == null) || (prefix.length() == 0)) {
+                            prefix = org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix();
+                            xmlWriter.writeNamespace(prefix, namespaceURI);
+                            xmlWriter.setPrefix(prefix,namespaceURI);
+                        }
+                        stringToWrite.append(prefix).append(":").append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(qnames[i]));
+                    } else {
+                        stringToWrite.append(org.apache.axis2.databinding.utils.ConverterUtil.convertToString(qnames[i]));
+                    }
+                }
+                xmlWriter.writeCharacters(stringToWrite.toString());
+            }
+
+        }
+
+
          /**
          * Register a namespace prefix
          */
@@ -1729,6 +1839,16 @@
                     },
                     null);
             </xsl:when>
+
+            <xsl:when test="$list and $simple">
+                  return new org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl(MY_QNAME,
+                    new java.lang.Object[]{
+                    org.apache.axis2.databinding.utils.reader.ADBXMLStreamReader.ELEMENT_TEXT,
+                    toString()
+                    },
+                    null);
+            </xsl:when>
+
             <!-- Not a type and not anon. So it better be only one inclusion-->
             <xsl:otherwise>
                 <!-- if the element is associated with a type, then its gonna be only one -->
@@ -1810,6 +1930,66 @@
                }
         </xsl:if>
 
+        <xsl:if test="$list and $simple">
+
+             <xsl:variable name="javaName"><xsl:value-of select="itemtype/@javaname"/></xsl:variable>
+             <xsl:variable name="varType"><xsl:value-of select="itemtype/@type"/></xsl:variable>
+             <xsl:variable name="ours"><xsl:value-of select="itemtype/@ours"/></xsl:variable>
+             <xsl:variable name="nsuri"><xsl:value-of select="itemtype/@nsuri"/></xsl:variable>
+             <xsl:variable name="originalName"><xsl:value-of select="itemtype/@originalName"/></xsl:variable>
+
+            public static <xsl:value-of select="$name"/> fromString(javax.xml.stream.XMLStreamReader xmlStreamReader, java.lang.String content) {
+
+                <xsl:value-of select="$name"/> object = new <xsl:value-of select="$name"/>();
+                java.lang.String[] values = content.split(" +");
+                <xsl:value-of select="$varType"/>[] objectValues = new <xsl:value-of select="$varType"/>[values.length];
+
+                <xsl:if test="$varType='javax.xml.namespace.QName'">
+                    java.lang.String prefix = null;
+                    java.lang.String namespace = null;
+                </xsl:if>
+
+               <xsl:if test="string-length(normalize-space($ours)) > 0">
+                    java.lang.String valueContent = null;
+                    java.lang.String prefix = null;
+                    java.lang.String namespace = null;
+                </xsl:if>
+
+
+                try {
+                    for (int i = 0; i &lt; values.length; i++) {
+                      <xsl:choose>
+                          <xsl:when test="$varType='javax.xml.namespace.QName'">
+                              prefix = values[i].substring(0,values[i].indexOf(":"));
+                              namespace = xmlStreamReader.getNamespaceURI(prefix);
+                              objectValues[i] = org.apache.axis2.databinding.utils.ConverterUtil.convertToQName(values[i],namespace);
+                          </xsl:when>
+                          <xsl:when test="string-length(normalize-space($ours)) > 0">
+                           valueContent = values[i];
+                           if (valueContent.indexOf(":") > 0){
+                               prefix = valueContent.substring(0,valueContent.indexOf(":"));
+                               namespace = xmlStreamReader.getNamespaceURI(prefix);
+                               objectValues[i] = <xsl:value-of select="$varType"/>.Factory.fromString(valueContent,namespace);
+                           } else {
+                               objectValues[i] = <xsl:value-of select="$varType"/>.Factory.fromString(valueContent,"");
+                           }
+                          </xsl:when>
+                          <xsl:otherwise>
+                           objectValues[i] =
+                              org.apache.axis2.databinding.utils.ConverterUtil.convertTo<xsl:value-of select="$javaName"/>(values[i]);
+                          </xsl:otherwise>
+                      </xsl:choose>
+
+                    }
+                    object.set<xsl:value-of select="$javaName"/>(objectValues);
+                    return object;
+                } catch (java.lang.Exception e) {
+                    throw new RuntimeException();
+                }
+
+            }
+        </xsl:if>
+
         <xsl:for-each select="property">
             <xsl:variable name="propertyType"><xsl:value-of select="@type"></xsl:value-of></xsl:variable>
             <xsl:variable name="javaName"><xsl:value-of select="@javaname"></xsl:value-of></xsl:variable>
@@ -1934,7 +2114,7 @@
                     <xsl:choose>
                         <xsl:when test="$union">
                             java.lang.String nsUri = reader.getNamespaceContext().getNamespaceURI(nsPrefix);
-                            return <xsl:value-of select="$name"/>.Factory.fromString(reader,nsUri,type);
+                            object = <xsl:value-of select="$name"/>.Factory.fromString(reader,nsUri,type);
                         </xsl:when>
                         <xsl:otherwise>
                             if (!"<xsl:value-of select="$originalName"/>".equals(type)){
@@ -1951,6 +2131,11 @@
                 }
                 </xsl:if>
 
+                <xsl:if test="$list">
+                    java.lang.String content = reader.getElementText();
+                    object = <xsl:value-of select="$name"/>.Factory.fromString(reader,content);
+                </xsl:if>
+
                 <!-- populate attributes here!!!. The attributes are part of an element, not part of a type -->
                 // Note all attributes that were handled. Used to differ normal attributes
                 // from anyAttributes.
@@ -2722,6 +2907,7 @@
                             }  // end of while loop
                         </xsl:if>
                         </xsl:if>
+
 
 
             } catch (javax.xml.stream.XMLStreamException e) {

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java?view=diff&rev=504857&r1=504856&r2=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/writer/JavaBeanWriter.java Thu Feb  8 03:03:35 2007
@@ -92,13 +92,13 @@
 
     public static final String EXTENSION_MAPPER_CLASSNAME = "ExtensionMapper";
 // a list of externally identified QNames to be processed. This becomes
-        // useful when  only a list of external elements need to be processed
+    // useful when  only a list of external elements need to be processed
 
-        public static final String DEFAULT_CLASS_NAME = OMElement.class.getName();
-        public static final String DEFAULT_CLASS_ARRAY_NAME = "org.apache.axiom.om.OMElement[]";
+    public static final String DEFAULT_CLASS_NAME = OMElement.class.getName();
+    public static final String DEFAULT_CLASS_ARRAY_NAME = "org.apache.axiom.om.OMElement[]";
 
-        public static final String DEFAULT_ATTRIB_CLASS_NAME = OMAttribute.class.getName();
-       public static final String DEFAULT_ATTRIB_ARRAY_CLASS_NAME = "org.apache.axiom.om.OMAttribute[]";
+    public static final String DEFAULT_ATTRIB_CLASS_NAME = OMAttribute.class.getName();
+    public static final String DEFAULT_ATTRIB_ARRAY_CLASS_NAME = "org.apache.axiom.om.OMAttribute[]";
 
 
     /**
@@ -121,27 +121,26 @@
     }
 
     public String getDefaultClassName() {
-            return DEFAULT_CLASS_NAME;
-        }
-
-        public String getDefaultClassArrayName() {
-            return DEFAULT_CLASS_ARRAY_NAME;
-        }
+        return DEFAULT_CLASS_NAME;
+    }
 
-        public String getDefaultAttribClassName() {
-            return DEFAULT_ATTRIB_CLASS_NAME;
-        }
+    public String getDefaultClassArrayName() {
+        return DEFAULT_CLASS_ARRAY_NAME;
+    }
 
-        public String getDefaultAttribArrayClassName() {
-            return DEFAULT_ATTRIB_ARRAY_CLASS_NAME;
-        }
+    public String getDefaultAttribClassName() {
+        return DEFAULT_ATTRIB_CLASS_NAME;
+    }
 
+    public String getDefaultAttribArrayClassName() {
+        return DEFAULT_ATTRIB_ARRAY_CLASS_NAME;
+    }
 
 
     public void init(CompilerOptions options) throws SchemaCompilationException {
         try {
-	    modelMap = new HashMap();
-	    ns2packageNameMap = new HashMap();
+            modelMap = new HashMap();
+            ns2packageNameMap = new HashMap();
 
             initWithFile(options.getOutputLocation());
             packageName = options.getPackageName();
@@ -522,6 +521,10 @@
             XSLTUtils.addAttribute(model, "union", "yes", rootElt);
         }
 
+        if (metainf.isList()) {
+            XSLTUtils.addAttribute(model, "list", "yes", rootElt);
+        }
+
         if (metainf.isOrdered()) {
             XSLTUtils.addAttribute(model, "ordered", "yes", rootElt);
         }
@@ -530,13 +533,15 @@
             XSLTUtils.addAttribute(model, "nillable", "yes", rootElt);
         }
 
-        //if the type is a smple union then we do not have properties to set
-        //only thing we have to set is to add meber types
-        if (metainf.isSimple() && metainf.isUnion()){
-           populateMemberInfo(metainf,model,rootElt,typeMap);
-        } else {
-            // populate all the information
-            populateInfo(metainf, model, rootElt, propertyNames, typeMap, false);
+        // populate all the information
+        populateInfo(metainf, model, rootElt, propertyNames, typeMap, false);
+
+        if (metainf.isSimple() && metainf.isUnion()) {
+            populateMemberInfo(metainf, model, rootElt, typeMap);
+        }
+
+        if (metainf.isSimple() && metainf.isList()) {
+            populateListInfo(metainf, model, rootElt, typeMap);
         }
         //////////////////////////////////////////////////////////
 //        System.out.println(DOM2Writer.nodeToString(rootElt));
@@ -545,17 +550,38 @@
         return rootElt;
     }
 
+    protected void populateListInfo(BeanWriterMetaInfoHolder metainf,
+                                    Document model,
+                                    Element rootElement,
+                                    Map typeMap) {
+
+        String javaName = makeUniqueJavaClassName(new ArrayList(), metainf.getItemTypeQName().getLocalPart());
+        Element itemType = XSLTUtils.addChildElement(model, "itemtype", rootElement);
+        XSLTUtils.addAttribute(model, "type", metainf.getItemTypeClassName(), itemType);
+        XSLTUtils.addAttribute(model, "nsuri", metainf.getItemTypeQName().getNamespaceURI(), itemType);
+        XSLTUtils.addAttribute(model, "originalName", metainf.getItemTypeQName().getLocalPart(), itemType);
+        XSLTUtils.addAttribute(model, "javaname", javaName, itemType);
+
+        if (typeMap.containsKey(metainf.getItemTypeQName())) {
+                XSLTUtils.addAttribute(model, "ours", "true", itemType);
+            }
+        if (PrimitiveTypeFinder.isPrimitive(metainf.getItemTypeClassName())) {
+            XSLTUtils.addAttribute(model, "primitive", "yes", itemType);
+        }
+
+    }
+
     protected void populateMemberInfo(BeanWriterMetaInfoHolder metainf,
                                       Document model,
                                       Element rootElement,
-                                      Map typeMap){
+                                      Map typeMap) {
         Map memberTypes = metainf.getMemberTypes();
         QName memberQName;
-        for (Iterator iter = memberTypes.keySet().iterator();iter.hasNext();){
+        for (Iterator iter = memberTypes.keySet().iterator(); iter.hasNext();) {
             memberQName = (QName) iter.next();
             String memberClass = (String) memberTypes.get(memberQName);
-            if (PrimitiveTypeFinder.isPrimitive(memberClass)){
-               memberClass = PrimitiveTypeWrapper.getWrapper(memberClass);
+            if (PrimitiveTypeFinder.isPrimitive(memberClass)) {
+                memberClass = PrimitiveTypeWrapper.getWrapper(memberClass);
             }
 
             // add member type element
@@ -563,8 +589,8 @@
             XSLTUtils.addAttribute(model, "type", memberClass, memberType);
             XSLTUtils.addAttribute(model, "nsuri", memberQName.getNamespaceURI(), memberType);
             XSLTUtils.addAttribute(model, "originalName", memberQName.getLocalPart(), memberType);
-            if (typeMap.containsKey(memberQName)){
-               XSLTUtils.addAttribute(model, "ours", "true", memberType);
+            if (typeMap.containsKey(memberQName)) {
+                XSLTUtils.addAttribute(model, "ours", "true", memberType);
             }
 
         }
@@ -584,7 +610,8 @@
         // we should add parent class details only if it is
         // an extension or simple restriction
         // should not in complex restrictions
-        if (metainf.getParent() != null && (!metainf.isRestriction() || (metainf.isRestriction() && metainf.isSimple()))) {
+        if (metainf.getParent() != null && (!metainf.isRestriction() || (metainf.isRestriction() && metainf.isSimple())))
+        {
             populateInfo(metainf.getParent(), model, rootElt, propertyNames,
                     typeMap, true);
         }
@@ -642,7 +669,7 @@
             // then we have to generate a new  name for this
             if (parentMetaInf != null && metainf.isRestriction() && !missingQNames.contains(name) &&
                     (parentMetaInf.getArrayStatusForQName(name) && !metainf.getArrayStatusForQName(name))) {
-                  javaName = makeUniqueJavaClassName(propertyNames, xmlName);
+                javaName = makeUniqueJavaClassName(propertyNames, xmlName);
             }
             XSLTUtils.addAttribute(model, "javaname", javaName, property);
 
@@ -676,7 +703,8 @@
                 XSLTUtils.addAttribute(model, "rewrite", "yes", property);
                 XSLTUtils.addAttribute(model, "occuranceChanged", "yes", property);
             } else if (metainf.isRestriction() && !missingQNames.contains(name) &&
-                    (minOccursChanged(name, missingQNames, metainf) || maxOccursChanged(name, missingQNames, metainf))) {
+                    (minOccursChanged(name, missingQNames, metainf) || maxOccursChanged(name, missingQNames, metainf)))
+            {
 
                 XSLTUtils.addAttribute(model, "restricted", "yes", property);
                 XSLTUtils.addAttribute(model, "occuranceChanged", "yes", property);
@@ -694,24 +722,24 @@
                 XSLTUtils.addAttribute(model, "inherited", "yes", property);
             }
 
-            if ((parentMetaInf != null) && metainf.isRestriction() && missingQNames.contains(name)){
+            if ((parentMetaInf != null) && metainf.isRestriction() && missingQNames.contains(name)) {
                 // this element details should be there with the parent meta Inf
                 addAttributesToProperty(
-                    parentMetaInf,
-                    name,
-                    model,
-                    property,
-                    typeMap,
-                    javaClassNameForElement);
+                        parentMetaInf,
+                        name,
+                        model,
+                        property,
+                        typeMap,
+                        javaClassNameForElement);
 
             } else {
-                 addAttributesToProperty(
-                    metainf,
-                    name,
-                    model,
-                    property,
-                    typeMap,
-                    javaClassNameForElement);
+                addAttributesToProperty(
+                        metainf,
+                        name,
+                        model,
+                        property,
+                        typeMap,
+                        javaClassNameForElement);
             }
 
         }  // end of foo
@@ -942,11 +970,13 @@
 
                     if (!javaClassForParentElement.equals(javaClassForElement)) {
                         if (javaClassForParentElement.endsWith("[]")) {
-                            if ((javaClassForParentElement.substring(0, javaClassForParentElement.indexOf('['))).equals(javaClassForElement)) {
+                            if ((javaClassForParentElement.substring(0, javaClassForParentElement.indexOf('['))).equals(javaClassForElement))
+                            {
                                 continue;
                             }
                         } else if (javaClassForElement.endsWith("[]")) {
-                            if ((javaClassForElement.substring(0, javaClassForElement.indexOf('['))).equals(javaClassForParentElement)) {
+                            if ((javaClassForElement.substring(0, javaClassForElement.indexOf('['))).equals(javaClassForParentElement))
+                            {
                                 continue;
                             }
                         } else {

Added: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/choice.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/choice.xsd?view=auto&rev=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/choice.xsd (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/choice.xsd Thu Feb  8 03:03:35 2007
@@ -0,0 +1,16 @@
+<schema elementFormDefault="qualified"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:tns="org.apache.axis2.test"
+        targetNamespace="org.apache.axis2.test">
+
+    <xs:element name="TestChoise">
+        <xs:complexType>
+            <xs:choice>
+                <xs:element name="choice1" type="xs:string"/>
+                <xs:element name="choice2" type="xs:int"/>
+            </xs:choice>
+        </xs:complexType>
+    </xs:element>
+
+</schema>
\ No newline at end of file

Added: webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/list.xsd
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/list.xsd?view=auto&rev=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/list.xsd (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test-resources/testsuite/list.xsd Thu Feb  8 03:03:35 2007
@@ -0,0 +1,31 @@
+<schema elementFormDefault="qualified"
+        xmlns:xs="http://www.w3.org/2001/XMLSchema"
+        xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:tns="org.apache.axis2.test"
+        targetNamespace="org.apache.axis2.test">
+
+    <xs:simpleType name="TestListQName">
+        <xs:list itemType="xs:QName"></xs:list>
+    </xs:simpleType>
+
+    <xs:element name="TestListQNameElement" type="tns:TestListQName"/>
+
+    <xs:simpleType name="TestListString">
+        <xs:list itemType="xs:string"></xs:list>
+    </xs:simpleType>
+
+    <xs:element name="TestListStringElement" type="tns:TestListString"/>
+
+    <xs:simpleType name="TestString">
+        <xs:restriction base="xs:string">
+            <xs:pattern value="[A-z]*"></xs:pattern>
+        </xs:restriction>
+    </xs:simpleType>
+
+    <xs:simpleType name="TestListOurs">
+        <xs:list itemType="tns:TestString"/>
+    </xs:simpleType>
+
+    <xs:element name="TestListOursElement" type="tns:TestListOurs"/>
+
+</schema>
\ No newline at end of file

Added: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/choice/ChiceTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/choice/ChiceTest.java?view=auto&rev=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/choice/ChiceTest.java (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/choice/ChiceTest.java Thu Feb  8 03:03:35 2007
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.axis2.schema.choice;
+
+import junit.framework.TestCase;
+import test.axis2.apache.org.TestChoise;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.util.StAXUtils;
+
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+
+
+public class ChiceTest extends TestCase {
+
+    public void testChoice(){
+        TestChoise testChoise = new TestChoise();
+        testChoise.setChoice1("test 2");
+        testChoise.setChoice2(5);
+
+        OMElement omElement = testChoise.getOMElement(TestChoise.MY_QNAME, OMAbstractFactory.getOMFactory());
+        try {
+            String omElementString = omElement.toStringWithConsume();
+            System.out.println("OM Element ==> " + omElementString);
+            XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+            TestChoise newTestChoice = TestChoise.Factory.parse(xmlReader);
+            assertEquals(5,newTestChoice.getChoice2());
+        } catch (Exception e) {
+            assertFalse(true);
+        }
+    }
+}

Added: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/list/ListTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/list/ListTest.java?view=auto&rev=504857
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/list/ListTest.java (added)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/list/ListTest.java Thu Feb  8 03:03:35 2007
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.axis2.schema.list;
+
+import junit.framework.TestCase;
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.util.StAXUtils;
+import test.axis2.apache.org.*;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+
+
+public class ListTest extends TestCase {
+
+
+    public void testListString(){
+
+        TestListStringElement testListStringElement = new TestListStringElement();
+        TestListString testListString = new TestListString();
+        testListStringElement.setTestListStringElement(testListString);
+        testListString.setString(new String[]{"string1","string2"});
+
+        OMElement omElement = testListStringElement.getOMElement(TestListStringElement.MY_QNAME,
+                    OMAbstractFactory.getOMFactory());
+        try {
+            String omElementString = omElement.toStringWithConsume();
+            System.out.println("OM Element ==> " + omElementString);
+            XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+            TestListStringElement result = TestListStringElement.Factory.parse(xmlReader);
+            assertEquals(testListString.toString(),result.getTestListStringElement().toString());
+        } catch (Exception e) {
+            assertFalse(true);
+        }
+
+    }
+
+    public void testListQName(){
+
+        TestListQNameElement testListQNameElement = new TestListQNameElement();
+        TestListQName testListQName = new TestListQName();
+        testListQName.setQName(new QName[]{new QName("http://www.google.com","test1"),
+                        new QName("http://www.google.com","test2"),
+                        new QName("http://www.google","test3")});
+        testListQNameElement.setTestListQNameElement(testListQName);
+
+        OMElement omElement = testListQNameElement.getOMElement(TestListQNameElement.MY_QNAME,OMAbstractFactory.getOMFactory());
+        try {
+            String omElementString = omElement.toStringWithConsume();
+            System.out.println("OM Element ==> " + omElementString);
+            XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+            TestListQNameElement result = TestListQNameElement.Factory.parse(xmlReader);
+            assertEquals(result.getTestListQNameElement().getQName()[0],testListQName.getQName()[0]);
+            assertEquals(result.getTestListQNameElement().getQName()[1],testListQName.getQName()[1]);
+            assertEquals(result.getTestListQNameElement().getQName()[2],testListQName.getQName()[2]);
+        } catch (Exception e) {
+            e.printStackTrace();
+            assertFalse(true);
+        }
+    }
+
+    public void testListOurs(){
+
+        TestListOursElement testListOursElement = new TestListOursElement();
+        TestListOurs testListOurs = new TestListOurs();
+        testListOursElement.setTestListOursElement(testListOurs);
+        TestString testString1 = new TestString();
+        testString1.setTestString("test");
+        TestString testString2 = new TestString();
+        testString2.setTestString("test");
+        TestString testString3 = new TestString();
+        testString3.setTestString("test");
+        testListOurs.setTestString(new TestString[]{testString1,testString2,testString3});
+
+        OMElement omElement = testListOursElement.getOMElement(TestListOursElement.MY_QNAME,OMAbstractFactory.getOMFactory());
+        try {
+            String omElementString = omElement.toStringWithConsume();
+            System.out.println("OM Element ==> " + omElementString);
+            XMLStreamReader xmlReader = StAXUtils.createXMLStreamReader(new ByteArrayInputStream(omElementString.getBytes()));
+            TestListOursElement result = TestListOursElement.Factory.parse(xmlReader);
+            assertEquals(result.getTestListOursElement().getTestString()[0].getTestString(),testString1.getTestString());
+            assertEquals(result.getTestListOursElement().getTestString()[1].getTestString(),testString2.getTestString());
+            assertEquals(result.getTestListOursElement().getTestString()[2].getTestString(),testString3.getTestString());
+        } catch (Exception e) {
+            e.printStackTrace();
+            assertFalse(true);
+        }
+    }
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org