SOAP Version 1.2中文手冊3

2. SOAP消息交換模型

從根本上來看,SOAP消息是從發送方到接受方的一種傳輸方法,但就象前面例子中闡述的那樣,SOAP消息一般會和實現模式結合,例如請求/響應。

SOAP的實現可以爲特殊網絡系統的特有特徵來優化。例如,在section 6中描述的HTTP binding將SOAP響應消息通過HTTP響應來傳輸,使用與相對應請求的同一HTTP連接。

2.1 SOAP結點

SOAP結點可以是初始SOAP發送者,可以是最終SOAP接收者,也可以是同時作爲SOAP發送者和接收者的SOAP中介。SOAP並不提供一個路由機制,曾因此SOAP需要識別SOAP發送者產生的SOAP消息應當通過哪些零個或多個SOAP中介被髮送到一個最終SOAP接收者。

接收到SOAP消息的SOAP結點必須能夠實施處理、產生必要的SOAP錯誤和SOAP響應,如果合適的話還應當根據本規範的後續描述生成額外的SOAP消息。

2.2 SOAP角色與SOAP結點

當處理一個SOAP消息的時候,SOAP結點將被告知應當以一個或多個SOAP處理角色來處理,這些SOAP角色由SOAP actor名來標識,SOAP actor的名字是一個URI。每個SOAP結點都必須以一個指定的角色來處理,這個角色使用命名爲"http://www.w3.org/2001/06/soap-envelope/actor/next"的SOAP actor來表示,同時可以按照需要應用零個或多個其他SOAP actor表示的額外角色。SOAP結點可以通過以匿名SOAP actor的角色來實施處理以使得自己成爲最終SOAP接收者。當SOAP結點在處理一個SOAP消息的時候,其表現出的SOAP角色在整個處理過程中不得更改。這是因爲本規範只涉及如何處理單個SOAP消息而無需考慮狀態,因此是否允許在處理單個SOAP消息的時候轉換角色是沒有意義的。

