消息集:从 COBOL 中导入:支持的功能

将 COBOL 数据类型映射到消息模型元素时,COBOL 导入器将使用一组缺省值和行为。

下表显示 COBOL 定义如何影响消息模型中的 XML 模式设置。

COBOL 子句 XML 模式数据类型
PIC A xsd:string  
PIC G xsd:string 窗口 > 首选项 > 进口商 > COBOL 中将编译时语言环境名称设置为 ja_JP 以处理此问题。
PIC N xsd:string 窗口 > 首选项 > 进口商 > COBOL 中将编译时语言环境名称设置为 ja_JP 以处理此问题。
PIC X xsd:string  
PIC 9(n) n = 1-4 xsd:short DISPLAY、COMP 或 COMP-3
PIC 9(n) n = 5-9 xsd:int DISPLAY、COMP 或 COMP-3
PIC 9(n) n = 10-18 xsd:long DISPLAY、COMP 或 COMP-3
PIC 9(n) n = 19-31 xsd:integer DISPLAY、COMP 或 COMP-3
PIC 9(n)V9(m) xsd:decimal DISPLAY、COMP 或 COMP-3 任何虚拟十进制小数点值
COMP-1 xsd:float  
COMP-2 xsd:double  
任何编辑的字符串 xsd:string  
任何编辑的数字 xsd:string 例如,包含任何以下字符的 COBOL PICTURE 子句:
  • “Z”
  • '+'
  • '-'
  • '.'
  • ','
  • "B"
  • '0'
或货币符号。

如果您希望集成节点逻辑类型是数字类型,请确保 COBOL PICTURE 子句不包含下列任何字符。

全部 非 88 级别 VALUE 子句可导入为模型缺省值(导入向导上的选项)。

下表显示 COBOL 定义如何影响消息模型中生成的元素的物理 MRM CWF 特性。

COBOL 子句 CWF 物理类型 CWF 长度特性 其他 CWF 特性
PIC X(n)

PIC A(n)

固定长度字符串 长度 = n

长度单位 = 字节

Justification = Left Justify

Padding Character = SPACE

PIC G(n)

PIC N(n)

固定长度字符串 长度 = n

Length Units = Characters

Justification = Left Justify

Padding Character = SPACE

PIC 9(n) DISPLAY n=1-31 外部十进制 长度 = n

长度单位 = 字节

Justification = Right Justify

Padding Character = '0'

Signed = Unticked

Sign Orientation = Trailing

PIC 9(n) COMP、COMP-4、COMP-5 或 BINARY 整数 长度 = 2、4 或 8(基于 n)

长度单位 = 字节

Signed = Unticked

Sign Orientation = Blank

PIC 9(n) COMP-3 n=1-18 压缩十进制 长度 = CEILING((n+1)/2)

长度单位 = 字节

Signed = Unticked

Sign Orientation = Blank

PIC S9(n) DISPLAY n=1-31 外部十进制 长度 = n

长度单位 = 字节

Signed = Ticked

Sign Orientation = Trailing

*请参阅注 1

PIC S9(n) COMP 或 COMP-3

n=1-18

整数或压缩十进制 长度 = 请参阅上面 COMP 和 COMP-3 定义

长度单位 = 字节

Signed = Ticked

Sign Orientation = Blank

PIC 9(m)V9(n) DISPLAY n=1-31 外部十进制 长度 = n+m

长度单位 = 字节

Signed = Unticked

Sign Orientation = Trailing

Decimal Point = n

PIC 9(m)V9(n) COMP 或 COMP-3 整数或压缩十进制 对于 COMP-3,长度 = CEILING((n+m+1)/2)

长度 = 2、4 或 8(对于 COMP)

长度单位 = 字节

Signed = Unticked

Sign Orientation = Blank

Decimal Point = n

COMP-1 浮点型 长度 = 4

长度单位 = 字节

Signed = Ticked

Sign Orientation = Blank

COMP-2 浮点型 长度 = 8

长度单位 = 字节

Signed = Ticked

Sign Orientation = Blank

SYNC 浮点、整数或压缩十进制   如果适合,前导跳过计数

如果适合,尾随跳过计数

如果适合,字节对齐

