我是网络服务的新手。我正在编写一些简单的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?
答案 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?。