Reputation: 1183
I am building a SOAP service in Java with JAX-WS annotations. Among other things I wonder how to annotate array parameters in my methods. At the moment when I generate a wsdl from my annotated interface and then generate java classes again from that wsdl (I do that for testing, in both cases using Apache cxf), it will generate Classes to hold the array parameters.
Example:
@WebService(name="sillyService",
...
)
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.BARE)
public interface SillyService {
public String doSillyThings(
@WebParameter(name = "stupid") StupidData[] stupid;
);
}
Where StupidData would be another class annotated like this
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "StupidData")
public class StupidData {
@XmlElement(name = "datapoint")
String datapoint;
}
Then instead of an Array, in the generated classes the Parameter becomes a new class StupidDataArray which has a filed that is the array of StupidData.
Any way to make it accept the array as parameter directly? Thanks...
Upvotes: 3
Views: 2293
Reputation: 513
In my case, the code generated by apache CXF from the WSDL files includes ArrayOfXXX
classes, with a single getXXX()
method returning a List
.
The autogenerated javadoc of this method states:
This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make to the returned list will be present inside the JAXB object. This is why there is not a
set
method for the guid property. For example, to add a new item, do as follows:getXXX().add(newItem);
To answer your question, you can't pass a native array to the method but you can pass the Array class after you have added elements to its underlying list. To do that, you retrieve the encapsulated List
from the array wrapper using getXXX()
and add elements to it.
Upvotes: 1