1.下載並安裝Axis
1)登陸http://axis.apache.org/axis/站點下載Axis
下載axis-bin-1_4.zip,解壓後的目錄結構如下:
2)安裝Axis
首先要成功的安裝Tomcat,然後將下載的Axis目錄下面的webapps中的axis的
整個文件夾全部拷貝到Tomcat安裝目錄的Webapps下面
啓動Tomcat,在瀏覽器中輸入http://localhost:8080/axis之後
顯示的界面如下:
Axis安裝完畢。
2.開發WebService
1)即時發佈的WebService
即時發佈提供了一種非常簡單的發佈方式,發佈者只要有Java源代碼,然後把其後綴名改成jws,拷貝到%Tomcat_HOME%\webapps\axis下即完成了發佈工作。
a)服務端代碼:文件名SayHelloServer.java
- public class SayHelloServer {
- ublic String getName(String name){
- return "hello "+name;
- }
把SayHelloServer.java文件改爲SayHelloServer.jws然後拷貝到%Tomcat_HOME%\webapps\axis目錄下,啓動Tomcat後訪問http://locahost:8080/axis/SayHelloServer.jws可以看到Click to see the WSDL的超鏈接
說明服務器端已經發布成功,下面開始編寫Client端代碼。
b)客戶端代碼:
- package com.wl.webservice.test;
- import javax.xml.namespace.QName;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- public class SayHelloClient {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- try {
- String endpoint="http://localhost:8080/axis/TestClient.jws";
- Service service=new Service();
- Call call=null;
- call=(Call)service.createCall();
- call.setOperationName(new QName(endpoint,"getName"));
- call.setTargetEndpointAddress(new java.net.URL(endpoint));
- String ret=(String)call.invoke(new Object[]{"zhangsan"});
- System.out.println("return value is "+ret);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
執行客戶端的代碼結果如下:
總結:即時發佈很簡單,但是有很多弊端,假如你現在只有.class或者一個jar包,jws就不再能滿足你的需求了,最重要的是即時發佈不支持帶包的類。
2)定製發佈的WebService
定製發佈比即時發佈更加繁瑣和複雜,但是換來的是更大的靈活性。定製發佈需要你自己編寫一個WSDD(Web Service Deployment Descriptor)文件。
a)服務器端代碼:
- package com.wl.webservice.test;
- public class HelloWorldWsdd {
- public String hello(String name){
- return "hello "+name;
- }
- }
這是一個帶包的很簡單的類,編譯好之後將class文件拷貝到%Tomcat_HOME%\webapps\axis\WEB-INF\classes目錄下
b)接下來就是編寫發佈文件deploy.wsdd,在%TOMCAT_HOME%\webapps\axis\WEB-INF目錄下建立這個文件並且在其中添加如下內容:
- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <service name="HelloWorldWsdd" provider="java:RPC">
- <parameter name="className" value="com.wl.webservice.test.HelloWorldWsdd"/>
- <parameter name="allowedMethods" value="hello"/>
- </service>
- </deployment>
這個wsdd文件是一個標準的XML文件,包含三個元素:
<deployment>元素制定了wsdd所用的XML命名空間,是這個文件的根。
<service>元素制定了一項SOAP服務。它有兩個屬性。name指定了這個服務的唯一標誌符,provider指定了實現的語言及服務方式。一個wsdd文件可能有多個<service>元素。
<parameter>指定了服務詳細信息,是一組name/value對應的值。其中,clcssName指定了實現這個服務的類的名字,allowedMethods指定了這個服務暴露的方法列表。
其中的com.wl.webservice.test是包的名稱。
打開cmd命令窗口,進入%Tomcat_HOME%\webapps\axis\WEB-INF目錄下面輸入如下命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://localhost:8080/axis/services/AdminService deploy.wsdd
或者
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
執行結果如下:
控制檯返回Processing file deploy.wsdd 和Done processing 說明發布成功。
並且會在同一級別目錄下生成一個service-config.wsdd文件。
發佈成功之後,可以通過訪問http://localhost:8080/axis/servlet/AxisServlet來查看所有的定製發佈的服務。
但是我在通過http://localhost:8080/axis/servlet/AxisServlet查看的時候,頁面報一些錯誤:
出錯的原因是:我創建的這個HelloWorldWsdd服務是有包名稱com.wl.webservice.test
解決方法:在%Tomcat_HOME%\webapps\axis\WEB-INF\classes下面創建目錄com,在com下創建目錄wl,在wl下創建目錄webservice,在webervice下創建目錄test,最後把HelloWorldWsdd.class文件再 拷貝到test目錄下面。
重新http://localhost:8080/axis/servlet/AxisServlet查看結果:
備註:發佈deploy.wsdd可能會出現的問題:
I)axis所需要的Jar包如下:
在部署deploy.wsdd的時候會報一個Unable to find required classes的信息,具體:
但是影響不大,要是去掉這個警告信息的話,還需要一個Jar包mail.jar,從相關網站下載後拷貝到%Tomcat_HOME%\webapps\axis\WEB-INF\lib下面,再次重新部署deploy.wsdd就不會再報上面的警告信息了。
參考:http://blog.csdn.net/foamflower/archive/2008/09/08/2897501.aspx
II)在部署deploy.wsdd的時候Tomcat服務器需要開啓,否則會報異常信息:
c)客戶端代碼如下:
- package com.wl.webservice.test;
- import javax.xml.namespace.QName;
- import org.apache.axis.client.Call;
- import org.apache.axis.client.Service;
- public class HelloWorldWsddClient {
- public static void main(String[]args){
- try {
- String uri="http://localhost:8080/axis/services/HelloWorldWsdd";
- Service service=new Service();
- Call call=(Call)service.createCall();
- call.setTargetEndpointAddress(uri);
- call.setOperationName(new QName(uri,"hello"));
- String result=(String)call.invoke(new Object[]{"wanglei and zhangsan"});
- System.out.println("result="+result);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
執行客戶端代碼結果如下:
3.取消發佈一個WebService
取消一個已經發布的WebService很簡單,在發佈的時候有個deploy.wsdd文件,那在取消發佈的時候需要一個undeploy.wsdd文件即可。
- <undeployment xmlns="http://xml.apache.org/axis/wsdd/">
- <service name="HelloWorldWsdd" />
- </undeployment>
將這個文件拷貝到%Tomcat_HOME%\webapps\axis\WEB-INF目錄下,然後再控制檯輸入命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd 運行結果: