使用Java JAX-WS返回字符串数组?

时间:2011-01-11 00:02:50

标签: java jax-ws

我试图创建一个简单的Web服务,当被调用时应该返回一个String数组,但它似乎没有这样做,我无法弄清楚为什么?

这个WebService就像这样:

@WebService
public String[] getData(String testParam)
{
    String[] testArray= null;

    ....//DOES SOMETHING TO TEST PARAM//.....

    testArray= longtestString.split("-");
    return testArray;
}

现在我创建了一个尝试调用此函数并收回String数组的客户端,客户端的代码是:

myjaxpackage.GetDataService service = new myjaxpackage.GetDataService();
myjaxpackage.GetData port = service.getGetDataPort();
String testParameter= "this-is-a-test-string";
String[] result = port.getData(testParameter);  //Incompatible Types???

然而,ide(Netbeans)给我的错误声明它们是不兼容的类型:

incompatible types
   required: java.lang.String[]
   found:    java.util.List<java.lang.String>

有谁知道为什么这段代码不正确,该函数应该返回一个字符串数组,它被调用并输入一个所以我不知道它们是如何不兼容的?

感谢您对此事的任何帮助。

2 个答案:

答案 0 :(得分:1)

客户端上显示的类型不一定与服务器相同。这两者甚至不必是相同的编程语言。它都是从XML转换而来的,并且每一方都可以自由地将其原生结构转换为XML,而不是它想要的。

答案 1 :(得分:1)

此处使用的默认绑定是JAXB - 序列的默认映射是List,因此在解组时,JAXB正在将响应中的序列转换为与String []不兼容的列表。您有两种解决方法:

  1. 将签名更改为与JAXB兼容的内容,即List<String>

  2. 使用XMLJavaTypeAdapter表示您希望调整类型 - 在返回之前将列表转换为数组 - 请参阅link to javadoc