scheu       2002/09/24 10:30:29

  Modified:    java/src/org/apache/axis/wsdl/toJava JavaEnumTypeWriter.java
                        Utils.java
               java/test/wsdl/types ComprehensiveTypes.wsdl
  Log:
  Defect 12965:
  
  Added support for enumerations of the new org.apache.axis.types.
  
  Also added a test in comprehensive tests.
  
  Revision  Changes    Path
  1.17      +17 -20    
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaEnumTypeWriter.java
  
  Index: JavaEnumTypeWriter.java
  ===================================================================
  RCS file: 
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaEnumTypeWriter.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- JavaEnumTypeWriter.java   18 Sep 2002 16:10:36 -0000      1.16
  +++ JavaEnumTypeWriter.java   24 Sep 2002 17:30:29 -0000      1.17
  @@ -99,13 +99,9 @@
           // The first index is the base type.
           // The base type could be a non-object, if so get the corresponding Class.
           String baseType = ((TypeEntry) elements.get(0)).getName();
  -        String baseClass = "java.lang.Object";
  +        String baseClass = baseType;
           if (baseType.indexOf("String") >=0) {
               baseClass = "java.lang.String";
  -        } else if (baseType.equals("java.math.BigDecimal")) {
  -            baseClass = "java.math.BigDecimal";
  -        } else if (baseType.equals("java.math.BigInteger")) {
  -            baseClass = "java.math.BigInteger";
           } else if (baseType.indexOf("int") == 0) {
               baseClass = "java.lang.Integer";
           } else if (baseType.indexOf("char") == 0) {
  @@ -128,11 +124,7 @@
               String value = (String) elements.get(i);
               if (baseClass.equals("java.lang.String")) {
                   value = "\"" + value + "\"";  // Surround literal with double quotes
  -            }
  -            if (baseClass.equals("java.math.BigDecimal") ||
  -                baseClass.equals("java.math.BigInteger")) {
  -                value = "new "+baseClass +"(\"" + value + "\")"; 
  -            }
  +            } 
               else if (baseClass.equals("java.lang.Character")) {
                   value = "'" + value + "'";
               }
  @@ -146,6 +138,10 @@
                       !value.endsWith("l"))     // doesn't complain about precision.
                       value += "L";
               }
  +            else if (baseClass.equals(baseType)) {
  +                // Construct baseClass object with literal string
  +                value = "new "+baseClass +"(\"" + value + "\")"; 
  +            }
               values.add(value);
           }
           
  @@ -164,8 +160,7 @@
           pw.println("    protected " + javaName + "(" + baseType + " value) {");
           pw.println("        _value_ = value;");
           if (baseClass.equals("java.lang.String") || 
  -            baseClass.equals("java.math.BigDecimal") ||
  -            baseClass.equals("java.math.BigInteger")) {
  +            baseClass.equals(baseType)) {
               pw.println("        _table_.put(_value_,this);");
           } else {
               pw.println("        _table_.put(new " + baseClass + "(_value_),this);");
  @@ -194,8 +189,7 @@
           pw.println("          throws java.lang.IllegalStateException {");
           pw.println("        "+javaName+" enum = ("+javaName+")");
           if (baseClass.equals("java.lang.String") || 
  -            baseClass.equals("java.math.BigDecimal") ||
  -            baseClass.equals("java.math.BigInteger")) {
  +            baseClass.equals(baseType)) {
               pw.println("            _table_.get(value);");
           } else {
               pw.println("            _table_.get(new " + baseClass + "(value));");
  @@ -208,10 +202,13 @@
           pw.println("    public static " + javaName+ " fromString(java.lang.String 
value)");
           pw.println("          throws java.lang.IllegalStateException {");
           if (baseClass.equals("java.lang.String")) {
  -            pw.println("        return fromValue(value);");                         
            
  -        } else if (baseClass.equals("java.math.BigDecimal") ||
  -                   baseClass.equals("java.math.BigInteger")) {
  -            pw.println("        return fromValue(new " + baseClass + "(value));");
  +            pw.println("        return fromValue(value);");
  +        } else if (baseClass.equals(baseType)) {
  +            pw.println("        try {");
  +            pw.println("            return fromValue(new " + baseClass + 
"(value));");
  +            pw.println("        } catch (Exception e) {");
  +            pw.println("            throw new java.lang.IllegalStateException();"); 
  +            pw.println("        }");
           } else if (baseClass.equals("java.lang.Character")) {
               pw.println("        if (value != null && value.length() == 1);");  
               pw.println("            return fromValue(value.charAt(0));");           
          
  @@ -230,6 +227,7 @@
               pw.println("            throw new java.lang.IllegalStateException();"); 
               pw.println("        }");
           }
  +
           pw.println("    }");
   
           // Equals == to determine equality value.
  @@ -242,8 +240,7 @@
           // toString returns a string representation of the enumerated value
           if (baseClass.equals("java.lang.String")) {
               pw.println("    public java.lang.String toString() { return _value_;}");
  -        } else if (baseClass.equals("java.math.BigDecimal") ||
  -                   baseClass.equals("java.math.BigInteger")) {
  +        } else if (baseClass.equals(baseType)) {
               pw.println("    public java.lang.String toString() { return 
_value_.toString();}");
           } else {                            
               pw.println("    public java.lang.String toString() { return 
java.lang.String.valueOf(_value_);}");
  
  
  
  1.58      +5 -12     xml-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java
  
  Index: Utils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/Utils.java,v
  retrieving revision 1.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- Utils.java        17 Sep 2002 20:02:12 -0000      1.57
  +++ Utils.java        24 Sep 2002 17:30:29 -0000      1.58
  @@ -66,6 +66,7 @@
   import org.apache.axis.wsdl.symbolTable.Parameters;
   import org.apache.axis.wsdl.symbolTable.SymbolTable;
   import org.apache.axis.wsdl.symbolTable.TypeEntry;
  +import org.apache.axis.wsdl.symbolTable.SchemaUtils;
   
   import org.w3c.dom.Node;
   import org.w3c.dom.NodeList;
  @@ -285,25 +286,17 @@
   
               // The restriction node indicates the type being restricted
               // (the base attribute contains this type).
  -            // The base type must be a built-in type, and not boolean
  +            // The base type must be a simple type, and not boolean
               TypeEntry baseEType = null;
               if (restrictionNode != null) {
                   QName baseType = Utils.getTypeQName(restrictionNode, new 
BooleanHolder(), false);
                   baseEType = symbolTable.getType(baseType);
                   if (baseEType != null) {
                       String javaName = baseEType.getName();
  -                    if (javaName.equals("java.lang.String") ||
  -                        javaName.equals("java.math.BigInteger") ||
  -                        javaName.equals("java.math.BigDecimal") ||
  -                        javaName.equals("int") ||
  -                        javaName.equals("long") ||
  -                        javaName.equals("short") ||
  -                        javaName.equals("float") ||
  -                        javaName.equals("double") ||
  -                        javaName.equals("byte"))
  -                        ; // Okay Type
  -                    else
  +                    if (javaName.equals("boolean") ||
  +                        ! SchemaUtils.isSimpleSchemaType(baseEType.getQName())) {
                           baseEType = null;
  +                    }
                   }
               }
   
  
  
  
  1.45      +9 -0      xml-axis/java/test/wsdl/types/ComprehensiveTypes.wsdl
  
  Index: ComprehensiveTypes.wsdl
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/wsdl/types/ComprehensiveTypes.wsdl,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- ComprehensiveTypes.wsdl   23 Sep 2002 19:24:39 -0000      1.44
  +++ ComprehensiveTypes.wsdl   24 Sep 2002 17:30:29 -0000      1.45
  @@ -113,6 +113,7 @@
               <xsd:element name="enum6" type="typens:enumShort"/>
               <xsd:element name="enum7" type="typens:enumByte"/>
               <xsd:element name="enum8" type="typens:enumInteger"/>
  +            <xsd:element name="enum9" type="typens:enumNMTOKEN"/>
               <xsd:element name="soapint" type="soapenc:int"/>
               <xsd:element name="nested" type="typens2:b"/>
               <xsd:element name="D_TSENT" type="xsd:string"/> <!-- test strange name 
-->
  @@ -328,6 +329,14 @@
             <xsd:enumeration value="in"/>
             <xsd:enumeration value="inOut"/>
             <xsd:enumeration value="out"/>
  +        </xsd:restriction>
  +      </xsd:simpleType>
  +
  +      <xsd:simpleType name="enumNMTOKEN">
  +        <xsd:restriction base="xsd:NMTOKEN"> <!-- axis provided simple type -->
  +          <xsd:enumeration value="NameToken1"/>
  +          <xsd:enumeration value="NameToken2"/>                    
  +          <xsd:enumeration value="NameToken3"/>                    
           </xsd:restriction>
         </xsd:simpleType>
   
  
  
  


Reply via email to