Java Web服务 - 列表与数组

时间:2013-01-13 02:20:45

标签: java web-services jax-rpc

我是网络服务的新手。我正在编写一些简单的Web服务进行测试,我有以下问题。

网站here表示JAX-RPC支持基本类型数组。但是当我写一个简单的网络服务时

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

}

并从wsdl生成客户端代码,我得到以下WS客户端接口。

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

它生成具有成员受保护列表

的IntArray类
public class IntArray {

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

这是支持数组的方式吗?那么,传递数组的唯一方法是创建 IntArray 的实例并将整数列表设置为它?

此外,当我将网络服务设为文档样式

WSDL的WS客户端接口具有以下方法:

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

原始服务中的 int [] 数组变为列表&lt;整数&GT;

这是否意味着Web服务中的Array类型总是在wsdl生成的客户端代码中转换为List?

1 个答案:

答案 0 :(得分:3)

JAX-WS使用JAXB进行绑定。 <sequence>的默认映射是List。但您可以使用@XmlJavaTypeAdapter注释来提供XML内容的custom映射。

您可以在Introduction to JAXB (The Java Tutorials > Java Architecture for XML Binding (JAXB))

中查看有关JAXB的更多信息

另一方面,您可以尝试返回一个数组。请参阅问题I can't return array String[] with JAX-WS的答案。但也许你应该考虑:看看这个问题:Can you return an array from a JAX-WS @WebMethod?