一、在官方網站下載axis的工程(這個等下就有用的)和源碼、jar包等,下載地址是:html
http://www.apache.org/dyn/closer.cgi/ws/axis/1_4 選擇一個地址便可java
如 http://mirror.bit.edu.cn/apache/axis/axis/java/1.4/axis-bin-1_4.tar.gzweb
二、解壓下載的工程或源碼(兩個中任意一個均可以),解壓axis-bin-1.4能夠看到大體目錄是這樣的:apache
打開webapps目錄就能夠看到一個axis的文件夾,這個文件夾裏面有WEB-INF文件夾和一些頁面,將axis複製到你的tomcat的webapps目錄下。而後啓動tomcat服務,訪問http://localhost:8080/axis/,看到下面的解碼就說明部署成功了:windows
三、建立webService類文件,代碼以下:瀏覽器
public class HelloWorldService { public String sayHello(String name) { return name + ",hello world! "; } }
四、複製HelloWorldService.java到咱們剛纔複製的axis文件夾下便可;也就是tomcat下的webapps下的axis下便可,並重命名爲HelloWorldService.jws;tomcat
上面的工做完成後,啓動tomcat服務器,訪問http://localhost:8080/axis/HelloWorldService.jws服務器
你會看到:session
而且你會發現webapps\axis\WEB-INF\jwsClasses多了HelloWorldService.classapp
若是你和我看到的是同樣的,就證實你已經成功的部署了一個axis1.x的webService。而後咱們點擊下就能夠看到wsdl的xml文件了,內容以下:
<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions targetNamespace="http://localhost:8080/axis/HelloWorldService.jws" xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/HelloWorldService.jws" xmlns:intf="http://localhost:8080/axis/HelloWorldService.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <!--WSDL created by Apache Axis version: 1.4 Built on Apr 22, 2006 (06:55:48 PDT)--> <wsdl:message name="sayHelloResponse"> <wsdl:part name="sayHelloReturn" type="xsd:string"/> </wsdl:message> <wsdl:message name="sayHelloRequest"> <wsdl:part name="name" type="xsd:string"/> </wsdl:message> <wsdl:portType name="HelloWorldService"> <wsdl:operation name="sayHello" parameterOrder="name"> <wsdl:input message="impl:sayHelloRequest" name="sayHelloRequest"/> <wsdl:output message="impl:sayHelloResponse" name="sayHelloResponse"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="HelloWorldServiceSoapBinding" type="impl:HelloWorldService"> <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="sayHello"> <wsdlsoap:operation soapAction=""/> <wsdl:input name="sayHelloRequest"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded"/> </wsdl:input> <wsdl:output name="sayHelloResponse"> <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/HelloWorldService.jws" use="encoded"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="HelloWorldServiceService"> <wsdl:port binding="impl:HelloWorldServiceSoapBinding" name="HelloWorldService"> <wsdlsoap:address location="http://localhost:8080/axis/HelloWorldService.jws"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
說明: 複製java文件並將後綴名改成.jws,要去掉前面的package….若是帶包名的話,請求後編譯的class將會在包路徑下,這樣咱們在請求當前jws的時候就會出現找不到class,詳細的你能夠到發佈在tomcat下的工程看看WEB-INF目錄下的jwsClass就一目瞭然了。
五、下面編寫客戶端代碼
代碼以下:
import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class HelloWorldClient { public static void main(String[] args) throws ServiceException, RemoteException { // webService訪問地址 String url = "http://localhost:8080/axis/HelloWorldService.jws"; // 建立服務 Service service = new Service(); // 建立調用句柄 Call call = (Call) service.createCall(); // 設置請求地址 call.setTargetEndpointAddress(url); /** * 設置調用的方法和方法的命名空間; 由於這裏是手動發佈到webroot目錄下的,因此命名空間和請求地址一致 * 固然null也能夠,由於自己它就沒有設置命名空間,通常方法的命名空間是 * 包名倒寫組成,如com.hoo.service,ns=http://service.hoo.com */ call.setOperationName(new QName(null, "sayHello")); /** * 用call調用sayHello方法,設置請求的參數,返回的就是返回值了 */ String result = (String) call.invoke(new Object[] { "axis" }); System.out.println(result); } }
分析上面的代碼
url是根據xml文件中的wsdlsoap:address location的信息獲得的,
運行代碼,控制檯輸出:
axis,hello world!
至此第一個Web WebService發佈調用成功。下面咱們搭建咱們本身的web工程。
新建 Web工程AxisWebService;建立好工程後,將剛纔解壓的axis-bin中的lib的jar包copy到當前工程的lib中;
axis-ant.jar
axis.jar
commons-discovery-0.2.jar
commons-logging-1.0.4.jar
jaxrpc.jar
log4j-1.2.8.jar
saaj.jar
wsdl4j-1.5.1.jar
activation-1.1.jar
mail-1.4.jar
二、copy了lib下的jar包後,如今要copy下web.xml中的內容,去掉裏面的AdminServlet這個配置,其餘的均可保留。
三、像剛纔同樣,將HelloWorldService.java複製到AxisWebService的webroot目錄下,去掉包名,而且修改後綴爲 HelloWorldService.jws便可。最後發佈當前web工程,訪問http://localhost:8080/AxisWebService/HelloWorldService.jws,若是看到和剛纔同樣的界面,點擊連接能看到wsdl的xml就成功了。
Wsdd(Web Services Deployment Descriptor)方法比JWS方法要稍微複雜些,但必定程度上比jws發佈的方法要靈活。
一、首先在AxisWebService工程建立一個java類,裏面寫簡單的2個方法getName、getAge,代碼以下:
package com.xqzt.client; public class HelloWorldWSDD { public String getName(String name) { return "your name : " + name; } public int getAge(int age) { return age + 10; } }
二、若是用wsdd方法首先須要定製咱們的wsdd xml文件,這裏命名爲deploy.wsdd,建立在當前web工程的WEB-INF目錄下,代碼以下:
<?xml version="1.0" encoding="UTF-8"?> <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.xqzt.service.HelloWorldWSDD" /> <!-- * 表明全部的方法都暴露 --> <parameter name="allowedMethods" value="*" /> <parameter name="scope" value="request" /> </service> </deployment>
service標籤表明一個WebService服務,HelloWorldWSDD就是當前WebService的名稱;provider是 java的WebService類型,分別有: RPC、Document、Wrapped、Message、EJB、RMI;有興趣的能夠看看 org.apache.axis.providers.java包下面的WebService的實現類或是文檔;
parameter的參數className表明當前WebService的class類路徑;
allowedMethods表明暴露的方法,那些方法在客戶端能夠調用;
<parameter name="scope" value="request" />,這個是當前WebService的做用域,它有3個值,分別是:request、session、application。
request表明爲每一個WebService SOAP的請求都產生一個服務對象,和Spring的scope很像,在服務請求頻繁的話會消耗不少資源。
session 是給每一個調用當前WebService的客戶端建立一個服務對象
application 是個當前全部的請求建立一個服務對象
三、寫完配置後,就須要用axis提供的AdminClient工具類幫咱們發佈WebService,直到生成server- config.wsdd,步驟以下:運行cmd命令,而後進入當前工程發佈的目錄,即%tomcat_home%/webapps/project /WEB-INF>
個人是:E:\apache-tomcat-6.0.44\webapps\AxisWebService\WEB-INF>
而後輸入命令:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd
這裏的deploy.wsdd是咱們剛纔定製的wsdd文件,java固然是jvm的命令,-Djava.ext.dirs=lib設置當前命令的依賴包,AdminClient是axis提供的工具類,這個類原本是能夠在官方的工程中admin能夠直接運行的(這裏不能夠,下載下來的少了 AdminServlet,有興趣的能夠研究下,就是前面說的官方的示例);
若是運行命令後,看到:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
就表明快成功了,why?快!看看deploy.wsdd同級目錄有沒有生成server-config.wsdd若是有這個文件就成功了,沒有就 失敗了。若是失敗了還有解決辦法,首先你得啓動tomcat,將咱們的工程發佈出去。而後在重複上面的命令,不行就換命令行代碼以下:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deploy.wsdd
執行結果
-lhttp://localhost:8080/AxisWebService/services/AdminService是由於你的端口可能被axis佔用了,咱們將指定AdminService來完成轉換,運行上面命令就沒有問題了。
四、在WebBrowser的地址欄輸入:
http://localhost:8080/AxisWebService/servlet/AxisServlet
你就能夠看到以下效果:
剛纔在deploy.wsdd中指定的WebService就在上面出現了,還有暴露出來的方法。點擊wsdl就能夠看到剛纔同樣熟悉的wsdl的xml文檔。
五、下面咱們編寫客戶端代碼調用上面的WebService,代碼塊和上面的jws幾乎同樣,只是參數,方法名稱不一樣。
package com.xqzt.client; import java.rmi.RemoteException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class HelloWorldWSDDClient { public static void main(String[] args) throws ServiceException, RemoteException { //webService訪問地址 String url = "http://localhost:8080/AxisWebService/services/HelloWorldWSDD"; //建立服務 Service service = new Service(); //建立調用句柄 Call call = (Call) service.createCall(); //設置請求地址 call.setTargetEndpointAddress(url); /** * 設置調用的方法和方法的命名空間; * 固然null也能夠,由於自己它就沒有設置命名空間,通常方法的命名空間是 * 包名倒寫組成,如com.hoo.service,ns=http://service.hoo.com */ call.setOperationName(new QName("http://service.hoo.com", "getName")); /** * 用call調用getName方法,設置請求的參數,返回的就是返回值了 */ String result = (String) call.invoke(new Object[] { "jack" }); System.out.println(result); call.setOperationName(new QName("http://service.hoo.com", "getAge")); /** * 用call調用getAge方法,設置請求的參數,返回的就是返回值了 */ int resultAge = Integer.parseInt(call.invoke(new Object[] { 89 }).toString()); //服務器端+10 System.out.println(resultAge); } }
首先,取消發佈也須要定製wsdd文件,undeploy.wsdd具體格式以下:
<undeployment xmlns="http://xml.apache.org/axis/wsdd/"> <service name="HelloWorldWSDD"/> </undeployment>
一樣,像上面發佈WebService同樣,用命令完成。
命令以下:
java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService undeploy.wsdd
鍵入命令後,回車看到:
Processing file undeploy.wsdd
<Admin>Done processing</Admin>
就表明你取消服務成功了,那樣別人就不能訪問你的服務了。再在瀏覽器地址欄輸入:
http://localhost:8080/AxisWebService/servlet/AxisServlet
看看是否是剛纔發佈的服務被成功取消了!