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/ 界面如下:
然后把這個類的class文件拷貝D:\apache-tomcat-6.0.36\webapps\axis2\WEB-INF\pojo 如果WEB-INF這個目錄下面沒有pojo這個目錄,那你得必須建立一個,因?yàn)樵赼xis2的配置文件中配置的(文件路徑是:conf/axis2.xml)
拷貝后,啟動你的tomcat,訪問http://localhost:8080/axis2/services/listServices 看是否發(fā)布成功,成功界面如下面:
這樣 你就可以訪問這兩個方法了, 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文件的命名空間,第一個參數(shù)表示W(wǎng)SDL文件的命名空間 //通過訪問http://localhost:8080/axis2/services/SimpleService?wsdl 就可以看見 元素的targetNamespace屬性值
界面如下:
QName qname = new QName("http://ws./axis2","getGreeting");
//調(diào)用getGreeting方法并輸出該方法的返回值 //這里有三個參數(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./axis2","getPrice"); //如果沒有參數(shù),參數(shù)不能為null,應(yīng)該為new Object[]{},沒有返回值,就應(yīng)該調(diào)用invokeRobust System.out.println(serviceClient.invokeBlocking(qname, new Object[]{},classs)[0]);
} }
我們運(yùn)行的結(jié)果如下:
第二種:wsdl2java 要配置環(huán)境變量:AXIS2_HOME 這個時候 我們下axis2-1.4.1-bin.zip 這個文件就派上用途了,打開該文件中bin里面就可以找到wsdl2java.bat
然后我們通過命令行工具 來實(shí)現(xiàn)這個 首先我們到該文件下面的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里面下面找到你要的文件了 如下面: 然后 你就可以把這個類 拷貝到你的工程下面使用了,主要包名,我這里是com.tl.test,所以你相應(yīng)的在你的工程下面建一個com.tl.test,
如下面:
最后,我們就可以建立一個類來測試,代碼如下面:
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)行效果如下: |
|