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

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

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

    我的java天地

    axis1 和 axis2 的簡(jiǎn)單使用

    晚上順便學(xué)習(xí)了下axis1 和 axis2,發(fā)現(xiàn)兩者的API相差很大,不知道現(xiàn)在更流行的是哪個(gè),就晚上簡(jiǎn)單的入門后覺得,axis2還是比axis1開發(fā)起來容易上手的多,axis1就單單對(duì)服務(wù)器發(fā)布.wsdd文件就相當(dāng)麻煩。下面分別就axis1和axis2說下如何集成到自己的項(xiàng)目里:
    ??? 一、集成axis1
    ????? 1、從官網(wǎng)下載項(xiàng)目http://ws.apache.org/axis/,最新的是1.4
    ????? 2、解壓下載的axis壓縮包,假設(shè)AXIS_HOME為解壓后的根目錄,demo為自己項(xiàng)目的名稱
    ????? 3、將AXIS_HOME/lib目錄下的所有jar包都復(fù)制到自己項(xiàng)目的WEB-INF/lib下
    ????? 4、將AXIS_HOME/webapps/axis/WEB-INF/web.xml中與axis相關(guān)的配置都復(fù)制粘貼到自己項(xiàng)目的web.xml中去。
    ????? 5、編寫需要發(fā)布SOAP服務(wù)的java類,注意要發(fā)布的方法需是public的。以下以Foo.java為例:
    Java代碼
    public?class?Foo?{
    ?????
    public?String?sayHello(String?name)?
    {
    ?????????
    return??"hello:?"?+
    ?name;
    ?????}

    }


    ????? 6、接下來就是發(fā)布soap服務(wù)了,在axis1中有兩種發(fā)布方式,即時(shí)發(fā)布和定制發(fā)布,下面分別介紹兩種發(fā)布方式:
    ????? 6.1 即時(shí)發(fā)布:這樣方式非常簡(jiǎn)單,將Foo.java的后綴名改成jws,即java.jws,然后把該文件放在項(xiàng)目里可以在客戶端直接訪問到的目錄下(如WEB-INF就不可以),比如直接放在項(xiàng)目demo的根目錄下,通過http://主機(jī)名/demo/Foo.jws訪問,如果看到Click to see the WSDL就說明發(fā)布成功了,點(diǎn)擊進(jìn)去就能看WSDL的描述文件了。接下來就可以寫客戶端測(cè)試代碼了:
    Java代碼
    ????String?path?=?"http://localhost:8080/demo/Foo.jws";;
    ????Service?service?
    =?new
    ?Service();
    ????Call?call?
    =
    ?(Call)?service.createCall();
    ????call.setTargetEndpointAddress(
    new
    ?URL(path));
    ????call.setOperationName(
    new?QName(path?,"sayHello"
    ));
    ????Object?obj?
    =?call.invoke(new?Object[]{"lady?gaga"}
    );
    ????System.out.println(obj.toString());

    測(cè)試代碼就不說明了,相信大家能看明白。即時(shí)發(fā)布方式非常簡(jiǎn)單、快速,但前提是必須有需要發(fā)布soap服務(wù)的JAVA類的源文件,如果只有.class或者jar包,那顯然就不適用了。
    ????? 6.2 定制發(fā)布:定制發(fā)布相對(duì)于即時(shí)發(fā)布要發(fā)雜一些,需要手寫wsdd文件來描述web service,但是在犧牲了簡(jiǎn)單、快速之后,帶來的卻是靈活性和適用性的大大提高。
    ?????? 首先在WEB-INF/目錄下創(chuàng)建deploy.wsdd文件,文件內(nèi)容如下:
    Xml代碼?
    <deployment?name="test"?xmlns="http://xml.apache.org/axis/wsdd/"?
    ????xmlns:java
    ="http://xml.apache.org/axis/wsdd/providers/java">

    ????
    <service?name="foo"?provider="java:RPC">
    ????????
    <parameter??name="className"?value="Foo"/>
    ????????
    <parameter??name="allowedMethods"?value="sayHello"?/>
    ????
    </service>
    </deployment>

    ??? <deployment>是wsdd文件的根元素。<service>代表一個(gè)soap服務(wù),name屬性唯一標(biāo)識(shí)這個(gè)soap服務(wù),provider表示提供服務(wù)的語言和方式,這里是用java語言和RPC方式。
    ??? <paramter>提供<service>更多參數(shù)信息,當(dāng)name值為className時(shí),value值為提供soap服務(wù)的JAVA類,當(dāng)name值為allowedMethods時(shí),value值為允許調(diào)用的方法。allowedMethods value等于*,表示MyService的所有方法都可以被調(diào)用?
    ????? 創(chuàng)建完了deploy.wsdd文件后,我們需要想服務(wù)器發(fā)布這個(gè)soap服務(wù),這需要用到axis提供的一個(gè)工具類,打開cmd,進(jìn)入到WEB-INF/下,執(zhí)行如下命令:
    • set AXIS_HOME=D:\axis
    • set AXIS_LIB=%AXIS_HOME%\lib
    • set 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
    • java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient ???? -lhttp://localhost:8080/demo/services/AdminService deploy.wsdd

    ??? 以上的三個(gè)set命令,設(shè)置變量值A(chǔ)XISCLASSPATH為axis相關(guān)jar包路徑集,java命令就是通過axis提供的工具類AdminClient來發(fā)布deploy.wsdd所描述的工具類,執(zhí)行上面的命令之后(保持服務(wù)器是啟動(dòng)狀態(tài)),會(huì)在同一目錄下生成server-config.wsdd文件,說明發(fā)布成功。可以用6.1即時(shí)發(fā)布中的客戶端測(cè)試代碼來測(cè)試剛發(fā)布的soap服務(wù),修改下path的值即可。
    Java代碼
    String?path=?"http://localhost:8080/demo/Foo";

    ??? 二、集成axis2
    ??? 之前的準(zhǔn)備工作和集成axis1相同,就是axis2所帶的jar包非常之多,挑選必須的jar就可以了。
    ??? 仍然以Foo類為例,在項(xiàng)目的WEB-INF/目錄下建立名為pojo的目錄,然后將Foo.class文件放入pojo目錄中,這樣就發(fā)布完成了,可以通過在瀏覽器輸入http://主機(jī)名/demo/services/listServices來查看剛才發(fā)布的服務(wù)。簡(jiǎn)單吧,這就是axis2帶來的無需任何配置,同樣適合.class文件的發(fā)布方式。下面就是在客戶端進(jìn)行測(cè)試:
    Java代碼?
    //調(diào)用web?service?的?url
    ????????String?path?=?"http://localhost:8080/demo/services/Foo";
    ????????
    //使用RPC的方式調(diào)用web?service

    ????????RPCServiceClient?serviceClient?=?new?RPCServiceClient();
    ????????Options?options?
    =
    ?serviceClient.getOption();
    ????????EndpointReference?target?
    =?new
    ?EndpointReference(path);
    ????????options.setTo(target);
    ????????Object[]?params?
    =?new?Object[]{"lady?gaga"}
    ;
    ????????Class[]?classes?
    =?new?Class[]{String.class}
    ;
    ????????QName?q?
    =?new?QName(path,"sayHello"
    );
    ????????Object?obj?
    =?serverClient.invokeBlocking(q,params,classes)[0
    ];
    ????????System.out.println(obj.toString());

    ? 從上面可以看出來,axis2和axis1API相差還是很大的。

    posted on 2010-10-08 16:17 tobyxiong 閱讀(2221) 評(píng)論(0)  編輯  收藏 所屬分類: java

    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類(144)

    隨筆檔案(157)

    相冊(cè)

    最新隨筆

    搜索

    積分與排名

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲五月丁香综合视频| 情人伊人久久综合亚洲| 亚洲愉拍一区二区三区| 97在线观免费视频观看| 亚洲av无码专区在线| 麻豆视频免费观看| 亚洲天堂一区在线| 最近2019中文字幕mv免费看| 亚洲国产精品成人精品软件| 国产麻豆视频免费观看| 国产.亚洲.欧洲在线| 在线观看免费大黄网站| 亚洲AV无码一区二区三区性色| 永久免费视频v片www| 美女视频黄a视频全免费网站一区| 亚洲阿v天堂在线2017免费| 一级成人a免费视频| 亚洲精品~无码抽插| 鲁大师在线影院免费观看| 亚洲熟妇av一区| 噜噜嘿在线视频免费观看| 黄色一级免费网站| 亚洲成Av人片乱码色午夜| www视频免费看| 日韩在线视精品在亚洲| 亚洲无人区一区二区三区| 久久午夜夜伦鲁鲁片免费无码影视| 亚洲一区无码中文字幕乱码| 国产一区二区免费在线| 最近免费中文字幕中文高清| 亚洲黄色在线网站| 国产在线19禁免费观看| 国产午夜精品免费一区二区三区 | 日本视频免费在线| WWW国产成人免费观看视频| 日韩精品亚洲人成在线观看| 日本v片免费一区二区三区| 免费看无码特级毛片| 亚洲人av高清无码| 亚洲春色在线视频| 国产成人免费福利网站|