*请参阅注 2

注释:
  1. 根据 COBOL 定义中的 SEPARATELEADINGTRAILING 关键字,签署方向可以采用以下某个值:
    • 前导
    • 前导分隔
    • 尾随
    • 尾随分隔
  2. SYNC 关键字使得字段在 1、2、4 或 8 字节边界上对齐。 这可能导致在字段之前或之后添加“松弛字节”。 前导跳跃计数是在字段前添加的字节数;尾随跳跃计数是在字段后面添加的字节数。

    为每个由导入器导入的元素使用导入器计算前导跳跃计数尾随跳跃计数,与 SYNC 子句无关。 当 SYNC 子句出现时它们将具有非零值。

    在有重复元素时,前导跳跃计数尾随跳跃计数将用在重复元素首次出现时;对于随后出现的重复元素,只使用尾随跳跃计数

    请参阅 COBOL 参考资料,以获取需要字节对齐的字段的详细信息。

  3. 导入的所有文件在语句构成上都必须正确。 如果所导入的文件语句构成不正确,结果将不可预测。
  4. 不支持包含 POINTER、COMP-X、INDEX 或 PROCEDURE-POINTER 关键字的 COBOL 数据类型。
  5. 包含关键字 NATIVE 的 COBOL 子句将导致错误,并且不会导入。
  6. COBOL 级别 66 和级别 77 数据项没有导入。
  7. 十六进制二进制值无法归结为非数字文字。 它们无法驻留在 COBOL 导入器导入的 LINKAGE SECTION 中。 它们能在 COBOL 文件的其他位置驻留。 或者,您可以将十六进制值转换为 PIC X 的字符串或 PIC 9 的十进制数。
  8. 如果元素名称与 Java™ 语言关键字冲突,那么将通过在元素名称前面添加单个下划线字符来修改元素名称。
  9. 不支持 COBOL 85 的面向对象的扩展。 例如,不支持 OBJECT-REFERENCE。
  10. COBOL OCCURS DEPENDING ON 子句。 此类结构中元素的字节对齐前导跳跃计数尾随跳跃计数 CWF 属性未正确设置。 您必须使用消息编辑器改正这些属性。
  11. 当导入的 COBOL 源文件在图片字符串的 value 子句中包 QUOTE 或 QUOTES 时,缺省行为是使用双引号输入数据,除非您在 COBOL 导入器向导的导入选项页上将 COBOL QUOTE 编译选项设置为 SINGLE。

带符号的外部十进制数

IBM® Integration Bus 的 MRM 定制连线格式 (CWF) 和 TDS 组件支持数字数据的 "外部十进制" (也称为 "分区十进制") 数据格式。 此格式中的数字数据在内部存储为十进制字符数据。 例如,在使用 EBCDIC 代码的系统中,存储在 4 位外部十进制区域的数字 1234 将存储为字符串“1234”,而它的实际内部十六进制表示是“F1F2F3F4”。

使用带符号的外部十进制数字,通过修改首位或末位的前半部分(取决于是使用符号在前还是符号在后的表示),符号能组成实际值。 通常“0xC”用来表示正数,“0xD”用来表示负数,而“0xF”用来表示无符号的数。

注: 通常,可以使用 "0xA" , "0xC" , "0xE" 或 "0xF" 中的任何一个来指示正值,也可以使用 "0xB" 或 "0xD" 来指示负值。 实际使用的表示取决于实际的硬件体系结构。

在 ASCII 机器上有一些外部十进制数据的内部表示。 IBM的 pSeries 机器所采用的一种表示法 ("符号 ASCII") 使用标准 ASCII 代码 ("0" [十六进制 30] 到 "9" [十六进制 39]) 作为无符号数字和正数字的第一个或最后一个数字,并使用字符 "p" [十六进制 70] 到 "y" [十六进制 79] 作为负数。

