Details
Description
I ran into some trouble using JaxWsDynamicClientFactory to access a SOAP service which signature is unknown a compile time and is passed to my code, from an external part at runtime. Following is a minimal example to reproduce the problem.
The service defines the following operation:
@WebMethod(operationName="init")
public void initValueNotNull(
@WebParam(name="values")String[] values);
I generate a SOAP service and a corresponding WSDL from this by using org.apache.cxf.tools.java2ws.JavaToWS. Then I generate a WAR file and deploy this to tomcat.
Now I want to use JaxWsDynamicClientFactory to access this service:
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(new URL("http://localhost:8080/dserv/ArrayService?wsdl"));
String[] values = new String[]
{ "foobar", "something" };
client.invoke("init", values);
In the implementation of the service I have the following code:
@Override
public void initValueNotNull(String[] values)
I would expect, that the two strings from the client get ouputted. Instead I simple see Got values: [].
If I look at the SOAP-message that get exchanged, I see the this:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:init xmlns:ns1="de.fhl.dserv.ws">
<values xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">foobar</values>
</ns1:init>
</soap:Body>
</soap:Envelope>
So somewhere and somehow the array of strings get transformed in a single string (which happens to be the first element of the original array).
–
I have created a demo project and uploaded it to http://dl.dropbox.com/u/338429/CXF_Bug.zip
Included is a ant file to compile and build the service using ant build and execute the client using ant client