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生成代理類又可以正常呼叫介面且返回實際的二維陣列;具體原因未知。