Danielle Vann, WTX 咨询软件工程师, IBM
Jim Hobler, WTX 高级软件工程师, IBM
转自:http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0904sepapayments/index.html
WebSphere® Transformation Extender 和 WTX Pack for SEPA 提供各种转换和检验过程,支持与用于 SEPA 支付的 European Payments Council 实现进行交互。本文讲解如何使用 DB2® pureXML™ 为有效的 SEPA 支付实现完整的存储解决方案,解释在处理支付拒绝或返回时如何检验原始文档。
什么是 WebSphere Transformation Extender (WTX)?
WTX 是 IBM 的通用数据转换和检验引擎。WTX 是一种真正的多对多转换设计和开发工具,具有容易使用的拖放界面。WTX 解决方案还是跨平台的。开发之后,可以把它们部署到各种操作系统上,比如 Windows®、Linux®、UNIX®、USS 和 MVS™。WTX 包含灵活的数据 “适配器”,支持流行的数据库引擎、Enterprise Resources Planning (ERP) 应用程序、Customer Relationship Management (CRM) 应用程序以及各种文件或数据格式,比如 XML、HTML、S/MIME 和 COBOL Copybooks。
什么是 WebSphere Transformation Extender Pack for SEPA?
WebSphere Transformation Extender Pack for SEPA 执行 European Payments Council (EPC) 指定的扩展检验规则,支持无需编写代码的开发以及跨多种平台进行重用和部署。WebSphere Transformation Extender Pack for SEPA 还可以在 SEPA 格式与内部应用程序和业务系统所需的格式(比如 DTAUS、MINOS、CFONB 和 BACS)之间进行转换。
关于 WTX 产品系列的更多信息,请参见 http://www.ibm.com/software/integration/wtx。
DB2 pureXML 支持以 XML 数据原有的层次化格式存储、管理、检验和搜索 XML 数据。开发人员不再需要编写代码把 XML 数据分解为单独的字段,也不需要把 XML 存储为大字符串或 CLOB 数据类型。通过使用 pureXML,可以使用 SQL/XML 搜索数据库中的 XML 数据。DB2 pureXML 还可以在插入或更新时根据模式检验 XML。参考资料 包含关于 pureXML 的更多信息。
本文演示如何:
- 使用 WTX 在 DB2 pureXML 数据库中存储有效的 SEPA Payments Clearing and Settlement 消息 (pacs.008.001.01) 文档。
- 获取这些 “原始” 文档以便创建和检验拒绝或返回消息。
- 使用获取的原始 SEPA 数据调用 WTX SEPA Pack 扩展检验。
本文描述的工作需要以下软件:
- WTX Design Studio 8.2.0.3 或更高版本。
- DB2 Version 9.1 或更高版本。如果不打算在 z/OS® 平台上使用这个示例,可以下载和使用免费的 DB2 Express-C 产品。
- WTX Command Server 8.2.0.3 或更高版本(如果希望在 UNIX 平台上运行 WTX 映射)。
- WTX Pack for SEPA。只有在希望运行最后一个示例(运行 SEPA Validation Framework)时需要这个软件。
WTX Design Studio 需要 Microsoft Windows(2000、XP、2003 Server 或 Vista)。
在本文中,讲解如何使用一个简单的 WTX 映射把 SEPA 数据直接插入 DB2 数据库中。在实际的实现中,应该在使用 WebSphere Transformation Extender Pack for SEPA 检验支付数据之后调用这个映射。
下载 WTXSEPAExample.zip 并把它解压到一个临时位置。这会创建一个名为 WTXSEPAExample 的目录(文件夹),其中包含本文的 Eclipse 项目、映射、树和示例数据。示例假设在 c:\temp 目录中创建这个目录。请根据需要调整下面的命令。要想在 Windows 计算机上执行这些命令,可以使用 DB2 Control Center 的 Command Editor 或 DB2 命令窗口。下面的示例使用后者。如果要在 z/OS 系统上设置数据库,请使用 z/OS 数据库设置说明 中的步骤。
为了打开一个 DB2 命令窗口,启动 MS-DOS 命令提示,进入下载的目录并执行 db2cmd 和 db2 命令,见清单 1。
cd c:\temp\WTXSEPAExample db2cmd db2
在 DB2 命令提示上,执行清单 2 中的语句以创建数据库。
create database SEPA using codeset utf-8 territory US
模式需要注册,但是由于模式的大小,首先需要增加应用程序堆的大小。在创建数据库之后,执行清单 3 中的命令。
connect to SEPA UPDATE DB CFG USING APPLHEAPSZ 40000 UPDATE DB CFG USING CATALOGCACHE_SZ 100000
下载的包包含 SEPA 使用的 UNIFI 模式。在 DB2 命令窗口中,执行清单 4 中的代码注册这些模式。
register xmlschema 'pacs.002.001.02.xsd' from 'schemas/pacs.002.001.02.xsd' \ as SEPADMIN.pacs_002_001_02 complete xmlschema SEPADMIN.pacs_002_001_02 register xmlschema 'pacs.008.001.01.xsd' from 'schemas/pacs.008.001.01.xsd' \ as SEPADMIN.pacs_008_001_01 complete xmlschema SEPADMIN.pacs_008_001_01
注意:如果出现错误 DB21107E,“An error has occurred when accessing the file”,那么应该检查是否已经切换到了示例目录(见 清单 1)。
下面要创建一个表,其中包含一个 XML 数据类型的列、一个包含文档 ID 的列和一个包含注释的列。执行清单 5 中的 CREATE TABLE 语句。
create table SEPADMIN.SEPAMESSAGES \ (ID varchar(60) PRIMARY KEY NOT NULL, COMMENT VARCHAR(500), DATA XML)
对于 z/OS,可以使用 SPUFI、Admin Tool 或 DataStudio 输入创建数据库和注册模式的 DDL。
CREATE DATABASE SEPA;
下载的包包含 SEPA 使用的 UNIFI 模式。使用清单 6 中的代码注册这些模式。
REGISTER XMLSCHEMA 'pacs.002.001.02.xsd' FROM file://pacs.002.001.02.xsd AS SEPADMIN.pacs_002_001_02 COMPLETE REGISTER XMLSCHEMA pacs.008.001.01.xsd FROM file://pacs.008.001.01.xsd' AS SEPADMIN.pacs_008_001_01 COMPLETE
下面要创建一个表,其中包含一个 XML 数据类型的列、一个包含文档 ID 的列和一个包含注释的列。执行清单 8 中的 CREATE TABLE 语句。
create table SEPADMIN.SEPAMESSAGES(ID varchar(60) PRIMARY KEY NOT NULL, COMMENT VARCHAR(500), DATA XML)
前面解压的 zip 文件包含下面 WTX 对象和示例 SEPA 数据。使用 WTX 填充前面创建的数据库。
- WTX 类型树
- WTX 映射源
- WTX Database (MDQ) 文件
- 在 WTX Database Interface Designer 中打开 SEPA.mdq 文件。
图 1. WTX Database Interface Designer
- 可以使用原生连接驱动程序或 ODBC 连接到数据库。更多信息请参考 WTX Database Interface Designer 的文档。这个示例使用原生 DB2 连接。
- 右键单击 SEPA 数据库名并选择 Edit。
- 展开 Database Source。这是一个下拉菜单。选择前面创建的数据库(SEPA,除非前面使用了其他名称)。还应该在 Security 部分中输入自己的 DB2 用户 ID 和密码。如果在 PC 上运行 DB2 的本地拷贝(例如 DB2 Express),那么根据安装 DB2 的方式不同,可能可以清空 User ID 和 Password 框。
图 2. Data Source and Security Settings 对话框
- 选择 OK 退出配置对话框。
- 通过展开 SEPA 数据库 (+) 并双击 Tables 部分,测试数据库连接。如果连接设置正确,就会打开 Generate Type Tree from Tables 对话框。
图 3. 如果数据库连接成功,Generate Type Tree 对话框会显示完整的表列表
- 保存 SEPA.mdq 并关闭 WTX Database Interface Designer。
- 打开 WTX Design Studio 并导入 zip 文件中的 WTX 项目。为此,选择 File... Import,然后选择 General... Existing Projects 把这个项目导入自己的工作空间。浏览到创建的示例目录 (WTXSEPAExample),然后选择 Next。Import Projects 对话框出现,其中已经选择了 WTXSEPAExample。单击 Finish。为了确认是否成功地创建了项目,在 WTX Extender Navigator 中展开 Maps。如果出现映射 “sepa_db2.mms”,就说明导入成功了。
- 在 Design Studio 中打开 sepa_db2.mms WTX 源映射并选择 data_insert 映射。这个映射把数据插入数据库中。输入卡 (InputXML) 包含作为源的有效 SEPA XML 文档,输出卡 (DBInsert) 将用正确的设置把输入映射到数据库中。
图 4. data_insert 映射
- 如果需要,可以通过编辑输入卡 (InputXML) 把输入文件改为您选择的有效 SEPA 支付消息。当前的设置把示例数据输入到 DB2 pureXML 数据库中,不需要编辑映射卡。
- 选择工具栏中的 Map,然后选择 Build 来构建映射。 注意:如果在非 Windows 平台上运行映射,那么应该选择 Maps 菜单中的 Build for Specific Platform 菜单项。
- 如果在非 Windows 操作系统上运行,那么必须通过二进制传输部署映射、模式和数据。
- 选择 Maps 菜单中的 Run 运行映射。在任何 ESB 系统(比如 WTX Launcher 或 WebSphere Message Broker)中,都可以使用这个映射监视到达的数据,然后自动地把数据输入数据库中。在 UNIX 平台上运行映射需要使用 WTX Command Server。关于在非 Windows 平台上运行映射的说明,请参考 WTX 文档。
图 5. 构建并运行 WTX 映射
- 成功地运行映射之后,支付文档已经被添加到数据库中了。为了确认这一点,使用 DB2 Command Editor 或 CLI Editor 选择 SEPAMESSAGES 表中的所有记录,见清单 9。如果映射没有成功运行,那么在跟踪文件 data_insert.dbl 中寻找更多信息。
SELECT * from SEPADMIN.SEPAMESSAGES
图 6. 使用 DB2 Command Editor 查看插入的数据
图 7. DB2 Command Editor 查询结果
获取原始 SEPA 支付文档主要用于在 SEPA 中创建拒绝或返回消息。下面向一个 WTX 映射传递要拒绝或返回的消息的交易 ID,从而演示如何获取原始 SEPA 支付文档。
- 如果还没有导入项目,那么执行前面的步骤 1 - 3。
- 在 Design Studio 中打开 sepa_db2.mms WTX 源映射并选择 query_txid 映射。
图 8. 打开 ‘query_txid’ 映射
- 编辑 TxID 输入卡,把 Echo 输入改为要在数据库中查询的有效交易 ID。这个值是原始支付消息中的 Credit Transfer Transaction Information\Transaction ID 元素,并与拒绝消息中的 Transaction Information and Status\Original Transaction ID 相关联。提供的默认值是 ‘pacs008\3’。如果使用示例数据执行了前面的数据插入示例,就会找到这个交易。
- 构建并运行 ‘query_txid’ 映射。输出卡 2 的数据将包含与交易 ID 对应的完整 XML 消息。
使用示例映射的输出运行 SEPA 检验框架(可选 —— 必须安装 WebSphere Transformation Extender Pack for SEPA)
可以在 WebSphere Transformation Extender Pack for SEPA 检验中使用示例 'query_txid' 映射的输出。WebSphere Transformation Extender Pack for SEPA 会对 SEPA 文档执行扩展检验。
在检验拒绝或返回数据时,WebSphere Transformation Extender Pack for SEPA 必须获得原始的支付消息,而这正是 'query_txid' 映射的作用。
这个示例假设已经安装了 WTX Pack for SEPA,构建了所有映射并把 'xliff.dtd' 复制到了 mapsandschemas 目录中。
在这个示例中,要创建一个调用 SEPA 检验框架映射的映射。对于实际的实现,应该删除这个映射;在从数据库成功地获取原始数据之后,query_txid 映射可以直接调用 WebSphere Transformation Extender Pack for SEPA 检验。
调用 Pack for SEPA 检验映射的步骤:
- 在 Design Studio 中打开 ‘sepa_db2.mms’ WTX 源映射并选择 Call_Validation 映射。
注意:这个示例假设已经在 “C:\IBM\WebSphere Transformation Extender 8.2” 中安装了 WTX SEPA Pack version 4.2.3。如果安装了更新的版本或安装在另一个位置,那么应该相应地修改输出卡 CallSEPAValidation。 - 输入卡 1 包含要检验的原始数据的内容。这是一个 SEPA Reject 消息 (pacs.002.001.02)。输入卡 2 是前面通过运行 ‘query_txid’ 映射获取的消息。如果需要,可以修改这些默认值。对于这个示例,在示例拒绝消息中有 SEPA 检验错误。如果没有错误,WTX SEPA 检验映射就不会返回任何信息。
- 这个映射的输出是一个文件,它返回结果。
- 构建并运行 Call_Validation。
注意:如果遇到错误 “Fail function aborted map”,那么可能是还没有安装 WTX SEPA pack,或者前面步骤 1 中指定的位置不正确。如果遇到 “One or more inputs are invalid”,那么要检查是否把 xliff.dtd 复制到了 mapsandschemas 目录中。 - SEPA 检验的结果出现在与 sepvalid.mmc 映射相同的目录中(也就是安装 Pack for SEPA 的地方)。输出文件的默认名称是 ‘seperror.xml’。运行示例数据的输出在浏览器中的样子见图 9:
图 9. WebSphere Transformation Extender Pack for SEPA 检验映射的结果
可以使用 WTX 和 DB2 pureXML 增强 SEPA 数据的处理和存储。本文讲解了如何设置数据库、如何存储 SEPA 消息以及如何使用惟一标识获取这些消息。
存储了 SEPA 数据之后,就可以按照多种方式增强 SEPA 过程。通过在使用 WTX Launcher 或 WebSphere Message Broker 的系统中实现这些映射,可以在接收和检验支付消息时自动地把它们存储到数据库中。在接收到支付拒绝或返回时,系统可以获取交易 ID 并把值传递给示例 ‘query_txid’ 映射。
衷心感谢 Christian Daser、Kirsten Ann Larsen、Susan Malaika、Cindy Saracco 和 Guogen Zhang 为本文提供意见和帮助!