scheu 2002/05/31 08:17:11
Modified: java/src/org/apache/axis/wsdl/toJava JavaBeanWriter.java
java/test/wsdl/types ComprehensiveTypes.wsdl
VerifyTestCase.java
Log:
Fix for defect http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9257
If a complexType does not have any contained elements or attributes,
the fault class generated for the complexType cannot be compiled.
Added a simple fix to the JavaBeanWriter to only generate the
full constructor if there are actually elements/attributes to
pass in.
Changed the comprehensive test to add two new complexTypes,
emptyFault and emptyComplexType, which have no contained elements
or attributes. This addition validates the processing.
Revision Changes Path
1.15 +28 -27
xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanWriter.java
Index: JavaBeanWriter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanWriter.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- JavaBeanWriter.java 14 May 2002 23:46:34 -0000 1.14
+++ JavaBeanWriter.java 31 May 2002 15:17:10 -0000 1.15
@@ -373,37 +373,38 @@
// Now write the constructor signature
- pw.println(" public " + className + "(");
- for (int i=0; i<paramTypes.size(); i++) {
- pw.print(" " + paramTypes.elementAt(i) +
- " " + paramNames.elementAt(i));
- if ((i+1) < paramTypes.size()) {
- pw.println(",");
- } else {
- pw.println(") {");
- }
- }
-
- // Call the extended constructor to set inherited fields
- if (extendType != null) {
- pw.println(" super(");
- for (int j=0; j<localParams; j++) {
- pw.print(" " + paramNames.elementAt(j));
- if ((j+1) < localParams) {
+ if (paramTypes.size() > 0) {
+ pw.println(" public " + className + "(");
+ for (int i=0; i<paramTypes.size(); i++) {
+ pw.print(" " + paramTypes.elementAt(i) +
+ " " + paramNames.elementAt(i));
+ if ((i+1) < paramTypes.size()) {
pw.println(",");
} else {
- pw.println(");");
+ pw.println(") {");
}
- }
+ }
+
+ // Call the extended constructor to set inherited fields
+ if (extendType != null) {
+ pw.println(" super(");
+ for (int j=0; j<localParams; j++) {
+ pw.print(" " + paramNames.elementAt(j));
+ if ((j+1) < localParams) {
+ pw.println(",");
+ } else {
+ pw.println(");");
+ }
+ }
+ }
+ // Set local fields directly
+ for (int j=localParams; j<paramNames.size(); j++) {
+ pw.println(" this." + paramNames.elementAt(j) +
+ " = " + paramNames.elementAt(j)+ ";");
+ }
+ pw.println(" }");
+ pw.println();
}
- // Set local fields directly
- for (int j=localParams; j<paramNames.size(); j++) {
- pw.println(" this." + paramNames.elementAt(j) +
- " = " + paramNames.elementAt(j)+ ";");
- }
- pw.println(" }");
- pw.println();
-
}
/**
1.29 +108 -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.28
retrieving revision 1.29
diff -u -r1.28 -r1.29
--- ComprehensiveTypes.wsdl 26 May 2002 15:31:33 -0000 1.28
+++ ComprehensiveTypes.wsdl 31 May 2002 15:17:11 -0000 1.29
@@ -133,6 +133,14 @@
</xsd:sequence>
</xsd:complexType>
+ <xsd:complexType name="emptyFault">
+ <xsd:sequence />
+ </xsd:complexType>
+
+ <xsd:complexType name="emptyComplexType">
+ <xsd:sequence />
+ </xsd:complexType>
+
<xsd:simpleType name="simpleFwd">
<xsd:restriction base="typens:simple" />
</xsd:simpleType>
@@ -602,6 +610,14 @@
<part name="cat" type="typens:Cat"/>
</message>
+ <message name="emptyFault">
+ <part name="theFault" type="typens:emptyFault" />
+ </message>
+
+ <message name="emptyComplexType">
+ <part name="emptyComplexType" type="typens:emptyComplexType" />
+ </message>
+
<!-- port type declns -->
<portType name="TypeTest">
<operation name="allPrimitivesIn">
@@ -730,6 +746,26 @@
<input message="tns:empty"/>
<output message="tns:complexWComplex"/>
</operation>
+ <operation name="emptyComplexTypeIn" parameterOrder="emptyComplexType">
+ <input message="tns:emptyComplexType"/>
+ <output message="tns:empty"/>
+ <fault name="emptyFault" message="tns:emptyFault"/>
+ </operation>
+ <operation name="emptyComplexTypeInout" parameterOrder="emptyComplexType">
+ <input message="tns:emptyComplexType"/>
+ <output message="tns:emptyComplexType"/>
+ <fault name="emptyFault" message="tns:emptyFault"/>
+ </operation>
+ <operation name="emptyComplexTypeOut" parameterOrder="emptyComplexType">
+ <input message="tns:empty"/>
+ <output message="tns:emptyComplexType"/>
+ <fault name="emptyFault" message="tns:emptyFault"/>
+ </operation>
+ <operation name="emptyComplexTypeReturn">
+ <input message="tns:empty"/>
+ <output message="tns:emptyComplexType"/>
+ <fault name="emptyFault" message="tns:emptyFault"/>
+ </operation>
<operation name="anyIn">
<input message="tns:any"/>
<output message="tns:empty"/>
@@ -1345,6 +1381,78 @@
namespace=""
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
+ </operation>
+ <operation name="emptyComplexTypeIn">
+ <soap:operation soapAction=""/>
+ <input>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </input>
+ <output>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </output>
+ <fault>
+ <soap:fault name="emptyFault" use="encoded"/>
+ </fault>
+ </operation>
+ <operation name="emptyComplexTypeInout">
+ <soap:operation soapAction=""/>
+ <input>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </input>
+ <output>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </output>
+ <fault>
+ <soap:fault name="emptyFault" use="encoded"/>
+ </fault>
+ </operation>
+ <operation name="emptyComplexTypeOut">
+ <soap:operation soapAction=""/>
+ <input>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </input>
+ <output>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </output>
+ <fault>
+ <soap:fault name="emptyFault" use="encoded"/>
+ </fault>
+ </operation>
+ <operation name="emptyComplexTypeReturn">
+ <soap:operation soapAction=""/>
+ <input>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </input>
+ <output>
+ <soap:body
+ use="encoded"
+ namespace=""
+ encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
+ </output>
+ <fault>
+ <soap:fault name="emptyFault" use="encoded"/>
+ </fault>
</operation>
<operation name="anyIn">
<soap:operation soapAction=""/>
1.24 +27 -0 xml-axis/java/test/wsdl/types/VerifyTestCase.java
Index: VerifyTestCase.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/wsdl/types/VerifyTestCase.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- VerifyTestCase.java 30 May 2002 23:46:04 -0000 1.23
+++ VerifyTestCase.java 31 May 2002 15:17:11 -0000 1.24
@@ -50,6 +50,9 @@
import test.wsdl.types.comprehensive_types.ComplexWComplexHolder;
import test.wsdl.types.comprehensive_types.ElemWComplex;
import test.wsdl.types.comprehensive_types.ElemWComplexHolder;
+import test.wsdl.types.comprehensive_types.EmptyComplexType;
+import test.wsdl.types.comprehensive_types.EmptyComplexTypeHolder;
+import test.wsdl.types.comprehensive_types.EmptyFault;
import test.wsdl.types.comprehensive_types.Enum;
import test.wsdl.types.comprehensive_types.EnumHolder;
import test.wsdl.types.comprehensive_types.EnumByte;
@@ -363,6 +366,30 @@
try {
ComplexWComplex value = null;
value = binding.complexWComplexReturn();
+ } catch (java.rmi.RemoteException re) {
+ throw new junit.framework.AssertionFailedError("Remote Exception
caught: " + re );
+ }
+ try {
+ EmptyComplexType value = new EmptyComplexType();
+ binding.emptyComplexTypeIn(value);
+ } catch (java.rmi.RemoteException re) {
+ throw new junit.framework.AssertionFailedError("Remote Exception
caught: " + re );
+ }
+ try {
+ EmptyComplexTypeHolder value = new EmptyComplexTypeHolder( new
EmptyComplexType());
+ binding.emptyComplexTypeInout(value);
+ } catch (java.rmi.RemoteException re) {
+ throw new junit.framework.AssertionFailedError("Remote Exception
caught: " + re );
+ }
+ try {
+ EmptyComplexTypeHolder value = new EmptyComplexTypeHolder();
+ binding.emptyComplexTypeOut(value);
+ } catch (java.rmi.RemoteException re) {
+ throw new junit.framework.AssertionFailedError("Remote Exception
caught: " + re );
+ }
+ try {
+ EmptyComplexType value = null;
+ value = binding.emptyComplexTypeReturn();
} catch (java.rmi.RemoteException re) {
throw new junit.framework.AssertionFailedError("Remote Exception
caught: " + re );
}