COBOL 項目と Java 型のマッピング

ネイティブ COBOL プログラムは、Java プログラムとの間で引数を渡したり、値を受け取ったりできます。この相互運用における COBOL 型と Java 型の有効なマッピングは次のとおりです。
COBOL Java
基本 COBOL 型
PIC X byte
PIC X(n) DISPLAY

PIC N(n) NATIONAL

PIC U(n) UTF-8

String
PIC S9(n) COMP-5、1 ≤ n ≤ 4 short
PIC S9(n) COMP-5、5 ≤ n ≤ 9 int
PIC S9(n) COMP-5、10 ≤ n ≤ 18 long
COMP-1 float
COMP-2 double
usage COMP-3/PACKED-DECIMAL numeric java.math.BigDecimal
usage DISPLAY numeric (zoned) java.math.BigDecimal
01 flag pic x. 88 f-false value x'00'. 88 f-true value x'01'.
boolean
配列 COBOL 型
01 byte-list. 03 byte-1 pic x occurs n times.
byte[n]
01 short-list. 03 short-1 pic s9(n) comp-5 occurs x times.
1 ≤ n ≤ 4
short[x]
01 int-list. 03 int-1 pic s9(n) comp-5 occurs x times.
5 ≤ n ≤ 9
int[x]
01 long-list. 03 long-1 pic s9(n) comp-5 occurs x times.
10 ≤ n ≤ 18
long[x]
01 float-list. 03 float-1 pic comp-1 occurs n times.
float[n]
01 double-list. 03 dub-1 pic comp-2 occurs n times.
double[n]
01 bool-list. 03 bool-1 pic x occurs n times. 88 f-false value x'00'.88 f-true value x'01'.
boolean[n]
01 dec-list. 03 num-1 pic s9(n)[v9(n))] display/comp-3 occurs x times.
BigDecimal[x]
01 alpha-list. 03 str-1 pic x(n) occurs x times.
n ≥ 1
String[x]
01 nat-list. 03 nat-1 pic n(n) occurs x times.
String[x]
01 utf8-list. 03 utf-1 pic u(n) occurs x times.
String[x]
英数字グループ COBOL 型
Java 互換配列型に準拠しない英数字グループ項目は、Java バイト配列 (byte[]) にマップされます。下記の注意事項を参照してください。 byte[]
Notes on alphanumeric groups: COBOL 英数字グループ項目は、上記の表に示す Java 互換配列型にマップできない場合でも、静的 Java メソッドの引数として渡したり、Java から呼び出すことができる COBOL プログラムのパラメーターとして渡したりできます。

このような項目を含むグループが静的 Java メソッドの呼び出しで使用される引数である場合、Java メソッドでは Java バイト配列オブジェクト (byte[]) を受け取ったものとして処理する必要があります。バイト配列からデータを抽出するために、対応する COBOL グループと同じバイト レイアウトに準拠するように ByteBuffer でラップします。

グループが Java によって呼び出される COBOL プログラムのパラメーターである場合も、データはバイト配列オブジェクト (byte[]) として処理されます。呼び出し元の Java メソッドで、受け取る COBOL グループ項目のバイト レイアウトに合わせる必要があります。

このプロセスにより、有効なマッピングが存在しない複雑なグループ項目が関係する場合の COBOL プログラムと Java プログラムの間の相互運用性が向上します。

さらに、CHARSET(EBCDIC) で Java に渡されるか Java から返される英数字グループについて、PIC X データ項目のみを含むものと想定されます。

マッピングに関するその他の注意事項

  • Java メソッドが文字列を返す場合、その文字列は PIC X、PIC N、または PIC U 項目のピクチャ句のサイズに切り詰められます。
  • *PIC U byte-length n 項目の場合は、収まる UTF-8 文字の最大数です。IBM では n/4 文字に切り詰められます。
  • BigDecimal オブジェクトが返される場合、DISPLAY または COMP-3 項目の整数の桁数を超えると、ランタイム システム エラーが生成されます。
  • 配列オブジェクトが返される場合、その要素が COBOL 項目内の OCCURS の数を超えると、ランタイム システム エラーが生成されます。
  • Java の不変クラス (BigDecimal や String など) にマップされる COBOL 項目が BY REFERENCE で渡されると、コンパイラは警告を生成します。これらの項目は Java では変更できないためです。