概述
介紹SOAP報文的結構,以及獲取的方式。
正文
1.其實發送的是SOAP消息
在前面講述過使用Eclipse的工具Web Services Explorer發送請求。在Actions中填寫請求參數,然后點擊Go發送請求。其實發送出去的是對應的SOAP消息:
點擊Source鏈接,可以看到一個預設的SOAP消息框架:
注:為了突出重點,做了適當的調整;大家在實際操作時看到應該不同。
在文本框之外的,是SOAP框架的元素;在文本框之內的,是我們自定義的元素。我們可以直接編輯自定義的部分,但是要符合wsdl文檔中對於元素的定義。
假如我們這樣編輯:
我們可以直接點擊Go發送請求,或者點擊Form,回到一般的參數編輯頁面(會有一個確認框,直接確認即可):
2. 如何獲取SOAP消息的結構
以
服務端的思考中發布的服務為例,wsdl的地址是http://localhost:6666/service/interpret?wsdl,使用瀏覽器訪問,可以看到:
先把關注點放在紅框中,那里引入了一個Schema,這個Schema定義了SOAP消息中的,自定義部分的結構。使用瀏覽器打開那個地址,可以看到:
假設你已經對Schema的知識有了一定的了解,如果不是,可以參考:
w3school XML Schema 參考手冊。
上
述
的
Schema
定
義
了
兩個
結
構
:
<tns:interpret xmlns:tns="http://service.chapter1.jws.sand.ljl.cn/"> <num/> </tns:interpret>
和
<tns:interpretResponse xmlns:tns="http://service.chapter1.jws.sand.ljl.cn/"> <chnum/> </tns:interpretResponse>
一個是請求消息的Body結構,一個是響應消息的Body結構。那么如何對號入座呢?不可避免的還是要講一些wsdl的內容,以下內容僅是自己的理解,不敢保證在嚴格的領域被認可。
wsdl包含五個部分,前三個部分依次是types、message、portType,其各作用如下:
- types
定義SOAP消息的結構,例如上文中是通過引入了外部的Schema來定義 - message
對types中的結構進行了封裝,每一個結構作為message的一個part - portType
定義服務操作(operation),以及每一個操作的輸入、輸出及對應的message。
通過這三個部分,我們就可以完全確定SOAP報文的結構了,對號入座的關鍵在於解讀portType。
那么我們現在看一下上文的wsdl的這三個部分:
請嘗試自己解讀。
既然wsdl的前三個部分已經可以確定報文的結構,那么后面的兩個部分binding、service應該是側重於協議的描述;也因此,我把前三個部分稱為結構相關,把后兩個部分稱為協議相關,而后者目前還不打算講。
