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(" ");