SOAP actor名字是用來識別SOAP結點的,並沒有與路由或者消息交換的語義相聯繫。舉例來說,一個SOAP actor可以被命名爲一個用來發送SOAP消息給適當SOAP結點的URI。相反,也有這樣一些SOAP處理角色的名字,這些名字或者直接和消息路由相聯繫(例如,http://example.org/banking/anyAccountMgr),或者和路由沒有聯繫(例如,當一個消息頭被用來攜帶一個指示,該指示用來告知任何有關的軟件該SOAP消息是長期不變的,是能夠被安全的緩存和重用的,在這種SOAP消息頭中,一個URI可以用於標識“所有緩存管理軟件”),通過名字使用這些SOAP處理角色也是合適的。

2.3 定位SOAP Header條目

SOAP header條目包含可選的env:actor屬性(參閱section 4.2.2)用來把他們定位到合適的SOAP結點。沒有該屬性的SOAP Header隱含地定位到一個匿名的SOAP actor,這意味着他們被處理爲最終的SOAP接收者。我們把SOAP actor屬性的值(隱含的或者直接指明的)作爲相應SOAP條目(SOAP Header條目或者SOAP Body條目)的SOAP actor。

如果SOAP條目中SOAP actor(如果出現的話)匹配了一個SOAP結點的角色,或者是SOAP條目沒有actor屬性(包括SOAP Body條目)而該SOAP結點已經假設爲匿名SOAP處理角色,這時我們就說SOAP條目被指向一個SOAP結點。

2.4 理解SOAP Header

我們認爲隨着時間的過去,會有大量的SOAP Header函數規範出現,而且每個SOAP結點都可以包含一個或多個處理這些擴展所必須的軟件。如果SOAP結點的軟件是完全兼容的而且實現了那些由條目中完整修飾的最外層元素名所傳遞的語義,我們說這個SOAP Header被一個SOAP結點理解。

當定位到一個SOAP結點的SOAP Header塊的mustUnderstand屬性爲“1”,被指向的SOAP結點必須:或者依照由條目中完整修飾的最外層元素名傳遞的語義來處理SOAP塊,或者更本不處理SOAP消息而失敗(參見section 4.4).。

2.5 處理消息

本節陳述了SOAP消息處理規則。除非另外規定,處理必須在語義上等同於分別執行下述的步驟,同時還必須按照給定的順序。注意到,無論如何在這個規範中都沒有阻止使用如並行、回滾或者其他可以在處理中提高靈活性的技術,只要所有的SOAP消息、SOAP fault和應用程序級的結果和那些直接執行下列規則得到的結果是相同的。

  1. 如果一個或多個定位到SOAP結點的SOAP條目有env:mustUnderstand="1"並且沒有被結點理解,則產生一個SOAP mustUnderstand錯誤。如果這樣一個錯誤產生了,那麼必須停止進一步的處理。

  2. 處理定位到SOAP結點的SOAP條目,如果需要,產生SOAP錯誤。當定義env:mustUnderstand="1"時,一個SOAP結點必須處理SOAP塊。如果沒有定義,那麼SOAP結點可以處理或忽略該SOAP條目。如果一個SOAP條目被處理,無論如何,這個SOAP結點必須理解該SOAP條目而且必須以和那個SOAP條目說明完全一致的樣式進行處理。而對於錯誤,無論是那種,也必須和SOAP條目的說明一致。有可能處理特殊SOAP條目會控制或者決定其他SOAP條目的處理順序。例如,一個SOAP條目可能建立一個SOAP Header條目用來強制按詞彙的順序執行其他的SOAP Header條目。如果沒有這樣一個SOAP條目,處理的順序是由SOAP結點來判斷的。當處理一個SOAP條目的時候,SOAP結點可以引用SOAP envelope中的任何信息。例如如果需要,一個緩存函數可以緩存整個SOAP消息。

如果SOAP結點是一個SOAP中介,SOAP消息的式樣和處理的結果(如果沒有產生錯誤)可以要求進一步沿着SOAP消息路徑送遞SOAP消息。這種接力轉遞必須以同樣順序包括從SOAP消息源來的所有的SOAP Header條目和SOAP Body條目,除了那些指向SOAP中介的SOAP Header條目,這些條目必須被移去(無論他們是否被處理,這些SOAP條目都將被移去)。附加的SOAP Header條目可以被插入在SOAP消息的任何一點,這樣被插入的SOAP Herder條目可能沒法和剛剛被移走的一個或多個條目區分開來(實際上是會將他們保留,但強調需要沿着SOAP消息路徑重新解釋每個SOAP結點)

3. 與XML的關係

所有的SOAP消息都是使用XML格式來編碼的(可參閱[7]以獲得更多的XML的信息)。

SOAP應用程序在生成由SOAP定義的所有元素和屬性的時候,應該包含恰當的SOAP命名空間。SOAP應用程序必須能處理其收到的消息中的SOAP命名空間。它必須丟棄那些包含不正確命名空間(參閱 section 4.4)的消息,並且可以處理那些不包含SOAP命名空間的SOAP消息,就好象他們包含了正確的命名空間一樣。

SOAP定義了以下的命名空間 (可參閱[8]以獲得更多的XML命名空間的信息):

而這些命名空間的模式文檔可以通過解析這些命名空間標識符來獲得。

SOAP消息必須不包含DTD,同時SOAP消息也必須不包含PI(Processing Instructions)。 [7]

SOAP使用局部的非限制的ID類型的id屬性來指定編碼元素(encoded element)的唯一標識,使用局部的非限制的uri-reference類型的href屬性來指定編碼元素的值的應用,以獲得與XML規範[7]、XML Schema規範[11]和XML Linking Language規範[9]的一致。

除SOAP mustUnderstand屬性(參閱 section 4.2.3)和SOAP actor屬性(參閱 section 4.2.2)外,一般允許屬性及屬性值自由地選擇是在XML實例中描述還是在XML Schema中描述,當然前提是他們具有相同的效果。也就是說,在DTD或模式(schema)中使用默認值或固定值定義在語義上等價於在實例中的定義。

4. SOAP信封

SOAP消息是由一個強制的SOAP Envelope、一個可選的SOAP Header和一個強制的SOAP Body組成的XML文檔。作爲SOAP消息的該XML文檔將在本規範的其餘部分被引用。而本節的元素和屬性的命名空間標識是"http://www.w3.org/2001/06/soap-envelope"。SOAP消息應當包含如下部分:

  • 一個SOAP envelope。Envelope是表示該消息的XML文檔的頂級元素。

  • 一個SOAP Header。Header則是爲了支持在鬆散環境下在通訊方(可能是SOAP發送者、SOAP接受者或者是一個或多個SOAP的傳輸中介)之間尚未預先達成一致的情況下爲SOAP消息增加特性的通用機制。SOAP定義了很少的一些屬性來用於指明誰可以處理該特性以及它是可選的還是強制的。(參閱 section 4.2)

  • 一個SOAP Body。Body爲該消息的最終接收者所想要得到的那些強制信息提供了一個容器(參閱 section 4.3)。此外,SOAP定義了Body的一個子元素Fault用於報告錯誤。

語法規則如下:

  1. SOAP Envelope

    • 元素名爲"Envelope"。

    • 該元素必須在SOAP消息中出現。

    • 該元素可以包含命名空間申明和額外的屬性。如果出現額外屬性,則必須有命名空間修飾。類似的,該元素可以包含額外的子元素,這些子元素如果出現,必須有命名空間修飾並且必須跟在SOAP Body元素之後。

  2. SOAP Header (參閱 section 4.2)

    • 元素名爲"Header"。

    • 該元素可以在SOAP消息中出現。如果出現,該元素必須是SOAP Envelope元素的第一個直接子元素。

    • 該元素可以包含一系列的Header條目,這些條目都應當是Header元素的直接子元素。Header的所有直接子元素必須有命名空間修飾。

  3. SOAP Body (參閱 section 4.3)

    • 元素名爲"Body"。

    • 該元素必須在SOAP消息中出現,同時必須是SOAP Envelope元素的一個直接子元素。若該消息中包含Header元素,則Body元素必須直接跟隨Header,爲Header元素的相鄰兄弟元素。若Header不出現,則其必須是Envelope的第一個直接子元素。

    • 該元素可以包含一系列的Body條目,這些條目都應當是Body元素的直接子元素。Body的所有直接子元素必須有命名空間修飾。SOAP定義了SOAP Fault元素,它用來指示錯誤消息。(參閱 section 4.4).

4.1.1 SOAP encodingStyle屬性

SOAP的全局encodingStyle屬性被用於指明在SOAP消息中使用哪種編序規則。該屬性可以在任意元素中出現,並且其作用範圍包括該元素的內容和所有其子元素中未使用該屬性的所有子元素,這就象XML命名空間定義的作用範圍。對於一個SOAP消息來說,沒有默認的編碼定義。

該屬性的值是一個或多個用於標識編序規則和用於標識解序SOAP消息的規則的有序列表,其排序是按照詳盡程度從大到小排列。Example 3展示了encodingStyle屬性的三個例子:

Example 3
encodingStyle="http://www.w3.org/2001/06/soap-encoding"
encodingStyle="http://example.org/encoding/restricted http://example.org/encoding/"
encodingStyle=""
Example values for the encodingStyle attribute

section 5中定義的編序規則的標識爲"http://www.w3.org/2001/06/soap-encoding"。消息若要使用特別的編序應該使用SOAP encodingStyle屬性來指明。另外,所有在句法上由"http://www.w3.org/2001/06/soap-encoding"開始的URI序列表明這其中包含的所有URI都與section 5中定義的SOAP編碼規則相一致。(雖然可能會添加潛在的更爲嚴格的規則)

一個空值的URI(“”)明確地指明並未爲其所包含的元素聲明任何編碼風格。這可以爲包含的元素關閉任何聲明。

4.1.2 Envelope版本模型

 SOAP並未定義一個傳統的基於主輔版本號的版本模型。SOAP消息必須包含一個與命名空間"http://www.w3.org/2001/06/soap-envelope"相關聯的Envelope元素。如果SOAP應用程序收到一個SOAP消息,這個消息中的Envelope元素與一個與"http://www.w3.org/2001/06/soap-envelope"不同的命名空間相關聯,則該應用程序必須視其爲一個版本錯誤並生成一個VersionMismatch SOAP錯誤。SOAP VersionMismatch錯誤消息必須使用SOAP 1.1的信封命名空間"http://schemas.xmlsoap.org/soap/envelope/"(參閱 Appendix C)修飾。

4.2 SOAP Header

SOAP提供了一個可伸縮的機制用於在分散的模塊化的環境下擴展SOAP消息,而通訊雙方並不需要有預先的約定知識。典型的擴展例子可以是實現一些諸如認證、事務管理以及支付的Header條目。

SOAP Header元素應當被編碼爲SOAP Envelope XML文檔的第一直接子元素。Header的所有直接子元素都被稱爲Header條目。

Header條目的編碼規則包括:

  1. 一個SOAP Header條目由一個完整修飾的元素名來標識,所謂完整修飾的元素名是由一個命名空間URI和局部名來組成。SOAP Header元素的所有直接子元素都必須是完整修飾的。

  2. SOAP encodingStyle屬性可以用於指明Header條目的編碼風格(參閱 section 4.1.1)。

  3. SOAP actor屬性(參閱 section 4.2.2)和SOAP mustUnderstand屬性(參閱 section 4.2.3)可以用於指明由哪個SOAP結點來處理條目以及如何處理條目。

4.2.1 使用Header屬性

本節中定義的SOAP Header屬性決定了SOAP消息的接收者應該如何處理消息(參閱 section 2)。一個生成SOAP消息的SOAP應用程序應該僅使用SOAP Header元素的直接子元素的SOAP Header屬性。而對於那些並非作爲SOAP Header元素的直接子元素出現的SOAP Header屬性,SOAP消息的接受者必須忽略。

以下是一個SOAP Header的例子(Example 4),其中包含了一個元素標識Transaction和一個mustUnderstand屬性及其值1,以及Transactin的值5:

Example 4
<env:Header xmlns:env="http://www.w3.org/2001/06/soap-envelope" >
  <t:Transaction xmlns:t="http://example.org/2001/06/tx" env:mustUnderstand="1" >
    5
  </t:Transaction>
</env:Header>
Example header with a single header block

4.2.2 SOAP actor屬性

EdNote: This section partially overlaps with section 2. We expect this to be reconciled in a future revision of the specification.

SOAP消息從生成者到達最終接受者,將潛在地沿着消息路徑(message path)經過一系列的SOAP中間介。SOAP中間介是一個能夠接受和轉發SOAP消息的應用程序。所有的中間介都如同最終接受者一樣由一個URI來標識。

並非一個SOAP消息的所有部分都是最終接收者想要的,其中部分是路徑中的一個或多箇中間介所需要的。Header元素中接收者角色類似和約的接受者,他並不能將其交給其它方。也就是說,一個接收者接到其想要的一個Header元素必須不轉發該Header給SOAP消息路徑中的下一個應用程序,因爲合約關係是存在於前二者之間的。該接收者可以插入一個類似的Header元素,但在這個情況下,和約關係存在於該應用程序及下一個Header元素的接收者之間了。

SOAP actor全局屬性可以被用於指明Header元素的接收者。而SOAP actor屬性的值是一個URI。這個特別的URI"http://www.w3.org/2001/06/soap-envelope/actor/next"指明該Header元素是直接的下一個進行消息處理的SOAP應用程序想要的。這與HTTP的連接頭字段的hop-by-hop scope model的表示。

若省略SOAP actor屬性,則表明接收者是SOAP消息的最終接收者。

這個屬性必須出現在SOAP消息的實例中,而不能定義在相關的XML Schema中以期獲得同樣效果(參閱 section 3section 4.2.1)。

4.2.3 SOAP mustUnderstand屬性

EdNote: This section partially overlaps with section 2. We expect this to be reconciled in a future revision of the specification.

SOAP mustUnderstand全局屬性用於指明一個Header條目是強制的還是可選的要求接收者處理。Header條目的接收結點由SOAP actor屬性來定義(參閱 section 4.2.2)。mustUnderstand屬性的值可爲“0”或“1”。若沒有使用SOAP mustUnderstand屬性,則在語義上等價於mustUderstand屬性出現同時取值爲“0”,也就是說這個條目是可選的。

若Header條目帶有值爲“1”的SOAP mustUnderstand屬性,則該Header條目的接收結點要麼必須遵循語義(由具備完整修飾的元素名來傳達)並正確地處理這些語義,要麼必須宣稱處理消息失敗(參閱 section 4.4)。

SOAP mustUnderstand屬性是爲了考慮健壯地升級而設置的。所有用值爲“1”的SOAP mustUnderstand屬性來標記的元素必須被認爲是可以影響該元素的上級元素或同級元素的語義。而這種風格標記的元素應保證對語義的修改並不能被那些不能完全理解該修改後的語義的那些元素靜默地或假設地、不正確地忽略。

該屬性若要生效必須在實例中出現,而不能定義在相關的XML Schema中以期獲得同樣效果(參閱 section 3section 4.2.1)。

4.3 SOAP Body

SOAP Body元素提供一個簡單的用於與消息的最終接收者交換強制信息的機制。而Body元素的典型應用包含序列的RPC調用和錯誤報告。

Body元素在編碼上應當作爲SOAP Envelope元素的一個直接子元素。如果包含Header元素,則Body元素必須直接跟隨Header元素,爲Header元素的直接下一個兄弟元素,否則Body元素必須是Envelope元素的第一直接子元素。

所有Body元素的直接子元素被成爲SOAP Body條目,同時每一個Body條目都應當編碼爲SOAP Body元素裏的一個獨立元素。

Body條目的編碼規則包括:

  1. 一個Body條目由一個完整修飾的元素名來標識,所謂完整修飾的元素名是由一個命名空間URI和局部名來組成。SOAP Body元素的直接子元素可以是命名空間修飾的。

  2. SOAP encodingStyle屬性可以被用來表明Body條目中使用的編碼規則(參閱 section 4.1.1)。

SOAP定義了一個Body條目,用於報告錯誤的Fault條目(參閱 section 4.4)。

4.3.1 SOAP Header和Body的關係

Header和Body在定義上是獨立的,但在事實上是相聯繫的。一個Body條目和一個Header條目的關係是:一個Body條目在語義上與這樣一個Header條目等價,該Header條目將由默認參與者(最終接受者)解釋同時由值爲“1”的SOAP mustUnderstand屬性標記。默認參與者可以使用actor屬性缺失的方式來指明(參閱 section 4.2.2)。

4.4 SOAP錯誤

SOAP Fault元素是用於在SOAP消息中傳輸錯誤或狀態信息。如果SOAP消息需要包含SOAP Fault元素的話,它必須作爲一個Body條目出現,同時在Body元素內它必須不出現多於一次(至多出現一次)。

SOAP Fault元素定義瞭如下子元素:

faultcode

faultcode元素是應那些要提供一個算法上的機制來標識錯誤的軟件的需要。faultcode必須在SOAP Fault元素中出現,同時faultcode的值必須是如[8]中的第3節中定義的一個修飾(限制)名。SOAP定義了一個很小的SOAP錯誤代碼的集合用於覆蓋基本的SOAP錯誤(參閱 section 4.4.1)。

faultstring

faultstring元素是爲那些錯誤代碼提供一個人可以讀懂的錯誤解釋,它不是爲程序處理而設。Faultstring元素有點類似於HTTP中定義的’Reason-Phrase’(參閱 [5], section 6.1)。faultstring必須在SOAP Fault元素中出現,同時它至少應該提供一些解釋該錯誤種類的信息。

faultactor

faultactor元素是爲在SOAP消息路徑(參閱 section 2)中是誰引起了該錯誤的發生這一情況描述信息。它類似於SOAP actor屬性(參閱 section 4.2.2),不過它不是用於指示Header條目的接收者,而是用於指示錯誤源。faultactor屬性的值是一個標識該源的一個URI。所謂並非作爲SOAP消息最終接收者的應用程序必須在SOAP Fault元素中包含faultactor元素。而消息的最終接收者可以使用faultactor元素來明確地指明是它生成了該錯誤(參閱下面的detail元素]。

detail

detail元素是用於傳輸與SOAP Body元素相關的應用程序特別的錯誤信息。如果Body元素中的內容不能被成功地處理的時候,它必須出現。它必須不能被用於傳輸屬於Header條目的錯誤信息。詳細的屬於Header條目的錯誤信息必須在Header條目中表示傳輸,如果需要例子的話,請參閱section 4.4.2

若SOAP Fault元素中不出現detail元素則表明其中的錯誤與Body元素的處理無關。這可以用於區分在錯誤情況下Body元素是否被SOAP的最終接受者處理過。

detail元素的所有直接子元素都被稱爲detail條目,同時每個detail條目都作爲detail元素中的一個獨立的元素進行編碼。

Detail條目的編碼規則如下(也可以參閱 example 10):

  1. 一個detail條目由一個完整修飾的元素名來標識,所謂完整修飾的元素名是由一個命名空間URI和局部名來組成。Detail元素的直接子元素可以是命名空間修飾的。

  2. SOAP encodingStyle屬性可以被用來表明detail條目中使用的編碼規則(參閱 section 4.1.1)。

4.4.1 SOAP錯誤代碼

當描述由本規範定義的錯誤的時候,faultcode元素必須使用在本節中定義的faultode的值。這些faultcode值的命名空間標識爲"http://www.w3.org/2001/06/soap-envelope"。在現有規範之外定義的方法的規範推薦使用該命名空間(但不是必須的)。

默認的SOAP faultcode值是按照一種可擴展的風格來定義的,它允許在維持已有的faultcode值的向後兼容的基礎定義新的SOAP faultcode值。這一機制在使用上非常類似與HTTP中基本狀態類的定義1xx, 2xx, 3xx等(參閱[5]中的section 10)。不過,他們是用XML修飾名來定義(參閱[8]中的section 3),而不是用整數。“.”符號是faultcode值的分隔符,用於指明“.”左邊的是一個比右邊更泛化的錯誤代碼。Example 5顯示了這一特性:

Example 5
Client.Authentication
Example of an authentication fault code

在SOAP中定義的faultcode值集合被羅列在下表。

Name Meaning
VersionMismatch 處理程序發現在SOAP Envelope元素中有一個非法的命名空間。(參閱 section 4.1.2)
MustUnderstand SOAP Header元素的一個直接子元素無法被理解或者他並不遵守由處理對象要求的SOAP mustUnderstand屬性必須取值爲“1”的要求。(參閱 section 4.2.3)
Client

Client錯誤類用於指示以下錯誤:消息的格式有誤或消息中缺乏能成功處理所必須的一些適當信息。例如,消息中可能缺乏適當的認證和支付信息。一般情況下應指明消息不應該在沒有修改過的情況下重發。可參閱section 4.4來參閱Fault detail子元素的描述。

Server

Server錯誤類用於表明消息無法被處理的原因,但那些屬於內容上的錯誤並不屬於該範疇,它主要被用於指示那些屬於處理上的錯誤。例如,處理操作需要包含與一個上游處理程序進行通訊,但該程序沒有響應。但該消息可能在下一個時間點上被成功處理。可參閱section 4.4來參閱Fault detail子元素的描述。

4.4.2 MustUnderstand錯誤

當SOAP結點產生一個MustUnderstand錯誤時,它應該在產生出的出錯消息中按照下面描述的的方式提供相應的Header條目。在產生的錯誤消息中,它應該提供Header條目來描述不能被理解的帶修辭的名的細節(Qnames,由XML Schema數據類型說明)。

每個這樣的Header條目有個本地的名字爲Misunderstood以及一個叫"http://www.w3.org/2001/06/soap-faults"的命名空間。每個塊都有一個名爲qname的不帶修飾的屬性,它的值爲出錯結點所不能理解的Header條目的Qname。

舉例來說,如果最初消息的容器不能理解Example 6中的兩個Header元素abc:Extension1和def:Extension2,則會產生出錯消息,該消息顯示在Example 7中。

Example 6
<env:Envelope xmlns:env='http://www.w3.org/2001/06/soap-envelope'>
  <env:Header>
    <abc:Extension1 xmlns:abc='http://example.org/2001/06/ext' 
                       env:mustUnderstand='1' />
    <def:Extension2 xmlns:def='http://example.com/stuff' 
                       env:mustUnderstand='1' />
  </env:Header>
  <env:Body>
  . . .
  </env:Body>
</env:Envelope>
SOAP envelope that will cause a SOAP MustUnderstand fault if Extension1 or Extension2 are not understood

 

Example 7
<env:Envelope xmlns:env='http://www.w3.org/2001/06/soap-envelope'
                      xmlns:f='http://www.w3.org/2001/06/soap-faults' >
  <env:Header>
    <f:Misunderstood qname='abc:Extension1'
                                xmlns:abc='http://example.org/2001/06/ext' />
    <f:Misunderstood qname='def:Extension2' 
                                xmlns:def='http://example.com/stuff' />
  </env:Header>
  <env:Body>
    <env:Fault>
      <faultcode>MustUnderstand</faultcode>
      <faultstring>One or more mandatory headers not understood</faultstring>
    </env:Fault>
  </env:Body>
</env:Envelope>
SOAP fault generated as a result of not understanding Extension1 and Extension2 in Example 6

注意到這裏不需要命名空間前綴返回與源Header元素命名空間相匹配的qname,倘若前綴映射到一個相同的命名空間名,則錯誤結點可使用任意前綴。

還注意到這裏沒有保證每個Mustunderstand錯誤都包含所有的Misunderstood Header 的Qname,SOAP結點可以在第一個Header塊產生一個只包含單個Header塊錯誤細節信息之後再產生一個錯誤。SOAP結點也可以產生一個一次包含所有MustUnderstand問題細節的混合錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章