我试图创建一个简单的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>
有谁知道为什么这段代码不正确,该函数应该返回一个字符串数组,它被调用并输入一个所以我不知道它们是如何不兼容的?
感谢您对此事的任何帮助。
答案 0 :(得分:1)
客户端上显示的类型不一定与服务器相同。这两者甚至不必是相同的编程语言。它都是从XML转换而来的,并且每一方都可以自由地将其原生结构转换为XML,而不是它想要的。
答案 1 :(得分:1)
此处使用的默认绑定是JAXB - 序列的默认映射是List,因此在解组时,JAXB正在将响应中的序列转换为与String []不兼容的列表。您有两种解决方法:
将签名更改为与JAXB兼容的内容,即List<String>
使用XMLJavaTypeAdapter
表示您希望调整类型 - 在返回之前将列表转换为数组 - 请参阅link to javadoc