java axis調用WebService 服務端,客戶端

服務端:

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();

}

}

}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章