CXF中的返回数据类型——ArrayOfString的接收
最近刚接触webservice,就直接碰上了数据接收失败的问题。我无法将返回的数据用Object意外的格式进行处理,因为它的类型就是ArrayOfString。
百度和测试了两天之后,找到了这样的答案。
ArrayOfString这个类是一个自定义类,在相当于String、Integer这样的包装类型。然后我将其源码找到了(https://blog.csdn.net/qq_20545159/article/details/48004199),复制下来之后保存到我定义的类里,再次进行数据格式转换仍然失败。
然后我使用CXF创建了webservice的客户端,查看其接口代码。服务端返回的数据,使用getClass()方法查看其类型的时候是:cn.com.webxml.ArrayOfString,我自定义的类型,包路径并不是这样的。这是我认为的为什么我的会报错的原因。
然后将包路径转换成客户端中包的路径之后,成功转换和输出返回数据。
下面是我的客户端代码
import cn.com.webxml.ArrayOfString;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.junit.jupiter.api.Test;
import java.util.List;
public class client {
public static void main(String[] args) {
JaxWsDynamicClientFactory jaxWsDynamicClientFactory = JaxWsDynamicClientFactory.newInstance();
Client client = jaxWsDynamicClientFactory.createClient("http://www.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl");
try {
Object[] getUsers = client.invoke("getMobileCodeInfo", "18339429913", "");
System.out.println(getUsers[0].toString());
Object[] result = client.invoke("getDatabaseInfo");
System.out.println(result.getClass());
ArrayOfString arrayOfString = (ArrayOfString) result[0];
System.out.println(arrayOfString.getString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
还有一个要注意的点,使用普通的Test不能运行客户端,我懒得找原因,就直接使用了main函数来执行。