tomcat+Axis
客户端 使用org.apache.axis.client.Call 的对象得到服务器端返回的object。这个obj
ect是一个字符串数组,在客户端如何把object还原为String[]的数据类型?
使用下面方法
Object resp=call.invoke(new Object[] {new Integer(id)});
result=(String[])JavaUtils.convert(resp,String[].class);
报错java.lang.ArrayStoreException
at org.apache.axis.utils.JavaUtils.convert(JavaUtils.java:432)
at ArrayClient.main(ArrayClient.java:43)
直接强制转换也要错。
客户端程序如下:
import org.apache.axis.AxisFault;
import org.apache.axis.client.*;
import org.apache.axis.utils.JavaUtils;
import org.apache.axis.encoding.ser.ArraySerializerFactory;
import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
import org.apache.axis.encoding.XMLType;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;
import java.io.*;
public class ArrayClient{
public static void main(String[] args)throws Exception{
String url="http://localhost:8080/axis/servlet/AxisServlet";
String id=null;
try{
BufferedReader reader=new BufferedReader(
new InputStreamReader(System.in));
System.out.println("Enter id:");
id=reader.readLine();
}catch(IOException e){
e.printStackTrace();
}
Service service=new Service();
Call call=(Call) service.createCall();
QName qn=new QName("http://soapinterop.org/xsd","ArrayOfstring");
call.registerTypeMapping(String[][].class,qn,
new ArraySerializerFactory(),
new ArrayDeserializerFactory());
String result[]={""};
try{
call.setTargetEndpointAddress(new java.net.URL(url));
call.setOperationName(new QName("AddressService","getArray"));
call.addParameter("id",XMLType.XSD_INT,ParameterMode.IN);
call.setReturnType(qn);
Object resp=call.invoke(new Object[] {new Integer(id)});
//if (JavaUtils.isConvertable(resp,String[].class))
result=(String[])JavaUtils.convert(resp,String[].class);
//else System.out.println("can not convert");
}catch(Exception e){
//System.out.println(fault.toString());
e.printStackTrace();
}
System.out.println("Address of "+id);
for(int i=0;i<result.length;i++)
System.out.println("\t"+result[i]);
}
}
服务器端:
import java.io.*;
public class AddressService{
private int[] id={111,222,333};
private String[][] addressBook={{"Street 11","London","UK","34534"},
{"Lane 4","New York","USA","53457"},
{"Lane 5","LA","USA","67635"}};
public String[] getArray(int id){
System.out.println(id);
for(int i=0;i<addressBook.length;i++){
if(this.id[i]==id){
return addressBook[i];
}
}
String error[]={"id not found!"};
return error;
}
public static void main(String arg[]){
AddressService as=new AddressService();
String num=null;
try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.
in));
System.out.println("Enter id:");
num=br.readLine();
}catch(IOException e){e.printStackTrace();}
String[] ret={""};
int n=(new Integer(num)).intValue();
ret=as.getArray(n);
for(int i=0;i<ret.length;i++) System.out.println(ret[i]);
}
}
--
FROM 159.226.40.*