消息集:从 COBOL 中导入:支持的功能
将 COBOL 数据类型映射到消息模型元素时,COBOL 导入器将使用一组缺省值和行为。
下表显示 COBOL 定义如何影响消息模型中的 XML 模式设置。
COBOL 子句 | XML 模式数据类型 | 注 |
---|---|---|
PIC A | xsd:string | |
PIC G | xsd:string | 在 | 中将编译时语言环境名称设置为 ja_JP 以处理此问题。
PIC N | xsd:string | 在 | 中将编译时语言环境名称设置为 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 子句:
如果您希望集成节点逻辑类型是数字类型,请确保 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 |
|
- 根据 COBOL 定义中的 SEPARATE、LEADING 或 TRAILING 关键字,签署方向可以采用以下某个值:
- 前导
- 前导分隔
- 尾随
- 尾随分隔
- SYNC 关键字使得字段在 1、2、4 或 8 字节边界上对齐。 这可能导致在字段之前或之后添加“松弛字节”。 前导跳跃计数是在字段前添加的字节数;尾随跳跃计数是在字段后面添加的字节数。
为每个由导入器导入的元素使用导入器计算前导跳跃计数和尾随跳跃计数,与 SYNC 子句无关。 当 SYNC 子句出现时它们将具有非零值。
在有重复元素时,前导跳跃计数和尾随跳跃计数将用在重复元素首次出现时;对于随后出现的重复元素,只使用尾随跳跃计数。
请参阅 COBOL 参考资料,以获取需要字节对齐的字段的详细信息。
- 导入的所有文件在语句构成上都必须正确。 如果所导入的文件语句构成不正确,结果将不可预测。
- 不支持包含 POINTER、COMP-X、INDEX 或 PROCEDURE-POINTER 关键字的 COBOL 数据类型。
- 包含关键字 NATIVE 的 COBOL 子句将导致错误,并且不会导入。
- COBOL 级别 66 和级别 77 数据项没有导入。
- 十六进制二进制值无法归结为非数字文字。 它们无法驻留在 COBOL 导入器导入的 LINKAGE SECTION 中。 它们能在 COBOL 文件的其他位置驻留。 或者,您可以将十六进制值转换为 PIC X 的字符串或 PIC 9 的十进制数。
- 如果元素名称与 Java™ 语言关键字冲突,那么将通过在元素名称前面添加单个下划线字符来修改元素名称。
- 不支持 COBOL 85 的面向对象的扩展。 例如,不支持 OBJECT-REFERENCE。
- COBOL OCCURS DEPENDING ON 子句。 此类结构中元素的字节对齐、前导跳跃计数和尾随跳跃计数 CWF 属性未正确设置。 您必须使用消息编辑器改正这些属性。
- 当导入的 COBOL 源文件在图片字符串的 value 子句中包 QUOTE 或 QUOTES 时,缺省行为是使用双引号输入数据,除非您在 COBOL 导入器向导的导入选项页上将 COBOL QUOTE 编译选项设置为 SINGLE。
带符号的外部十进制数
IBM® Integration Bus 的 MRM 定制连线格式 (CWF) 和 TDS 组件支持数字数据的 "外部十进制" (也称为 "分区十进制") 数据格式。 此格式中的数字数据在内部存储为十进制字符数据。 例如,在使用 EBCDIC 代码的系统中,存储在 4 位外部十进制区域的数字 1234 将存储为字符串“1234”,而它的实际内部十六进制表示是“F1F2F3F4”。
使用带符号的外部十进制数字,通过修改首位或末位的前半部分(取决于是使用符号在前还是符号在后的表示),符号能组成实际值。 通常“0xC”用来表示正数,“0xD”用来表示负数,而“0xF”用来表示无符号的数。
在 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 物理层中为十进制、浮点型和整型的局部属性和局部元素指定适用的表示。
下表显示分别具有包含的(嵌入式)前导或尾随符号的外部十进制数的首位或末位的内部表示(字符和实际十六进制值)。 (此表未指定 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}" |