SOAP 資料處理常式是 Web 服務連接器中的中樞元件。 連接器會呼叫 SOAP 資料處理常式將商業物件轉換成與 Web 服務相容的 SOAP 訊息。
當協同作業是以 Web 服務來顯現時,連接器亦會呼叫 SOAP 資料處理常式。 然後資料處理常式將從遠端交易友機 (或內部用戶端) 傳出的 SOAP 訊息,轉換成商業物件。 連接器會將商業物件傳遞至已為 Web 服務配置的協同作業。
在這些轉換作業中,資料處理常式 meta 物件中的資訊扮演著非常重要的角色。 於安裝產品檔案之後,開機之前,配置此資訊。 除非您要新增自訂的名稱處理常式,否則您可使用預設的 SOAP 資料處理常式配置,以節省時間。 但是您必須對每一個資料處理常式轉換配置特定的 meta 物件資訊。 將於下面一節討論資料處理常式 meta 物件。
Meta 物件為包含配置資訊的商業物件。 連接器會在執行時期使用 Meta 物件,以配置資料處理常式,並建立其實例。 SOAP 資料處理常式亦使用 Meta 物件來尋找 SOAP 訊息的主體、判斷該主體所對應的 商業物件及動詞、將 SOAP 訊息中的商業物件編碼,及執行本章中所討論的其他數項作業。 本節說明這些 Meta 物件的基本需求。
圖 28 顯示 Web 服務產品之配接器的 Meta 物件結構。 在下面的圖例及討論中,將以粗體字來表示 Meta 物件名稱。
在這整份文件中,討論到 Meta 物件時,將會使用下列專有名詞:
MO_DataHandler_Default 為連接器所呼叫之所有資料處理常式的最上層 Meta 物件。 這些 Meta 物件中所包含的 MIME 類型,可決定要使用哪個資料處理常式。 連接器代理程式會使用此 Meta 物件來建立 SOAP 資料處理常式的實例。 因此,MO_DataHandler_Default 物件必須包含一個名為 xml_soap 的屬性, 且其類型為 MO_DataHandler_DefaultSOAPConfig。
您可於安裝 MO_DataHandler_Default 物件之後,再加以配置。 您必須新增 MO_DataHandler_DefaultSOAPConfig 類型的 xml_soap。
連接器代理程式會在執行時期,使用此 Meta 物件來建立及配置 SOAP 資料處理常式。 MO_DataHandler_DefaultSOAPConfig 具有兩個 string 類型的屬性,其指定:
這些屬性顯示於表 43中。
除非您想要實行自訂的名稱處理常式 (本章稍後將會討論),
否則您可於遞送及安裝時,使用 MO_DataHandler_DefaultSOAPConfig。 不需要配置。
表 43. MO_DataHandler_DefaultSOAPConfig 的 Meta 物件屬性
名稱 | 類型 | 預設值 | 說明 |
---|---|---|---|
ClassName | 字串 | com.ibm.adapters .dataHandlers.xml. soap | 資料處理常式基礎類別用來尋找類別名稱的標準屬性,以傳遞至 createHandler 方法的 MIME 類型為基礎。 |
SOAPName
處理常式 | 字串 |
| 所要使用之 SOAP 名稱處理常式的名稱。 |
SOAP Config MO 可定義單一資料處理常式轉換的資料格式化行為 -- 由 SOAP 訊息 轉換成商業物件,或是由商業物件轉換成 SOAP 訊息。 SOAP Config MO 是 SOAP 商業物件的子項。這些子項 SOAP Config MO 對預設商業物件解析來說是非常重要的。 當使用預設商業物件解析時,所有的子項 SOAP Config MO (無論是要求、回應或錯誤物件) 都必須要有專屬的輸入項目,以作為 BodyName 及 BodyNS 的預設值。 表 44 顯示這些屬性以及 SOAP Config MO 的其他屬性。
名稱 | 必要的 | 說明 |
---|---|---|
BodyNS | 是 | 要用於 SOAP 主體的名稱空間。 |
BodyName | 是 | SOAP 訊息主體的名稱。針對 SOAP 錯誤 (fault), 請將預設值設定為 soap:fault。 |
BOVerb | 是 | 包含 SOAP Config MO 之商業物件的動詞。 |
TypeInfo | 否 | True 或 false 屬性,可指定要將哪種類型的資訊 (xsi:type) 寫入 SOAP 元素, 及從該元素讀取哪種類型的資訊。 預設值 = false |
TypeCheck | 否 | 如果 TypeInfo 的設定為 true,則此為唯讀內容。 可能的值:none 及 strict。 若為 none,則在將 SOAP 訊息讀取至此商業物件時,會略過類型驗證。 若為 strict,資料處理常式就會比對商業物件的應用程式特有資訊, 嚴格地驗證所有的 SOAP 類型名稱及名稱空間。預設值 = none |
Style | 否 | 這個內容可指定 SOAP 訊息樣式,並具有其他屬性的含意,例如:BodyName 及 BodyNS。 此屬性的可能值為 rpc 及 document。 預設值 = rpc |
Use | 否 | 這個內容指定 SOAP 訊息的用法,並會影響從商業物件建構 SOAP 主體的方式。 可能的值為 literal 及 encoded。預設值是 literal。 |
圖 41 顯示 SOAP 商業物件與 SOAP Config MO 之間的關係。
圖 41 顯示 SOAP 回應商業物件及其子項商業物件。 子項商業物件 (SOAPCfgMO) 為 SOAP Config MO,可指定 SOAP 資料處理常式將商業物件 回應轉換成 SOAP 回應訊息的方式。 用來指示子項 SOAP Config MO 的屬性,必須使用以 cw_mo_soap 開頭的名稱值組。
依照慣例,當讀取以 cw_mo_ 開頭的商業物件層次應用程式特有資訊時, 資料處理常式會辨識出名稱值組所指定的子項物件中包含了轉換 Meta 物件資訊, 因此並未包含此子項作為其所轉換之訊息的主體內容。 於該範例中,名稱值組 cw_mo_jms 及 cw_mo_soap 所指定的子項物件被當作是 Meta 物件,不會寫入 SOAP 回應訊息。 此外,只要是以 cw_mo_ 開頭的所有的商業物件層次應用程式特有資訊, SOAP 資料處理常式都會忽略 (cw_mo_soap 除外)。 因此,SOAP 資料處理常式會忽略應用程式特有資訊,例如:cw_mo_tpi。 但是 SOAP 資料處理常式會讀取並使用 cw_mo_soap 中所指定的 SOAP Config MO 來 執行 SOAP 回應轉換作業,由商業物件轉換成 SOAP 訊息。
所有的 SOAP 商業物件皆必須有子項 SOAP Config MO, 且必須在商業物件層次,將這些子項 SOAP Config MO 指定為應用程式特有資訊。 這項作業中有許多都是自動完成的:當您使用 WSDL ODA 來產生 SOAP 訊息的商業物件時, 會自動為您產生 SOAP Config MO。
SOAP Config MO 的選用性內容 Style 及 Use 會影響 SOAP 訊息的建立方式。 Style 的可能值為:rpc 及 document, Use 的可能值為:literal 及 encoded。 下面各節將討論 Style 及 Use 組合對 SOAP 訊息建立的影響。
若 Style 內容的設定為 rpc,Use 內容的設定為 literal, 就會分別從 SOAP ConfigMO 的 BodyName 及 BodyNS 內容來讀取「SOAP 訊息」的 「主體名稱」及「主體名稱空間」。
下列為 rpc/literal 樣式訊息的範例, 其中「主體名稱」及「主體名稱空間」已分別解析為 getOrderStatus 及 OrderStatusNS:
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=îhttp://schemas.xmlsoap.org/soap/envelope/ì xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:getOrderStatus xmlns:ns1="http://www.ibm.com/"> <Part1> <ns2:Elem1 xmlns:ns2="http://www.ibm.com/elem1"> <Child1>1</Child1> <Child2>2</Child2> </ns2:Elem1> <ns3:Elem1 xmlns:ns3="http://www.ibm.com/elem1"> <Child1>3</Child1> <Child2>4</Child2> </ns2:Elem1> <Elem2>10</Elem2> </Part1> </ns1:getOrderStatus> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
圖 42 顯示此 rpc/literal 訊息的 對應商業物件。
圖 42. rpc/literal SOAP Config MO
若 Style 內容的設定為 rpc,Use 內容的設定為 encoded, 就會分別從 Child ConfigMO 的 BodyName 和 BodyNS 內容來讀取「SOAP 訊息」的「主體名稱」及「主體名稱空間」。 此外,亦會將 SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 屬性新增至「主體」標籤。
下列為 rpc/encoded 訊息的範例, 其中「主體名稱」及「主體名稱空間」已分別解析為 getOrderStatus 及 OrderStatusNS。
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body SOAP-ENV:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"> <ns1:getOrderStatus xmlns:ns1="http://www.ibm.com/"> <Part1 xsi:type="ns1:SOAP_Part1Type"> <ns2:Elem1 SOAP-ENC:arrayType="ns2:SOAP_MaxType[2]" xsi:type="SOAP-ENC:Array" xmlns:ns2="http://www.ibm.com/elem1"> <item> <Child1 xsi:type="xsd:string">1</Child1> <Child2 xsi:type="xsd:string">2</Child2> </item> <item> <Child1 xsi:type="xsd:string">3</Child1> <Child2 xsi:type="xsd:string">4</Child2> </item> </ns2:Elem1> <Elem2 xsi:type="xsd:string">10</Elem2> </Part1> </ns1:getOrderStatus> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
圖 43 顯示此 rpc/encoded 訊息的 對應商業物件。
圖 43. rpc/encoded SOAP Config MO
若 Style 內容設定為 document,Use 內容設定為 literal 時, 所包含的整個「主體名稱」標籤將不存在。 下面是以上述 BO 為基礎的文件樣式 SOAP 訊息範例:
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:Elem1 xmlns:ns1="http://www.ibm.com/elem1"> <Child1>1</Child1> <Child2>2</Child2> </ns1:Elem1> <ns2:Elem1 xmlns:ns2="http://www.ibm.com/elem1"> <Child1>3</Child1> <Child2>4</Child2> </ns2:Elem1> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
圖 44 顯示此 document/literal 訊息的 對應商業物件。
圖 44. document/literal SOAP Config MO
請注意,尚未設定 XML 程式碼片段中的 encodingStyle 屬性。
此 Style/Use 組合不受支援。若資料處理常式遇到 SOAP ConfigMO 的 Style 設定為 document, 且 Use 設定為 encoded,將會失敗。