axis2生成webservice服务端返回String[]和String[][]一维数组和二维数组解析

环境:用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客户端解析:

2.1:写法1

Returnclass直接设置String[].class,调用接口后直接强转成String[];也就是说,服务端那边原生方法返回的是一个String[][]二维数组,且只包含1个一维数组,但在客户端这边,其实就是一个一维数组;按普通一维数组解析即可:

 

 

2.2:写法2

 

 

3:返回String[][],但是里面包含多个一维数组;

此情况与2不一样,因为2中是直接接受二维数组里面的那个唯一的一维数组,而这里有多个一维数组,对这种情况,按方法2中直接写call.setReturnClass(String[].class);会直接报错,必须按2.2中的写法2来写,需要call.setReturnType(org.apache.axis.Constants.SOAP_VECTOR);

对应Wsdl文件中的返回类型ArrayOfString

 

 

注意,这种情况下,取得的结果,需要对list中的每个元素强转成Vector数组;

总结,当返回的是String[][]的时候,直接在客户端这边,setReturnType(org.apache.axis.Constants.SOAP_VECTOR)即可;

如果发回的二维数组中只有1个一维数组,强转的list就是那个一维数组,即一维数组基本元素String的集合;如果有多个一维数组,强转的list是Vector一维数组的集合

转载于:https://www.cnblogs.com/tapt/p/10097041.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值