隨著這些文檔的發布,現在似乎已是對工作組最近的一些活動、問題以及決定做一個簡單概括的最佳時機了。然而,這一概述肯定無法做到面面俱到,并且當然會偏向我認為值得注意的方面。因此,我在本文的結尾處提供了更多的詳細參考資料的鏈接。
發布會開始時,我們在法國 Dinard 舉行了一次由Cannon主持的面對面的(F2F)會議。(請參閱參考資料,查看 Yves Lafon 拍的這次會議的照片。)如我們所愿,會議中所取得的進展要比僅僅使用電子郵件地址和電話交流取得的進展大得多。其中最明顯的決策之一就是關于該協議的名稱。最終的決定是:由于首字母縮寫詞“SOAP”在業界得到廣泛認可,所以我們不想把它的名稱改為其它相對不知名的詞匯—如XML協議。一旦決定保留名稱“SOAP”,問題就成了我們是否希望 SOAP 仍舊代表簡單對象訪問協議(Simple Object Access Protocol)。因此我們投票決定,“SOAP”不應再作為一個縮寫詞,而應該就是SOAP本身,如今其字母背后也不再有特殊意義。
逐步了解
在 F2F 會議中所作出的更為重要的決定之一,從實現者的角度來看,是關于 SOAP 處理模型的決定。在 SOAP原來的版本中,有一點不甚明確,那就是在進行過程中執行MustUnderstand(MU)檢查時,每個頭部分是否都能以特定的順序得以處理,或者所有這些MU檢查是否必須在處理余下的每個頭部分之前執行。工作組決定,一個 SOAP 處理節點必須向其它 SOAP 節點顯示在它處理任何一個頭部分之前已經執行了所有的 MU 檢查。因此,如果某一次實現選擇在 SOAP 消息流入的時候對其進行處理,并在處理每個頭部分的同時進行 MU檢查,那么該實現必須支持一些取消(undo)的概念。所以,如果在處理過程中出現了MU錯誤,那么它應該沒有先前處理過的頭部分遺留下的副作用。用來說明這個“無副作用”處理方法的最好的例子(雖然有些不正常)如清單 1 所示。
清單 1:流式消息的無副作用應用
<env:Header xmlns:env="http://www.w3.org/2001/06/soap-envelope">
<c:fireNuke xmlns:c="http://us.gov/potus" env:MustUnderstand="1"/>
<c:getAuthorization xmlns:c="http://us.gov/potus" env:MustUnderstand="1"/>
</env>
從該示例中可以清楚地看到,如果我們允許在 SOAP 處理器驗證了 fireNuke 頭部分已理解 getAuthorization 頭部分的語義之前就對它進行處理,那么就可能最終得到一些不愿看到的結果。
工作組以 MustUnderstand 為主題,作了另外一個關于返回 MU 出錯消息的關鍵決策。那就是開發了一種標準的選錯機制(請參閱參考資料),一旦出現未被理解的 MU 頭部分,返回的錯誤就將遵循某種格式 — 使得對于這些錯誤的程序性分析容易不少;舅枷胧,在 MU 錯誤中有一個定義完好的頭部分,它包含了一份所有未被理解的 MU 頭部分的列表。例如,如果上述示例中的 getAuthorization 頭部分未被理解,那么 MU 錯誤中就應該出現如清單 2 中所示的頭部分。
清單 2:MU 錯誤的可選擇性頭部分
<env:Header xmlns:env="http://www.w3.org/2001/06/soap-envelope">
<f:Misunderstood qname="c:getAuthorization" xmlns:c="http://us.gov/potus/"
xmlns:f='http://www.w3.org/2001/06/soap-faults' >
</env>
采取行動
最近討論的一些有較大爭議的問題之一就是 SOAPAction HTTP 頭部分的問題。就 SOAPAction HTTP 頭部分當前的形式來說,一個被普遍(但并非一致)認同的觀點是它的使用和定義有些模糊。規范中僅僅說它應包含消息的意圖,并且只針對 HTTP 作了定義。對于在其它傳輸中該做些什么、如何處理在傳輸(HTTP 是其中之一)之間移動 SOAP 消息的情況,以及“意圖”的含義(它是否用作路由?它是不是目標服務?)則未作規定。簡言之,就是一些人想保留它,而另一些人想除去它。我們最終確定了兩個建議,并將它們提交對提議持歡迎態度的 SOAP 社區:
不鼓勵使用 SOAPAction。SOAPAction 是 SOAP 的可選部件,它受支持,但并不必要。服務中“也許”會需要 SOAPAction,并且任何想要訪問哪些服務的軟件都“必須”能夠發送它。
反對使用 SOAPAction。發送方“不應該”發送 SOAPAction。接收方“不許”在 SOAPAction 頭部分存在、不存在或它的值的基礎上接受或拒絕接受消息。
在 F2F 會議中,我們的確對此進行了非正式投票,結果是 22 票支持,4 票反對 — 未得到一致通過。SOAP 社區本身非常真實地反映了工作組的立場(也未一致通過),因此該問題依然存在。
名稱空間中的內容
有一點是意料之中的,即新的 SOAP 版本還將有新的名稱空間。目前,新的名稱空間為 http://www.w3.org/2001/06/soap-envelope。
多少由于新的名稱空間的關系,同時還開發了一個新版本的錯誤模型;舅枷胧,當一個 SOAP 處理節點接收到帶有它不支持的名稱空間的 SOAP 消息時,它必須返回一個帶有舊的 SOAP 1.1 名稱空間(http://schemas.xmlsoap.org/soap/envelope)的 VersionMismatch 錯誤,并且應該包括一個包含受支持的 SOAP 名稱空間列表的 Upgrade 頭部分。例如,如果一個 SOAP 1.2 處理節點接收到一個 SOAP 1.1 消息卻無法處理,因為它不支持 SOAP 1.1 語義,那么它就應該返回如清單 3 所示的出錯消息。
文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/