Java Web Service - List vs Array

Jack picture Jack · Jan 13, 2013 · Viewed 9.8k times · Source

I'm new to web service. I'm writing some simple web services for testing and I have the following questions.

The website here says that JAX-RPC supports array of primitive types. But when I write a simple web service

@WebService
@SOAPBinding(style=Style.RPC)
public interface AddNums {
    @WebMethod
    public int addNumbers(int[] nums);

}

and generate the client code from wsdl i get the following WS client interface.

@WebMethod
@WebResult(partName = "return")
public int addNumbers(
    @WebParam(name = "arg0", partName = "arg0")
    IntArray arg0); 

It generates IntArray class having the member protected List

public class IntArray {

    @XmlElement(nillable = true)
    protected List<Integer> item;

Is this how the arrays are supported? So, the only way to pass the array is to create an instance of IntArray and set List of Integers to it?

Also when i make the webservice to Document style

The WS client interface from WSDL has the following method:

public int addNumbers(
    @WebParam(name = "arg0", targetNamespace = "")
    List<Integer> arg0);

The int[ ] array in the original service, became List< Integer>

Does this mean that Array type in the web service is always converted to List in the client code generated from wsdl?

Answer

Paul Vargas picture Paul Vargas · Jan 13, 2013

JAX-WS use JAXB to binding. The default mapping for <sequence> is a List. But you can use @XmlJavaTypeAdapter annotation to provide a custom mapping of XML content.

You can see more about JAXB in Introduction to JAXB (The Java Tutorials > Java Architecture for XML Binding (JAXB))

In another hand, you can try returning an array. See the answer for the question I can't return array String[] with JAX-WS. But maybe you should consider: look at this question: Can you return an array from a JAX-WS @WebMethod?.