passing arrays to ejb3 WS
stefkrech Aug 2, 2006 10:22 AMHello,
i'm using jboss 4.0.4 GA with jbossws 1.0.2 GA
I've deployed a SLSB as Webservice:
@WebService(name = "ImportEndpointInterface",
targetNamespace = "myns",
serviceName = "ImportService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
@Stateless
public class ImportBean {
@WebMethod
public String putArray( @WebParam(name = "mystrings") String[] mystrings ) {
...
return "OK";
}
...
}
I'd like to use the WS via DII Client like this:
...
call.setOperationName( new QName( "myns", "putArray") );
call.setProperty( Call.SOAPACTION_USE_PROPERTY, Boolean.TRUE );
call.setProperty( Call.SEND_TYPE_ATTR, Boolean.TRUE );
call.setProperty(Call.OPERATION_STYLE_PROPERTY, "wrapped" );
call.addParameter( new QName( "", "mystrings" ), XMLType.SOAP_ARRAY, ParameterMode.IN );
String[] l = new String[] {"a", "b", "c"};
call.invoke( new Object[] { l } );
With simple data-types like "String" evrything works as expected, but when I pass an array like in the above example, the elements of the String[]-Array in the Webservice-method look like this:
<item>a</item>, <item>b</item>" and <item>c</item>- not just "a", "b" and "c".
The transmitted message looks like this:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <putArray xmlns="myns"> <mystrings xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns=""> <item>a</item> <item>b</item> <item>c</item> </mystrings> </putArray> </soapenv:Body> </soapenv:Envelope>
i use the wsdl which was generated during deployment to create the Service-object with the ServiceFactory.
here an exerpt from the generated file:
<message name="ImportEndpointInterface_putArray"> <part name="mystrings" type="xsd:NMTOKENS"/> </message>
it makes no difference when I use the XMLType.XSD_NMTOKENS for the addParameter-call:
call.addParameter( new QName( "", "mystrings" ), XMLType.XSD_NMTOKENS, ParameterMode.IN );
What am I doing wrong here? I only want to get the strings out of the array without those "item"-markups.
regards,
Stefan