JAX-WS Soap 将 String... 转换为 List<String>

JAX-WS Soap converts String... to List<String>

我正在使用 JAXWS
在 Java 中创建 WebService 我有以下界面 web 方法:

@WebMethod
public boolean check(String... p);

当我构建并 运行 项目时,Web 服务引用函数如下所示:

public boolean check(
    @WebParam(name = "arg0", targetNamespace = "")
    List<String> arg0)
    throws IllegalAccessException_Exception,
           InvocationTargetException_Exception,
            NoSuchMethodException_Exception;

String... 被替换为 List<String>
现在我的问题是:

如何防止 JAXWS 将我的参数从 String... 转换为 List<String>

String...(varargs)基本上是内部数组,唯一的区别是你调用它的代码。就像在 main 方法中一样,你可以写 main(String... args) 而不是 main(String[] args).

JAX-WS 使用泛型,这就是为什么它将可变参数转换为列表的原因,因为它只是一个普通数组。

如果你真的想使用数组(可变参数)参数,那么你需要编写自己的适配器并用 @XmlJavaTypeAdapter(YourAdapter.class) 注释参数,其中 YourAdapter 扩展 XmlAdapter<List<String>, String[]> 并覆盖marshall 和 unmarshall 方法。我不确定这是否适用于参数(只记得它适用于 return 值),您必须对其进行测试,但我建议只使用列表参数。