SOAP方法中的数组通过JAX-WS生成的参数?

时间:2012-03-06 16:20:07

标签: java soap jaxb jax-ws

我正在使用JAX-WS注释在Java中构建SOAP服务。除此之外,我想知道如何在我的方法中注释数组参数。当我从我的带注释的接口生成一个wsdl然后再从该wsdl生成java类时(我在测试中这样做,在两种情况下使用Apache cxf),它将生成用于保存数组参数的类。

示例:

 @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;
    );
}

其中StupidData将是另一个注释类似

的类
@XmlAccessorType(XmlAccessType.FIELD)

@XmlRootElement(name = "StupidData")
public class StupidData {
@XmlElement(name = "datapoint")
String datapoint;
}

然后,在生成的类中,参数变为一个新的类StupidDataArray而不是一个数组,该类具有一个StupidData数组的字段。

是否可以直接接受数组作为参数?感谢...

1 个答案:

答案 0 :(得分:1)

就我而言,apache CXF从WSDL文件生成的代码包含ArrayOfXXX个类,其中一个getXXX()方法返回List。 此方法的自动生成的javadoc指出:

  

此访问器方法返回对实时列表的引用,        不是快照。因此你做的任何修改        返回的列表将出现在JAXB对象中。        这就是guid属性没有set方法的原因。        例如,要添加新项目,请执行以下操作:            getXXX().add(newItem);

要回答您的问题,您不能将本机数组传递给该方法,但可以在将元素添加到其基础列表后传递Array类。为此,您使用List从数组包装器中检索封装的getXXX()并向其中添加元素。