使用Axis開發WebService
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 {
-
-
-
-
- public static void main(String[] args) {
-
-
- 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) {
-
- 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目錄下
css
記得要拷貝class的包名,否則會報錯
java
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) {
-
- 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 運行結果: