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