環境:用axis2生成服務端,用aixs作客戶端apache
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便可;
特別注意,這裏僅僅是將一維數組外面再包一層數組,也就是說返回的二維數組裏面只有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
此狀況與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一維數組的集合