隨筆-30  評(píng)論-123  文章-0  trackbacks-0
          摘要:在《XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(二)》中最后提到過:要想檢驗(yàn)Web服務(wù)是否有效,需要一個(gè)客戶端程序?qū)嶋H調(diào)用一下這個(gè)Web服務(wù)。本章我們就來創(chuàng)建這樣一個(gè)用于檢驗(yàn)的客戶端程序,驗(yàn)證一下我們前面的工作是不是真的有效。最后總結(jié)一下用XFire開發(fā)Web服務(wù)的步驟。

          創(chuàng)建客戶端程序
          我們可以使用很多方法,任何SOAP工具來創(chuàng)建客戶端程序,例如.Net或Apache Axis。我的這個(gè)例子中我是用一個(gè)名叫WsClient.java的Servlet中的動(dòng)態(tài)代理。為了減少編碼的代價(jià),我將所有屏幕構(gòu)建元素都放到doGet()方法中。對(duì)Web服務(wù)服務(wù)的實(shí)際調(diào)用在callWebService()方法中。代碼很簡(jiǎn)單:
          /*?Call?the?Web?service
          ????*
          ????
          */

          ????
          public?String?callWebService(
          ????????String?fromAccount,?String?toAccount,?
          double?amount,?String?currency)?
          ????????
          throws?MalformedURLException,?Exception?{
          ????????
          ????????
          //Create?a?metadata?of?the?service??????
          ????????Service?serviceModel?=?new?ObjectServiceFactory().create(IBankingService.class);????????
          ????????log.debug(
          "callSoapServiceLocal():?got?service?model."?);
          ???
          ????????
          //Create?a?proxy?for?the?deployed?service
          ????????XFire?xfire?=?XFireFactory.newInstance().getXFire();
          ????????XFireProxyFactory?factory?
          =?new?XFireProxyFactory(xfire);??????
          ????
          ????????String?serviceUrl?
          =?"http://localhost:8080/websvc/services/Banking";
          ????????
          ????????IBankingService?client?
          =?null;
          ????????
          try?{
          ????????????client?
          =?(IBankingService)?factory.create(serviceModel,?serviceUrl);
          ????????}
          ?catch?(MalformedURLException?e)?{
          ????????????log.error(
          "WsClient.callWebService():?EXCEPTION:?"?+?e.toString());
          ????????}
          ????
          ???????????????
          ????????
          //Invoke?the?service
          ????????String?serviceResponse?=?"";
          ????????
          try?{?
          ????????????serviceResponse?
          =?client.transferFunds(fromAccount,?toAccount,?amount,?currency);
          ???????}
          ?catch?(Exception?e){
          ????????????log.error(
          "WsClient.callWebService():?EXCEPTION:?"?+?e.toString());?????????????????
          ????????????serviceResponse?
          =?e.toString();
          ????????}
          ????????
          ????????log.debug(
          "WsClient.callWebService():?status="?+?serviceResponse);??????????????

          ????????
          //Return?the?response
          ????????return?serviceResponse;
          ????}
          ???

          這段代碼做了些什么?讓我解釋一下:首先我們創(chuàng)建了一個(gè)服務(wù)模型,里面包含了對(duì)服務(wù)的描述,換句話說,我們創(chuàng)建了服務(wù)的元數(shù)據(jù)。我們是用XFire的ObjectServiceFactory通過接口IBankingService.class創(chuàng)建了這個(gè)服務(wù)模型。

          下一步就是獲取XFire的代理對(duì)象。這一步中沒有任何應(yīng)用細(xì)節(jié)。通過proxyFactory,使用服務(wù)模型和服務(wù)終點(diǎn)URL(用于獲得WSDL),我們獲得了服務(wù)的本地代理。

          這個(gè)代理就是實(shí)際的客戶端。現(xiàn)在我們可以調(diào)用transferFunds()方法獲得我們想要的Web服務(wù)了。

          一旦這個(gè)例子部署成功并啟動(dòng),就可以用下面的Servlet URL檢驗(yàn):
          http://localhost:8080/websvc/ws
          Servlet使用默認(rèn)的參數(shù)訪問Web服務(wù)并顯示接收到的響應(yīng)。你應(yīng)該能看到下面兩行信息
          Response Received
          COMPLETED: CDN$ 500.00 was successfully transferred from A/C# 11111-01234 to A/C# 99999-05678
          現(xiàn)在你可以確信Web服務(wù)真的起來了并且工作正常。

          你可以嘗試傳入不同的數(shù)據(jù)。你可以輸入類似于下面的URL
          http://localhost:8080/websvc/ws?from=11-2345&to=77-9876&amt=250.00&cur=EUR.

          Web服務(wù)開發(fā)的基本步驟
          下面列出了使用XFire開發(fā)Web服務(wù)的基本步驟:
          1、檢驗(yàn)Java類的方法和構(gòu)造函數(shù)時(shí)公共的;
          2、將XFire Servlet相關(guān)的入口添加到web.xml中;
          3、創(chuàng)建services.xml并把它放到WEB-INF/classes/META-INF/xfire目錄下;
          4、將Xfire和其他第三方庫(kù)添加到你的Web應(yīng)用的WEB-INF/lib 目錄下。
          OK,這就是全部要做,就是這么簡(jiǎn)單。
          posted on 2006-05-16 09:43 學(xué)二的貓 閱讀(5538) 評(píng)論(6)  編輯  收藏 所屬分類: Java禪機(jī)

          評(píng)論:
          # re: XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(三)--開發(fā)客戶端程序 2006-05-16 10:54 | Harryson
          我在TOMCAT下發(fā)現(xiàn)如下的信息:264344311 [http-8088-Processor22] ERROR example.WsClient - WsClient.callWebServ
          ice(): EXCEPTION: org.codehaus.xfire.XFireRuntimeException: Could not invoke ser
          vice.. Nested exception is org.codehaus.xfire.fault.XFireFault: Couldn't send me
          ssage.似乎有點(diǎn)問題,請(qǐng)指點(diǎn)!  回復(fù)  更多評(píng)論
            
          # re: XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(三)--開發(fā)客戶端程序 2006-06-03 16:18 | Apollo
          不錯(cuò),夠簡(jiǎn)單,獲益匪淺
          不過,能不能講一下用xfire自動(dòng)生成客戶端程序。我弄了一上午也沒出來.
          希望可以與你交流下哈
          msn:Apollo_zhc@hotmail.com  回復(fù)  更多評(píng)論
            
          # re: XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(三)--開發(fā)客戶端程序[未登錄] 2008-08-12 13:59 | alex
          太膚淺  回復(fù)  更多評(píng)論
            
          # re: XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(三)--開發(fā)客戶端程序 2009-05-02 21:50 | sc
          寫得好,是我需要的。  回復(fù)  更多評(píng)論
            
          # re: XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(三)--開發(fā)客戶端程序 2011-11-02 02:06 | lisongandy
          Service serviceModel = new ObjectServiceFactory().create(IBankingService.class);

          在實(shí)際中,開發(fā)者是不可能知道元數(shù)據(jù)接口IBankingService.class的,那么該如何創(chuàng)建元數(shù)據(jù)呢?  回復(fù)  更多評(píng)論
            
          # re: XFire:開發(fā)Web服務(wù)的簡(jiǎn)易之道(三)--開發(fā)客戶端程序 2011-11-02 02:07 | lisongandy
          特指客戶端開發(fā)者  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 淅川县| 田林县| 绥芬河市| 凌云县| 大连市| 娱乐| 彰武县| 轮台县| 大名县| 巴中市| 诸城市| 左权县| 华安县| 阳泉市| 延川县| 延吉市| 满洲里市| 天全县| 靖安县| 尼勒克县| 青川县| 沽源县| 江口县| 固原市| 濉溪县| 广东省| 克拉玛依市| 高台县| 满洲里市| 将乐县| 遂溪县| 南木林县| 庆城县| 盘山县| 东乌| 安多县| 富宁县| 蓬莱市| 凉城县| 吉隆县| 平原县|