You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by to...@apache.org on 2004/11/18 18:00:41 UTC
cvs commit: ws-axis/java/test/wsdl/wrapped2 employee.wsdl
tomj 2004/11/18 09:00:41
Modified: java/src/org/apache/axis/description ElementDesc.java
java/src/org/apache/axis/encoding/ser BeanSerializer.java
java/src/org/apache/axis/i18n resource.properties
java/src/org/apache/axis/types Notation.java
java/src/org/apache/axis/wsdl/fromJava Types.java
java/src/org/apache/axis/wsdl/toJava
JavaBeanHelperWriter.java
java/test/encoding build.xml DerivatedBean.java
ParentBean.java SuperBean.java TestAutoTypes.java
java/test/wsdl/_import Import.xsd
java/test/wsdl/include/address Address.xsd
java/test/wsdl/multiref MultiRefTest.wsdl
java/test/wsdl/omit omit.wsdl OmitTestCase.java
java/test/wsdl/types ComprehensiveTypes.wsdl
java/test/wsdl/wrapped2 employee.wsdl
Log:
Patch from Dominik Kacprzak <do...@sonic.net>, with additional
changes to the encoding unit tests to pass.
This patch provides a fix for various bugs related to Axis treatment of element's
nillable attribute. Although the default value of nillable attribute is "false". Axis
assumes that a nillable attribute is always true and it does not keep track of its
real value. It leads to scenarios in which Axis sets a non-nillable, omittable
element to be null. For Axis there is no difference between the following
two definitions:
<element name="areaCode" type="string" minOccurs="0" maxOccurs="1"/>
and
<element name="areaCode" type="string" minOccurs="0" maxOccurs="1" nillable="true"/>
The fix adds an additional field to org.apache.axis.description.ElementDesc. The nillable property defaults to false and is populated based on web services deployment definition or element's type. As a result, Axis enforces stricter rules when generating web services. An exception is thrown when a null value is passed as a value of a non-nillable, required element.
This patch fixes the following JIRA issues:
- AXIS-530
- AXIS-1321
- AXIS-1332
- AXIS-1357
- AXIS-1670
Details:
- Java/Types.java -
NOTE: This is most likely the most controversial change.
1) I changed the method signature to static since it does not access
any class properties. This is harmless.
2) I changed the logic which checks if type can be nullable.
I couldn't find any justification for why a byte array cannot be null.
To the contrary, I found an example in JAXRPC patterns that shows a nillable byte array: http://java.sun.com/developer/technicalArticles/xml/jaxrpcpatterns/index3.html
- I had to fix quite a few schemas and wsdls in functional tests to allow for null elements.
The test were passing null values for non-nillable elements.
- Extended wsdl.omit test case to cover non-nillable and nillable scenarios.
Revision Changes Path
1.7 +23 -1 ws-axis/java/src/org/apache/axis/description/ElementDesc.java
Index: ElementDesc.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/description/ElementDesc.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ElementDesc.java 8 Jun 2004 16:47:17 -0000 1.6
+++ ElementDesc.java 18 Nov 2004 17:00:40 -0000 1.7
@@ -23,13 +23,17 @@
* XML element
*
* @author Glen Daniels (gdaniels@apache.org)
+ * @author Dominik Kacprzak (dominik@opentoolbox.com)
*/
public class ElementDesc extends FieldDesc implements Serializable {
/** The minOccurs value from the schema */
private int minOccurs = 1;
/** The maxOccurs value from the schema */
private int maxOccurs = 1;
-
+ /** The nillable value from the schema.
+ * By default, element cannot be nillable. */
+ private boolean nillable = false;
+
/** If this is an array, this holds the array type */
private QName arrayType;
@@ -55,6 +59,24 @@
public void setMaxOccurs(int maxOccurs) {
this.maxOccurs = maxOccurs;
+ }
+
+ /**
+ * Returns value of nillable property.
+ *
+ * @return
+ */
+ public boolean isNillable() {
+ return nillable;
+ }
+
+ /**
+ * Sets value of nillable property. Default: <code>false</code>.
+ *
+ * @param nillable
+ */
+ public void setNillable(boolean nillable) {
+ this.nillable = nillable;
}
public QName getArrayType() {
1.79 +29 -8 ws-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java
Index: BeanSerializer.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/encoding/ser/BeanSerializer.java,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -r1.78 -r1.79
--- BeanSerializer.java 4 Nov 2004 13:23:34 -0000 1.78
+++ BeanSerializer.java 18 Nov 2004 17:00:40 -0000 1.79
@@ -21,6 +21,7 @@
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.description.FieldDesc;
import org.apache.axis.description.TypeDesc;
+import org.apache.axis.description.ElementDesc;
import org.apache.axis.encoding.SerializationContext;
import org.apache.axis.encoding.Serializer;
import org.apache.axis.message.MessageElement;
@@ -122,29 +123,33 @@
QName qname = null;
QName xmlType = null;
boolean isOmittable = false;
+ // isNillable default value depends on the field type
+ boolean isNillable = Types.isNullable(propertyDescriptor[i].getType());
// If we have type metadata, check to see what we're doing
// with this field. If it's an attribute, skip it. If it's
// an element, use whatever qname is in there. If we can't
// find any of this info, use the default.
-
if (typeDesc != null) {
FieldDesc field = typeDesc.getFieldByName(propName);
if (field != null) {
- if (!field.isElement())
+ if (!field.isElement()) {
continue;
+ }
+
+ ElementDesc element = (ElementDesc)field;
// If we're SOAP encoded, just use the local part,
// not the namespace. Otherwise use the whole
// QName.
if (isEncoded) {
- qname = new QName(
- field.getXmlName().getLocalPart());
+ qname = new QName(element.getXmlName().getLocalPart());
} else {
- qname = field.getXmlName();
+ qname = element.getXmlName();
}
- isOmittable = field.isMinOccursZero();
- xmlType = field.getXmlType();
+ isOmittable = element.isMinOccursZero();
+ isNillable = element.isNillable();
+ xmlType = element.getXmlType();
}
}
@@ -164,6 +169,13 @@
// Normal case: serialize the value
Object propValue =
propertyDescriptor[i].get(value);
+
+ // an element cannot be null if nillable property is set to "false"
+ // and the element cannot be omitted
+ if (propValue == null && !isNillable && !isOmittable) {
+ throw new IOException(Messages.getMessage("nullNonNillableElement", propName));
+ }
+
// if meta data says minOccurs=0, then we can skip
// it if its value is null and we aren't doing SOAP
// encoding.
@@ -424,9 +436,18 @@
elementType = prefix + ":" + anyQN.getLocalPart();
}
+ // isNillable default value depends on the field type
+ boolean isNillable = Types.isNullable(fieldType);
+ if (typeDesc != null) {
+ FieldDesc field = typeDesc.getFieldByName(fieldName);
+ if (field != null && field.isElement()) {
+ isNillable = ((ElementDesc)field).isNillable();
+ }
+ }
+
elem = types.createElement(fieldName,
elementType,
- types.isNullable(fieldType),
+ isNillable,
isOmittable,
where.getOwnerDocument());
}
1.99 +1 -0 ws-axis/java/src/org/apache/axis/i18n/resource.properties
Index: resource.properties
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/i18n/resource.properties,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -r1.98 -r1.99
--- resource.properties 14 Nov 2004 05:03:53 -0000 1.98
+++ resource.properties 18 Nov 2004 17:00:40 -0000 1.99
@@ -488,6 +488,7 @@
nullHandler00={0}: Null handler;
nullNamespaceURI=Null namespace URI specified.
+nullNonNillableElement=Non nillable element ''{0}'' is null.
nullParent00=null parent!
nullProvider00=Null provider type passed to WSDDProvider!
1.6 +7 -3 ws-axis/java/src/org/apache/axis/types/Notation.java
Index: Notation.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/types/Notation.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- Notation.java 25 Feb 2004 14:02:47 -0000 1.5
+++ Notation.java 18 Nov 2004 17:00:40 -0000 1.6
@@ -137,9 +137,13 @@
typeDesc.addFieldDesc(field);
// An element with a specified QName
- field = new ElementDesc();
- field.setFieldName("system");
- field.setXmlName(Constants.XSD_ANYURI);
+ ElementDesc element = null;
+ element = new ElementDesc();
+ element.setFieldName("system");
+ element.setXmlName(Constants.XSD_ANYURI);
+ // per, http://www.w3.org/TR/xmlschema-1/#element-notation,
+ // "system" property can be null
+ element.setNillable(true);
typeDesc.addFieldDesc(field);
}
1.102 +3 -7 ws-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java
Index: Types.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/fromJava/Types.java,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -r1.101 -r1.102
--- Types.java 11 Nov 2004 23:13:39 -0000 1.101
+++ Types.java 18 Nov 2004 17:00:40 -0000 1.102
@@ -1452,17 +1452,13 @@
}
/**
- * Determines if the field is nullable. All non-primitives except
- * for byte[] are nillable.
+ * Determines if the field is nullable. All non-primitives are nillable.
*
* @param type input Class
* @return true if nullable
*/
- public boolean isNullable(Class type) {
-
- if (type.isPrimitive()
- || (type.isArray()
- && (type.getComponentType() == byte.class))) {
+ public static boolean isNullable(Class type) {
+ if (type.isPrimitive()) {
return false;
} else {
return true;
1.48 +3 -0 ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java
Index: JavaBeanHelperWriter.java
===================================================================
RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/wsdl/toJava/JavaBeanHelperWriter.java,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -r1.47 -r1.48
--- JavaBeanHelperWriter.java 14 Sep 2004 13:07:26 -0000 1.47
+++ JavaBeanHelperWriter.java 18 Nov 2004 17:00:41 -0000 1.48
@@ -368,6 +368,9 @@
if (elem.getMinOccursIs0()) {
pw.println(" elemField.setMinOccurs(0);");
}
+ if (elem.getNillable()) {
+ pw.println(" elemField.setNillable(true);");
+ }
pw.println(" typeDesc.addFieldDesc(elemField);");
}
1.11 +1 -1 ws-axis/java/test/encoding/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/ws-axis/java/test/encoding/build.xml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- build.xml 2 Jun 2004 17:05:16 -0000 1.10
+++ build.xml 18 Nov 2004 17:00:41 -0000 1.11
@@ -63,7 +63,7 @@
</target>
<target name="run" >
- <antcall target="execute-Component" />
+ <antcall target="execute-Component-noServer" />
</target>
</project>
1.4 +5 -1 ws-axis/java/test/encoding/DerivatedBean.java
Index: DerivatedBean.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/encoding/DerivatedBean.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DerivatedBean.java 25 Feb 2004 14:02:54 -0000 1.3
+++ DerivatedBean.java 18 Nov 2004 17:00:41 -0000 1.4
@@ -16,6 +16,8 @@
package test.encoding;
+import org.apache.axis.description.ElementDesc;
+
/**
* A type used for testing serialization of inherited elements
*/
@@ -62,15 +64,17 @@
new org.apache.axis.description.TypeDesc(DerivatedBean.class);
static {
- org.apache.axis.description.FieldDesc field = new org.apache.axis.description.ElementDesc();
+ org.apache.axis.description.ElementDesc field = new org.apache.axis.description.ElementDesc();
field.setFieldName("three");
field.setXmlName(new javax.xml.namespace.QName("", "three"));
field.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+ field.setNillable(true);
typeDesc.addFieldDesc(field);
field = new org.apache.axis.description.ElementDesc();
field.setFieldName("four");
field.setXmlName(new javax.xml.namespace.QName("", "four"));
field.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+ field.setNillable(true);
typeDesc.addFieldDesc(field);
};
1.6 +1 -0 ws-axis/java/test/encoding/ParentBean.java
Index: ParentBean.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/encoding/ParentBean.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ParentBean.java 25 Feb 2004 14:02:54 -0000 1.5
+++ ParentBean.java 18 Nov 2004 17:00:41 -0000 1.6
@@ -62,6 +62,7 @@
field = new ElementDesc();
field.setFieldName("parentStr");
field.setXmlName(new QName("", "parentElement"));
+ ((ElementDesc)field).setNillable(true);
typeDesc.addFieldDesc(field);
}
1.4 +6 -1 ws-axis/java/test/encoding/SuperBean.java
Index: SuperBean.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/encoding/SuperBean.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SuperBean.java 25 Feb 2004 14:02:54 -0000 1.3
+++ SuperBean.java 18 Nov 2004 17:00:41 -0000 1.4
@@ -16,6 +16,8 @@
package test.encoding;
+import org.apache.axis.description.ElementDesc;
+
/**
* A simple type with several elements for testing serialization
*/
@@ -79,20 +81,23 @@
new org.apache.axis.description.TypeDesc(SuperBean.class);
static {
- org.apache.axis.description.FieldDesc field = new org.apache.axis.description.ElementDesc();
+ org.apache.axis.description.ElementDesc field = new org.apache.axis.description.ElementDesc();
field.setFieldName("zero");
field.setXmlName(new javax.xml.namespace.QName("", "zero"));
field.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+ field.setNillable(true);
typeDesc.addFieldDesc(field);
field = new org.apache.axis.description.ElementDesc();
field.setFieldName("one");
field.setXmlName(new javax.xml.namespace.QName("", "one"));
field.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+ field.setNillable(true);
typeDesc.addFieldDesc(field);
field = new org.apache.axis.description.ElementDesc();
field.setFieldName("two");
field.setXmlName(new javax.xml.namespace.QName("", "two"));
field.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
+ field.setNillable(true);
typeDesc.addFieldDesc(field);
};
1.4 +2 -2 ws-axis/java/test/encoding/TestAutoTypes.java
Index: TestAutoTypes.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/encoding/TestAutoTypes.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestAutoTypes.java 25 Nov 2003 06:07:02 -0000 1.3
+++ TestAutoTypes.java 18 Nov 2004 17:00:41 -0000 1.4
@@ -28,7 +28,7 @@
tm.setDoAutoTypes(true);
QName qname = tm.getTypeQName( AttributeBean.class );
- assertEquals( "http://encoding.test",
+ assertEquals( "http://encoding.test/",
qname.getNamespaceURI() );
assertEquals( "AttributeBean", qname.getLocalPart() );
@@ -36,7 +36,7 @@
assertTrue( tm.getSerializer(AttributeBean.class) != null );
assertEquals(
- "http://encoding.test",
+ "http://encoding.test/",
Namespaces.makeNamespace(AttributeBean[].class.getName()));
assertEquals(
"AttributeBean[]",
1.3 +4 -4 ws-axis/java/test/wsdl/_import/Import.xsd
Index: Import.xsd
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/_import/Import.xsd,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- Import.xsd 31 May 2002 19:08:12 -0000 1.2
+++ Import.xsd 18 Nov 2004 17:00:41 -0000 1.3
@@ -12,11 +12,11 @@
<complexType name="Address">
<all>
<element name="streetNum" type="int"/>
- <element name="streetName" type="string"/>
- <element name="city" type="string"/>
- <element name="state" type="string"/>
+ <element name="streetName" nillable="true" type="string"/>
+ <element name="city" nillable="true" type="string"/>
+ <element name="state" nillable="true" type="string"/>
<element name="zip" type="int"/>
- <element name="phoneNumber" type="tns:PhoneNumber"/>
+ <element name="phoneNumber" nillable="true" type="tns:PhoneNumber"/>
</all>
</complexType>
1.2 +2 -2 ws-axis/java/test/wsdl/include/address/Address.xsd
Index: Address.xsd
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/include/address/Address.xsd,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Address.xsd 12 Jul 2002 19:40:57 -0000 1.1
+++ Address.xsd 18 Nov 2004 17:00:41 -0000 1.2
@@ -7,8 +7,8 @@
<xsd:complexType name="address">
<xsd:all>
- <xsd:element name="streetNum" type="xsd:int"/>
- <xsd:element name="streetName" type="xsd:string"/>
+ <xsd:element name="streetNum" nillable="true" type="xsd:int"/>
+ <xsd:element name="streetName" nillable="true" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="typens:stateType"/>
<xsd:element name="zip" type="xsd:int"/>
1.2 +2 -2 ws-axis/java/test/wsdl/multiref/MultiRefTest.wsdl
Index: MultiRefTest.wsdl
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/multiref/MultiRefTest.wsdl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MultiRefTest.wsdl 4 Jan 2002 19:09:41 -0000 1.1
+++ MultiRefTest.wsdl 18 Nov 2004 17:00:41 -0000 1.2
@@ -16,8 +16,8 @@
<xsd:complexType name="nodebase">
<xsd:all>
- <xsd:element name="left" type="typens:node" xsd:nillable="true"/>
- <xsd:element name="right" type="typens:node" xsd:nillable="true"/>
+ <xsd:element name="left" type="typens:node" nillable="true"/>
+ <xsd:element name="right" type="typens:node" nillable="true"/>
</xsd:all>
</xsd:complexType>
1.2 +6 -3 ws-axis/java/test/wsdl/omit/omit.wsdl
Index: omit.wsdl
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/omit/omit.wsdl,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- omit.wsdl 30 May 2002 18:55:21 -0000 1.1
+++ omit.wsdl 18 Nov 2004 17:00:41 -0000 1.2
@@ -8,9 +8,12 @@
<s:element name="Phone">
<s:complexType>
<s:sequence>
- <s:element name="areaCode" type="s:string" maxOccurs="1" minOccurs="0"/>
- <s:element name="prefix" type="s:string" maxOccurs="1" minOccurs="0"/>
- <s:element name="number" type="s:string" maxOccurs="1" minOccurs="0"/>
+ <!-- required element; not nillable -->
+ <s:element name="areaCode" type="s:string" minOccurs="1" maxOccurs="1"/>
+ <!-- optional element; not nillable -->
+ <s:element name="prefix" type="s:string" minOccurs="0" maxOccurs="1"/>
+ <!-- optional element; nillable -->
+ <s:element name="number" type="s:string" nillable="true" minOccurs="0" maxOccurs="1"/>
</s:sequence>
</s:complexType>
</s:element>
1.7 +37 -8 ws-axis/java/test/wsdl/omit/OmitTestCase.java
Index: OmitTestCase.java
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/omit/OmitTestCase.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- OmitTestCase.java 15 Oct 2004 16:42:17 -0000 1.6
+++ OmitTestCase.java 18 Nov 2004 17:00:41 -0000 1.7
@@ -34,9 +34,17 @@
package test.wsdl.omit;
public class OmitTestCase extends junit.framework.TestCase {
+ private static final String AREA_CODE = "111";
public OmitTestCase(String name) {
super(name);
}
+ /**
+ * Optimistic scenario:
+ * - area code is echoed successfully
+ * - prefix is not part of XML exchanged between the client and servers
+ * - number is passed as null.
+ * There does not seem to be a good way to verify what's exchanged over the wire.
+ */
public void test1OmitEchoPhone() {
test.wsdl.omit.Omit binding;
try {
@@ -49,20 +57,41 @@
try {
test.wsdl.omit.Phone input = new test.wsdl.omit.Phone();
- input.setPrefix("555");
- input.setNumber("1212");
+ input.setAreaCode(AREA_CODE);
test.wsdl.omit.Phone out = binding.echoPhone(input);
-
- // TODO: Verify the XML omitted the element
+
assertNotNull("The return value from the operation was null", out);
- assertNull("areacode is not null", out.getAreaCode());
- assertEquals("prefix is incorrect", "555", out.getPrefix());
- assertEquals("number is incorrect", "1212", out.getNumber());
-
+ assertEquals("area code is incorrect", AREA_CODE, out.getAreaCode());
+ assertNull("prefix is not null", out.getPrefix());
+ assertNull("number is not null", out.getNumber());
}
catch (java.rmi.RemoteException re) {
throw new junit.framework.AssertionFailedError("Remote Exception caught: " + re);
+ }
+ }
+
+ /**
+ * Validating that an exception is thrown when area code (which is a required element) is null:
+ */
+ public void test2OmitEchoPhone() {
+ test.wsdl.omit.Omit binding;
+ try {
+ binding = new test.wsdl.omit.OmitTestLocator().getomit();
+ }
+ catch (javax.xml.rpc.ServiceException jre) {
+ throw new junit.framework.AssertionFailedError("JAX-RPC ServiceException caught: " + jre);
+ }
+ assertTrue("binding is null", binding != null);
+
+ try {
+ test.wsdl.omit.Phone input = new test.wsdl.omit.Phone();
+ test.wsdl.omit.Phone out = binding.echoPhone(input);
+ throw new junit.framework.AssertionFailedError("web services call succeeded despite of AreaCode being null.");
+ }
+ catch (java.rmi.RemoteException re) {
+ // this is desired
+ System.out.println(re);
}
}
1.50 +6 -6 ws-axis/java/test/wsdl/types/ComprehensiveTypes.wsdl
Index: ComprehensiveTypes.wsdl
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/types/ComprehensiveTypes.wsdl,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -r1.49 -r1.50
--- ComprehensiveTypes.wsdl 15 Dec 2003 19:25:20 -0000 1.49
+++ ComprehensiveTypes.wsdl 18 Nov 2004 17:00:41 -0000 1.50
@@ -58,16 +58,16 @@
<xsd:complexType name="complexAll">
<xsd:all>
<xsd:element name="areaCode" type="xsd:int"/>
- <xsd:element name="exchange" type="xsd:string"/>
- <xsd:element name="number" type="xsd:string"/>
+ <xsd:element name="exchange" nillable="true" type="xsd:string"/>
+ <xsd:element name="number" nillable="true" type="xsd:string"/>
</xsd:all>
</xsd:complexType>
<xsd:complexType name="complexSequence">
<xsd:sequence>
<xsd:element name="areaCode" type="xsd:int"/>
- <xsd:element name="exchange" type="xsd:string"/>
- <xsd:element name="number" type="xsd:string"/>
+ <xsd:element name="exchange" nillable="true" type="xsd:string"/>
+ <xsd:element name="number" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
@@ -108,7 +108,7 @@
<xsd:complexType name="complexWComplex">
<xsd:sequence>
- <xsd:element name="stock_quote">
+ <xsd:element name="stock_quote" nillable="true">
<xsd:complexType>
<xsd:attribute name="symbol" type="xsd:string"/>
<xsd:sequence>
@@ -118,7 +118,7 @@
<xsd:element name="pctchange" type="xsd:string"/>
<xsd:element name="bid" type="xsd:string"/>
<xsd:element name="ask" type="xsd:string"/>
- <xsd:element name="choice" type="typens:complexChoice"/>
+ <xsd:element name="choice" nillable="true" type="typens:complexChoice"/>
</xsd:sequence>
<xsd:attribute name="last" type="xsd:string"/>
</xsd:complexType>
1.3 +2 -2 ws-axis/java/test/wsdl/wrapped2/employee.wsdl
Index: employee.wsdl
===================================================================
RCS file: /home/cvs/ws-axis/java/test/wsdl/wrapped2/employee.wsdl,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- employee.wsdl 4 Nov 2003 13:26:21 -0000 1.2
+++ employee.wsdl 18 Nov 2004 17:00:41 -0000 1.3
@@ -13,8 +13,8 @@
</xsd:complexType>
<xsd:complexType name="NameType">
<xsd:sequence>
- <xsd:element name="firstName" type="xsd:string"/>
- <xsd:element name="lastName" type="xsd:string"/>
+ <xsd:element name="firstName" nillable="true" type="xsd:string"/>
+ <xsd:element name="lastName" nillable="true" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="NameArrayType">