服務端:
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();
}
}
}