Incorrect Validation for optional sequences and choices (in case
nillable="false")
----------------------------------------------------------------------------------
Key: AXIS-2737
URL: https://issues.apache.org/jira/browse/AXIS-2737
Project: Axis
Issue Type: Bug
Affects Versions: 1.4
Environment: Win32, JDK 1.5
Reporter: Ronny Karallus
Priority: Blocker
The validation inside Axis, checking the conformance of an object before
rendering it to XML, does not work correctly for the following WSDL message
parameter constructs:
1) A Choice, containing a sequence as one option, for example
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:sequence>
<xs:element name="country"
type="xs:string" default="+49"/>
<xs:element name="short"
type="xs:string"/>
</xs:sequence>
<xs:element name="long"
type="xs:string"/>
</xs:choice>
<xs:element name="number" type="xs:string"/>
</xs:sequence>
</xs:complexType>
2) A sequence, containing an optional sequence, for example:
<xs:complexType>
<xs:sequence>
<xs:sequence>
<xs:sequence minOccurs="0">
<xs:element name="country" type="xs:string" default="+49"/>
<xs:element name="short" type="xs:string"/>
</xs:sequence>
<xs:element name="long" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:element name="number" type="xs:string"/>
</xs:sequence>
</xs:complexType>
To show the problem the Java Stubs are generated using WSDL2Java and the invoke
method is called using the following code:
LesenSoapBindingStub service = (LesenSoapBindingStub) (new
LesenServiceLocator()).getLesen(new
java.net.URL("http://localhost:8080/service/Lesen"));
LesenRequest lesen = new LesenRequest();
lesen.set_long("0000");
lesen.setNumber("0000");
service.invoke(lesen);
Obviously this should be possible by the WSDL, because it is the second option
of the choice. Be aware that the code works, if you use the other option,
setting country/short and setting long null. If you use it this way, the
following exception is thrown:
14.04.2008 16:39:17 org.apache.axis.encoding.ser.BeanSerializer serialize
SCHWERWIEGEND: Exception:
java.io.IOException: Non nillable element 'country' is null.
at
org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:215)
at
org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:801)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:208)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at
org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:554)
at org.apache.axis.Message.getContentType(Message.java:486)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:343)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
de.webservice.LesenSoapBindingStub.invoke(LesenSoapBindingStub.java:177)
at Test.main(Test.java:30)
14.04.2008 16:39:17 org.apache.axis.attachments.AttachmentsImpl
getAttachmentCount
WARNUNG: Exception:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.io.IOException: java.io.IOException: Non nillable element
'country' is null.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.io.IOException:
java.io.IOException: Non nillable element 'country' is null.
at
org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:275)
at
org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:801)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:208)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at
org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:554)
at org.apache.axis.Message.getContentType(Message.java:486)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:343)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
de.webservice.LesenSoapBindingStub.invoke(LesenSoapBindingStub.java:177)
at Test.main(Test.java:30)
{http://xml.apache.org/axis/}hostname:WUM03029
java.io.IOException: java.io.IOException: Non nillable element 'country' is
null.
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:317)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at
org.apache.axis.attachments.AttachmentsImpl.getAttachmentCount(AttachmentsImpl.java:554)
at org.apache.axis.Message.getContentType(Message.java:486)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:343)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
de.webservice.LesenSoapBindingStub.invoke(LesenSoapBindingStub.java:177)
at Test.main(Test.java:30)
Caused by: java.io.IOException: java.io.IOException: Non nillable element
'country' is null.
at
org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:275)
at
org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:801)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:208)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
... 17 more
14.04.2008 16:39:17 org.apache.axis.encoding.ser.BeanSerializer serialize
SCHWERWIEGEND: Exception:
java.io.IOException: Non nillable element 'country' is null.
at
org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:215)
at
org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:801)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:208)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at org.apache.axis.SOAPPart.getContentLength(SOAPPart.java:229)
at org.apache.axis.Message.getContentLength(Message.java:510)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:371)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
de.webservice.LesenSoapBindingStub.invoke(LesenSoapBindingStub.java:177)
at Test.main(Test.java:30)
Exception in thread "main" AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.io.IOException: java.io.IOException: Non nillable element
'country' is null.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.io.IOException:
java.io.IOException: Non nillable element 'country' is null.
at
org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:275)
at
org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:801)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:208)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at org.apache.axis.SOAPPart.getContentLength(SOAPPart.java:229)
at org.apache.axis.Message.getContentLength(Message.java:510)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:371)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
de.webservice.LesenSoapBindingStub.invoke(LesenSoapBindingStub.java:177)
at Test.main(Test.java:30)
{http://xml.apache.org/axis/}hostname:WUM03029
java.io.IOException: java.io.IOException: Non nillable element 'country' is
null.
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:317)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:269)
at org.apache.axis.SOAPPart.saveChanges(SOAPPart.java:530)
at org.apache.axis.SOAPPart.getContentLength(SOAPPart.java:229)
at org.apache.axis.Message.getContentLength(Message.java:510)
at
org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:371)
at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)
at
org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at
de.webservice.LesenSoapBindingStub.invoke(LesenSoapBindingStub.java:177)
at Test.main(Test.java:30)
Caused by: java.io.IOException: java.io.IOException: Non nillable element
'country' is null.
at
org.apache.axis.encoding.ser.BeanSerializer.serialize(BeanSerializer.java:275)
at
org.apache.axis.encoding.SerializationContext.serializeActual(SerializationContext.java:1504)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:980)
at
org.apache.axis.encoding.SerializationContext.serialize(SerializationContext.java:801)
at org.apache.axis.message.RPCParam.serialize(RPCParam.java:208)
at org.apache.axis.message.RPCElement.outputImpl(RPCElement.java:433)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.message.SOAPBody.outputImpl(SOAPBody.java:139)
at
org.apache.axis.message.SOAPEnvelope.outputImpl(SOAPEnvelope.java:478)
at
org.apache.axis.message.MessageElement.output(MessageElement.java:1208)
at org.apache.axis.SOAPPart.writeTo(SOAPPart.java:315)
... 17 more
Obviously the validation doesn't work correctly here. It seems as if the choice
or sequence tags, telling that short and country do not need to be provided,
are ignored on validation (see the attached example WSDLs).
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]