1,準(zhǔn)備工作:
首先我們要下載:axis2-1.4.1-war(發(fā)布webservice),axis2-1.4.1-bin.zip(webservice調(diào)用使用的各種包)。
下載好了,把a(bǔ)xis2-1.4.1-war目錄下面的axis2.war發(fā)布到tomcat中。發(fā)布好,訪問:http://localhost:8080/axis2/ 界面如下:
然后把這個(gè)類的class文件拷貝D:\apache-tomcat-6.0.36\webapps\axis2\WEB-INF\pojo 如果WEB-INF這個(gè)目錄下面沒有pojo這個(gè)目錄,那你得必須建立一個(gè),因?yàn)樵赼xis2的配置文件中配置的(文件路徑是:conf/axis2.xml)
拷貝后,啟動(dòng)你的tomcat,訪問http://localhost:8080/axis2/services/listServices 看是否發(fā)布成功,成功界面如下面:
這樣 你就可以訪問這兩個(gè)方法了,
http://localhost:8080/axis2/services/SimpleService/getGreeting?name=bill
http://localhost:8080/axis2/services/SimpleService/getPrice
成功界面如下:
好,你的webservie就已經(jīng)發(fā)布好,接下來 我們就來調(diào)用發(fā)布的webservice,兩種方法:
第一種:代碼式
package com.tl.test;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import javax.xml.namespace.QName;
public class RPCClient {
public static void main(String[] args) throws Exception {
// 使用RPC方式調(diào)用WebService
RPCServiceClient serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
// 指定調(diào)用WebService的URL
EndpointReference er = new EndpointReference("http://localhost:8080/axis2/services/SimpleService");
options.setTo(er);
// 指定getGreeting方法的參數(shù)值
Object[] opAddArgs = new Object[]{"張三"};
//指定getGreeting方法返回值的數(shù)據(jù)類型的class對象
Class[] classs = new Class[]{String.class};
//指定要調(diào)用的getGreeting方法及wsdl文件的命名空間,第一個(gè)參數(shù)表示W(wǎng)SDL文件的命名空間
//通過訪問http://localhost:8080/axis2/services/SimpleService?wsdl 就可以看見 元素的targetNamespace屬性值
界面如下:
QName qname = new QName("http://ws.apache.org/axis2","getGreeting");
//調(diào)用getGreeting方法并輸出該方法的返回值
//這里有三個(gè)參數(shù)的意思:1,是QName對象,表示要調(diào)用的方法名;2,webservice的參數(shù)值,參數(shù)類型是Object[];3,返回值class對象,參數(shù)類型是Class[],
System.out.println(serviceClient.invokeBlocking(qname, opAddArgs,classs)[0]);
//下面是調(diào)用getPrice方法的代碼,這些代碼與調(diào)用getGreeting方法的代碼類似
classs = new Class[]{int.class};
qname = new QName("http://ws.apache.org/axis2","getPrice");
//如果沒有參數(shù),參數(shù)不能為null,應(yīng)該為new Object[]{},沒有返回值,就應(yīng)該調(diào)用invokeRobust
System.out.println(serviceClient.invokeBlocking(qname, new Object[]{},classs)[0]);
}
}
第二種:wsdl2java
要配置環(huán)境變量:AXIS2_HOME
這個(gè)時(shí)候 我們下axis2-1.4.1-bin.zip 這個(gè)文件就派上用途了,打開該文件中bin里面就可以找到wsdl2java.bat
然后我們通過命令行工具 來實(shí)現(xiàn)這個(gè) 首先我們到該文件下面的bin目錄,如:
然后開始工作:運(yùn)行該命令:wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p com.tl.test -s -o stub
解釋:-uri 后面運(yùn)行的是 你的wsdl, -p 是文件生成的包名 -o stub生成的文件目錄,是bin目錄下面的
運(yùn)行結(jié)果如下:
這樣 你就可以在你的bin里面下面找到你要的文件了
如下面:
然后 你就可以把這個(gè)類 拷貝到你的工程下面使用了,主要包名,我這里是com.tl.test,所以你相應(yīng)的在你的工程下面建一個(gè)com.tl.test,
如下面:
最后,我們就可以建立一個(gè)類來測試,代碼如下面:
package com.tl.test;
//這樣的方法大大的減少了調(diào)用webservice的步驟,并且代碼更加簡介。但要注意的是,wsdl2java.bat命令生成stub類將
//webservice方法的參數(shù)都封裝在相應(yīng)的類中。
public class StubClient {
public static void main(String[] args) throws Exception {
SimpleServiceStub sss = new SimpleServiceStub();
//封裝getGreeting方法的參數(shù)
SimpleServiceStub.GetGreeting gg = new SimpleServiceStub.GetGreeting();
gg.setName("王武");
System.out.println(sss.getGreeting(gg).get_return());
System.out.println(sss.getPrice().get_return());
}
}
運(yùn)行效果如下: