axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ven...@apache.org
Subject cvs commit: ws-axis/java/src/org/apache/axis/wsdl/gen Parser.java
Date Fri, 20 May 2005 12:55:50 GMT
venkat      2005/05/20 05:55:49

  Modified:    java/src/org/apache/axis/wsdl/symbolTable SchemaUtils.java
               java/src/org/apache/axis/wsdl/toJava Utils.java
               java/src/org/apache/axis/wsdl/gen Parser.java
  Added:       java/test/wsdl/groups GroupsTestCase.java Groups.wsdl
                        build.xml SomeType.java
  Log:
  Checking in the patches and test case submitted by Steve Green for AXIS-1525. I have ran the JAX-RPC TCK test suite after the changes and ensured it is all green. Thanks Steve.
  
  Revision  Changes    Path
  1.1                  ws-axis/java/test/wsdl/groups/GroupsTestCase.java
  
  Index: GroupsTestCase.java
  ===================================================================
  /*
   * Copyright 2001-2004 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.
   */
  
  /**
   * This tests the file generation of only the items that are referenced in WSDL
   * 
   * @author Steve Green (steve.green@epok.net)
   */ 
  package test.wsdl.groups;
  
  import java.io.File;
  import java.io.IOException;
  import java.lang.reflect.Method;
  import java.util.Arrays;
  import java.util.HashSet;
  import java.util.Set;
  
  
  public class GroupsTestCase extends junit.framework.TestCase {
      public GroupsTestCase(String name) {
          super(name);
      }
  
      /**
       * List of files which should be generated.
       */
      protected Set shouldExist() {
          HashSet set = new HashSet();
          set.add("GroupsTestCase.java");
          set.add("SomeType.java");
          return set;
      }
      
      /**
       * List of files which may or may not be generated.
       */
      protected Set shouldNotExist() {
          HashSet set = new HashSet();
          set.add("SomeGroup.java");
          return set;
      }
  
      /**
       * The directory containing the files that should exist.
       */
      protected String rootDir() {
          return "build" + File.separator + "work" + File.separator + 
                  "test" + File.separator + "wsdl" + File.separator +
                  "groups";
      }
      
      protected String getPrefix(String parent) {
          if (parent == null || parent.length() == 0) {
              return "";
          }
          else {
              return parent + File.separator;
          }
      }
  
      /** This method returns a array of String file paths, located within the
       * supplied root directory. The string values are created relative to the 
       * specified parent so that the names get returned in the form of 
       * "file.java", "dir/file.java", "dir/dir/file.java", etc. This feature 
       * asslows the various file specs to include files in sub-directories as
       * well as the root directory.
       */    
      protected String[] getPaths(File root, String parent) {
          File files[] = root.listFiles();
          if (files == null)
              fail("Unable to get a list of files from " + root.getPath());
  
          Set filePaths = new HashSet();
          for(int i=0; i<files.length; i++) {
              if (files[i].isDirectory()) {
                  String children[] = getPaths(files[i],
                              getPrefix(parent) + files[i].getName());
                  filePaths.addAll(Arrays.asList(children));
              }
              else {
                  filePaths.add(getPrefix(parent) + files[i].getName());
              }
          }
          String paths[] = new String[filePaths.size()];
          return (String[]) filePaths.toArray(paths);
      }
  
      
      public void testGroups() throws IOException, ClassNotFoundException, SecurityException, NoSuchMethodException {
  
          // Test for the proper files
  
          String rootDir = rootDir();
          Set shouldExist = shouldExist();
          Set shouldNotExist = shouldNotExist();
  
          // open up the output directory and check what files exist.
          File outputDir = new File(rootDir);
          
          String[] files = getPaths(outputDir, null);
  
          for (int i = 0; i < files.length; ++i) {
              if (shouldExist.contains(files[i])) {
                  shouldExist.remove(files[i]);
              } 
              else if (shouldNotExist.contains(files[i])) {
                  fail("The following file should not exist in " + rootDir +
  			", but does:  " + files[i]);
              }
          }
  
          if (shouldExist.size() > 0) {
              fail("The following files should exist in " + rootDir + 
                  ", but do not:  " + shouldExist);
          }
  
      	// Test for the proper members
      
          Class ourClass = Class.forName("test.wsdl.groups.SomeType");
          ourClass.getDeclaredMethod("getA", null);
          ourClass.getDeclaredMethod("getB", null);
          ourClass.getDeclaredMethod("getZ", null);
  
          return;
      }
  }
  
  
  
  
  1.1                  ws-axis/java/test/wsdl/groups/Groups.wsdl
  
  Index: Groups.wsdl
  ===================================================================
  <?xml version="1.0" encoding="utf-8" ?>
  
  <definitions targetNamespace="http://test.com/reference"
  	     xmlns:tns="http://test.com/reference"
               xmlns:xs="http://www.w3.org/2001/XMLSchema"
               xmlns="http://schemas.xmlsoap.org/wsdl/">
  
      <types>
          <xs:schema>
  
            <xs:group name="SomeGroup">
  	    <xs:sequence>
  	      <xs:element name="a" type="xs:string"/>
  	      <xs:element name="b" type="xs:string"/>
  	    </xs:sequence>
  	  </xs:group>
  
  	  <xs:complexType name="SomeType">
  	    <xs:sequence>
  	      <xs:element name="z" type="xs:string"/>
  	      <xs:group ref="tns:SomeGroup"/>
  	    </xs:sequence>
  	  </xs:complexType>
  
          </xs:schema>
      </types>
  
  </definitions>
  
  
  
  1.1                  ws-axis/java/test/wsdl/groups/build.xml
  
  Index: build.xml
  ===================================================================
  <?xml version="1.0" ?>
  <!DOCTYPE project [
          <!ENTITY properties SYSTEM "file:../../../xmls/properties.xml">
          <!ENTITY paths  SYSTEM "file:../../../xmls/path_refs.xml">
          <!ENTITY taskdefs SYSTEM "file:../../../xmls/taskdefs.xml">
          <!ENTITY taskdefs_post_compile SYSTEM "file:../../../xmls/taskdefs_post_compile.xml">
          <!ENTITY targets SYSTEM "file:../../../xmls/targets.xml">
  ]>
  
  <!-- ===================================================================
  <description>
     Test/Sample Component file for Axis
  
  Notes:
     This is a build file for use with the Jakarta Ant build tool.
  
  Prerequisites:
  
     jakarta-ant from http://jakarta.apache.org
  
  Build Instructions:
     To compile
          ant compile
     To execute
          ant run
  
  Author:
    Matt Seibert mseibert@us.ibm.com
  
  Copyright:
    Copyright (c) 2002-2003 Apache Software Foundation.
  </description>
  ==================================================================== -->
  
  <project default="compile">
  
  <property name="axis.home" location="../../.." />
  <property name="componentName" value="test/wsdl/groups" />
          &properties;
          &paths;
          &taskdefs;
          &taskdefs_post_compile;
          &targets;
  
  <target name="clean" depends="setenv">
      <echo message="Removing ${build.dir}/**/test/wsdl/groups" />
      <echo message="componentName is ${componentName}"/>
      <delete dir="${build.dir}/classes/test/wsdl/groups"/>
      <delete dir="${build.dir}/work/test/wsdl/groups"/>
      <delete dir="${build.dir}/classes/test/wsdl/groupsAll"/>
      <delete dir="${build.dir}/work/test/wsdl/groupsAll"/>
  </target>
  
  
  <target name="compile" depends="clean">
    <echo message="Compiling test.wsdl.groups"/>
      <!-- Verify files generated based on what is referenced in WSDL -->
      <wsdl2java url="${axis.home}/test/wsdl/groups/Groups.wsdl"
                 output="${axis.home}/build/work"
                 deployscope="none"
                 serverSide="no"
                 noimports="no"
                 verbose="no"
                 testcase="no">
          <mapping namespace="http://test.com/reference" package="test.wsdl.groups"/>
      </wsdl2java>
  
      <!-- Same test as above but this time the -a flag is turned on -->
      <wsdl2java url="${axis.home}/test/wsdl/groups/Groups.wsdl"
                 output="${axis.home}/build/work"
                 serverSide="no"
                 all="yes">
          <mapping namespace="http://test.com/reference" package="test.wsdl.groupsAll"/>
      </wsdl2java>
  
      <copy todir="${build.dir}/work/test/wsdl/groups" overwrite="yes">
        <fileset dir="${axis.home}/test/wsdl/groups">
          <include name="*TestCase.java"/>
          <include name="*Impl.java"/>
        </fileset>
      </copy>
  
      <javac srcdir="${build.dir}/work" destdir="${build.dest}" nowarn="${nowarn}" source="${source}" fork="${javac.fork}"
             debug="${debug}">
        <classpath refid="classpath" />
        <include name="test/wsdl/groups/*.java" />
        <include name="test/wsdl/groupsAll/*.java" />
      </javac>
  
  </target>
  
  <target name="run" >
    <antcall target="execute-Component-noServer" />
  </target>
  
  </project>
  
  
  
  1.1                  ws-axis/java/test/wsdl/groups/SomeType.java
  
  Index: SomeType.java
  ===================================================================
  /**
   * SomeType.java
   *
   * This file was auto-generated from WSDL
   * by the Apache Axis 1.2RC1 Oct 20, 2004 (05:49:44 EDT) WSDL2Java emitter.
   */
  
  package com.epok.auth;
  
  public class SomeType  implements java.io.Serializable {
      private java.lang.String z;
      private java.lang.String a;
      private java.lang.String b;
  
      public SomeType() {
      }
  
      public SomeType(
             java.lang.String z,
             java.lang.String a,
             java.lang.String b) {
             this.z = z;
             this.a = a;
             this.b = b;
      }
  
  
      /**
       * Gets the z value for this SomeType.
       * 
       * @return z
       */
      public java.lang.String getZ() {
          return z;
      }
  
  
      /**
       * Sets the z value for this SomeType.
       * 
       * @param z
       */
      public void setZ(java.lang.String z) {
          this.z = z;
      }
  
  
      /**
       * Gets the a value for this SomeType.
       * 
       * @return a
       */
      public java.lang.String getA() {
          return a;
      }
  
  
      /**
       * Sets the a value for this SomeType.
       * 
       * @param a
       */
      public void setA(java.lang.String a) {
          this.a = a;
      }
  
  
      /**
       * Gets the b value for this SomeType.
       * 
       * @return b
       */
      public java.lang.String getB() {
          return b;
      }
  
  
      /**
       * Sets the b value for this SomeType.
       * 
       * @param b
       */
      public void setB(java.lang.String b) {
          this.b = b;
      }
  
      private java.lang.Object __equalsCalc = null;
      public synchronized boolean equals(java.lang.Object obj) {
          if (!(obj instanceof SomeType)) return false;
          SomeType other = (SomeType) obj;
          if (obj == null) return false;
          if (this == obj) return true;
          if (__equalsCalc != null) {
              return (__equalsCalc == obj);
          }
          __equalsCalc = obj;
          boolean _equals;
          _equals = true && 
              ((this.z==null && other.getZ()==null) || 
               (this.z!=null &&
                this.z.equals(other.getZ()))) &&
              ((this.a==null && other.getA()==null) || 
               (this.a!=null &&
                this.a.equals(other.getA()))) &&
              ((this.b==null && other.getB()==null) || 
               (this.b!=null &&
                this.b.equals(other.getB())));
          __equalsCalc = null;
          return _equals;
      }
  
      private boolean __hashCodeCalc = false;
      public synchronized int hashCode() {
          if (__hashCodeCalc) {
              return 0;
          }
          __hashCodeCalc = true;
          int _hashCode = 1;
          if (getZ() != null) {
              _hashCode += getZ().hashCode();
          }
          if (getA() != null) {
              _hashCode += getA().hashCode();
          }
          if (getB() != null) {
              _hashCode += getB().hashCode();
          }
          __hashCodeCalc = false;
          return _hashCode;
      }
  
      // Type metadata
      private static org.apache.axis.description.TypeDesc typeDesc =
          new org.apache.axis.description.TypeDesc(SomeType.class, true);
  
      static {
          typeDesc.setXmlType(new javax.xml.namespace.QName("urn:auth:epok:com", "SomeType"));
          org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
          elemField.setFieldName("z");
          elemField.setXmlName(new javax.xml.namespace.QName("", "z"));
          elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
          typeDesc.addFieldDesc(elemField);
          elemField = new org.apache.axis.description.ElementDesc();
          elemField.setFieldName("a");
          elemField.setXmlName(new javax.xml.namespace.QName("", "a"));
          elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
          typeDesc.addFieldDesc(elemField);
          elemField = new org.apache.axis.description.ElementDesc();
          elemField.setFieldName("b");
          elemField.setXmlName(new javax.xml.namespace.QName("", "b"));
          elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
          typeDesc.addFieldDesc(elemField);
      }
  
      /**
       * Return type metadata object
       */
      public static org.apache.axis.description.TypeDesc getTypeDesc() {
          return typeDesc;
      }
  
      /**
       * Get Custom Serializer
       */
      public static org.apache.axis.encoding.Serializer getSerializer(
             java.lang.String mechType, 
             java.lang.Class _javaType,  
             javax.xml.namespace.QName _xmlType) {
          return 
            new  org.apache.axis.encoding.ser.BeanSerializer(
              _javaType, _xmlType, typeDesc);
      }
  
      /**
       * Get Custom Deserializer
       */
      public static org.apache.axis.encoding.Deserializer getDeserializer(
             java.lang.String mechType, 
             java.lang.Class _javaType,  
             javax.xml.namespace.QName _xmlType) {
          return 
            new  org.apache.axis.encoding.ser.BeanDeserializer(
              _javaType, _xmlType, typeDesc);
      }
  
  }
  
  
  
  1.57      +155 -129  ws-axis/java/src/org/apache/axis/wsdl/symbolTable/SchemaUtils.java
  
  Index: SchemaUtils.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/symbolTable/SchemaUtils.java,v
  retrieving revision 1.56
  retrieving revision 1.57
  diff -u -r1.56 -r1.57
  --- SchemaUtils.java	30 Apr 2005 18:31:40 -0000	1.56
  +++ SchemaUtils.java	20 May 2005 12:55:49 -0000	1.57
  @@ -1,12 +1,12 @@
   /*
    * Copyright 2001-2004 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.
  @@ -35,7 +35,7 @@
   
   /**
    * This class contains static utility methods specifically for schema type queries.
  - * 
  + *
    * @author Rich Scheuerle  (scheu@us.ibm.com)
    */
   public class SchemaUtils {
  @@ -58,7 +58,7 @@
               // Under the complexType there could be complexContent with
               // mixed="true"
               NodeList children = node.getChildNodes();
  -            
  +
               for (int j = 0; j < children.getLength(); j++) {
                   Node kid = children.item(j);
                   if (isXSDNode(kid, "complexContent")) {
  @@ -85,9 +85,9 @@
           }
           return null;
       }
  -    
  +
       public static Node getListNode(Node node) {
  -        // Expecting a schema simpleType 
  +        // Expecting a schema simpleType
           if (isXSDNode(node, "simpleType")) {
               // Under the simpleType there could be list
               NodeList children = node.getChildNodes();
  @@ -104,19 +104,19 @@
       public static boolean isSimpleTypeWithUnion(Node node) {
           return (getUnionNode(node) != null);
       }
  -    
  +
     /**
      * This method checks out if the given node satisfies the 3rd condition
      * of the "wrapper" style:
      * such an element (a wrapper) must be of a complex type defined using the
      * xsd:sequence compositor and containing only elements declarations.
      * (excerpt from JAX-RPC spec 1.1 Maintenanace Review 2 Chapter 6 Section 4.1.)
  -   * 
  -   * @param node        
  -   * @return 
  +   *
  +   * @param node
  +   * @return
      */
     public static boolean isWrappedType(Node node) {
  -    
  +
       if (node == null) {
         return false;
       }
  @@ -143,7 +143,7 @@
         // Under the complexType there could be complexContent/simpleContent
         // and extension elements if this is a derived type.
         // A wrapper element must be complex-typed.
  -      
  +
         NodeList children = node.getChildNodes();
   
         for (int j = 0; j < children.getLength(); j++) {
  @@ -158,8 +158,8 @@
   
         // Under the complexType there may be choice, sequence, group and/or all nodes.
         // (There may be other #text nodes, which we will ignore).
  -      // The complex type of a wrapper element must have only sequence 
  -      // and again element declarations in the sequence. 
  +      // The complex type of a wrapper element must have only sequence
  +      // and again element declarations in the sequence.
         children = node.getChildNodes();
         int len =  children.getLength();
         for (int j = 0; j < len; j++) {
  @@ -204,11 +204,11 @@
                 }
             }
         }
  -    } 
  +    }
       // allows void type
       return true;
     }
  -  
  +
       /**
        * If the specified node represents a supported JAX-RPC complexType or
        * simpleType, a Vector is returned which contains ElementDecls for the
  @@ -221,10 +221,10 @@
        * (use the getContainedAttributeTypes)
        * If the specified node is not a supported
        * JAX-RPC complexType/simpleType/element null is returned.
  -     * 
  -     * @param node        
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param node
  +     * @param symbolTable
  +     * @return
        */
       public static Vector getContainedElementDeclarations(Node node,
                                                            SymbolTable symbolTable) {
  @@ -298,7 +298,7 @@
                       if ((localName != null)
                           && (localName.equals("extension") || localName.equals("restriction"))
                           && Constants.isSchemaXSD(kid.getNamespaceURI())) {
  -                        
  +
                           // get the type of the extension/restriction from the "base" attribute
                           QName extendsOrRestrictsType =
                                   Utils.getTypeQName(children.item(j),
  @@ -344,6 +344,12 @@
   
               return v;
           } else if (isXSDNode(node, "group")) {
  +			/*
  +			* Does this else clause make any sense anymore if
  +			* we're treating refs to xs:groups like a macro inclusion
  +			* into the referencing type?
  +			* Maybe this else clause should never be possible?
  +			*
               NodeList children = node.getChildNodes();
               Vector v = new Vector();
               int len = children.getLength();
  @@ -362,6 +368,8 @@
                   }
               }
               return v;
  +            */
  +                return null;
           } else {
   
               // This may be a simpleType, return the type with the name "value"
  @@ -400,10 +408,10 @@
       /**
        * Invoked by getContainedElementDeclarations to get the child element types
        * and child element names underneath a Choice Node
  -     * 
  -     * @param choiceNode  
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param choiceNode
  +     * @param symbolTable
  +     * @return
        */
       private static Vector processChoiceNode(Node choiceNode,
                                               SymbolTable symbolTable) {
  @@ -423,9 +431,9 @@
                   } else if (localName.equals("group")) {
                       v.addAll(processGroupNode(kid, symbolTable));
                   } else if (localName.equals("element")) {
  -                    ElementDecl elem = processChildElementNode(kid, 
  +                    ElementDecl elem = processChildElementNode(kid,
                                                                  symbolTable);
  -                    
  +
                       if (elem != null) {
                           // XXX: forces minOccurs="0" so that a null choice
                           // element can be serialized ok.
  @@ -453,7 +461,7 @@
   
       /**
        * Returns named child node.
  -     * 
  +     *
        * @param parentNode Parent node.
        * @param name Element name of child node to return.
        */
  @@ -476,9 +484,9 @@
       /**
        * Returns all textual nodes of a subnode defined by a parent node
        * and a path of element names to that subnode.
  -     * 
  +     *
        * @param root Parent node.
  -     * @param path Path of element names to text of interest, delimited by "/". 
  +     * @param path Path of element names to text of interest, delimited by "/".
        */
       public static String getTextByPath(Node root, String path) throws DOMException {
           StringTokenizer st = new StringTokenizer(path, "/");
  @@ -490,7 +498,7 @@
                   throw new DOMException(DOMException.NOT_FOUND_ERR, "could not find " + elementName);
               node = child;
           }
  -    
  +
           // should have found the node
           String text = "";
           NodeList children = node.getChildNodes();
  @@ -510,10 +518,10 @@
       }
   
       /**
  -     * Returns the complete text of the child xsd:annotation/xsd:documentation 
  -     * element from the provided node.  Only the first annotation element and 
  +     * Returns the complete text of the child xsd:annotation/xsd:documentation
  +     * element from the provided node.  Only the first annotation element and
        * the first documentation element in the annotation element will be used.
  -     * 
  +     *
        * @param typeNode Parent node.
        */
       public static String getAnnotationDocumentation(Node typeNode) {
  @@ -536,7 +544,7 @@
           } else {
               documentationNode = null;
           }
  -        
  +
           // should have found the node if it exists
           String text = "";
           if (documentationNode != null) {
  @@ -560,10 +568,10 @@
       /**
        * Invoked by getContainedElementDeclarations to get the child element types
        * and child element names underneath a Sequence Node
  -     * 
  -     * @param sequenceNode 
  -     * @param symbolTable  
  -     * @return 
  +     *
  +     * @param sequenceNode
  +     * @param symbolTable
  +     * @return
        */
       private static Vector processSequenceNode(Node sequenceNode,
                                                 SymbolTable symbolTable) {
  @@ -610,12 +618,12 @@
   
       /**
        * Invoked by getContainedElementDeclarations to get the child element types
  -     * and child element names underneath a group node. If a ref attribute is 
  +     * and child element names underneath a group node. If a ref attribute is
        * specified, only the referenced group element is returned.
  -     * 
  -     * @param groupNode   
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param groupNode
  +     * @param symbolTable
  +     * @return
        */
       private static Vector processGroupNode(Node groupNode,
                                              SymbolTable symbolTable) {
  @@ -646,8 +654,26 @@
               // assignment compatible with 'org.apache.axis.wsdl.symbolTable.Type'.
               Type type = (Type) symbolTable.getTypeEntry(nodeType, false);
   
  -            if (type != null) {
  -                v.add(new ElementDecl(type, nodeName));
  +            if (type != null && type.getNode() != null) {
  +				//v.add(new ElementDecl(type, nodeName));
  +				Node node = type.getNode();
  +				NodeList children = node.getChildNodes();
  +				for (int j = 0; j < children.getLength(); j++) {
  +					QName subNodeKind = Utils.getNodeQName(children.item(j));
  +					if ((subNodeKind != null)
  +						&& Constants.isSchemaXSD(
  +							subNodeKind.getNamespaceURI())) {
  +						if (subNodeKind.getLocalPart().equals("sequence")) {
  +							v.addAll(processSequenceNode(children.item(j),
  +								 symbolTable));
  +						} else if (subNodeKind.getLocalPart().equals("all")) {
  +							v.addAll(processAllNode(children.item(j), symbolTable));
  +							} else if (subNodeKind.getLocalPart().equals("choice")) {
  +								v.addAll(processChoiceNode(children.item(j),
  +									symbolTable));
  +						}
  +					}
  +				}
               }
           }
           return v;
  @@ -657,10 +683,10 @@
       /**
        * Invoked by getContainedElementDeclarations to get the child element types
        * and child element names underneath an all node.
  -     * 
  -     * @param allNode     
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param allNode
  +     * @param symbolTable
  +     * @return
        */
       private static Vector processAllNode(Node allNode,
                                            SymbolTable symbolTable) {
  @@ -689,10 +715,10 @@
        * <p/>
        * If the specified node represents a supported JAX-RPC child element,
        * we return an ElementDecl containing the child element name and type.
  -     * 
  -     * @param elementNode 
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param elementNode
  +     * @param symbolTable
  +     * @return
        */
       private static ElementDecl processChildElementNode(Node elementNode,
                                                          SymbolTable symbolTable) {
  @@ -702,7 +728,7 @@
           BooleanHolder forElement = new BooleanHolder();
           String comments = null;
           comments = getAnnotationDocumentation(elementNode);
  -        
  +
           // The type qname is used to locate the TypeEntry, which is then
           // used to retrieve the proper java name of the type.
           QName nodeType = Utils.getTypeQName(elementNode, forElement, false);
  @@ -770,9 +796,9 @@
       /**
        * Returns the WSDL2Java QName for the anonymous type of the element
        * or null.
  -     * 
  -     * @param node 
  -     * @return 
  +     *
  +     * @param node
  +     * @return
        */
       public static QName getElementAnonQName(Node node) {
   
  @@ -795,9 +821,9 @@
       /**
        * Returns the WSDL2Java QName for the anonymous type of the attribute
        * or null.
  -     * 
  -     * @param node 
  -     * @return 
  +     *
  +     * @param node
  +     * @return
        */
       public static QName getAttributeAnonQName(Node node) {
   
  @@ -819,9 +845,9 @@
   
       /**
        * If the specified node is a simple type or contains simpleContent, return true
  -     * 
  -     * @param node 
  -     * @return 
  +     *
  +     * @param node
  +     * @return
        */
       public static boolean isSimpleTypeOrSimpleContent(Node node) {
   
  @@ -890,7 +916,7 @@
        * <p/>
        * This can be used to determine that a given Node defines a
        * schema "complexType" "element" and so forth.
  -     * 
  +     *
        * @param node            a <code>Node</code> value
        * @param schemaLocalName a <code>String</code> value
        * @return true if the node is matches the name in the schema namespace.
  @@ -910,10 +936,10 @@
       /**
        * Look for the base type of node iff node is a complex type that has been
        * derived by restriction; otherwise return null.
  -     * 
  -     * @param node        
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param node
  +     * @param symbolTable
  +     * @return
        */
       public static TypeEntry getComplexElementRestrictionBase(Node node,
                                                                SymbolTable symbolTable) {
  @@ -993,10 +1019,10 @@
       /**
        * If the specified node represents a supported JAX-RPC complexType/element
        * which extends another complexType.  The Type of the base is returned.
  -     * 
  -     * @param node        
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param node
  +     * @param symbolTable
  +     * @return
        */
       public static TypeEntry getComplexElementExtensionBase(Node node,
                                                              SymbolTable symbolTable) {
  @@ -1085,9 +1111,9 @@
       /**
        * If the specified node represents a 'normal' non-enumeration simpleType,
        * the QName of the simpleType base is returned.
  -     * 
  -     * @param node 
  -     * @return 
  +     *
  +     * @param node
  +     * @return
        */
       public static QName getSimpleTypeBase(Node node) {
   
  @@ -1102,9 +1128,9 @@
   
       /**
        * Method getContainedSimpleTypes
  -     * 
  -     * @param node 
  -     * @return 
  +     *
  +     * @param node
  +     * @return
        */
       public static QName[] getContainedSimpleTypes(Node node) {
   
  @@ -1180,9 +1206,9 @@
       /**
        * Returns the contained restriction or extension node underneath
        * the specified node.  Returns null if not found
  -     * 
  -     * @param node 
  -     * @return 
  +     *
  +     * @param node
  +     * @return
        */
       public static Node getRestrictionOrExtensionNode(Node node) {
   
  @@ -1252,7 +1278,7 @@
       /**
        * If the specified node represents an array encoding of one of the following
        * forms, then return the qname repesenting the element type of the array.
  -     * 
  +     *
        * @param node is the node
        * @param dims is the output value that contains the number of dimensions if return is not null
        * @param itemQName will end up containing the "inner" QName for a
  @@ -1291,7 +1317,7 @@
        * <p/>
        * <xsd:element ref="alias"  maxOccurs="unbounded"/>
        * returns qname for "alias"
  -     * 
  +     *
        * @param node is the Node
        * @return QName of the compoent of the collection
        */
  @@ -1378,7 +1404,7 @@
       /**
        * If the specified node represents an array encoding of one of the following
        * forms, then return the qname repesenting the element type of the array.
  -     * 
  +     *
        * @param node is the node
        * @param dims is the output value that contains the number of dimensions if return is not null
        * @return QName or null
  @@ -1482,7 +1508,7 @@
                       }
                   }
               }
  -            
  +
               // Under the restriction there should be an attribute OR a sequence/all group node.
               // (There may be other #text nodes, which we will ignore).
               Node groupNode = null;
  @@ -1622,10 +1648,10 @@
       /**
        * adds an attribute node's type and name to the vector
        * helper used by getContainedAttributeTypes
  -     * 
  -     * @param v           
  -     * @param child       
  -     * @param symbolTable 
  +     *
  +     * @param v
  +     * @param child
  +     * @param symbolTable
        */
       private static void addAttributeToVector(Vector v, Node child,
                                                SymbolTable symbolTable) {
  @@ -1680,7 +1706,7 @@
           if (type instanceof org.apache.axis.wsdl.symbolTable.Element) {
                   type = ((org.apache.axis.wsdl.symbolTable.Element) type).getRefType();
           }
  -        
  +
           // add type and name to vector, skip it if we couldn't parse it
           // XXX - this may need to be revisited.
           if ((type != null) && (attributeName != null)) {
  @@ -1700,11 +1726,11 @@
       /**
        * adds an attribute to the vector
        * helper used by addAttributeGroupToVector
  -     * 
  -     * @param v           
  -     * @param symbolTable 
  -     * @param type        
  -     * @param name        
  +     *
  +     * @param v
  +     * @param symbolTable
  +     * @param type
  +     * @param name
        */
       private static void addAttributeToVector(Vector v, SymbolTable symbolTable,
                                                QName type, QName name) {
  @@ -1720,10 +1746,10 @@
       /**
        * adds each attribute group's attribute node to the vector
        * helper used by getContainedAttributeTypes
  -     * 
  -     * @param v           
  -     * @param attrGrpnode 
  -     * @param symbolTable 
  +     *
  +     * @param v
  +     * @param attrGrpnode
  +     * @param symbolTable
        */
       private static void addAttributeGroupToVector(Vector v, Node attrGrpnode,
                                                     SymbolTable symbolTable) {
  @@ -1815,10 +1841,10 @@
        * <attribute name="Male" type="boolean" />
        * <attributeGroup ref="s0:MyAttrSet" />
        * </complexType>
  -     * 
  -     * @param node        
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param node
  +     * @param symbolTable
  +     * @return
        */
       public static Vector getContainedAttributeTypes(Node node,
                                                       SymbolTable symbolTable) {
  @@ -1930,9 +1956,9 @@
   
       /**
        * Determine if a string is a simple XML Schema type
  -     * 
  -     * @param s 
  -     * @return 
  +     *
  +     * @param s
  +     * @return
        */
       private static boolean isSimpleSchemaType(String s) {
   
  @@ -1945,9 +1971,9 @@
   
       /**
        * Determine if a QName is a simple XML Schema type
  -     * 
  -     * @param qname 
  -     * @return 
  +     *
  +     * @param qname
  +     * @return
        */
       public static boolean isSimpleSchemaType(QName qname) {
   
  @@ -1962,21 +1988,21 @@
        * Returns the base type of a given type with its symbol table.
        * This logic is extracted from JavaTypeWriter's constructor() method
        * for reusing.
  -     * 
  -     * @param type 
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param type
  +     * @param symbolTable
  +     * @return
        */
       public static TypeEntry getBaseType(TypeEntry type, SymbolTable symbolTable) {
  -        Node node = type.getNode();     
  +        Node node = type.getNode();
           TypeEntry base = getComplexElementExtensionBase(
                   node, symbolTable);
           if (base == null) {
               base = getComplexElementRestrictionBase(node, symbolTable);
  -        }                    
  -        
  +        }
  +
           if (base == null) {
  -            QName baseQName = getSimpleTypeBase(node);                        
  +            QName baseQName = getSimpleTypeBase(node);
               if (baseQName != null) {
                   base = symbolTable.getType(baseQName);
               }
  @@ -1985,27 +2011,27 @@
       }
   
       /**
  -     * Returns whether the specified node represents a <xsd:simpleType> 
  +     * Returns whether the specified node represents a <xsd:simpleType>
        * with a nested <xsd:list itemType="...">.
  -     * @param node 
  -     * @return 
  +     * @param node
  +     * @return
        */
       public static boolean isListWithItemType(Node node) {
  -        
  +
           return getListItemType(node) != null;
       }
   
       /**
  -     * Returns the value of itemType attribute of <xsd:list> in <xsd:simpleType> 
  -     * @param node 
  -     * @return 
  +     * Returns the value of itemType attribute of <xsd:list> in <xsd:simpleType>
  +     * @param node
  +     * @return
        */
       public static QName getListItemType(Node node) {
  -        
  +
           if (node == null) {
               return null;
           }
  -        
  +
           // If the node kind is an element, dive into it.
           if (isXSDNode(node, "element")) {
               NodeList children = node.getChildNodes();
  @@ -2022,7 +2048,7 @@
               for (int j = 0; j < children.getLength(); j++) {
                   if (isXSDNode(children.item(j), "list")) {
                       Node listNode = children.item(j);
  -                    org.w3c.dom.Element listElement = 
  +                    org.w3c.dom.Element listElement =
                       (org.w3c.dom.Element) listNode;
                       String type = listElement.getAttribute("itemType");
                       if (type.equals("")) {
  
  
  
  1.95      +95 -83    ws-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java
  
  Index: Utils.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java,v
  retrieving revision 1.94
  retrieving revision 1.95
  diff -u -r1.94 -r1.95
  --- Utils.java	6 May 2005 02:28:10 -0000	1.94
  +++ Utils.java	20 May 2005 12:55:49 -0000	1.95
  @@ -1,12 +1,12 @@
   /*
    * Copyright 2001-2004 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.
  @@ -52,14 +52,14 @@
   
   /**
    * Class Utils
  - * 
  + *
    * @version %I%, %G%
    */
   public class Utils extends org.apache.axis.wsdl.symbolTable.Utils {
   
       /** Field log */
       protected static Log log = LogFactory.getLog(Utils.class.getName());
  -    
  +
       /**
        * @see #holder(Parameter, Emitter)
        */
  @@ -68,10 +68,10 @@
           // For other fields the default values will do.
           arg.setType(type);
           return holder(arg, emitter);
  -    }    
  +    }
       /**
        * Given a type, return the Java mapping of that type's holder.
  -     * 
  +     *
        * @param p          parameter whose holder class name we want to obtain.
        * @param emitter    the only {@link Emitter} object embodying the running
        *                   instance of WSDL2Java.
  @@ -146,7 +146,7 @@
               }
   
               name = JavaUtils.replace(name, "java.lang.", "");
  -            
  +
               // This could be a special QName for a indexed property.
               // If so, change the [] to Array.
               name = JavaUtils.replace(name, "[]", "Array");
  @@ -220,7 +220,7 @@
   
       /**
        * Add package to name
  -     * 
  +     *
        * @param className full name of the class.
        * @param newPkg    name of the package to append
        * @return String name with package name added
  @@ -240,7 +240,7 @@
       /**
        * Given a fault message, return the fully qualified Java class name
        * of the exception to be generated from this fault
  -     * 
  +     *
        * @param faultMessage The WSDL fault message
        * @param symbolTable  the current symbol table
        * @return A Java class name for the fault
  @@ -256,7 +256,7 @@
   
       /**
        * Given a fault message, return the XML type of the exception data.
  -     * 
  +     *
        * @param faultMessage The WSDL fault message object
        * @param symbolTable  the current symbol table
        * @return A QName for the XML type of the data
  @@ -272,7 +272,7 @@
   
       /**
        * Given a fault message, return TRUE if the fault is a complex type fault
  -     * 
  +     *
        * @param faultMessage The WSDL fault message object
        * @param symbolTable  the current symbol table
        * @return A Java class name for the fault
  @@ -297,10 +297,10 @@
        * The first element in the vector is the base type (an TypeEntry).
        * Subsequent elements are values (Strings).
        * If this is not an enumeration, null is returned.
  -     * 
  -     * @param node        
  -     * @param symbolTable 
  -     * @return 
  +     *
  +     * @param node
  +     * @param symbolTable
  +     * @return
        */
       public static Vector getEnumerationBaseAndValues(Node node,
                                                        SymbolTable symbolTable) {
  @@ -417,9 +417,9 @@
   
       /**
        * Capitalize the first character of the name.
  -     * 
  -     * @param name 
  -     * @return 
  +     *
  +     * @param name
  +     * @return
        */
       public static String capitalizeFirstChar(String name) {
   
  @@ -440,9 +440,9 @@
   
       /**
        * Prepend an underscore to the name
  -     * 
  -     * @param name 
  -     * @return 
  +     *
  +     * @param name
  +     * @return
        */
       public static String addUnderscore(String name) {
   
  @@ -455,9 +455,9 @@
   
       /**
        * Map an XML name to a valid Java identifier
  -     * 
  -     * @param name 
  -     * @return 
  +     *
  +     * @param name
  +     * @return
        */
       public static String xmlNameToJava(String name) {
   
  @@ -470,9 +470,9 @@
   
       /**
        * Map an XML name to a valid Java identifier w/ capitolized first letter
  -     * 
  -     * @param name 
  -     * @return 
  +     *
  +     * @param name
  +     * @return
        */
       public static String xmlNameToJavaClass(String name) {
           return capitalizeFirstChar(xmlNameToJava(name));
  @@ -480,9 +480,9 @@
   
       /**
        * Method makePackageName
  -     * 
  -     * @param namespace 
  -     * @return 
  +     *
  +     * @param namespace
  +     * @return
        */
       public static String makePackageName(String namespace) {
   
  @@ -549,7 +549,7 @@
        * Massage <tt>word</tt> into a form suitable for use in a Java package name.
        * Append it to the target string buffer with a <tt>.</tt> delimiter iff
        * <tt>word</tt> is not the first word in the package name.
  -     * 
  +     *
        * @param sb        the buffer to append to
        * @param word      the word to append
        * @param firstWord a flag indicating whether this is the first word
  @@ -589,9 +589,9 @@
   
       /**
        * Query Java Local Name
  -     * 
  -     * @param fullName 
  -     * @return 
  +     *
  +     * @param fullName
  +     * @return
        */
       public static String getJavaLocalName(String fullName) {
           return fullName.substring(fullName.lastIndexOf('.') + 1);
  @@ -599,9 +599,9 @@
   
       /**
        * Query Java Package Name
  -     * 
  -     * @param fullName 
  -     * @return 
  +     *
  +     * @param fullName
  +     * @return
        */
       public static String getJavaPackageName(String fullName) {
   
  @@ -614,12 +614,12 @@
   
       /**
        * Does the given file already exist in the given namespace?
  -     * 
  -     * @param name       
  -     * @param namespace  
  -     * @param namespaces 
  -     * @return 
  -     * @throws IOException 
  +     *
  +     * @param name
  +     * @param namespace
  +     * @param namespaces
  +     * @return
  +     * @throws IOException
        */
       public static boolean fileExists(
               String name, String namespace, Namespaces namespaces)
  @@ -646,10 +646,10 @@
   
       /**
        * Return a string with "var" wrapped as an Object type if needed
  -     * 
  -     * @param type 
  -     * @param var  
  -     * @return 
  +     *
  +     * @param type
  +     * @param var
  +     * @return
        */
       public static String wrapPrimitiveType(TypeEntry type, String var) {
   
  @@ -672,9 +672,9 @@
       /**
        * Return the Object variable 'var' cast to the appropriate type
        * doing the right thing for the primitive types.
  -     * 
  -     * @param var      
  -     * @return 
  +     *
  +     * @param var
  +     * @return
        */
       public static String getResponseString(Parameter param,
                                              String var) {
  @@ -683,7 +683,7 @@
           }
           String typeName = param.getType().getName();
           MimeInfo mimeInfo = param.getMIMEInfo();
  -        
  +
           String mimeType = (mimeInfo == null)
                   ? null
                   : mimeInfo.getType();
  @@ -716,7 +716,7 @@
           }
   
           String objType = (String) TYPES.get(typeName);
  -        
  +
           if (objType != null) {
               if (param.isOmittable()) {
                   typeName = objType;
  @@ -725,29 +725,29 @@
                           "Value();";
               }
           }
  -        
  +
           return "(" + typeName + ") " + var + ";";
       }    // getResponseString
   
       /**
        * Method isPrimitiveType
  -     * 
  -     * @param type 
  -     * @return 
  +     *
  +     * @param type
  +     * @return
        */
       public static boolean isPrimitiveType(TypeEntry type) {
           return TYPES.get(type.getName()) != null;
       }    // isPrimitiveType
  -    
  +
       /**
        * Return a "wrapper" type for the given type name.  In other words,
        * if it's a primitive type ("int") return the java wrapper class
        * ("java.lang.Integer").  Otherwise return the type name itself.
  -     * 
  +     *
        * @param type
        * @return the name of a java wrapper class for the type, or the type's
        *         name if it's not primitive.
  -     */ 
  +     */
       public static String getWrapperType(String type) {
           String ret = (String)TYPES.get(type);
           return (ret == null) ? type : ret;
  @@ -756,7 +756,7 @@
       /**
        * Return the operation QName.  The namespace is determined from
        * the soap:body namespace, if it exists, otherwise it is "".
  -     * 
  +     *
        * @param bindingOper the operation
        * @param bEntry      the symbol table binding entry
        * @param symbolTable SymbolTable
  @@ -920,9 +920,9 @@
       /**
        * Common code for generating a QName in emitted code.  Note that there's
        * no semicolon at the end, so we can use this in a variety of contexts.
  -     * 
  -     * @param qname 
  -     * @return 
  +     *
  +     * @param qname
  +     * @return
        */
       public static String getNewQName(javax.xml.namespace.QName qname) {
           return "new javax.xml.namespace.QName(\"" + qname.getNamespaceURI()
  @@ -938,9 +938,9 @@
        * Get the parameter type name.  If this is a MIME type, then
        * figure out the appropriate type from the MIME type, otherwise
        * use the name of the type itself.
  -     * 
  -     * @param parm 
  -     * @return 
  +     *
  +     * @param parm
  +     * @return
        */
       public static String getParameterTypeName(Parameter parm) {
   
  @@ -971,7 +971,7 @@
       /**
        * Get the QName that could be used in the xsi:type
        * when serializing an object for this parameter/return
  -     * 
  +     *
        * @param param is a parameter
        * @return the QName of the parameter's xsi type
        */
  @@ -987,7 +987,7 @@
       /**
        * Get the QName that could be used in the xsi:type
        * when serializing an object of the given type.
  -     * 
  +     *
        * @param te is the type entry
        * @return the QName of the type's xsi type
        */
  @@ -1025,7 +1025,7 @@
   
       /**
        * Given a MIME type, return the AXIS-specific type QName.
  -     * 
  +     *
        * @param mimeName the MIME type name
        * @return the AXIS-specific QName for the MIME type
        */
  @@ -1051,9 +1051,9 @@
   
       /**
        * Are there any MIME parameters in the given binding?
  -     * 
  -     * @param bEntry 
  -     * @return 
  +     *
  +     * @param bEntry
  +     * @return
        */
       public static boolean hasMIME(BindingEntry bEntry) {
   
  @@ -1072,10 +1072,10 @@
   
       /**
        * Are there any MIME parameters in the given binding's operation?
  -     * 
  -     * @param bEntry    
  -     * @param operation 
  -     * @return 
  +     *
  +     * @param bEntry
  +     * @param operation
  +     * @return
        */
       public static boolean hasMIME(BindingEntry bEntry,
                                     BindingOperation operation) {
  @@ -1182,11 +1182,11 @@
        * <p/>
        * Caller should expect to wrap the construction in a try/catch block
        * if bThrow is set to <i>true</i>.
  -     * 
  +     *
        * @param param       info about the parameter we need a constructor for
        * @param symbolTable used to lookup enumerations
        * @param bThrow      set to true if contructor needs try/catch block
  -     * @return 
  +     * @return
        */
       public static String getConstructorForParam(Parameter param,
                                                   SymbolTable symbolTable,
  @@ -1262,7 +1262,7 @@
   
               return paramType + "." + enumeration;
           }
  -        
  +
           if(param.getType().getRefType()!= null){
               // Check for enumeration
               Vector v2 = Utils.getEnumerationBaseAndValues(param.getType().getRefType().getNode(),
  @@ -1283,7 +1283,8 @@
       }
   
       public static boolean shouldEmit(TypeEntry type) {
  -        // 1) Don't register types that are base (primitive) types or attributeGroups.
  +        // 1) Don't register types that are base (primitive) types
  +        //    or attributeGroups or xs:groups.
           // If the baseType != null && getRefType() != null this
           // is a simpleType that must be registered.
           // 2) Don't register the special types for collections
  @@ -1295,10 +1296,21 @@
                   || (type instanceof Element) || !type.isReferenced()
                   || type.isOnlyLiteralReferenced()
                   || ((type.getNode() != null)
  -                && type.getNode().getLocalName().equals(
  -                        "attributeGroup"))));
  +                && (isXsNode(type.getNode(), "group") ||
  +                        isXsNode(type.getNode(), "attributeGroup")))));
       }
   
  +
  +    /**
  +    * Determines if the DOM Node represents an xs:<node>
  +    */
  +    public static boolean isXsNode (Node node, String nameName)
  +    {
  +		return (node.getLocalName().equals(nameName)
  +                && Constants.isSchemaXSD (node.getNamespaceURI ()));
  +	}
  +
  +
       public static QName getItemQName(TypeEntry te) {
           if (te instanceof DefinedElement) {
               te = te.getRefType();
  
  
  
  1.25      +77 -74    ws-axis/java/src/org/apache/axis/wsdl/gen/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/gen/Parser.java,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- Parser.java	13 Apr 2005 16:22:52 -0000	1.24
  +++ Parser.java	20 May 2005 12:55:49 -0000	1.25
  @@ -1,12 +1,12 @@
   /*
    * Copyright 2001-2004 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.
  @@ -23,6 +23,7 @@
   import org.apache.axis.wsdl.symbolTable.ServiceEntry;
   import org.apache.axis.wsdl.symbolTable.SymTabEntry;
   import org.apache.axis.wsdl.symbolTable.SymbolTable;
  +import org.apache.axis.wsdl.toJava.Utils;
   import org.apache.axis.wsdl.symbolTable.Type;
   import org.apache.axis.wsdl.symbolTable.TypeEntry;
   import org.w3c.dom.Document;
  @@ -82,8 +83,8 @@
   
       /**
        * Method isDebug
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public boolean isDebug() {
           return debug;
  @@ -91,8 +92,8 @@
   
       /**
        * Method setDebug
  -     * 
  -     * @param debug 
  +     *
  +     * @param debug
        */
       public void setDebug(boolean debug) {
           this.debug = debug;
  @@ -100,26 +101,26 @@
   
       /**
        * Method isQuiet
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public boolean isQuiet() {
           return quiet;
  -    }    
  +    }
   
       /**
        * Method setQuiet
  -     * 
  +     *
        * @param quiet
        */
       public void setQuiet(boolean quiet) {
           this.quiet = quiet;
  -    }   
  -    
  +    }
  +
       /**
        * Method isImports
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public boolean isImports() {
           return imports;
  @@ -127,8 +128,8 @@
   
       /**
        * Method setImports
  -     * 
  -     * @param imports 
  +     *
  +     * @param imports
        */
       public void setImports(boolean imports) {
           this.imports = imports;
  @@ -136,8 +137,8 @@
   
       /**
        * Method isVerbose
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public boolean isVerbose() {
           return verbose;
  @@ -145,8 +146,8 @@
   
       /**
        * Method setVerbose
  -     * 
  -     * @param verbose 
  +     *
  +     * @param verbose
        */
       public void setVerbose(boolean verbose) {
           this.verbose = verbose;
  @@ -154,8 +155,8 @@
   
       /**
        * Method isNowrap
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public boolean isNowrap() {
           return nowrap;
  @@ -163,8 +164,8 @@
   
       /**
        * Method setNowrap
  -     * 
  -     * @param nowrap 
  +     *
  +     * @param nowrap
        */
       public void setNowrap(boolean nowrap) {
           this.nowrap = nowrap;
  @@ -172,8 +173,8 @@
   
       /**
        * Return the current timeout setting
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public long getTimeout() {
           return timeoutms;
  @@ -181,8 +182,8 @@
   
       /**
        * Set the timeout, in milliseconds
  -     * 
  -     * @param timeout 
  +     *
  +     * @param timeout
        */
       public void setTimeout(long timeout) {
           this.timeoutms = timeout;
  @@ -190,8 +191,8 @@
   
       /**
        * Method getUsername
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public String getUsername() {
           return username;
  @@ -199,8 +200,8 @@
   
       /**
        * Method setUsername
  -     * 
  -     * @param username 
  +     *
  +     * @param username
        */
       public void setUsername(String username) {
           this.username = username;
  @@ -208,8 +209,8 @@
   
       /**
        * Method getPassword
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public String getPassword() {
           return password;
  @@ -217,8 +218,8 @@
   
       /**
        * Method setPassword
  -     * 
  -     * @param password 
  +     *
  +     * @param password
        */
       public void setPassword(String password) {
           this.password = password;
  @@ -226,8 +227,8 @@
   
       /**
        * Method getFactory
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public GeneratorFactory getFactory() {
           return genFactory;
  @@ -235,8 +236,8 @@
   
       /**
        * Method setFactory
  -     * 
  -     * @param factory 
  +     *
  +     * @param factory
        */
       public void setFactory(GeneratorFactory factory) {
           this.genFactory = factory;
  @@ -245,8 +246,8 @@
       /**
        * Get the symbol table.  The symbol table is null until
        * run is called.
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public SymbolTable getSymbolTable() {
           return symbolTable;
  @@ -255,8 +256,8 @@
       /**
        * Return the current definition.  The current definition is
        * null until run is called.
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public Definition getCurrentDefinition() {
   
  @@ -268,8 +269,8 @@
       /**
        * Get the current WSDL URI.  The WSDL URI is null until
        * run is called.
  -     * 
  -     * @return 
  +     *
  +     * @return
        */
       public String getWSDLURI() {
   
  @@ -283,9 +284,9 @@
        * <p/>
        * This method will time out after the number of milliseconds specified
        * by our timeoutms member.
  -     * 
  -     * @param wsdlURI 
  -     * @throws Exception 
  +     *
  +     * @param wsdlURI
  +     * @throws Exception
        */
       public void run(String wsdlURI) throws Exception {
   
  @@ -326,7 +327,7 @@
   
       /**
        * Class WSDLRunnable
  -     * 
  +     *
        * @version %I%, %G%
        */
       private class WSDLRunnable implements Runnable {
  @@ -342,9 +343,9 @@
   
           /**
            * Constructor WSDLRunnable
  -         * 
  -         * @param symbolTable 
  -         * @param wsdlURI     
  +         *
  +         * @param symbolTable
  +         * @param wsdlURI
            */
           public WSDLRunnable(SymbolTable symbolTable, String wsdlURI) {
               this.symbolTable = symbolTable;
  @@ -366,8 +367,8 @@
   
           /**
            * Method getFailure
  -         * 
  -         * @return 
  +         *
  +         * @return
            */
           public Exception getFailure() {
               return failure;
  @@ -376,13 +377,13 @@
   
       /**
        * Call this method if your WSDL document has already been parsed as an XML DOM document.
  -     * 
  +     *
        * @param context context This is directory context for the Document.  If the Document were from file "/x/y/z.wsdl" then the context could be "/x/y" (even "/x/y/z.wsdl" would work).  If context is null, then the context becomes the current directory.
        * @param doc     doc This is the XML Document containing the WSDL.
  -     * @throws IOException                  
  -     * @throws SAXException                 
  -     * @throws WSDLException                
  -     * @throws ParserConfigurationException 
  +     * @throws IOException
  +     * @throws SAXException
  +     * @throws WSDLException
  +     * @throws ParserConfigurationException
        */
       public void run(String context, Document doc)
               throws IOException, SAXException, WSDLException,
  @@ -401,8 +402,8 @@
   
       /**
        * Method sanityCheck
  -     * 
  -     * @param symbolTable 
  +     *
  +     * @param symbolTable
        */
       protected void sanityCheck(SymbolTable symbolTable) {
   
  @@ -411,9 +412,9 @@
   
       /**
        * Method generate
  -     * 
  -     * @param symbolTable 
  -     * @throws IOException 
  +     *
  +     * @param symbolTable
  +     * @throws IOException
        */
       private void generate(SymbolTable symbolTable) throws IOException {
   
  @@ -487,9 +488,9 @@
       /**
        * Generate bindings (classes and class holders) for the complex types.
        * If generating serverside (skeleton) spit out beanmappings
  -     * 
  -     * @param symbolTable 
  -     * @throws IOException 
  +     *
  +     * @param symbolTable
  +     * @throws IOException
        */
       private void generateTypes(SymbolTable symbolTable) throws IOException {
   
  @@ -501,7 +502,7 @@
               // Write out the type if and only if:
               // - we found its definition (getNode())
               // - it is referenced
  -            // - it is not a base type or an attributeGroup
  +            // - it is not a base type or an attributeGroup or xs:group
               // - it is a Type (not an Element) or a CollectionElement
               // (Note that types that are arrays are passed to getGenerator
               // because they may require a Holder)
  @@ -510,7 +511,8 @@
                       || (type instanceof CollectionElement));
   
               if ((type.getNode() != null)
  -                    && !type.getNode().getLocalName().equals("attributeGroup")
  +                    && !Utils.isXsNode(type.getNode(), "attributeGroup")
  +                    && !Utils.isXsNode(type.getNode(), "group")
                       && type.isReferenced() && isType
                       && (type.getBaseType() == null)) {
                   Generator gen = genFactory.getGenerator(type, symbolTable);
  @@ -518,7 +520,7 @@
                   gen.generate();
               }
           }
  -        
  +
           Map types = symbolTable.getTypeIndex();
           Collection typeCollection = types.values();
           for (Iterator i = typeCollection.iterator(); i.hasNext(); ) {
  @@ -527,7 +529,7 @@
               // Write out the type if and only if:
               // - we found its definition (getNode())
               // - it is referenced
  -            // - it is not a base type or an attributeGroup
  +            // - it is not a base type or an attributeGroup or xs:group
               // - it is a Type (not an Element) or a CollectionElement
               // (Note that types that are arrays are passed to getGenerator
               // because they may require a Holder)
  @@ -536,7 +538,8 @@
                       || (type instanceof CollectionElement));
   
               if ((type.getNode() != null)
  -                    && !type.getNode().getLocalName().equals("attributeGroup")
  +                    && !Utils.isXsNode(type.getNode(), "attributeGroup")
  +                    && !Utils.isXsNode(type.getNode(), "group")
                       && type.isReferenced() && isType
                       && (type.getBaseType() == null)) {
                   Generator gen = genFactory.getGenerator(type, symbolTable);
  
  
  

Mime
View raw message