scheu 2002/06/25 07:45:56
Modified: java/src/org/apache/axis/wsdl/toJava JavaEnumTypeWriter.java
Utils.java
java/test/wsdl/types ComprehensiveTypes.wsdl
Log:
Fix for Bugzilla Defect: http://nagoya.apache.org/bugzilla/show_bug.cgi?id=10198
This fix is necessary for TCK compliance.
Problem: Enumerations of xsd:decimal and xsd:integer (BigDecimal and BigInteger)
were not supported.
Solution: Added the support and added an enumeration of xsd:integer to the
comprehensive testcase.
Revision Changes Path
1.11 +42 -18
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.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- JavaEnumTypeWriter.java 14 Jun 2002 16:11:12 -0000 1.10
+++ JavaEnumTypeWriter.java 25 Jun 2002 14:45:56 -0000 1.11
@@ -103,31 +103,42 @@
// The base type could be a non-object, if so get the corresponding Class.
String baseType = ((TypeEntry) elements.get(0)).getName();
String baseClass = "Object";
- if (baseType.indexOf("String") >=0)
+ if (baseType.indexOf("String") >=0) {
baseClass = "String";
- else if (baseType.indexOf("int") == 0)
+ } 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 = "Integer";
- else if (baseType.indexOf("char") == 0)
+ } else if (baseType.indexOf("char") == 0) {
baseClass = "Character";
- else if (baseType.indexOf("short") == 0)
+ } else if (baseType.indexOf("short") == 0) {
baseClass = "Short";
- else if (baseType.indexOf("long") == 0)
+ } else if (baseType.indexOf("long") == 0) {
baseClass = "Long";
- else if (baseType.indexOf("double") == 0)
+ } else if (baseType.indexOf("double") == 0) {
baseClass = "Double";
- else if (baseType.indexOf("float") == 0)
+ } else if (baseType.indexOf("float") == 0) {
baseClass = "Float";
- else if (baseType.indexOf("byte") == 0)
+ }else if (baseType.indexOf("byte") == 0) {
baseClass = "Byte";
+ }
// Create a list of the literal values.
Vector values = new Vector();
for (int i=1; i < elements.size(); i++) {
String value = (String) elements.get(i);
- if (baseClass.equals("String"))
+ if (baseClass.equals("String")) {
value = "\"" + value + "\""; // Surround literal with double quotes
- else if (baseClass.equals("Character"))
+ }
+ if (baseClass.equals("java.math.BigDecimal") ||
+ baseClass.equals("java.math.BigInteger")) {
+ value = "new "+baseClass +"(\"" + value + "\")";
+ }
+ else if (baseClass.equals("Character")) {
value = "'" + value + "'";
+ }
else if (baseClass.equals("Float")) {
if (!value.endsWith("F") && // Indicate float literal so javac
!value.endsWith("f")) // doesn't complain about precision.
@@ -155,10 +166,13 @@
pw.println(" // " + JavaUtils.getMessage("ctor00"));
pw.println(" protected " + javaName + "(" + baseType + " value) {");
pw.println(" _value_ = value;");
- if (baseClass.equals("String"))
+ if (baseClass.equals("String") ||
+ baseClass.equals("java.math.BigDecimal") ||
+ baseClass.equals("java.math.BigInteger")) {
pw.println(" _table_.put(_value_,this);");
- else
+ } else {
pw.println(" _table_.put(new " + baseClass + "(_value_),this);");
+ }
pw.println(" };");
pw.println("");
@@ -182,19 +196,25 @@
pw.println(" public static " + javaName+ " fromValue(" + baseType +"
value)");
pw.println(" throws java.lang.IllegalStateException {");
pw.println(" "+javaName+" enum = ("+javaName+")");
- if (baseClass.equals("String"))
+ if (baseClass.equals("String") ||
+ baseClass.equals("java.math.BigDecimal") ||
+ baseClass.equals("java.math.BigInteger")) {
pw.println(" _table_.get(value);");
- else
+ } else {
pw.println(" _table_.get(new " + baseClass + "(value));");
+ }
pw.println(" if (enum==null) throw new
java.lang.IllegalStateException();");
pw.println(" return enum;");
pw.println(" }");
-
+
// FromString returns the unique enumeration value object from a string
representation
pw.println(" public static " + javaName+ " fromString(String value)");
pw.println(" throws java.lang.IllegalStateException {");
if (baseClass.equals("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));");
} else if (baseClass.equals("Character")) {
pw.println(" if (value != null && value.length() == 1);");
pw.println(" return fromValue(value.charAt(0));");
@@ -220,12 +240,16 @@
// Provide a reasonable hashCode method (hashCode of the string value of
the enumeration)
pw.println(" public int hashCode() { return toString().hashCode();}");
-
+
// toString returns a string representation of the enumerated value
- if (baseClass.equals("String"))
+ if (baseClass.equals("String")) {
pw.println(" public String toString() { return _value_;}");
- else
+ } else if (baseClass.equals("java.math.BigDecimal") ||
+ baseClass.equals("java.math.BigInteger")) {
+ pw.println(" public String toString() { return
_value_.toString();}");
+ } else {
pw.println(" public String toString() { return
String.valueOf(_value_);}");
+ }
} // writeFileBody
/**
1.40 +2 -0 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.39
retrieving revision 1.40
diff -u -r1.39 -r1.40
--- Utils.java 20 Jun 2002 20:35:48 -0000 1.39
+++ Utils.java 25 Jun 2002 14:45:56 -0000 1.40
@@ -254,6 +254,8 @@
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") ||
1.32 +8 -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.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- ComprehensiveTypes.wsdl 14 Jun 2002 16:11:12 -0000 1.31
+++ ComprehensiveTypes.wsdl 25 Jun 2002 14:45:56 -0000 1.32
@@ -83,6 +83,7 @@
<xsd:element name="enum5" type="typens:enumDouble"/>
<xsd:element name="enum6" type="typens:enumShort"/>
<xsd:element name="enum7" type="typens:enumByte"/>
+ <xsd:element name="enum8" type="typens:enumInteger"/>
<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
-->
@@ -261,6 +262,13 @@
</xsd:restriction>
</xsd:simpleType>
+ <xsd:simpleType name="enumInteger">
+ <xsd:restriction base="xsd:integer">
+ <xsd:enumeration value="1"/>
+ <xsd:enumeration value="2"/>
+ <xsd:enumeration value="3"/>
+ </xsd:restriction>
+ </xsd:simpleType>
<xsd:simpleType name="flowDirectionType">
<xsd:restriction base="xsd:string">