1

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

这里的网站说 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实例并将List of Integers设置为它?

另外,当我将 Web 服务设为Document样式时

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

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

原来服务中的int[ ]数组,变成了List<Integer>

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

4

1 回答 1

3

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

您可以在 JAXB简介(Java 教程 > XML 绑定的 Java 体系结构 (JAXB))中了解有关 JAXB 的更多信息

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

于 2013-01-13T22:17:47.453 回答