用Axis開發(fā)基于Java的Web服務(wù)_第1頁
用Axis開發(fā)基于Java的Web服務(wù)_第2頁
用Axis開發(fā)基于Java的Web服務(wù)_第3頁
用Axis開發(fā)基于Java的Web服務(wù)_第4頁
用Axis開發(fā)基于Java的Web服務(wù)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、用Axis開發(fā)基于Java的Web服務(wù)概述本文介紹了一個(gè)比較簡(jiǎn)單實(shí)用的基于Java的SOAP引擎Apache組織推出的Axis的安裝、配置和應(yīng)用開發(fā)方法,希望對(duì)有興趣做基于Java的Web Services應(yīng)用開發(fā)的朋友有所幫助。Axis簡(jiǎn)介Axis是Apache組織推出的SOAP引擎,Axis項(xiàng)目是Apache組織著名的SOAP項(xiàng)目的后繼項(xiàng)目,目前最新版本是采用Java開發(fā)的1.1版本,C+的版本正在開發(fā)之中。Axis v1.1軟件包可以從/axis/dist/1_1/下載得到。Axis的安裝應(yīng)用Axis開發(fā)Web Services,你需要有一個(gè)支持Servlet的服務(wù)器引擎,比如廣為人知的

2、Tomcat(Tomcat也是由Apache組織所提供的,目前的最新版本為4.1.24,下載地址為/builds/jakarta-tomcat-4.0/release/v4.1.24/)。在此之前當(dāng)然你機(jī)器必須已經(jīng)裝好了JDK1.3以上的版本,當(dāng)安裝好Tomcat之后,只需將下載的Axis軟件包解壓縮,將其中的“webapps”目錄下的“axis”目錄整個(gè)拷貝到Tomcat安裝目錄下的“webapps”目錄下即可。Axis的配置Axis基于Java開發(fā),可以部署于多種操作系統(tǒng),使用前需要配置一系列的系統(tǒng)變量,在此假定你已經(jīng)在本機(jī)上裝好了Tomcat 4.0以上的版本,需要配置的系統(tǒng)變量如下表所

3、示:CATALINA_HOMEC:Tomcat_4_1(此處應(yīng)為Tomcat的安裝位置,注意路徑名中不要有空格)AXIS_HOME%CATALINA_HOME%webappsaxisAXIS_LIB%AXIS_HOME%libAXISCLASSPATH%AXIS_LIB%axis.jar;%AXIS_LIB%commons-discovery.jar; %AXIS_LIB%commons-logging.jar;%AXIS_LIB%jaxrpc.jar; %AXIS_LIB%saaj.jar;%AXIS_LIB%log4j-1.2.8.jar; %AXIS_LIB%xml-apis.jar;%

4、AXIS_LIB%xercesImpl.jar如果你不愿做這么繁瑣的類路徑設(shè)置,可以直接將axis軟件包中“l(fā)ib”目錄下的所有.jar文件加入到系統(tǒng)環(huán)境變量CLASSPATH中即可。Axis的測(cè)試安裝配置完畢后,應(yīng)測(cè)試一下是否Axis可以正確運(yùn)行了。啟動(dòng)Tomcat服務(wù)器,在瀏覽器中訪問 HYPERLINK http:/localhost:8080/axis/happyaxis.jsp http:/localhost:8080/axis/happyaxis.jsp,如果頁面顯示有錯(cuò)誤,則需要回頭檢查一下相關(guān)配置是否正確,如果瀏覽頁面能正確顯示出系統(tǒng)組件、屬性等參數(shù)配置信息,則表示安裝成功,如

