gdaniels    2003/03/05 20:36:56

  Modified:    java/src/org/apache/axis/wsdl/toJava
                        JavaBeanHelperWriter.java
  Log:
  Better solution to bug #17017.
  
  When we find SOAP arrays (restrictions on SOAP:Array), we always end
  up with a DefinedType.  Otherwise, we end up with a CollectionElement,
  CollectionType, etc.
  
  So when we have a DefinedType with dimensions (an array), use the
  refType (which will correctly be "ArrayOfFoo" in most cases for SOAP
  array restrictions).  Otherwise, scan up through the ref types like we used
  to to get the "real" XML type.
  
  Passes all tests, and generates the right code for the example attached to
  17017.  Also fixes bug:
  
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17655
  
  and perhaps also:
  
  http://nagoya.apache.org/bugzilla/show_bug.cgi?id=17705
  
  Revision  Changes    Path
  1.37      +14 -11    
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java
  
  Index: JavaBeanHelperWriter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- JavaBeanHelperWriter.java 5 Mar 2003 13:59:07 -0000       1.36
  +++ JavaBeanHelperWriter.java 6 Mar 2003 04:36:55 -0000       1.37
  @@ -57,6 +57,8 @@
   import org.apache.axis.utils.Messages;
   import org.apache.axis.wsdl.symbolTable.ElementDecl;
   import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import org.apache.axis.wsdl.symbolTable.DefinedElement;
  +import org.apache.axis.wsdl.symbolTable.DefinedType;
   
   import javax.xml.namespace.QName;
   import java.io.IOException;
  @@ -271,18 +273,19 @@
                       fieldName = getAsFieldName(fieldName);
                       QName xmlName = elem.getName();
                       
  -                    // Some special handling for arrays
  +                    // Some special handling for arrays.
                       TypeEntry elemType = elem.getType();
  -                    while (elemType.getRefType() != null &&
  -                           !(elem.getType().getDimensions().indexOf("[") > -1)) {
  -                        elemType = elemType.getRefType();
  -                    }
  -                    
  -                    QName xmlType = elemType.getQName();
  -                    
  -                    if (xmlType != null && xmlType.getLocalPart().indexOf("[") > 0) 
{
  -                        // Skip array types, because they are special
  -                        xmlType = null;
  +                    QName xmlType = null;
  +
  +                    if (elemType.getDimensions().length() > 1 &&
  +                            (elemType.getClass() == DefinedType.class)) {
  +                        // SOAP array, don't write type.
  +                        xmlType = elemType.getRefType().getQName();
  +                    } else {
  +                        while (elemType.getRefType() != null) {
  +                            elemType = elemType.getRefType();
  +                        }
  +                        xmlType = elemType.getQName();
                       }
                       
                       pw.print("        ");
  
  
  

Reply via email to