客户端调用Axis2开发的WebService,有三种方式,一种是RPC方式,一种是采用AXIOM方式,一种是生成客户端方式。其中常用的是前两种方式。
第一种RPC方式
有返回值的情况
public static String callWithRtn(String city) {
try {
RPCServiceClient sender = new RPCServiceClient();
Options options = sender.getOptions();
// 超时时间20s
options.setTimeOutInMilliSeconds(2 * 20000L);
// 关联服务端地址
EndpointReference targetEPR = new EndpointReference("http://localhost:8080/myAxis2Pro/services/city?wsdl");
options.setTo(targetEPR);
// 限定名QName,一般包括 NamespaceURI, local part and prefix
// 1:NamespaceURI 2:local part
QName qname = new QName("http://svc.jwt.com", "desc");
// 输入参数
Object[] param = new Object[] { city };
// 输出类型、针对返值类型的
Class<?>[] types = new Class[] { String.class };
/**
* invokeBlocking方法有三个参数(有返回值是invokeBlocking,无返回值是invokeRobust)
* 第一个参数的类型是QName对象,表示要调用的方法名;
* 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];当方法没有参数时不能是null,而要使用new Object[]{}。
* 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
*/
Object[] response1 = sender.invokeBlocking(qname, param, types);
return String.valueOf(response1[0]);
} catch (AxisFault e) {
e.printStackTrace();
return "error";
}
}
无返回值的情况
public static String callWithoutRtn(String mark) {
try {
RPCServiceClient sender = new RPCServiceClient();
Options options = sender.getOptions();
// 超时时间20s
options.setTimeOutInMilliSeconds(2 * 20000L);
// 关联服务端地址
EndpointReference targetEPR = new EndpointReference("http://localhost:8080/myAxis2Pro/services/city?wsdl");
options.setTo(targetEPR);
// 限定名QName,一般包括 NamespaceURI, local part and prefix
// 1:NamespaceURI 2:local part
QName qname = new QName("http://svc.jwt.com", "mark");
// 输入参数
Object[] param = new Object[] { mark };
/**
* invokeBlocking方法有三个参数(有返回值是invokeBlocking,无返回值是invokeRobust)
* 第一个参数的类型是QName对象,表示要调用的方法名;
* 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];当方法没有参数时不能是null,而要使用new Object[]{}。
*/
sender.invokeRobust(qname, param);
return "OK";
} catch (AxisFault e) {
e.printStackTrace();
return "Fail";
}
}