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>