axis2生成webservice服務端返回String[]和String[][]一維數組和二維數組解析

環境:用axis2生成服務端,用aixs作客戶端apache

1:直接返回String[]

         public String[] testArr(String name) {數組

                  String[] ret=new String[]{"一二三四五","上山打老虎",name};spa

                  return ret;3d

         }blog

發佈後,wsdl爲:接口

 

 

而普通返回String方法的格式爲:class

 

 

能夠看到,返回String[]比返回String的響應中多了一個參數maxOccurs=」unbounded」test

用axis作客戶端調用這個接口以下:List

 

 

說明:服務端返回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一維數組的集合

相關文章
相關標籤/搜索