Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學;靜其心,可悟天下之理;恒其心,可成天下之業。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks

          雖然發布的服務很簡單,Axis幫我們生成的WSDL文檔看起來卻是比較復雜的,之所以這樣的主要原因是WSDL要考慮到兼容各種實現和具有可擴展性,這就像我們使用一些框架做開發會使代碼總量增加,而好處是使邏輯更加清晰。這篇帖子的上半部分介紹了WSDL里常用到的名稱空間,現在就來說說WSDL里各元素的含義。

          一個WSDL文檔里一般包含<types>、<message>、<portType>、<binding>和<service>這幾個元素,其中<types>、<message>和<portType>可以看作抽象的接口定義,而<binding>和<service>是具體的實現,注:有些時候也把<binding>看作接口的一部分。你也許看過一些WSDL把這兩部分分開寫在兩個xml文件里,并在其中一個文件里引入(import)另一個的情況,這也是為什么要區分接口和實現的原因之一。在現實世界里,接口部分很可能是由某個組織(例如某行業協會)制定好的,該組織的成員在發布自己的Web服務時都要引入它,從而達到統一標準的目的。

          <types>標簽用來定義Web服務里用到的,XML Schema定義的數據類型以外的自定義數據類型,對于我們自定義的類(Book),會對應到一個<complexType>,其中用<element>元素指定每個參數的類型。JAX-RPC規范中規定了Java語言的數據類型到XML Schema數據類型的映射,例如int<->xsd:int、java.lang.String<->xsd:string等等,還有數組的映射方式。

          <message>標簽定義Web服務里的消息,最常見的就是請求和響應消息。<message>中可以有<part>元素,它對應Java類中各個方法的參數或返回值,例如addBook()方法有一個Book類型的參數,則在WSDL中會有<part name="book" type="tns1:Book"/>的描述。

          <portType>標簽表示一個服務的類型,就是接口的意思了。WSDL里有些概念很容易混淆,比如port和service的區別,我把service理解為有一個具體URL的服務,而port代表某一地址,portType是service的抽象,不知道對不對。我們看一個WSDL文檔,一般就該先找<portType>元素,看看這個WSDL代表的Web服務里都有哪些方法,它們的參數和返回值是什么。這些方法是在<portType>里用<operation>元素表示的,<operation>可以有<input>和<output>子元素,表示方法的輸入和輸出。注意,方法可以是只有輸入或只有輸出的。

          <binding>元素將portType與具體的傳輸協議綁定。現在,絕大多數都是與SOAP綁定的,對每一個方法的輸入和輸出,都要指定SOAP的表示方法。JAX-RPC規范規定,SOAP綁定可以有rpc和document兩種類型,分別表示遠程過程調用和基于消息的方式。use屬性可以是encoded或literal,對于前者要支持rpc的方式,對于后者要支持rpc和document的方式,它們使得SOAP消息的格式有所區別,但我還沒有仔細研究,你可以參考一下JAX-RPC 1.1版本的6.3-6.4節。又想起另外一個問題,SOAP和HTTP的關系是怎樣的,綁定到SOAP就等于綁定到HTTP了嗎,應該不是,那么在哪里指定Web服務綁定的應用層協議(HTTP、SMTP等等)呢?(Update: 由transport屬性指定應用層協議)

          最后,<service>元素通過<port>子元素把服務聯系到一個具體的URL,更確切點,應該是把一個已綁定的portType聯系到某個URL,這樣就知道該把SOAP消息發給哪個服務器了。

          我覺得之所以應該花比較多的時間理解WSDL,因為WSDL在整個Web服務中扮演了十分核心的角色,它是對Web服務的一個比較完整的語法上的描述,同時,它還與XML、SOAP以及UDDI都有著非常密切的聯系,因此對于我們更好的認識Web服務體系結構是很重要的。雖然現在的Web服務開發工具都能自動進行Java<->WSDL的轉換,但理解WSDL對于Web服務的不論是設計、開發還是修改調試都是必要的。

          參考資料:

          posted on 2007-11-24 23:43 禮物 閱讀(835) 評論(0)  編輯  收藏 所屬分類: webservice
          主站蜘蛛池模板: 湖南省| 澳门| 金秀| 英山县| 利辛县| 广河县| 宝山区| 隆子县| 乐亭县| 伊春市| 柳林县| 疏附县| 景洪市| 商城县| 章丘市| 达尔| 浪卡子县| 易门县| 长岛县| 新源县| 湖南省| 望城县| 曲阜市| 卢氏县| 望江县| 定襄县| 郴州市| 如东县| 临桂县| 北川| 扬州市| 金川县| 同德县| 苏州市| 遂川县| 兰溪市| 资溪县| 南通市| 图们市| 襄垣县| 焉耆|