kingpub

          海內存知己,博客若比鄰

           

          用Axis for Java進行Web Services開發 (2)

          上面的代碼可能和原文檔中不同,并且在名稱空間、函數多態上會給用戶造成糊涂。不過別急,我在翻譯手冊的同時會加入很多解釋的代碼,如果哪位純粹看不懂可以通過郵件獲取幫助:luopc@edu-edu.com.cn ,郵件主題必須是我提供的文檔名稱。
          通過上面的調用代碼,最終生成向服務器請求SOAP信息包,具體XML內容如下:


          xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


          Hello!



          這里我不再多少,細心的朋友請從代碼中找相應的對應信息來進行自己的邏輯理解。至于SOAP協議在我以后的翻譯文檔中會加入進去。
          從上面的代碼中我們在調用的時候輸入了參數new Object[]{“hello!”}。然后從生成的SOAP請求包中可以看到自動序列化成Hello!。你可以看到參數名稱為arg0,類型為xsd:string。其實在Axis客戶端我們可以直接通過具體的方法來設置每一個參數名稱、類型以及返回值類型。如下代碼:
          call.addParameter("testParam",
          org.apache.axis.Constants.XSD_STRING,
          javax.xml.rpc.ParameterMode.IN);
          call.setReturnType(org.apache.axis.Constants.XSD_STRING);
          加入上面的代碼之后生成如下的SOAP信息:


          xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


          Hello!



          可以作簡單的對比。
          也許你會疑惑設置參數名稱和不設置參數名稱有什么區別的疑問。這里作簡單的解釋:
          1. 為什么要call.setReturnType(org.apache.axis.Constants.XSD_STRING)?
          上面你可以調用或者可以不調用,但當返回結果中沒有標明數據類型時Axis就不知道如何進行數據類型轉換。當然如果返回類型你很清楚并且返回應答SOAP的結果中表明了相應的數據類型你便可以不進行上面的函數調用。
          2. 為什么要設置參數名稱和類型?

          好了,下在你知道了如何調用Web Services了,下面告訴你如何寫作和發布Web Services。
          通過Axis發布Web Services
          這里寫作一個簡單的類,然后一步一步進行發布。希望用戶能夠從中理出一些思路來。我在其他的關于Web Services的文章中會專門針對Web Services的通用發布方法。雖然Web Services牽涉到很多復雜的知識,但請大家不要感覺到這些操作簡單,也許你已經有很多疑問,沒關系,記下你的疑問,不斷的投試。
          public class SayHello {

          public String echoString(String hello){
          return hello;
          }
          }
          哈哈,這個類是不是太簡單了。
          一步一步來。
          Axis提供兩種將Java類發布成Web Services的途徑,即即時快速自動發布和通過配置文件進行發布。我們首先從最容易部署的入手。
          JWS----即時部署
          簡單說就是將自己寫的Java類源文件按一定的規則Copy到特定的目錄下便可自行被Axis部署。具體步驟如下:
          ? 將上面寫的SayHello.java復制到axis目錄下。
          ? 改名為SayHello.jws。
          注意:在你寫的類中不能有具體包的信息,因為這正是Axis即時部署不支持的。
          運行我們前面寫的客戶端進行測試,運行結果是hello!。
          目前你是否有如下的問題?
          如果類中用多態的函數將如何處理?
          其實很簡單,我們知道在每次發出調用請求之前代理程序在后臺會直接請求你給的URL,這里是http://localhost:8080/axis/SayHello.jws?wsdl,其實這一請求返回來的是WSDL描述文件,通過具體的描述文件的內容和你輸入的參數的類型比較,最終確定發送什么請求。細節上的解釋需要用戶閱讀SOAP的具體內容。我也會提供相應的權威文當翻譯的。
          Axis的客戶端默認就是通過HTTP協議傳輸嗎?
          如何將自己定義的類型進行映射?
          通過WSDD自定義部署
          上面的自動部署相當簡單,但當你需要
          ? 映射自己的類型時
          ? 不需要暴露源代碼時
          ? 需要自己的路徑和包管理時
          ? 對用戶操作Web Services的事件進行相應時
          就需要通過WSDD來自定義部署。
          前面新特性中提到過,Axis是一個很靈活的可配置系統,但在配置之前你得懂得Axis Web Services描述文檔(WSDD)的格式和意義。這里有一個簡單的例子(deploy.wsdd):

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


          很簡短的描述就會自定義對特定類以Web Services的形式發布。上面的每一個service項都會意味著開通一個相應的可被WSDL文件引用的服務。其內部描述信息將會描述從請求-處理請求-應答需要的所有核心信息。這里provider=”java:RPC”對應著相應的服務類為org.apache.axis.providers.java.RPCProvider。其實你可以通過多種方式提供相應的服務。在關于Axis的架構文章中將會詳細解釋這些內容。
          上面的各個參數我不再解釋,我想大家一看就明白。
          下面讓我們在上面的簡單配置上開始一步一步的進行各種高級配置:
          服務存活范圍
          Axis提供Session、Request和Application三種可選范圍配置。具體配置標記為:

          ...

          posted on 2006-06-08 18:06 xiaofeng 閱讀(178) 評論(0)  編輯  收藏


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


          網站導航:
           

          導航

          統計

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 开原市| 江口县| 宣城市| 沂源县| 辛集市| 沙田区| 长春市| 陆丰市| 宣化县| 洛宁县| 宁德市| 云南省| 康马县| 剑川县| 炉霍县| 怀化市| 招远市| 鞍山市| 泰顺县| 乌拉特中旗| 桂阳县| 郓城县| 和林格尔县| 积石山| 同德县| 古田县| 观塘区| 来凤县| 辽宁省| 平昌县| 大洼县| 江口县| 五家渠市| 水城县| 舒兰市| 南靖县| 台北市| 新闻| 同江市| 远安县| 雷山县|