5、下圖所示:現(xiàn)在可以開始開發(fā)你的Web Services應(yīng)用了。服務(wù)的發(fā)布Axis提供了兩種服務(wù)發(fā)布方式,一種是即時(shí)發(fā)布(Instant Deployment),一種是定制發(fā)布(Custom Deployment)。 使用即時(shí)發(fā)布對(duì)即時(shí)發(fā)布的支持是Axis的特色之一,使用即時(shí)發(fā)布使用戶只需有提供服務(wù)的Java類的源代碼,即可將其迅速發(fā)布成Web服務(wù)。每當(dāng)用戶調(diào)用這類服務(wù)的時(shí)候,Axis會(huì)自動(dòng)進(jìn)行編譯,即使服務(wù)器重啟了也不必對(duì)其做任何處理,使用非常簡(jiǎn)單快捷。使用即時(shí)發(fā)布首先需要一個(gè)實(shí)現(xiàn)服務(wù)功能的Java源文件,將其擴(kuò)展名改為.jws(Java Web Service的縮寫),然后將該文件放到“we

6、bappsaxis”目錄下即可。在此給出一個(gè)從英里到公里的長(zhǎng)度單位轉(zhuǎn)換的服務(wù),其源碼如下:文件Distance.jws/* author 飛鷹*/public class Distancepublic double convertMile2Kilometre( double mile )/實(shí)現(xiàn)英里到公里的距離轉(zhuǎn)換return mile * 1.609;/convertMile2Kilometre()/* Distance */將其放到“webappsaxis”目錄,通過訪問 HYPERLINK http:/localhost:8080/axis/Distance.jws?wsdl http:/

7、localhost:8080/axis/Distance.jws?wsdl可以看到這個(gè)服務(wù)的WSDL描述文件,這說明Distance服務(wù)被成功發(fā)布了。如下圖所示:使用定制發(fā)布即時(shí)發(fā)布是一項(xiàng)令人激動(dòng)的技術(shù),它使Web服務(wù)的開發(fā)變得如此簡(jiǎn)單;然而即時(shí)發(fā)布并不總是最好的選擇,比如有些應(yīng)用系統(tǒng)是第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個(gè)應(yīng)用系統(tǒng)的一些功能對(duì)外發(fā)布成Web服務(wù),使其能夠在更大范圍內(nèi)產(chǎn)生作用,這個(gè)時(shí)候即時(shí)發(fā)布技術(shù)就無能為力了。此外,即時(shí)發(fā)布技術(shù)并不靈活,無法進(jìn)行更多的服務(wù)配置,這使得它并不能滿足一些特定系統(tǒng)的需求。因此,Axis提供了另一種服務(wù)發(fā)布方式,這就

8、是定制發(fā)布。在此給出一個(gè)從加侖到升的容積單位轉(zhuǎn)換的服務(wù),其源碼如下:文件Capacity.javapackage samples.capacity;/* author 飛鷹*/public class Capacitypublic double convertGallon2Litre( double gallon )/實(shí)現(xiàn)加侖到升的容積轉(zhuǎn)換return gallon * 4.546;/convertGallon2Litre()/* Capacity */將其編譯成.class文件,放置到“webappsaxissamplescapacity”目錄下,即可著手進(jìn)行發(fā)布。定制發(fā)布不需要構(gòu)建.jws

9、文件,但必須創(chuàng)建服務(wù)發(fā)布描述文件deploy.wsdd(Web Service Deployment Descriptor的縮寫),這個(gè)文件負(fù)責(zé)描述服務(wù)的名稱、入口等信息,其內(nèi)容如下:文件deploy.wsdd將該文件也放到“webappsaxissamplescapacity”目錄下,然后可以采用Axis提供的一個(gè)客戶端管理工具AdminClient來完成服務(wù)的定制發(fā)布。在“webappsaxissamplescapacity”目錄下,運(yùn)行:java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd可以看到以

10、下運(yùn)行結(jié)果:Processing file deploy.wsddDoneprocessing這表明Capacity服務(wù)定制發(fā)布完成。通過訪問 HYPERLINK http:/localhost:8080/axis/services/Capacity?wsdl http:/localhost:8080/axis/services/Capacity?wsdl可以看到這個(gè)服務(wù)的WSDL描述文件,這說明Capacity服務(wù)被成功發(fā)布了。如下圖所示:服務(wù)的訪問GET方式的服務(wù)訪問一般的SOAP消息都是采用POST方式實(shí)現(xiàn)傳遞,但也可以通過GET方式來訪問。比如以下給出的一個(gè)服務(wù)“HelloWorld”

