1. 程式人生 > >axis2生成webservice服務端返回String[]和String[][]一維陣列和二維陣列解析

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客戶端解析:按普通一維陣列解析即可:

 

 

Returnclass直接設定String[].class,呼叫介面後直接強轉成String[];也就是說,服務端那邊原生方法返回的是一個String[][]二維陣列,且只包含1個一維陣列,但在客戶端這邊,其實就是一個一維陣列;

 

3:返回String[][],但是裡面包含多個一維陣列;

此情況與2不一樣,因為2中是直接接受二維數組裡面的那個唯一的一維陣列,而這裡有多個一維陣列,對這種情況,目前手寫axis客戶端一直報錯,但是用eclipse的axis直接解析aixs生成代理類又可以正常呼叫介面且返回實際的二維陣列;具體原因未知。