隨著 XML 在企業應用中扮演越來越重要的角色,CICS 應用程式對原生存儲和查詢 XML 數據的需求日益增長。本文詳細介紹如何結合 CICS Web 服務支援與 DB2 pureXML 技術,實現兩大核心場景:無需解析即可直接將入站 XML Web 服務消息存入 DB2,以及從 DB2 檢索 XML 數據並透過 Web 服務對外輸出。文章提供完整的配置步驟、COBOL 範例代碼與測試方法,幫助開發人員快速構建高效、可擴展的 XML 處理解決方案。
自 CICS TS V3.1 起,CICS 內建 Web 服務功能,使應用程式能同時扮演服務請求者與提供者,支援 HTTP 或 WebSphere MQ 傳輸。Web 服務消息通常採用 SOAP 格式(即帶有 SOAP 標頭的 XML),本文統稱之為 SOAP 消息。
DB2 9.1 for z/OS 引入 XML 資料類型(pureXML),允許原生存儲、索引與查詢 XML。XML 在寫入時即被解析,配合 XPath 與 SQL/XML 查詢可實現高效訪問;DB2 10.1 更支援透過 XPath 直接更新 XML 內容。
本文採用同一 CICS 區域(CICS TS 4.1)與 DB2 9.1 表(單一 XML 列)演示:
CREATE TABLE REDBOOK.PUREXML (SOAP XML) CCSID EBCDIC IN DATABASE REDBOOK;
完整建表腳本(含 STOGROUP、TABLESPACE)可從文末下載區獲取。
此場景示範 COBOL 程式 WEBINST(兼具管道處理程式與服務提供者角色)如何繞過 CICS 內建 XML 解析器,將完整 SOAP 訊息直接寫入 DB2 pureXML 列,顯著提升效能。
將以下內容存為 /u/user/config/insert_pipeline.XML 至 USS,指定 WEBINST 為終端處理程式:
<?XML version="1.0" encoding="EBCDIC-CP-US"?>
<provider_pipeline XMLns="https://www.ibm.com/software/htp/cics/pipeline">
<service>
<terminal_handler>
<handler>
<program>WEBINST</program>
<handler_parameter_list/>
</handler>
</terminal_handler>
</service>
</provider_pipeline>
PIPELINE(WEBINST) CONFIGFILE(/u/user/config/insert_pipeline.XML) SHELF(/u/user/shelf)
URIMAP(WEBINST) USAGE(PIPELINE) PIPELINE(WEBINST) HOST(*) PATH(/pureXML/insert)
PROGRAM(WEBINST) DATALOCATION(ANY)
TCPIPSERVICE(PUREXML) PORT(xxxxx) PROTOCOL(HTTP)
DB2ENTRY(PUREXML) ACCOUNTREC(TXid) AUTHTYPE(Userid) DRollback(Yes) PLAN(PUREXML)
DB2TRAN(PUREXML) ENTRY(PUREXML) TRANSID(CPIH)
EXEC CICS GET CONTAINER('DFHREQUEST') INTO(XMLDATA) FLENGTH(WSFLENGTH) RESP(WSRESP) RESP2(WSRESP2) END-EXEC.
EXEC SQL INSERT INTO REDBOOK.PUREXML (SOAP) VALUES (:XMLDATA) END-EXEC.
EXEC CICS DELETE CONTAINER('DFHREQUEST') END-EXEC.
EXEC CICS PUT CONTAINER('DFHRESPONSE') FROM(XMLDATA) RESP(WSRESP) RESP2(WSRESP2) END-EXEC.
程式從 DFHREQUEST 容器讀取 SOAP 訊息,直接插入 DB2,再將原訊息作為回應返回。
匯入範例 SWITCH.wsdl,啟動 Web Services Explorer,指向 CICS TCP/IP 服務 URI,輸入測試資料送出。CICS 將 SOAP 交給 WEBINST 寫入 DB2,並回傳原始 SOAP 訊息。




執行 SELECT * FROM REDBOOK.PUREXML,可見 XML 宣告顯示編碼為 IBM285 (UK EBCDIC),證明資料已原樣存入。
此場景示範 COBOL 程式 WEBSLCT 從 DB2 讀取 XML 並作為 Web 服務回應輸出。
EXEC SQL SELECT XMLSERIALIZE(SOAP AS CLOB) INTO :XMLDATA FROM REDBOOK.PUREXML END-EXEC.
若不使用 XMLSERIALIZE,DB2 會在 XML 前加上宣告編碼為本地 EBCDIC 碼頁,導致部分用戶端拒絕接收。序列化為 CLOB 可移除該宣告,確保跨平台相容。
類似場景一,僅將程式名改為 WEBSLCT,路徑設為 /pureXML/select,其餘 DB2 相關資源可共用。
直接在瀏覽器訪問 https://host:port/pureXML/select,即可看到場景一存入的完整 SOAP 訊息。

XMLTABLE 刪除敏感節點本文實證了 CICS COBOL 應用程式可零解析地與 DB2 pureXML 雙向交換 XML,極大簡化開發並提升效能。此架構易於擴展為大型分散式應用(如 XML 表單、訊息總線)的核心組件,pureXML 更可作為可查詢的審計日誌。完整範例代碼請見文末下載區。