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

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

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

    精彩的人生

    好好工作,好好生活

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      147 Posts :: 0 Stories :: 250 Comments :: 0 Trackbacks
    http://www.yesky.com/SoftChannel/72342371961929728/20030821/1723269.shtml

    概述

      本文介紹了一個(gè)比較簡(jiǎn)單實(shí)用的基于Java的SOAP引擎——Apache組織推出的Axis——的
    安裝、配置和應(yīng)用開(kāi)發(fā)方法,希望對(duì)有興趣做基于Java的Web Services應(yīng)用開(kāi)發(fā)的朋友有所
    幫助。

      Axis簡(jiǎn)介

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

      Axis的安裝



      應(yīng)用Axis開(kāi)發(fā)Web Services,你需要有一個(gè)支持Servlet的服務(wù)器引擎,比如廣為人知

    的Tomcat(Tomcat也是由Apache組織所提供的,目前的最新版本為4.1.24,下載地址為http

    ://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.1.24/)。在此之前當(dāng)然

    你機(jī)器必須已經(jīng)裝好了JDK1.3以上的版本,當(dāng)安裝好Tomcat之后,只需將下載的Axis軟件包
    解壓縮,將其中的“webapps”目錄下的“axis”目錄整個(gè)拷貝到Tomcat安裝目錄下的“web
    apps”目錄下即可。

      Axis的配置

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

    CATALINA_HOME
    C:\Tomcat_4_1

    (此處應(yīng)為T(mén)omcat的安裝位置,注意路徑名中不要有空格)

    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; %AXI
    S_LIB%\xml-apis.jar;%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ù)器,在瀏覽器中訪問(wèn)http://localhost:8080/axis/happyaxis.jsp,如
    果頁(yè)面顯示有錯(cuò)誤,則需要回頭檢查一下相關(guān)配置是否正確,如果瀏覽頁(yè)面能正確顯示出系
    統(tǒng)組件、屬性等參數(shù)配置信息,則表示安裝成功,如下圖所示:

      服務(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 W
    eb Service的縮寫(xiě)),然后將該文件放到“……\webapps\axis”目錄下即可。

      在此給出一個(gè)從英里到公里的長(zhǎng)度單位轉(zhuǎn)換的服務(wù),其源碼如下:

    文件Distance.jws

    /**

    * @author 飛鷹

    */

    public class Distance

    {

    public double convertMile2Kilometre( double mile )

    {

    //實(shí)現(xiàn)英里到公里的距離轉(zhuǎn)換

    return mile * 1.609;

    }//convertMile2Kilometre()

    }/* Distance */


      將其放到“……\webapps\axis”目錄,通過(guò)訪問(wèn)http://localhost:8080/axis/Distan
    ce.jws?wsdl可以看到這個(gè)服務(wù)的WSDL描述文件,這說(shuō)明Distance服務(wù)被成功發(fā)布了。如下
    圖所示:
    使用定制發(fā)布

      即時(shí)發(fā)布是一項(xiàng)令人激動(dòng)的技術(shù),它使Web服務(wù)的開(kāi)發(fā)變得如此簡(jiǎn)單;然而即時(shí)發(fā)布并
    不總是最好的選擇,比如有些應(yīng)用系統(tǒng)是第三方提供的,我們沒(méi)有購(gòu)買(mǎi)源代碼,只有.clas
    s文件,但我們又希望將這個(gè)應(yīng)用系統(tǒng)的一些功能對(duì)外發(fā)布成Web服務(wù),使其能夠在更大范圍
    內(nèi)產(chǎn)生作用,這個(gè)時(shí)候即時(shí)發(fā)布技術(shù)就無(wú)能為力了。此外,即時(shí)發(fā)布技術(shù)并不靈活,無(wú)法進(jìn)
    行更多的服務(wù)配置,這使得它并不能滿足一些特定系統(tǒng)的需求。

      因此,Axis提供了另一種服務(wù)發(fā)布方式,這就是定制發(fā)布。

      在此給出一個(gè)從加侖到升的容積單位轉(zhuǎn)換的服務(wù),其源碼如下:

      文件Capacity.java

    package samples.capacity;


    /**

    * @author 飛鷹

    */

    public class Capacity

    {

    public double convertGallon2Litre( double gallon )

    {

    //實(shí)現(xiàn)加侖到升的容積轉(zhuǎn)換


    return gallon * 4.546;

    }//convertGallon2Litre()

    }/* Capacity */


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

      定制發(fā)布不需要構(gòu)建.jws文件,但必須創(chuàng)建服務(wù)發(fā)布描述文件deploy.wsdd(Web Servi
    ce Deployment Descriptor的縮寫(xiě)),這個(gè)文件負(fù)責(zé)描述服務(wù)的名稱、入口等信息,其內(nèi)容
    如下:

      文件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”目錄下,然后可以采用Axi
    s提供的一個(gè)客戶端管理工具——AdminClient來(lái)完成服務(wù)的定制發(fā)布。

      在“……\webapps\axis\samples\capacity”目錄下,運(yùn)行:

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


      可以看到以下運(yùn)行結(jié)果:

    Processing file deploy.wsdd

    <Admin>Doneprocessing</Admin>


      這表明Capacity服務(wù)定制發(fā)布完成。

      通過(guò)訪問(wèn)http://localhost:8080/axis/services/Capacity?wsdl可以看到這個(gè)服務(wù)的W
    SDL描述文件,這說(shuō)明Capacity服務(wù)被成功發(fā)布了。如下圖所示:


    服務(wù)的訪問(wèn)

      GET方式的服務(wù)訪問(wèn)

      一般的SOAP消息都是采用POST方式實(shí)現(xiàn)傳遞,但也可以通過(guò)GET方式來(lái)訪問(wèn)。比如以下
    給出的一個(gè)服務(wù)——“HelloWorld”,其源碼如下:

    文件HelloWorld.jws

    /**

    * @author 飛鷹

    */

    public class HelloWorld

    {

    public String helloWorld()

    {

    //在服務(wù)器端打印輸出

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


    //返回相應(yīng)字符串

    return "Hello World!";

    }//helloWorld()


    }/* HelloWorld */


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



      客戶端服務(wù)訪問(wèn)編程

      Axis提供了一套API來(lái)實(shí)現(xiàn)SOAP,從http://localhost:8080/axis/docs/apiDocs/index
    .html可以看到Axis的API文檔。

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

      以下給出了一個(gè)客戶端訪問(wèn)Web服務(wù)的例程——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();



    //////////訪問(wèn)即時(shí)發(fā)布的Distance服務(wù)

    //設(shè)置訪問(wèn)點(diǎn)

    call.setTargetEndpointAddress( "http://localhost:8080/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} ) + " 公里!" );




    //////////訪問(wèn)定制發(fā)布的Capacity服務(wù)

    call = ( Call ) service.createCall();

    //設(shè)置訪問(wèn)點(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.0加侖相當(dāng)于45.46升!
     
      注意程序在訪問(wèn)即時(shí)發(fā)布的Distance服務(wù)和定制發(fā)布的Capacity服務(wù)時(shí)的不同,前者的
    服務(wù)訪問(wèn)點(diǎn)地址為http://localhost:8080/axis/HelloWorld.jws,而后者的則為http://lo
    calhost:8080/axis/services/Capacity。

      總結(jié)

      Web Services是未來(lái)網(wǎng)絡(luò)應(yīng)用的發(fā)展方向,SOAP和WSDL是Web Services的核心協(xié)議,Ax
    is給出了一個(gè)很好的SOAP實(shí)現(xiàn),它使得開(kāi)發(fā)Web Services應(yīng)用變得輕松而有趣。
    posted on 2006-03-09 11:24 hopeshared 閱讀(869) 評(píng)論(0)  編輯  收藏 所屬分類: JavaWeb Service
    主站蜘蛛池模板: 亚洲av成人无码久久精品| 亚洲午夜久久久久久尤物| 最好看的中文字幕2019免费| 亚洲天堂2017无码中文| 亚洲精品国产精品乱码不卡 | 久草视频在线免费看| 亚洲午夜久久久久久尤物| 亚洲第一页综合图片自拍| 无码精品国产一区二区三区免费 | 免费人成在线视频| 无码毛片一区二区三区视频免费播放 | 国产91免费视频| 九九全国免费视频| 91亚洲自偷在线观看国产馆| 成人亚洲综合天堂| 99久久免费观看| 免费夜色污私人影院网站电影| 4480yy私人影院亚洲| 亚洲人成网站观看在线播放| 免费看片在线观看| 丁香花在线观看免费观看图片| 亚洲精品二三区伊人久久| 亚洲一区二区三区自拍公司| 免费人成视频在线| 麻豆精品成人免费国产片| 亚洲性色AV日韩在线观看| 无码乱人伦一区二区亚洲一| 国产精品无码一区二区三区免费 | 国产亚洲成AV人片在线观黄桃| 无码国产精品一区二区免费I6| 国产在线国偷精品免费看| 亚洲av日韩aⅴ无码色老头| 久久久亚洲欧洲日产国码二区 | 国产亚洲一区二区三区在线不卡| av大片在线无码免费| 国产免费一区二区三区在线观看| 亚洲av无码专区在线电影天堂| 亚洲成aⅴ人片在线观| 亚洲国产成人久久精品影视| 久久国产成人亚洲精品影院| 国产成人啪精品视频免费网|