环境:用axis2生成服务端,用aixs做客户端
1:直接返回String[];
public String[] testArr(String name) {
String[] ret=new String[]{"一二三四五","上山打老虎",name};
return ret;
}
发布后,wsdl为:
而普通返回String方法的格式为:
可以看到,返回String[]比返回String的响应中多了一个参数maxOccurs=”unbounded”
用axis做客户端调用这个接口如下:
说明:服务端返回String[]的时候,实际返回的是一个List,里面的元素是String类型的;
Call.setReturnClass的时候,这里设置的是List里面的元素类型String,而不是这个List.class
Invoke方法接口结果的时候,再强转成List即可;
2:返回二维数组String[][];并且里面只包含一个一维数组
特别注意,这里仅仅是将一维数组外面再包一层数组,也就是说返回的二维数组里面只有1个一维数组,而不是多个一维数组
public String[][] testArr2(String name) {
String[] ret=new String[]{"一二三四五","上山打老虎",name};
String[][] ret1=new String[][]{ret};
return ret1;
}
生成的wsdl如下:
可以看到,响应有2个部分,一个是指明返回类型为ArrayOfString数组类型,注意不是List了,二个是这个ArrayOfString里面的元素是String;
axis客户端解析:按普通一维数组解析即可:
Returnclass直接设置String[].class,调用接口后直接强转成String[];也就是说,服务端那边原生方法返回的是一个String[][]二维数组,且只包含1个一维数组,但在客户端这边,其实就是一个一维数组;
3:返回String[][],但是里面包含多个一维数组;
此情况与2不一样,因为2中是直接接受二维数组里面的那个唯一的一维数组,而这里有多个一维数组,对这种情况,目前手写axis客户端一直报错,但是用eclipse的axis直接解析aixs生成代理类又可以正常调用接口且返回实际的二维数组;具体原因未知。
原文地址:https://www.cnblogs.com/tapt/p/10097041.html