DFHLS2JS:针对可链接接口的高级语言到 JSON 模式转换
DFHLS2JS 编目过程会从高级语言结构中生成 JSON 模式和 JSON 绑定文件。 如果希望创建可以解析或创建 JSON 的 CICS 程序,请使用 DFHLS2JS。
DFHLS2JS JCL 过程安装在数据集 HLQ.XDFHINST中,其中 HLQ 是安装了 CICS 的高级限定符。
注: EXEC CICS TRANSFORM
JSONTODATA 和 TRANSFORM DATATOJSON 命令将取代可链接接口 DFHJSON ,从而可以将 JSON 数据转换为应用程序中的语言结构,反之亦然。
DFHLS2JS 的作业控制语句
- JOB
- 启动作业。
- EXEC
- 指定过程名称 (DFHLS2JS)。
- INPUT.SYSUT1 DD
- 指定输入。 输入参数在输入流中指定。 但是,您还可以在数据集或分区数据集的成员中定义这些数据集。
符号参数
DFHLS2JS:
- JAVADIR = 路径
- 指定 DFHLS2JS所使用的 Java™ 目录的名称。 此参数的值将追加到
/usr/lpp/,提供完整路径名/usr/lpp/ path。 - PATHPREF = 前缀
- 指定一个可选前缀,用于扩展 z/OS UNIX 目录路径,该路径用于其他参数。 缺省值为空字符串。
- SERVICE = 值
- 仅当 IBM 支持人员指示时才使用此参数。
- TMPDIR = tmpdir
- 指定 z/OS UNIX 中用作临时工作区的目录位置, DFHLS2JS。 作业运行所使用的用户标识必须具有对此目录的读和写许可权。
- TMPFILE = tmpprefix
- 指定 DFHLS2JS 用于构造临时工作空间文件的名称的前缀。
- PATHMAIN = 路径
- 指定 UNIX 系统服务文件系统中 CICS TS 目录的名称。 此参数的值将附加到 USSDIR 参数指定的值。
- USSDIR = 路径
- 指定 z/OS UNIX 文件系统中 CICS TS 目录的名称。 此参数的值将附加到 PATHMAIN 参数指定的值。 如果使用缺省值,那么必须将此值指定为
'.'(句点)。
临时工作空间
DFHLS2JS 在运行时创建以下三个临时文件:
tmpdir / tmpprefix .intmpdir / tmpprefix .outtmpdir / tmpprefix .err
tmpdir是 TMPDIR 参数中指定的值。tmpprefix是 TMPFILE 参数中指定的值。
文件的缺省名称 (未指定 TMPDIR 和 TMPFILE 时) 如下所示:
/tmp/LS2JS.in/tmp/LS2JS.out/tmp/LS2JS.err
重要: DFHLS2JS 不会锁定 z/OS UNIX 文件或数据集成员的访问权限。 因此,如果同时运行两个或多个 DFHLS2JS 实例并使用相同的临时工作空间文件,那么当另一个作业正在使用这些文件时,没有任何内容可以阻止一个作业覆盖这些工作空间文件,从而导致不可预测的失败。
设计避免此情况的命名约定和操作过程; 例如,可以使用系统符号参数 SYSUID 来生成对单个用户唯一的工作空间文件名。
在作业结束之前,将删除这些临时文件。
DFHLS2JS 的输入参数
以下语法图显示了可用的输入参数:
参数使用
参数必须符合以下规则:
- 您可以按任何顺序指定输入参数。
- 每个参数必须在新行开始。
- 参数 (及其连续字符,如果使用) 不得超出第 72 列; 第 73-80 列必须包含空格。
- 如果参数太长,无法适合单行,请在行尾使用星号 (*) 字符来指示该参数在下一行继续。 星号之前的所有内容 (包括空格) 都被视为参数的一部分。
- 行的第一个字符位置中的数字符号 (#) 字符是注释字符。 将忽略该行。
- 行的最后一个字符位置中的逗号是可选的行分隔符,将被忽略。
参数描述
- BUNDLE = 值
- 指定 z/OS UNIX 上 bundle 目录的路径和名称。 如果指定此值,那么 JSON 助手将生成包含 JSON 绑定的捆绑软件。 此参数的路径信息将覆盖 JSONTRANSFRM 参数的任何路径信息。
- CCSID = 值
- 指定在运行时用于对应用程序数据结构中的字符数据进行编码的 CCSID。 此参数的值将覆盖 LOCALCCSID 系统初始化参数的值。 value 必须是 Java 和 z/OS 转换服务支持的 EBCDIC CCSID。 如果未指定此参数,那么将使用系统初始化参数中指定的 CCSID 对应用程序数据结构进行编码。
可以将此参数与任何映射级别配合使用。
- CHAR-VARYING = { no | NULL | COLLAPSE | BINARY }
- 指定当映射级别为 1.2 或更高时如何映射语言结构中的字符字段。 COBOL 中的字符字段是 X 类型的 Picture 子句;例如,
PIC(X) 10。 C®/C++ 中的字符域是一个字符数组。 该参数不适用于企业和其他 PL/I 语言结构。 您可以选择以下选项:- 否
- 字符字段映射到 JSON 字符串并作为固定长度字段处理。 数据的最大长度等于字段的长度。 对于映射级别 2.0 及更早的 COBOL 和 PL/I ,"NO "是 CHAR-VARYING 参数的默认值。
- NULL
- 字符字段映射到 JSON 字符串并作为以 null 结束的字符串处理。 CICS 在从 JSON 模式转换时添加终止空字符。 字符串的最大长度计算为比语言结构中指示的长度少一个字符。 对于 C/C++,CHAR-VARYING 参数的缺省值为 NULL。
- COLLAPSE
- 字符字段映射到 JSON 字符串。 字段中的尾部和嵌入的空格不会包含在 JSON 消息中; 例如,
<space>AB<space><space><space>C<space>变为AB<space>C。 对于 COBOL 和 PL/I ,COLLAPSE 是映射级别 2.1 及以后的 CHAR-VARYING 参数的默认值。 - BINARY
- 字符字段映射到包含 base64 编码数据的 JSON 字符串并作为固定长度字段处理。 CHAR-VARYING 参数上的 BINARY 值仅在映射级别 2.1 及更高版本上可用。
- CHAR-OCCURS = { string | ARRAY }
- 指定当映射级别为 4.0 或更高时如何映射语言结构中的字符数组。 例如,
PIC X OCCURS 20。 该参数仅适用于 COBOL 语言。- ARRAY
- 字符数组映射到 JSON 数组。 这意味着每个字符都映射为单个 JSON 元素。 这也是映射级别 3.0 和更低版本的行为。
- 字符串
- 字符数组映射到 JSON 字符串。 这意味着整个 COBOL 数组被映射为一个 JSON 元素。
- CHAR-USAGE = { N国际 | DBCS }
- 在 COBOL 中,国家数据类型
PIC N可用于 UTF-16 或 DBCS 数据。 此设置由 NSYMBOL 编译器选项控制。 必须将助手上的 CHAR-USAGE 参数设置为与 NSYMBOL 编译器选项相同的值,以确保正确处理数据。 使用 UTF-16 时,该值通常设置为CHAR-USAGE=NATIONAL。- DBCS
PIC ( n )字段中的数据被视为 UTF-16 编码的数据。- NATIONAL
PIC ( n )字段中的数据被视为 DBCS 编码数据。
- DATA-SCREENING = { enabled | DISABLED }
- 指定是否筛选应用程序提供的数据以查找错误。
- ENABLED
- 将应用程序提供的与语言结构不一致的任何运行时数据视为错误,并发出消息 DFHPI1010 。 系统会向应用程序返回错误响应。
- DISABLED
- 应用程序提供的运行时数据中与语言结构不一致的值将被缺省值替换。 例如,零替换数字字段中的错误值。 未发出消息 DFHPI1010 ,并且将向应用程序返回正常响应。 此功能可用于避免从未初始化的输出字段中生成的 INVALID_PACKED_DEC 和 INVALID_ZONED_DEC 错误响应。
- DATA-TRUNCATION = { disabled | ENABLED }
- 指定在固定长度字段结构中是否容许可变长度数据:
- DISABLED
- 如果数据小于 CICS 期望的固定长度,那么 CICS 将拒绝截断的数据并发出错误消息。
- ENABLED
- 如果数据小于 CICS 期望的固定长度,那么 CICS 会容许截断的数据,并将缺失的数据作为空值处理。
- DATETIME = { 未使用 | PACKED15 }
- 指定是否将高级语言结构中的 JSON 日期/时间属性 (包括 CICS ABSTIME 值) 映射为时间戳记:
- PACKED15
- 任何 JSON 日期/时间属性都将映射为时间戳记。
- UNUSED
- 任何 JSON 日期/时间属性都不会映射为时间戳记。 此映射是缺省值。
- JSON-SCHEMA = 值
写入 JSON 模式的文件的完整 z/OS UNIX 名称。
- JSON-SCHEMA-CODEPAGE = { 本地 | UTF-8 | EBCDIC-CP-美国 }
- 指定用于生成 JSON 模式文档的代码页。
- LOCAL
- 指定使用文件系统的缺省代码页生成 JSON 模式。
- UTF-8
- 指定使用 UTF-8 代码页生成 JSON 模式。
- EBCDIC-CP-美国
- 指定使用美国 EBCDIC 代码页生成 JSON 模式。
- JSONTRANSFRM = 值
- 此参数对于 LINKable 方式是必需的,但对于请求/响应方式无效。 它指示用于 CICS中 JSONTRANSFRM 束资源的名称。
- LANG = COBOL|PLI-ENTERPRISE|PLI-OTHER|C|CPP
- 指定高级语言结构的编程语言:
- COBOL
- COBOL
- PLI-企业
- Enterprise PL/I
- PLI-其他
- PL/I 以外的级别 Enterprise PL/I
- C
- C
- CPP
- C++
- LOGFILE = 值
- DFHLS2JS 写入活动日志和跟踪信息的文件的完整限定 z/OS UNIX 名称。 如果它不存在,那么 DFHLS2JS 将创建文件,但不创建目录结构。
如果迂到 DFHLS2JS问题,那么 IBM 服务组织可能会请求您使用此参数。
- MAPPING-LEVEL = { 1.0 | 1.1 | 1.2 | 2.0 | 2.1 | 2.2 | 3.0 | 4.0 | 4.1 | 4.2 | 4.3 }
- 指定在生成 JSON 绑定和语言结构时要使用的助手的映射级别。 必须使用映射级别 3.0 或更高版本。
- MINIMUM-RUNTIME-LEVEL = { 最小值 | 3.0 | 4.0 | 4.1 | 4.2 | 4.3 | CURRENT }
- 指定可以将 JSON 绑定部署到的最低 CICS 运行时环境。 如果选择的级别与指定的其他参数不匹配,那么将接收到错误消息。 您可以选择的选项如下所示:
- 最小值
- 将根据您选择的参数自动分配 CICS 的最低可能运行时级别。
- 3.0
- 如果要使用 CICS JSON 助手并利用高级数据映射,请指定运行时级别 3.0 或更高版本。
- 4.0
- 生成的 Web 服务绑定文件已成功部署到 CICS® TS for z/OS® 5.3 版或更高版本的区域中。 使用此运行时级别,您可以为 MAPPING-LEVEL 参数使用 4.0 或更早的映射级别。 可以在此级别使用任何可选参数。
- 4.1
- 生成的 Web 服务绑定文件已成功部署到 CICS TS for z/OS 5.3 或更高版本的区域中。 使用此运行时级别,您可以为 MAPPING-LEVEL 参数使用 4.1 或更早的映射级别。
- 4.2
- 生成的网络服务绑定文件已成功部署到 CICS TS for z/OS, 版本 5.4 或更高位置的区域。 使用此运行时级别,您可以为 MAPPING-LEVEL 参数使用 4.2 或更早的映射级别。
- 4.3
- 生成的网络服务绑定文件已成功部署到 CICS TS for z/OS, 版本 5.4 或更高位置的区域。 使用此运行时级别,您可以为 MAPPING-LEVEL 参数使用 4.3 或更早的映射级别。
- CURRENT
- 使用此运行时级别将生成的绑定文件部署到具有与用于生成绑定文件的区域相同的运行时环境的 CICS 区域中。
- OVERWRITE-OUTPUT = { NO | YES }
- 控制是否可以覆盖文件系统上的现有 CICS BUNDLE。
- PDSCP = 值
- 指定分区数据集成员中使用的代码页,其中 value 是 CCSID 编号或 Java 代码页编号。 如果未指定此参数,那么将使用 z/OS UNIX System Services 代码页。 例如,可以指定
PDSCP=037。 - PDSLIB = 值
- 指定包含要处理的高级语言数据结构的分区数据集的名称。限制: 分区数据集中的记录的固定长度必须为 80 个字节。
- PDSMEM = 值
- 指定包含要处理的高级语言结构的分区数据集成员的名称。
- STRUCTURE = { DFHDATA | 数据 }
- C 和 C++ 中顶级数据结构的名称。 缺省值为 DFHDATA。
- TRUNCATE-NULL-ARRAYS = { disabled | ENABLED }
- 指定如何在映射级别 4.1 或更高级别处理结构化数组。 如果启用, CICS 将尝试识别数组中的空记录 (请参阅 TRUNCATE-NULL-ARRAY-VALUES 以获取有关标识空记录的更多信息)。 如果检测到五个连续的空数组记录,那么在生成 XML/JSON 时,将在第一个此类记录处截断该数组。 仅对具有结构化内容的数组启用此截断功能,简单原始字段的数组不进行截断。 数组截断可能导致 JSON/XML 中数据的更简明表示,但这并非没有风险。 如果五个连续的数据记录被错误地识别为未初始化的存储 (可能是因为它们合法地包含低值) ,那么可能会发生数据丢失。 如果已启用 TRUNCATE-NULL-ARRAY ,并且未设置 TRUNCATE-NULL-ARRAY-VALUES ,那么将使用 TRUNCATE-NULL-ARRAY-VALUES 的缺省值。
- TRUNCATE-NULL-ARRAY-VALUES = { 空 | PACKEDZERO |SPACE | ZERO }
- 指定在映射级别 4.1 或更高级别的 TRUNCATE-NULL-ARRAY 处理将哪些值视为空值。 缺省情况下,空值 (0x00或低值) 被视为空值。 如果结构化数组的记录中的所有存储字节都包含空值,那么将整个记录视为空。 可以在以逗号分隔的列表中指定一个或多个 NULL , PACKEDZERO , SPACE 和 ZERO 值。
- NULL
- 暗示空字符 (0x00)。
- 软件包 EDZERO
- 表示正带符号压缩十进制零 (0x0C) ,负带符号压缩十进制零 (0x0D) 或无符号压缩十进制零 (0x0F)。
- 空间
- 暗示 SBCS EBCDIC 空间 (0x40)。
- 零
- 暗示无符号分区十进制零 (0xF0)。
结构化数组记录中所选字节的任何匹配组合都会导致将整个记录被标识为空。
如果 TRUNCATE-NULL-ARRAY-VALUES 定义了值,那么必须启用 TRUNCATE-NULL-ARRAY 。
//LS2JS JOB 'accounting information',name,MSGCLASS=A
// SET QT=''''
//JAVAPROG EXEC DFHLS2JS,
// TMPFILE=&QT.&SYSUID.&QT
/INPUT.SYSUT1 DD *
PDSLIB=//CICSHLQ.SDFHSAMP
PDSMEM=CPYBK2
JSON-SCHEMA=example.json
LANG=COBOL
LOGFILE=/u/exampleapp/example.log
MAPPING-LEVEL=4.0
JSONTRANSFRM=EXAMPLE
BUNDLE=/u/exampleapp/bundles/exampleBundle
/*
