服务端:
1、Calculator
package ws;
public class Calculator {
public int add(int a, int b) {
return (a + b);
}
public int subtract(int a, int b) {
return (a - b);
}
public int multiply(int a, int b) {
return (a * b);
}
public int divide(int a, int b) {
return (a / b);
}
}
生成wsdl见附件
客户端:
2、引入axis的jar包
3、Test01
package Test;
import javax.xml.namespace.QName;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class Test01 {
public static void main(String[] args) {
String url = "http://localhost:8080/WebserviceTest/services/Calculator";
String result = null;
try {
//使用RPC方式调用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
//使用RPC方式调用WebService
EndpointReference targetEPR = new EndpointReference(url);
options.setTo(targetEPR);
// 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是<wsdl:definitions>元素的targetNamespace属性值
//指定要调用的add方法及WSDL文件的命名空间.....
QName add = new QName("http://csh.bzu.com","add");
// 指定add方法的参数值,如果有多个,继续往后面增加即可,不用指定参数的名称
Object[] opAddEntryArgs = new Object[] { 2, 3};
//返回参数类型
//invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;
//第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];
//第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。
//当方法没有参数时,invokeBlocking方法的第二个参数值不能是null,而要使用new Object[]{}
// 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,
// 该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同
// 指定getGreeting方法返回值的数据类型的Class对象.....
Class[] classes = new Class[] { String.class };
// 调用add方法并输出该方法的返回值.......
result = (String) serviceClient.invokeBlocking(add, opAddEntryArgs,classes)[0];
System.out.println("the add result is:"+ result);
// 下面是调用subtract方法的代码,这些代码与调用getWorld方法的代码类似
QName subtract = new QName("http://csh.bzu.com","subtract");
Object[] opAddEntryArgs1 = new Object[] { 2, 3};
Class[] classes1 = new Class[] { String.class };
result = (String) serviceClient.invokeBlocking(subtract, opAddEntryArgs1,classes1)[0];
System.out.println("the subtract result is:"+ result);
// 下面是调用multiply方法的代码,这些代码与调用getWorld方法的代码类似
QName multiply = new QName("http://csh.bzu.com","multiply");
Object[] opAddEntryArgs2 = new Object[] { 2, 3};
Class[] classes2 = new Class[] { String.class };
result = (String) serviceClient.invokeBlocking(multiply, opAddEntryArgs2,classes2)[0];
System.out.println("the multiply result is:"+ result);
// 下面是调用divide方法的代码,这些代码与调用getWorld方法的代码类似
QName divide = new QName("http://csh.bzu.com","divide");
Object[] opAddEntryArgs3 = new Object[] { 2, 3};
Class[] classes3 = new Class[] { String.class };
result = (String) serviceClient.invokeBlocking(divide, opAddEntryArgs3,classes3)[0];
System.out.println("the divide result is:"+ result);
} catch (Exception e) {
e.printStackTrace();
}
}
}