You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by JOVANOVIC Nenad <Ne...@svc.co.at> on 2011/01/27 11:37:04 UTC
[Axis2] SOAP responses for empty lists
Hi all,
given the following web service method implementation:
public String[] getString() {
return null;
}
with the following response element definition from the WSDL (used by WSDL2Java):
<xs:element name="getStringResponse">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="return" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
the resulting SOAP response looks like this:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:getStringResponse xmlns:ns2="http://experiment.com">
<ns2:return xsi:nil="1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
</ns2:getStringResponse>
</soapenv:Body>
</soapenv:Envelope>
However, I would have expected the "return" element to be missing altogether. The above SOAP response tells the client that "the return value of this method is a one-element String list containing null", rather than "a null / empty list".
The same effect occurs when the String list is not (as above) directly returned in the method's signature, but inside some container, such as:
public Container getContainer() {
Container c = new Container();
c.setMyStringArray(null);
return c;
}
But here, if the line "c.setMyStringArray(null)" is commented out (i.e., no explicit initialization to null), the result is
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:getContainerResponse xmlns:ns2="http://experiment.com">
<ns2:return/>
</ns2:getContainerResponse>
</soapenv:Body>
</soapenv:Envelope>
The meaning of this SOAP response is "a one-element String list containing the empty String", which is not expected either.
Moreover, if I change the WSDL definition to nillable="false" and return a one-element String array with null ("new String[] {null}"), I get
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:getStringResponse xmlns:ns2="http://experiment.com"/>
</soapenv:Body>
</soapenv:Envelope>
in the non-container case, meaning "null / empty list". In the container case, I get
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns2:getContainerResponse xmlns:ns2="http://experiment.com">
<ns2:return/>
</ns2:getContainerResponse>
</soapenv:Body>
</soapenv:Envelope>
regardless of the initialization type (explicit/implicit), meaning "a one-element String list with an empty String".
Am I getting something wrong, or are these candidates for a JIRA issue?
Thanks,
Nenad Jovanovic
---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscribe@axis.apache.org
For additional commands, e-mail: java-user-help@axis.apache.org