<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    HHJ 人生在于總結

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      13 Posts :: 2 Stories :: 15 Comments :: 0 Trackbacks
    概述

      本文介紹了一個比較簡單實用的基于Java的SOAP引擎——Apache組織推出的Axis——的安裝、配置和應用開發方法,希望對有興趣做基于Java的Web Services應用開發的朋友有所幫助。

    Axis簡介

      Axis是Apache組織推出的SOAP引擎,Axis項目是Apache組織著名的SOAP項目的后繼項目,目前最新版本是采用Java開發的1.1版本,C++的版本正在開發之中。Axis v1.1軟件包可以從http://ws.apache.org/axis/dist/1_1/下載得到。

      Axis的安裝

      應用Axis開發Web Services,你需要有一個支持Servlet的服務器引擎,比如廣為人知的Tomcat(Tomcat也是由Apache組織所提供的,目前的最新版本為4.1.24,下載地址為http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/)。在此之前當然你機器必須已經裝好了JDK1.3以上的版本,當安裝好Tomcat之后,只需將下載的Axis軟件包解壓縮,將其中的“webapps”目錄下的“axis”目錄整個拷貝到Tomcat安裝目錄下的“webapps”目錄下即可。

      Axis的配置

      Axis基于Java開發,可以部署于多種操作系統,使用前需要配置一系列的系統變量,在此假定你已經在本機上裝好了Tomcat 4.0以上的版本,需要配置的系統變量如下表所示:

    CATALINA_HOME
    C:\Tomcat_4_1

    (此處應為Tomcat的安裝位置,注意路徑名中不要有空格)

    AXIS_HOME
    %CATALINA_HOME%\webapps\axis

    AXIS_LIB
    %AXIS_HOME%\lib

    AXISCLASSPATH
    %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;%AXIS_LIB%\xercesImpl.jar

      如果你不愿做這么繁瑣的類路徑設置,可以直接將axis軟件包中“lib”目錄下的所有.jar文件加入到系統環境變量CLASSPATH中即可。

      Axis的測試

      安裝配置完畢后,應測試一下是否Axis可以正確運行了。

      啟動Tomcat服務器,在瀏覽器中訪問http://localhost:8080/axis/happyaxis.jsp,如果頁面顯示有錯誤,則需要回頭檢查一下相關配置是否正確,如果瀏覽頁面能正確顯示出系統組件、屬性等參數配置信息,則表示安裝成功,如下圖所示:



      現在可以開始開發你的Web Services應用了。

    服務的發布

      Axis提供了兩種服務發布方式,一種是即時發布(Instant Deployment),一種是定制發布(Custom Deployment)。

      使用即時發布

      對即時發布的支持是Axis的特色之一,使用即時發布使用戶只需有提供服務的Java類的源代碼,即可將其迅速發布成Web服務。每當用戶調用這類服務的時候,Axis會自動進行編譯,即使服務器重啟了也不必對其做任何處理,使用非常簡單快捷。

      使用即時發布首先需要一個實現服務功能的Java源文件,將其擴展名改為.jws(Java Web Service的縮寫),然后將該文件放到“……\webapps\axis”目錄下即可。

      在此給出一個從英里到公里的長度單位轉換的服務,其源碼如下:

    文件Distance.jws

    /**

    * @author 飛鷹

    */

    public class Distance

    {

    public double convertMile2Kilometre( double mile )

    {

    //實現英里到公里的距離轉換

    return mile * 1.609;

    }//convertMile2Kilometre()

    }/* Distance */

      將其放到“……\webapps\axis”目錄,通過訪問http://localhost:8080/axis/Distance.jws?wsdl可以看到這個服務的WSDL描述文件,這說明Distance服務被成功發布了。如下圖所示:



      使用定制發布

      即時發布是一項令人激動的技術,它使Web服務的開發變得如此簡單;然而即時發布并不總是最好的選擇,比如有些應用系統是第三方提供的,我們沒有購買源代碼,只有.class文件,但我們又希望將這個應用系統的一些功能對外發布成Web服務,使其能夠在更大范圍內產生作用,這個時候即時發布技術就無能為力了。此外,即時發布技術并不靈活,無法進行更多的服務配置,這使得它并不能滿足一些特定系統的需求。

      因此,Axis提供了另一種服務發布方式,這就是定制發布。

      在此給出一個從加侖到升的容積單位轉換的服務,其源碼如下:

      文件Capacity.java

    package samples.capacity;

    /**

    * @author 飛鷹

    */

    public class Capacity

    {

    public double convertGallon2Litre( double gallon )

    {

    //實現加侖到升的容積轉換

    return gallon * 4.546;

    }//convertGallon2Litre()

    }/* Capacity */

      將其編譯成.class文件,放置到“……\webapps\axis\samples\capacity”目錄下,即可著手進行發布。

      定制發布不需要構建.jws文件,但必須創建服務發布描述文件deploy.wsdd(Web Service Deployment Descriptor的縮寫),這個文件負責描述服務的名稱、入口等信息,其內容如下:

      文件deploy.wsdd

    <deployment xmlns="http://xml.apache.org/axis/wsdd/"

    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <service name="Capacity" provider="java:RPC">

    <parameter name="className" value="samples.capacity.Capacity"/>

    <parameter name="allowedMethods" value="*"/>

    </service>

    </deployment>

      將該文件也放到“……\webapps\axis\samples\capacity”目錄下,然后可以采用Axis提供的一個客戶端管理工具——AdminClient來完成服務的定制發布。

      在“……\webapps\axis\samples\capacity”目錄下,運行:

    java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

      可以看到以下運行結果:

    Processing file deploy.wsdd

    <Admin>Doneprocessing</Admin>

      這表明Capacity服務定制發布完成。

      通過訪問http://localhost:8080/axis/services/Capacity?wsdl可以看到這個服務的WSDL描述文件,這說明Capacity服務被成功發布了。如下圖所示:




    服務的訪問

      GET方式的服務訪問

      一般的SOAP消息都是采用POST方式實現傳遞,但也可以通過GET方式來訪問。比如以下給出的一個服務——“HelloWorld”,其源碼如下:

    文件HelloWorld.jws

    /**

    * @author 飛鷹

    */

    public class HelloWorld

    {

    public String helloWorld()

    {

    //在服務器端打印輸出

    System.out.println( "Hello World!" );

    //返回相應字符串

    return "Hello World!";

    }//helloWorld()

    }/* HelloWorld */

      這個服務給出一個名位“helloWorld”的無入口參數的操作,返回一個內容為“Hello World!的字符串”,同時在服務器端打印“Hello World!”,將該文件放到“……\webapps\axis”目錄下,即可通過GET方法直接訪問該服務,訪問的地址為http://localhost:8080/axis/HelloWorld.jws?method=helloWorld,可以看到返回的SOAP信封消息,同時服務器端給出了相應的顯示信息“Hello World!”這表明HelloWorld服務被成功訪問了。如下圖所示:



      客戶端服務訪問編程

      Axis提供了一套API來實現SOAP,從http://localhost:8080/axis/docs/apiDocs/index.html可以看到Axis的API文檔。

      其中,org.apache.axis.client.Call和org.apache.axis.client.Service是兩個比較常用的類,一般的客戶端程序欲訪問一個Web Service時,都要生成一個客戶端的Service對象和Call對象,在訪問服務之前,首先要對Call對象設置相應的參數,包括服務的位置、操作名、入口參數、返回值類型等,最后調用Call對象的invoke方法訪問服務。

      以下給出了一個客戶端訪問Web服務的例程——AXISTest.java:

      文件AXISTest.java

    package axisexercise;

    import org.apache.axis.client.Call;

    import org.apache.axis.client.Service;

    import org.apache.axis.encoding.XMLType;

    import javax.xml.rpc.ParameterMode;

    /**

    * @author 飛鷹

    */

    public class AXISTest

    {

    public static void main( String[] args ) throws Exception

    {

    Service service = new Service();

    Call call = ( Call ) service.createCall();

    //////////訪問即時發布的Distance服務

    //設置訪問點

    call.setTargetEndpointAddress( "http://localhost:8080/axis/Distance.jws" );

    //設置操作名

    call.setOperationName( "convertMile2Kilometre" );

    //設置入口參數

    call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );

    call.setReturnType( XMLType.XSD_DOUBLE );

    Double d1 = new Double( 190 );

    //調用服務

    System.out.println( d1 + " 英里相當于 " +

    call.invoke( new Object[] {d1} ) + " 公里!" );

    //////////訪問定制發布的Capacity服務

    call = ( Call ) service.createCall();

    //設置訪問點

    call.setTargetEndpointAddress( "http://localhost:8080/axis/services/Capacity" );

    //設置操作名

    call.setOperationName( "convertGallon2Litre" );

    //設置入口參數

    call.addParameter( "op1", XMLType.XSD_DOUBLE, ParameterMode.IN );

    call.setReturnType( XMLType.XSD_DOUBLE );

    d1 = new Double( 10.00 );

    //調用服務

    System.out.println( d1 + " 加侖相當于 " +

    call.invoke( new Object[] {d1} ) + " 升!" );

    } //main()

    }/* AXISTest */

      編譯運行后運行可以看到以下的結果:

      190.0英里相當于305.71公里!

      10.0加侖相當于45.46升!
     
      注意程序在訪問即時發布的Distance服務和定制發布的Capacity服務時的不同,前者的服務訪問點地址為http://localhost:8080/axis/HelloWorld.jws,而后者的則為http://localhost:8080/axis/services/Capacity。

      總結

      Web Services是未來網絡應用的發展方向,SOAP和WSDL是Web Services的核心協議,Axis給出了一個很好的SOAP實現,它使得開發Web Services應用變得輕松而有趣。

    ??????? 注明

    ???????轉載自http://www.yesky.com/SoftChannel/72342371961929728/20030821/1723269.shtml

    posted on 2006-03-28 20:18 HHJ 閱讀(439) 評論(0)  編輯  收藏 所屬分類: Web Service

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲国产成人久久综合一区| 久久亚洲精品成人无码网站| 亚洲永久网址在线观看| 67194国产精品免费观看| 亚洲a级在线观看| 国产成人免费a在线视频app| 色噜噜亚洲男人的天堂| 三年片在线观看免费大全| 91亚洲精品自在在线观看| 成视频年人黄网站免费视频| 亚洲欧洲中文日产| 国产免费久久精品99re丫y| 在线观看亚洲AV每日更新无码| 久久久高清免费视频 | 高潮内射免费看片| 亚洲精品tv久久久久久久久久| 四虎国产精品永免费| 亚洲最大AV网站在线观看| 久久国产乱子精品免费女 | 天堂亚洲国产中文在线| 精品免费久久久久久成人影院| 亚洲AV无码一区二区一二区| mm1313亚洲国产精品美女| 中文字幕在线免费观看视频| 亚洲成AV人片在线观看ww| 永久免费视频网站在线观看| 亚洲 日韩经典 中文字幕| 又大又硬又爽免费视频| 99久久成人国产精品免费| 在线免费观看亚洲| 精品免费久久久久久成人影院| xxxx日本在线播放免费不卡| 亚洲最大的成网4438| 成年女人视频网站免费m| 一级片在线免费看| 久久亚洲精品成人无码网站| 处破痛哭A√18成年片免费| 两个人的视频www免费| 久久精品国产亚洲av麻豆蜜芽 | www在线观看免费视频| 亚洲色欲www综合网|