您可使用連接器的要求處理功能,讓協同作業呼叫 Web 服務。 開發工作包括使用 WSDL ODA 來產生 Web 服務最上層物件 (TLO),並配置協同作業來部署該物件。 如需進一步資訊,請參閱啟用要求處理程序的協同作業。您亦必須配置連接器及其要求處理程序元件:通訊協定處理常式組織架構及通訊協定處理常式。
在執行時期,連接器會接收來自協同作業的商業物件格式要求。 商業物件--「SOAP 要求」、選擇性的「SOAP 回應」及「SOAP 錯誤」商業物件-- 內含於 WSDL ODA 所產生的 TLO 中,並由已配置來使用 Web 服務的協同作業發出。 TLO 及其子項商業物件所包含的屬性和 ASI 可指定處理程序模式 (同步或非同步)、 通訊協定處理常式使用的資料處理常式 MIME 類型,以及目標 Web 服務的位址。 通訊協定處理常式會使用此資訊來呼叫 SOAP 資料處理常式的實例、 將「要求」商業物件轉換成 SOAP 要求訊息,並呼叫目標 Web 服務。 若為同步模式,通訊協定處理常式會再次呼叫資料處理常式, 將回應訊息轉換成「SOAP 回應」商業物件,並將其傳回協同作業。
在回應 SOAP 要求訊息時,連接器可從遠端交易友機接收下列各項:
通訊協定處理常式於要求處理程序中,扮演著非常重要的角色。
協同作業可透過 HTTP、HTTPS 或 JMS 傳輸來呼叫 Web 服務。 連接器有二個通訊協定處理常式,及對應的通道:
通訊協定處理常式組織架構負責管理通訊協定處理常式,在啟動時將其載入。 當連接器接收「要求」商業物件時,要求執行緒 (請注意,每個協同作業要求都是 隨著自己的執行緒傳進來的) 會呼叫通訊協定處理常式組織架構來處理要求。
通訊協定處理常式組織架構會讀取 TLO 處理常式屬性 ASI,以決定要使用哪一個通訊協定處理常式。 藉由套用一系列的規則 (請參閱SOAP/HTTP-HTTPS 通訊協定處理常式處理程序及SOAP/JMS 通訊協定處理常式處理程序), 通訊協定處理常式會呼叫資料處理常式,將「要求」商業物件轉換成 SOAP 要求訊息。通訊協定處理常式會將要求訊息包裝於傳輸埠--HTTP(S) 或 JMS-- 訊息中。 若其於「要求」商業物件中發現 SOAPAction ASI,通訊協定處理常式便會將 其新增至要求訊息標頭中。
通訊協定處理常式接著會讀取「要求」商業物件 Protocol Config MO 的 Destination 屬性,以決定目標位址。 然後通訊協定處理常式會以要求訊息來呼叫目標 Web 服務。
通訊協定處理常式會讀取 ws_mode TLO ASI,判斷處理程序模式是同步還是非同步的。 若此 ASI 的設定為 asynch,則通訊協定處理常式處理程序已完成。 否則通訊協定處理常式會等待回應訊息。 若回應訊息到達了,通訊協定處理常式便會擷取通訊協定標頭及內容, 然後呼叫資料處理常式 (由 MimeType TLO 屬性指定),將訊息轉換為「回應」或 「錯誤」商業物件。 通訊協定處理常式會再度使用 Protocol Config MO,以設定商業物件中的通訊協定標頭。 接著,通訊協定處理常式會將「回應」或「錯誤」商業物件傳回協同作業。
根據連接器的配置,可能會有一或數個通訊協定處理常式插入連接器。 連接器特有的內容可讓您配置通訊協定處理常式。
SOAP/HTTP(S) 通訊協定處理常式執行的方式與通訊協定處理常式中所描述的相同, 但有一些例外,本節將加以說明。圖 28 顯示同步作業的 SOAP/HTTP-HTTPS 通訊協定處理常式。
圖 28. SOAP/HTTP-HTTPS 通訊協定處理常式:同步的要求處理程序
圖 29 顯示非同步要求處理程序的 SOAP/HTTP-HTTPS 通訊協定處理常式
圖 29. SOAP/HTTP-HTTPS 通訊協定處理常式:非同步的要求處理程序
SOAP/HTTP-HTTPS 通訊協定處理常式使用「SOAP 要求」商業物件的物件層次 ASI (cw_mo_http) 來 決定 Protocol Config MO。 SOAP/HTTP-HTTPS 通訊協定處理常式是藉由讀取 HTTP Protocol Config MO 中的 Destination 屬性,來決定目標 Web 服務的 URL。 若該 URL 遺失或不完整,通訊協定處理常式就會使該服務呼叫失效。 如需 HTTP Protocol Config MO 及其屬性的進一步資訊,請參閱要求處理程序的 HTTP Protocol Config MO。
SOAP/HTTP-HTTPS 通訊協定處理常式會使用 SOAP 資料處理常式所傳回的 SOAP 要求訊息來呼叫 Web 服務。 若已指定 HTTP Proxy 連接器配置內容,SOAP/HTTP(S) 通訊協定處理常式就會依照該配置來執行。 若已傳回回應,SOAP/HTTP(S) 通訊協定處理常式就會加以讀取。
表 32 彙總 SOAP/HTTP-HTTPS 通訊協定處理常式所使用的規則優先順序, 以決定送出之要求訊息的 Charset、MimeType、ContentType 及 ContentType 標頭。
表 32. 離埠訊息的 SOAP/HTTP-HTTPS 通訊協定處理常式處理程序規則
優先順序 | Charset | MimeType | ContentType | ContentType 標頭 |
1 | Protocol Config MO 的 Content-Type 標頭 | TLO 屬性中的 MimeType 內容 | Protocol Config MO 的 Content-Type 標頭 | Protocol Config MO 的 Content-Type 標頭 |
2 | TLO 屬性中的 Charset 內容 | 預設為 ContentType | 預設為 text/xml | 使用 ContentType 及 Charset 來建構 Content-Type 標頭 |
3 | 如果 ContentType 為 text/*,則預設值為 ISO-8859-1。 否則將不會使用 charset。 |
|
|
|
如表 32 所示:
ContentType | 預設的 Charset |
text/* | ISO-8859-1
如需進一步資訊,請參閱 RFC2616, |
application/* | 無預設值 |
所有其他值 | 無預設值 |
當為回應訊息決定 Charset、MimeType、ContentType 及 ContentType 標頭時,表 34 會彙總處理常式所使用的規則優先順序。
表 34. 入埠同步回應訊息的 SOAP/HTTP(s) 通訊協定處理常式處理規則
優先順序 | Charset | MimeType | ContentType | ContentType 標頭 |
1 | 來自送入的 HTTP 訊息 Content-Type 標頭值的 Charset 參數值 | 「要求」商業物件之 Protocol Config MO 中的訊息 TransformationMap 子項商業物件 | 來自 Content-Type 標頭值的送入的 HTTP 訊息類型/子類型值 | 送入的 HTTP 訊息 Content-Type 標頭 |
2 | 「要求」商業物件之 Protocol Config MO 中的訊息 TransformationMap 子項商業物件 | 要求訊息 MimeType,但僅限要求與回應 ContentType 相符時。 |
|
|
3 | 要求訊息 Charset,但僅限要求與回應 ContentType 相符時。 | TLO 中的 MimeType 內容 |
|
|
4 | TLO 中的 Charset 內容。 | 預設為 ContentType |
|
|
5 | 若 Content-Type 為 text/*,則預設值為 ISO-8859-1。 否則不會使用 Charset。 |
|
|
|
如表 34 所示:
處理常式會處理 HTTP Protocol Config MO。協同作業要負責確定, 在「要求-回應」事件的環境定義中,傳遞至 HTTP Protocol Config MO 中的標頭值是正確的。處理常式會根據下列規則,載入標準標頭和自訂內容:
SOAP/JMS 通訊協定處理常式執行的方式與通訊協定處理常式中所描述的相同, 但有一些例外,本節將加以說明。
SOAP/JMS 通訊協定處理常式使用 SOAP 資料處理常式所傳回的 Web 服務要求訊息主體來建立 JMS 傳輸訊息, JMS 標頭的設定如表 35 所示。 回應內容的類型是根據「SOAP 要求」商業物件的 JMS Protocol Config MO 中的 MessageType 屬性值而定。如果 MessageType 是「文字」,處理常式就會透過「字串」 資料處理常式 API,將「SOAP 要求」商業物件轉換成「字串」。 如果 MessageType 是「位元組」,處理常式就會透過「位元組」 資料處理常式 API,將「SOAP 要求」商業物件轉換成位元組陣列。(預設訊息內容類型是 TextMessage)。
表 35. SOAP/JMS 通訊協定處理常式設定於要求訊息中的標頭值
JMS 標頭名稱 | 如果未在 SOAP/JMS Protocol Config MO 中設定則為預設值 |
JMSPriority | 4 |
JMSExpiration | 0 |
JMSDeliveryMode | PERSISTENT |
JMSReply |
|
JMSCorrelationId |
|
JMSRedelivered |
|
JMSTimestamp |
|
JMSType |
|
若是非同步呼叫目標 Web 服務,則不會設定 JMSReplyTo 標頭。 否則 (就同步處理程序而言),SOAP/JMS 通訊協定處理常式會設定 JMSReplyTo 標頭。 SOAP/JMS 通訊協定處理常式使用 ReplyToQueue 配置內容來取得 JMSDestination (從目標 Web 服務傳回回應或錯誤的目的地),並且將其設定於 JMS 傳輸訊息的 JMSReplyTo 標頭上。
圖 30 顯示同步要求作業的 SOAP/JMS 通訊協定處理常式處理程序。
圖 30. SOAP/JMS 通訊協定處理常式:同步的要求處理程序
圖 31 顯示非同步要求作業的 SOAP/JMS 通訊協定處理常式處理程序。
圖 31. SOAP/JMS 通訊協定處理常式:非同步的要求處理程序
SOAP/JMS 通訊協定處理常式使用「SOAP 要求」商業物件的物件層次 ASI (cw_mo_jms) 來決定 Protocol Config MO。 Protocol Config MO 的 Destination 屬性提供目標 Web 服務的佇列名稱。 若已啟用 JNDI,SOAP/JMS 通訊協定處理常式就會查閱 JNDI 物件, 以取得 SOAP 要求訊息的 JMSDestination。 否則就會使用 SOAP Protocol Config MO 中的 Destination 屬性。
若回應未於 ResponseWaitTimeout 內容中所指定的時間內到達,SOAP/JMS 通訊協定處理常式就會使協同作業要求失效。 當 SOAP 回應 (或錯誤) 訊息到達時,SOAP/JMS 通訊協定處理常式會擷取 JMS 標頭及內容,以供 SOAP 資料處理常式進行轉換。 處理常式會決定送入的訊息的內容類型,並將資訊儲存在 JMS Protocol Config MO 的 MessageType 屬性中。內容可為 TextMessage 或 BytesMessage。若為 TextMessage 格式,則處理常式會透過「字串 API」,以擷取為「字串」的 Web 服務回應訊息來呼叫資料處理常式。若為 BytesMessage,則處理常式會透過「位元組」 資料處理常式 API,以擷取為位元組陣列的 Web 服務回應訊息來呼叫資料處理常式。 然後 SOAP/JMS 通訊協定處理常式會使用「回應」(或「錯誤」) 商業物件中的 Protocol Config MO 來對映 JMS 標頭,以於 TLO 中設定 SOAP 回應 (或錯誤) 商業物件。表 36 顯示此對映表。
表 36. Protocol Config MO--同步要求處理程序期間,回應的 JMS 標頭屬性對映
Protocol Config MO 屬性 | JMS 標頭名稱 | 說明 |
Destination | JMSDestination | 來自回應訊息的 JMSDestination 標頭。 |
MessageId | JMSMessageId | 來自回應訊息的 JMSMessageId 標頭。 |
優先順序 | JMSPriority | 來自回應訊息的 JMSPriority 標頭 |
Expiration | JMSExpiration | 來自回應訊息的 JMSExpiration 標頭 |
DeliveryMode | JMSDeliveryMode | 來自回應訊息的 JMSDeliveryMode 標頭。 |
ReplyTo | JMSReplyTo | 來自回應訊息的 JMSReplyTo 標頭。JMS API 以 JMSDestination 的形式傳回此標頭,但 SOAP/JMS 通訊協定接聽器則是傳回佇列名稱。 |
CorrelationId | JMSCorrelationId | 來自回應訊息的 JMSCorrelationId 標頭 |
Redelivered | JMSRedelivered | 來自回應訊息的 JMSRedelivered 標頭。 |
TimeStamp | JMSTimeStamp | 來自回應訊息的 JMSTimeStamp 標頭 |
類型 | JMSType | 來自回應訊息的 JMSType 標頭 |
MessageType | 不適用 | 回應訊息內容的類型。這個屬性的值對於 TextMessage 內容來說是 「文字」;對於 BytesMessage 內容來說是「位元組」。 |