在某些其他基于 ASCII 的机器上使用备用方法(符号 EBCDIC Custom)。 此方法使用基于 EBCDIC 的机器所使用的字符,即使它们的实际内部十六进制表示不同。 如果使用此技术,那么用于 EBCDIC 和 ASCII 平台的字符串相同。 您可能收到 EBCDIC 平台的消息(由包含像 PIC XXX 和 PIC S999 等条目的 COBOL 副本创建),并将整条消息转换为 ASCII,或以相反方式转换。 在消息中表示外部十进制区域的字符串(ASCII 转换到 EBCDIC 后,或 EBCDIC 转换到 ASCII 后)将映射到表示正确的十进制符号的代码点。

此方法有一个限制,即,花括号字符是变体(即,它们在不同的 EBCDIC 代码页中有不同的代码点)。 此机制只适用于那些花括号字符“{”和“}”(用来表示带符号的 0 )的代码点为 X'C0' 和 X'D0' 的代码页。 例如,此机制适用于代码页 500 而不适用于代码页 871,前者中花括号的代码点为 X'8E' 和 X'9C。

在 ASCII 环境中(在运行时由 CCSID 属性决定),输入和输出的缺省值都是“带符号的 ASCII”表示。 可以在 CWF 物理层中为十进制、浮点型和整型的局部属性和局部元素指定适用的表示。

注: 此选项仅适用于具有外部十进制物理表示的元素或属性以及具有嵌入 ("前导" 或 "Trailing") 符号 (由 符号方向 属性确定) 的元素或属性。

下表显示分别具有包含的(嵌入式)前导或尾随符号的外部十进制数的首位或末位的内部表示(字符和实际十六进制值)。 (此表未指定 ASCII 为 0x30-0x39 和 EBCDIC 为 0xF0-0xF9 的无符号值的表示。)

  ASCII 环境 EBCDIC 环境   ASCII 环境 EBCDIC 环境
  正值   负值
符号 ASCII 符号 EBCDIC Custom     符号 ASCII 符号 EBCDIC Custom  
0 0(30) {(7B) {(C0)   p(70) }(7D) }(D0)
1 1(31) A(41) A(C1) q(71) J(4A) J(D1)
2 2(32) B(42) B(C2) r(72) K(4B) K(D2)
3 3(33) C(43) C (C3®) s(73) L(4C) L(D3)
4 4(34) D(44) D(C4) t(74) M(4D) M(D4)
5 5(35) E(45) E(C5) u(75) N(4E) N(D5)
6 6(36) F(46) F(C6) v(76) O(4F) O(D6)
7 7(37) G(47) G(C7) w(77) P(50) P(D7)
8 8(38) H(48) H(C8) x(78) Q(51) Q(D8)
9 9(39) I(49) I(C9) y(79) R(52) R(D9)

下表提供了一系列简单数据的某些示例,这些数字代表了使用这些方法可以发送或接收的数字。

  符号前导 符号尾随
  ASCII 环境 EBCDIC 环境 ASCII 环境 EBCDIC 环境
十进制值 符号 ASCII 符号 EBCDIC Custom   符号 ASCII 符号 EBCDIC Custom  
1234
31 32 33 34
"1234"
31 32 33 34
"1234"
F1 F2 F3 F4
"1234"
31 32 33 34
"1234"
31 32 33 34
"1234"
F1 F2 F3 F4
"1234"
+1234
31 32 33 34
"1234"
41 32 33 34
"A234"
C1 F2 F3 F4
"A234"
31 32 33 34
"1234"
31 32 33 44
"123D"
F1 F2 F3 C4
"123D"
-1234
71 32 33 34
"q234"
4A 32 33 34
"J234"
D1 F2 F3 F4
"J234"
31 32 33 74
"123t"
31 32 33 4D
"123M"
F1 F2 F3 D4
"123M"
7890
37 38 39 30
"7890"
37 38 39 30
"7890"
F7 F8 F9 F0
"7890"
37 38 39 30
"7890"
37 38 39 30
"7890"
F7 F8 F9 F0
"7890"
+7890
37 38 39 30
"7890"
47 38 39 30
"G890"
C7 F8 F9 F0
"G890"
37 38 39 30
"7890"
37 38 39 7B
"789{"
F7 F8 F9 C0
"789{"
-7890
77 38 39 30
"w890"
50 38 39 30
"P890"
D7 F8 F9 F0
"P890"
37 38 39 70
"789p"
37 38 39 7D
"789}"
F7 F8 F9 D0
"789}"