11、,其源碼如下: 文件HelloWorld.jws/* author 飛鷹*/public class HelloWorldpublic String helloWorld()/在服務(wù)器端打印輸出System.out.println( Hello World! );/返回相應(yīng)字符串return Hello World!;/helloWorld()/* HelloWorld */這個(gè)服務(wù)給出一個(gè)名位“helloWorld”的無入口參數(shù)的操作,返回一個(gè)內(nèi)容為“Hello World!的字符串”,同時(shí)在服務(wù)器端打印“Hello World!”,將該文件放到“webappsaxis”目錄下,即可通過GE

12、T方法直接訪問該服務(wù),訪問的地址為http:/localhost:8080/axis/HelloWorld.jws?method=helloWorld,可以看到返回的SOAP信封消息,同時(shí)服務(wù)器端給出了相應(yīng)的顯示信息“Hello World!”這表明HelloWorld服務(wù)被成功訪問了。如下圖所示:客戶端服務(wù)訪問編程Axis提供了一套API來實(shí)現(xiàn)SOAP,從http:/localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文檔。其中,org.apache.axis.client.Call和org.apache.axis.client.Se

13、rvice是兩個(gè)比較常用的類,一般的客戶端程序欲訪問一個(gè)Web Service時(shí),都要生成一個(gè)客戶端的Service對(duì)象和Call對(duì)象,在訪問服務(wù)之前,首先要對(duì)Call對(duì)象設(shè)置相應(yīng)的參數(shù),包括服務(wù)的位置、操作名、入口參數(shù)、返回值類型等,最后調(diào)用Call對(duì)象的invoke方法訪問服務(wù)。以下給出了一個(gè)客戶端訪問Web服務(wù)的例程AXISTest.java:文件AXISTest.javapackage axisexercise;import org.apache.axis.client.Call;import org.apache.axis.client.Service;import org.apac

14、he.axis.encoding.XMLType;import javax.xml.rpc.ParameterMode;/* author 飛鷹*/public class AXISTestpublic static void main( String args ) throws ExceptionService service = new Service();Call call = ( Call ) service.createCall();/訪問即時(shí)發(fā)布的Distance服務(wù)/設(shè)置訪問點(diǎn)call.setTargetEndpointAddress( http:/localhost:8080/

15、axis/Distance.jws );/設(shè)置操作名call.setOperationName( convertMile2Kilometre );/設(shè)置入口參數(shù)call.addParameter( op1, XMLType.XSD_DOUBLE, ParameterMode.IN );call.setReturnType( XMLType.XSD_DOUBLE );Double d1 = new Double( 190 );/調(diào)用服務(wù)System.out.println( d1 + 英里相當(dāng)于 + call.invoke( new Object d1 ) + 公里! );/訪問定制發(fā)布的Cap

16、acity服務(wù)call = ( Call ) service.createCall();/設(shè)置訪問點(diǎn)call.setTargetEndpointAddress( http:/localhost:8080/axis/services/Capacity );/設(shè)置操作名call.setOperationName( convertGallon2Litre );/設(shè)置入口參數(shù)call.addParameter( op1, XMLType.XSD_DOUBLE, ParameterMode.IN );call.setReturnType( XMLType.XSD_DOUBLE );d1 = new Double( 10.00 );/調(diào)用服務(wù)System.out.println( d1 + 加侖相當(dāng)于 + call.invoke( new Object d1 ) + 升! ); /main()/* AXISTest */編譯運(yùn)行后運(yùn)行可以看到以下的結(jié)果:190.0英里相當(dāng)于305.71公里!10.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論