在本章节中:
关于扩展
ISO 8583 扩展是 Parasoft 的持续测试解决方案的自定义扩充套件。在客户端,可以使用它们来发送和接收自定义的 ISO 8583 消息。在服务端,可以使用它们来创建和发送自定义的虚拟化消息。
将为 ISO 8583 集成提供以下自定义扩展:
- ISO 8583 消息格式:消息格式用于将本机 ISO 转换为 XML ISO,反之亦然。
- ISO 8583 传输:传输协议用于发送和接收自定义的 ISO 8583 消息。
- ISO 8583 消息监听器:消息监听器用于监听自定义的 ISO 8583 消息和生成虚拟响应。
实现
此扩展套件实现为 com.parasoft.soavirt.iso8583.main-<version>.jar,这取决于发行版提供的以下 jar:
jPOS
- jpos-1.9.2.jar
JDOM
- jdom-1.1.3.jar
Apache Commons CLI
- commons-cli-1.2.jar
ISO-8583 扩展
- com.parasoft.soavirt.messages.iso8583-<version>.jar
- com.parasoft.soavirt.transport.iso8583-<version>.jar
- com.parasoft.virtualize.listener.iso8583-<version>.jar
要求
- SOAtest 和/或 Virtualize 9.5.x 及更高版本。
安装指南
可以从 UI 或命令行安装该扩展。
UI 安装指南
- 选择 Parasoft> Preferences。
- 在系统属性首选项页面,单击 Add JARs。
- 在打开的文件选择器中,选择 com.parasoft.soavirt.iso8583.main-<version>.jar。将加载所有必需的依赖项。
- 重启 SOAtest/Virtualize。
命令行安装指南
将 com.parasoft.soavirt.iso8583.main-<version>.jar 文件添加到 localsettings 属性文件中的 system.properties.classpath
属性。
例如:
system.properties.classpath=<path to jar>/com.parasoft.soavirt.iso8583.main-1.0.0.jar
一旦路径完成更改,将加载所有必需的依赖项。
使用说明
SOAtest
- 右键单击测试套件并选择 Add New> Test。
- 添加测试向导中将有两个具有相同名称的 ISO 8583 客户机可用。在常用工具类中选择 ISO 8583 Client ,然后单击 完成。其他 ISO 客户机是 SOAtest 附带的内置工具,由 ISO 8583 扩展替换。
- 单击 Transport 选项卡,然后从 Transport 下拉菜单选择 Custom Extension 。
- 从 Select Implementation 下拉菜单选择 ISO 8583 ,对工具进行配置。包装器选项是在转换选项选项卡和 Packager Settings下的传输设置中配置的。
ISO 8583 消息监听器设置
可以为 ISO 8583 消息监听器配置以下设置
通道设置
Channel Name | 定义在发送/接收消息时要使用的 ISO 8583 通道。jPOS 库中包含的所有默认的通道实现(如,仅需端口、主机和包装器的通道实现)都可使用。有关更多详情信息,请查阅 Channels。 |
---|---|
Host | 定义在创建连接时要使用的Host。 |
Port | 定义在创建连接时要使用的端口。 |
Timeout | 定义连接超时之前可以等待多少秒。 |
包装器设置
Packager Name | 定义将要用来包装和打开 ISO 8583 消息的包装器。总的来说,这里将使用 GenericPackager 和通用包装程序 XML 说明。然而,如果预定义的 ISO 包装器更合适,则可以使用“包装器”部分中提到的所有包装器。如果实现了自定义的 ISO 包装器(如,ISOPackager 接口),则其必须包含在 SOAtest/Virtualize 类路径中,并且必须提供完全限定的类名。有关更多详情信息,请查阅 Packagers。 |
---|---|
Packager Path | 定义通用包装器说明 XML 文件的路径。 该字段仅使用于通用的包装器(如 GenericPackager 和 X92GenericPackager)。 |
头设置
Header Length | 指定输出响应的头长度。 |
---|
连接管理设置
Keep connection alive | 启用此选项,让客户端保持连接并重复,以便后续的发布。 |
---|---|
Close connection after test execution | 启用此选项,在发布后直接关闭客户端连接。 |
ISO 8583 消息格式设置
可以为 ISO 8583 消息格式配置以下设置
Packager Name | 定义用来打包和解包 ISO 8583 消息的包装器。总的来说,这里将使用 GenericPackager 和通用包装程序 XML 说明。然而,如果预定义的 ISO 包装器更合适,则可以使用“包装器”部分中提到的所有包装器。如果实现了自定义的 ISO 包装器(如,ISOPackager 接口),则其必须包含在 SOAtest/Virtualize 类路径中,并且必须提供完全限定的类名。有关更多详情信息,请查阅 Packagers。 |
---|---|
Packager Path | 定义通用包装器说明 XML 文件的路径。 该字段仅使用于通用的包装器(如 GenericPackager 和 X92GenericPackager) |
ISO 8583 传输设置
可以为 ISO 8583 传输配置以下设置。
通道设置
Channel Name | 定义在发送/接收消息时要使用的 ISO 8583 通道。jPOS 库中包含的所有默认的通道实现(如,仅需端口、主机和包装器的通道实现)都可使用。有关更多详情信息,请查阅 Channels。 |
---|---|
Host | 定义在创建连接时要使用的主机。 |
Port | 定义在创建连接时要使用的端口。 |
Timeout | 定义连接超时之前可以等待多少秒。 |
包装器设置
Packager Name | 定义创建通道时将使用的包装器。 该字段与 ISO 8583 Message Format Settings中的对等内容具有相同的工作原理。 |
---|---|
Packager Path | 定义通用包装器说明 XML 文件的路径。 该字段的工作原理等同于 ISO 8583 Message Format Settings。 |
头设置
Request Header | 定义要与请求一起发送的自定义头信息。该字段还可作为响应头大小模板,允许正确读取响应中的头信息。 |
---|
包装器
包装器定义如何组织 ISO 8583 消息,包括消息中的字段数和字段数据类型。它们允许 ISO 8583 消息的二进制数据应用到通用 ISO 消息,它可以轻松地被不同的包装器操作和格式化。默认情况下,提供大量的包装器,并且客户包装器用来支持特殊情况。
它们还为该自定义包装器中的 jPOS API 提供可扩展性,该包装器可定义为对自定义的 ISO 8583 消息进行描述,从而支持几乎任何类型的 ISO 8583 消息。
默认包装器
包装器名称 | 包装器说明 |
---|---|
Base1Packager | VISA Base1 二进制包装器。 |
Base1SubFieldPackager | VISA Base1 二进制子字段包装器。 |
BASE24Packager | BASE24 ASCII 包装器。 |
CTCSubElementPackager | 验证用于字段 48 中子元素的包装器。 |
CTCSubFieldPackager | 验证用于字段 48 中子字段的包装器。 |
DummyPackager | Dummy 包装器。如果消息被封装或打开,将抛出异常。 |
EuroPackager | EuroPay 包装器。 |
EuroSubFieldPackager | EuroPay 子字段包装器。 |
FSDPackager | FSD ISO 消息包装器。 |
GenericPackager | 使用 XML 说明对 ISO 消息进行描述。 |
GenericSubFieldPackager | 使用 XML 说明对 ISO 子字段进行描述。 |
GenericTaggedFieldsPackager | 用于包含没有位图的 TLV 子字段的字段的包装器。 |
GenericValidatingPackager | 使用 XML 说明对 ISO 消息进行验证。 |
ISO87APackager | ISO 8583 v1987 ASCII 包装器。 |
ISO87APackagerBBitmap | 使用二进制位图的 ISO 8583 v1987 ASCII 包装器。 |
ISO87BPackager | ISO 8583 v1987 ASCII 包装器。 |
ISO93APackager | ISO 8583 v1993 ASCII 包装器。 |
ISO93BPackager | ISO 8583 v1993 ASCII 包装器。 |
LogPackager | 打包和解压来自 jPOS 日志的 ISO 消息。 |
MasterCardEBCDICSubFieldPackager | MasterCard EBCDIC 子字段包装器。 |
PackagerWrapper | 包装其他的 ISO 包装器。 |
PostPackager | 用于 Postilion 的 ISO 8583 v1987 包装器。 |
VAPSMSPackager | 用于 VISA’s VAP Single Message(已弃用)的 ISO 8583 v1987 BINARY 包装器。 |
VAPVIPPackager | 用于 VISA’s VAP Single Message(已弃用)的 ISO 8583 v1987 BINARY 包装器。 |
X92GenericPackager | 使用 XML 说明对 ANSI X9.2 ISO 消息进行描述。 |
X92Packager | ANSI X9.2 包装器。 |
XML2003Packager | 将 ISO 8583 v2003 消息打包和解包到 XML 表示形式中。 |
XMLPackager | 将 ISO 8583 消息打包和解包到 XML 表示形式中。 |
自定义包装器
自定义包装器有两种实现方式,以给自定义 ISO 8583 消息提供支持。
通用包装器 XML 说明
在这个实现中,jPOS 库提供了可以处理大部分 ISO 8583 消息的通用包装器。通用包装器使用 ISO 8583 的 XML 说明,正确地打包和解包自定义的 ISO 8583 消息。
若要定义通用包装器说明,则通过声明 XML 文档类型进行启用:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE isopackager PUBLIC "-//jPOS/jPOS Generic Packager DTD 1.0//EN" "http://jpos.org/dtd/generic-packager-1.0.dtd">
ISO 包装器定义遵循以下文档类型:
<isopackager> <!-- ISO Field Definitions --> </isopackager>
ISO 字段定义放置在ISO 包装器定义中。ISO 字段定义可以是基本的 ISO 8583 类型,也可以是复杂类型。
基本 ISO 字段定义
使用功能以下格式定义基本 ISO 字段定义:
<isofield id="0" length="4" name="MESSAGE TYPE INDICATOR" pad="true" class="org.jpos.iso.IFB_NUMERIC"/>
id 属性定义字段号, length 属性定义数据长度, name 属性定义字段名, pad 属性(可选)指定字段是否应该填充字符, class 属性定义与字段数据类型相关联的字段包装器。如果需要,自定义字段包装器也可以通过实现 ISOFieldPackager 并包括在 SOAtest/Virtualize 类路径上的实现来创建。
默认提供以下 ISO 字段包装器(所有类名应以 XML 定义中的“org.jpos.iso”作为前缀)。
类名 | 类说明 | 类名 | 类说明 |
---|---|---|---|
IF_CHAR | 固定长度的字母数字(ASCII) | IFB_LLCHAR | 可变长度的字母数字(BINARY,最大长度为 99) |
IF_ECHAR | 固定长度的字母数字(EBCDIC) | IFB_LLHBINARY | 可变长度的二进制十六进制(BINARY,最大长度为 99) |
IF_NOP | 固定长度的空(哑)字段 | IFB_LLHCHAR | 可变长度的字母数字十六进制(BINARY,最大长度为 99) |
IF_TBASE | 固定长度的令牌字段 | IFB_LLHECHAR | 可变长度的字母数字十六进制(EBCDIC,最大长度为 99) |
IF_TCHAR | 使用令牌的固定长度字母数字 | IFB_LLHFBINARY | 固定长度的二进制十六进制(BINARY,最大长度为 99) |
IF_UNUSED | 固定长度的空(哑)字段,如果字段正在使用则抛出异常。 | IFB_LLHNUM | 可变长度的数字十六进制(BINARY,最大长度为 99) |
IFA_AMOUNT | 固定长度的数量以 0 填充(ASCII) | IFB_LLLBINARY | 可变长度的二进制(BINARY,最大长度为 999) |
IFA_AMOUNT2003 | ISO 8583-2003 固定长度的数量以 0 填充(ASCII) | IFB_LLLCHAR | 可变长度的字母数字(BINARY,最大长度为 999) |
IFA_BINARY | 固定长度的二进制(ASCII) | IFB_LLLHBINARY | 可变长度的二进制十六进制(BINARY,最大长度为 999) |
IFA_BITMAP | 固定长度的位图(ASCII) | IFB_LLLHCHAR | 可变长度的字母数字十六进制(BINARY,最大长度为 999) |
IFA_FLLCHAR | 固定长度的字母数字(ASCII,长度为 99) | IFB_LLLHECHAR | 可变长度的字母数字十六进制(EBCDIC,最大长度为 999) |
IFA_FLLNUM | 固定长度的数字(ASCII,长度为 99) | IFB_LLLHNUM | 可变长度的数字十六进制(BINARY,最大长度为 999) |
IFA_LBINARY | 可变长度的二进制(ASCII,最大长度为 9) | IFB_LLLLBINARY | 可变长度的二进制(BINARY,最大长度为 9999) |
IFA_LCHAR | 可变长度的字母数字(ASCII,最大长度为 9) | IFB_LLLNUM | 可变长度的数字(BINARY,最大长度为 999) |
IFA_LLABINARY | 可变长度的二进制(ASCII,最大长度为 99) | IFB_LLNUM | 可变长度的数字(BINARY,最大长度为 99) |
IFA_LLBINARY | 可变长度的二进制(ASCII,最大长度为 99) | IFB_NUMERIC | 固定长度的数字(ASCII) |
IFA_LLBNUM | 可变长度的数字(ASCII BCD,最大长度为 99) | IFE_AMOUNT | 固定长度的数量(EBCDIC) |
IFA_LLCHAR | 可变长度的字母数字(ASCII,最大长度为 99) | IFE_BINARY | 固定长度的二进制(EBCDIC) |
IFA_LLLABINARY | 可变长度的二进制(ASCII,最大长度为 999) | IFE_BITMAP | 固定长度的位图(EBCDIC) |
IFA_LLLCHAR | 可变长度的字母数字(ASCII,最大长度为 999) | IFE_CHAR | 固定长度的字母数字(EBCDIC) |
IFA_LLLLBINARY | 可变长度的二进制(ASCII,最大长度为 9999) | IFE_LLBINARY | 可变长度的二进制(EBCDIC,最大长度为 99) |
IFA_LLLLCHAR | 可变长度的字母数字(ASCII,最大长度为 9999) | IFE_LLCHAR | 可变长度的字母数字(EBCDIC,最大长度为 99) |
IFA_LLLLLBINARY | 可变长度的二进制(ASCII,最大长度为 99999) | IFE_LLLBINARY | 可变长度的二进制(EBCDIC,最大长度为 999) |
IFA_LLLLLCHAR | 可变长度的字母数字(ASCII,最大长度为 99999) | IFE_LLLCHAR | 可变长度的字母数字(EBCDIC,最大长度为 999) |
IFA_LLLNUM | 可变长度的数字(ASCII,最大长度为 999) | IFE_LLLEBINARY | 可变长度的二进制 EBCDIC(EBCDIC,最大长度为 999) |
IFA_NUMERIC | 固定长度的数字(ASCII) | IFE_LLLLBINARY | 可变长度的二进制(EBCDIC,最大长度为 9999) |
IFA_TTLBINARY | 使用令牌的可变长度二进制(ASCII,最大长度为 9) | IFE_LLLLCHAR | 可变长度的字母数字(EBCDIC,最大长度为 9999) |
IFA_TTLCHAR | 使用令牌的可变长度字母数字(ASCII,最大长度为 9) | IFE_LLNUM | 可变长度的数字(EBCDIC,最大长度为 99) |
IFA_TTLLBINARY | 使用令牌的可变长度二进制(ASCII,最大长度为 99) | IFE_NUMERIC | 固定长度的数字(EBCDIC) |
IFA_TTLLCHAR | 使用令牌的可变长度字母数字(ASCII,最大长度为 99) | IFE_SIGNED_ | 固定长度带符号的的数字(EBCDIC) |
IFA_TTLLLBINARY | 使用令牌的可变长度二进制(ASCII,最大长度为 999) | IFEA_LLCHAR | 深奥的可变长度字母数字(ASCII EBCDIC,最大长度为 99) |
IFA_TTLLLCHAR | 使用令牌的可变长度字母数字(ASCII,最大长度为 999) | IFEB_LLLNUM | 深奥的可变长度数字(EBCDIC,最大长度为 999) |
IFA_TTLLLLBINARY | 使用令牌的可变长度二进制(ASCII,最大长度为 9999) | IFEB_LLNUM | 深奥的可变长度数字(EBCDIC,最大长度为 99) |
IFA_TTLLLLCHAR | 使用令牌的可变长度字母数字(ASCII,最大长度为 9999) | IFEMC_LLCHAR | 深奥的可变长度字母数字( EBCDIC,最大长度为 99) |
IFB_AMOUNT | 固定长度的数量(BINARY) | IFEP_LLCHAR | 欧洲支付可变长度的字母数字( EBCDIC,最大长度为 99) |
IFB_AMOUNT2003 | ISO 8583-2003(BINARY)固定长度的数量 | IFEPE_LLCHAR | 信用卡可变长度的字母数字(EBCDIC,最大长度为 99) |
IFB_BINARY | 固定长度的二进制(BINARY) | IFIPM_LLLCHAR | 使用令牌的可变长度字母数字(最大长度为 999) |
IFB_BITMAP | 固定长度的位图(BINARY) | IFMC_LLBINARY | 使用令牌的可变长度二进制(最大长度为 99) |
IFB_FLLLNUM | 固定长度的数字(BINARY,长度为 999) | IFMC_LLCHAR | 使用令牌的可变长度字母数字(最大长度为 99) |
IFB_FLLNUM | 固定长度的数字(BINARY,长度为 99) | IFMC_LLLBINARY | 使用令牌的可变长度二进制(最大长度为 999) |
IFB_FNUMERIC | 固定长度的数字(ASCII) | IFMC_LLLCHAR | 使用令牌的可变长度字母数字(最大长度为 999) |
IFB_LLBINARY | 可变长度的二进制(BINARY,最大长度为 99) |
|
复杂 ISO 字段定义
使用以下格式定义复杂 ISO 字段定义:
<isofieldpackager id="127" length="255" name="FILE RECORS(S) ACTION/DATA" class="org.jpos.iso.IFB_LLHBINARY" packager="org.jpos.iso.packager.GenericSubFieldPackager"/> <!-- ISO Field Definitions --> </isofieldpackager>
id, length, name, 和 class 属性与基本 ISO 字段定义具有相同的含义。但是,此处多了一个 packager 属性必须定义,它用来说明如何在子字段说明(其定义类似于基本的 ISO 字段)后使用 ISO 消息的其余部分包装该复杂 ISO 字段。
作为参考,本文还提供了自定义包装器示例,该示例为 VISA’s Base1 ISO 8583 消息提供了 jPOS 示例;请查阅插件的 zip 文件中包含的 base1.xml。
ISOPackager 接口
在这个实现中,jPOS 库还提供了一个可用来定义自定义包装器的 Java 接口。如果通用包装器或其中一个默认的包装器不支持某个 ISO 8583 消息,则可实现一个自定义的 ISO 包装器。
通道
通道定义了 ISO 8583 客户端和服务端之间如何通讯。它们确保在通过电线发送并在另一端进行了适当的重构之前,对通用 ISO 消息进行了正确地格式化。通道处理用于在客户端和服务端之间对 ISO 8583 消息进行转换的连接和协议。与包装器一样,jPOS 库提供了许多通道,可以处理大多数情况。但是,如果不存在合适的通道,则可以通过继承 BaseChannel 类来实现自定义 ISO 8583 通道。
默认提供以下通道:
Channel Name | 通道说明 |
---|---|
AmexChannel | 美国特快通道。 |
ASCIIChannel | ISO 基本通道扩展,具有四个 ASCII 字符消息长度头信息。 |
BCDChannel | ISO 基本通道扩展,具有以下消息格式 [LEN][TPDU][ISOMSG] 其中 LEN 为 2 个十六进制字节。 |
CSChannel | CS 标准通道。 |
FSDChannel | ISO 基本通道扩展,具有以下消息格式 [LEN][TPDU][ISOMSG] 其中按照 NBO(network byte order,网络字节顺序),LEN 为 2 个字节。 |
GZIPChannel | ISO 基本通道扩展,GZIP 压缩通过通道发送的数据。 |
HEXChannel | ISO 基本通道扩展,具有四个 ASCII 十六进制的字符消息长度头信息。 |
LogChannel | ISO 基本通道扩展,从 ISO 日志程序中提取 ISOMSG 块。 |
NACChannel | ISO 基本通道扩展,具有以下消息格式 [LEN][TPDU][ISOMSG] 其中按照 NBO(network byte order,网络字节顺序),LEN 为 2 个字节。 |
NCCChannel | ISO 基本通道扩展,具有以下消息格式 [LEN][TPDU][ISOMSG] 其中按照 BCD (binary-coded decimal,二进制编码的十进制)格式,LEN 为 2 个字节。 |
PADChannel | ISO 通道适用于连接到 X.25 PAD。 |
PostChannel | ISO 基本通道扩展,具有以下消息格式 [LEN][ISOMSG] 其中按照 NBO,LEN 为 2 个字节(NBO)。 |
RawChannel | ISO 基本通道扩展,具有以下消息格式 [LEN][ISOMSG] 其中按照 NBO,LEN 为 4 个字节(NBO)。 |
RBPChannel | 记录边界保存通道。 |
TelnetXMLChannel | 通过 telnet 会话交换基于 XML 的 ISO-8583 消息,telnet 命令将被忽略。 |
VAPChannel | VISA 的 VAP 框架(已弃用)。 |
X25Channel | ISO 通道适用于连接到 X.25 PAD。 |
XMLChannel | ISO 基本通道扩展,交换基于 XML 的 ISO-8583 消息。 |
第三方内容
此工具集包括来自第三方的资源项,如下:
- jPOS (GNU AGPL v3.0)
- JDOM library (JDOM license)
Parasoft 的 ISO 扩展发布在 GNU AGPL v3.0 许可证下。
更多的许可详情可在该插件的 licenses 文件夹中获得。