Hi all,

while testing a web service with different variations (regarding "nillable" and 
"minOccurs")
of input and output parameters, I discovered a few cases where the SOAP 
response or the Java
input object passed by Axis appears to be wrong (or at least questionable). For 
the complete table,
see below (fixed-width font works best).

Here is the textual description for the first line in the "INPUT" table:

I have a web service that has a string input parameter, either directly in the 
service method signature,
or indirectly in a container type. The input parameter is defined in the WSDL 
with nillable="false",
but the user sends in nil anyway (so the user is the cause for whatever happens 
next). I would
expect that Axis hands over null to the application code, but I get the empty 
string instead.

Any comments on this?

Thanks in advance,
Nenad Jovanovic


Cause:

U - Web Service User (Client)
D - Web Service Developer

Categories:

E: Axis error
I: Inconsistency or questionable definition


when a string element in a response object is declared with nillable="true" and 
minOccurs="1"

INPUT
=======

cause | cat. | type     | iface / cont. | minOccurs | nillable | SOAP           
| Java expected | Java actual
------------------------------------------------------------------------------------------------------------------
  U   |  E   | String   | both          | 0/1       | false    | xsi:nil="true" 
| null          | empty string
  U   |  E   | String[] | both          | 0/1       | false    | xsi:nil="true" 
| { null }      | {empty string}
  U   |  E   | Boolean  | both          | 0         | false    | xsi:nil="true" 
| null          | false
  -   |  I   | Boolean  | both          | 0/1       | true     | <..></..>      
| null          | false
  U   |  I   | Boolean  | both          | 0         | false    | <..></..>      
| null          | false
  -   |  I   | Boolean  | both          | 0/1       | true     | <../>          
| null          | false
      |  I   | Boolean  | both          | 0         | false    | <../>          
| null          | false
  U   |  I   | Boolean  | iface         | 1         | false    | missing        
| false (prim.) | NullPointerExc
  U   |  E   | Boolean[]| both          | 0         | false    | xsi:nil=true   
| null          | false


OUTPUT
=======

cause | cat. | type     | iface / container | minOccurs | nillable | Java     | 
SOAP expected | SOAP actual
-----------------------------------------------------------------------------------------------------------------
  D   |  I   | String   | container         | 1         | true     | n.init.  | 
xsi:nil="1"   | missing
  -   |  E   | String[] | both              | 0/1       | true     | null     | 
missing       | xsi:nil="1"
  D   |  E   | String[] | both              | 0/1       | false    | { null } | 
xsi:nil="1"   | missing
  -   |  E   | Boolean[]| both              | 0/1       | true     | null     | 
missing       | xsi:nil="1"
  -   |  E   | Boolean[]| both              | 0         | false    | { null } | 
xsi:nil="1"   | missing
  -   |  E   | Boolean[]| interface         | 1         | false    | WSDL2Java 
produces illegal code


Reply via email to