Java Data Type Conversion Rules

Restriction: This applies to native code only.

When you send COBOL data to Java, it is converted to an appropriate Java data type. Similarly, when a Java program sends Java data back to COBOL, it is converted to a COBOL data type. The table below defines the conversions which happen when data is passed between Java and COBOL. Some data types are handled differently depending on whether you are using procedural COBOL or the native OO COBOL Java domain. The COBOL column in the table shows you the conversion rules for procedural COBOL, and the native OO COBOL column shows you the rules for the native OO COBOL Java domain.

Java Data Type COBOL Data Type Used with .cobcall(...) Native OO COBOL Data Type Used with .cobinvoke() Description
byte pic s99 comp-5 pic s99 comp-5

pic s99 comp

Signed 1-byte integer
short pic s9(4) comp-5 pic s9(4) comp-5

pic s9(4) comp

Signed 2-byte integer
int pic s9(9) comp-5 pic s9(9) comp-5

pic s9(9) comp

Signed 4-byte integer
long pic s9(18) comp-5 pic s9(18) comp-5

pic s9(18) comp1

Signed 8-byte integer
boolean pic 99 comp-5 pic 99 comp-5 Zero value is false, non-zero is true
char (Unicode) pic 9(4) comp-5 pic s9(4) comp All characters in Java are represented by 2-byte Unicode characters
float comp-11 comp-1 1 Floating-point number
double comp-2 1 comp-2 1 Double-precision floating-point number
String mf-jstring2

pointer3

pic x(n) The capacity is always zero. You should consider a string passed into a COBOL program as read-only, and not to be amended.
StringBuffer4 mf-jstring 2

pointer 3

pic x(n) The capacity is the total size of the buffer, and the size the length of the string currently held in the buffer.
objects pointer object reference Any Java object. The pointer returned to procedural COBOL can be used with JNI calls (see the section Using JNI with COBOL in the chapter Calling Procedural COBOL from Java).
object[] pointer object reference to instance of class jarray An array of Java objects. The pointer returned to procedural COBOL can be used with JNI calls (see the section Using JNI with COBOL in the chapter Calling Procedural COBOL from Java). jarray is a native OO COBOL class for accessing the contents of Java arrays, and is described in the section Using the Jarray Class.
DataType structure structure Complex data structure
Comp3 comp-3 comp-3 COMP(UTATIONAL)-3 or Packed-Decimal
Pointer(StringBuffer)

Pointer(String, int capacity)

pic x(99) pic x(99) Wraps a String, StringBuffer so it can safely be passed to COBOL with the right size allocated for the receiving COBOL to modify the Java object.

StringBuffer capacity is used as the largest possible length that COBOL can edit.

java.sql.Date(long)

CobolDate(date)

0x jyear pic 9(4).

0x filler pic x.

0x jmonth pic 99.

0x filler pic x.

0x jday pic 99.

same as for cobcall Standard SQL Date type as used by JDBC
java.sql.time(long)

CobolTime(time)

0x jhour pic 99.

0x filler pic x.

0x jminute pic 99.

0x filler pic x.

0x jseconds pic 99.

same as for cobcall Standard SQL Time type as used by JDBC

CobolBigDecimal(java.math.BigDecimal)

pic s9(19)v9(19) comp-3 same as for cobcall The CobolBigDecimal wrapper class enables COBOL to update the value of a BigDecimal. The constructor for CobolBigDecimal() takes an initial value and the updated value can be obtained by using the .getValue() method.

CobolBigInteger(java.math.BigInteger)

pic S9(38) comp-3 same as for cobcall The CobolBigInteger wrapper class enables COBOL to update the value of a BigInteger. The constructor for CobolBigInteger() takes an initial value and the updated value can be obtained by using the .getValue() method.
CustomRecord Structure Structure Complex data structure represented in Java as an array of objects.
CobolN ational pic x(n) usage is national. same as for cobcall This java class enables you to create UTF-16 strings that you can pass to COBOL.

1 The parameter can be passed only by reference. For floating point data types this restriction applies to UNIX platforms only. For long data types on 32-bit platforms the parameter can be passed by reference only, and on 64-bit platforms by reference or by value only.

2 Use mf-jstring for .cobcall(...). mf-jstring requires the receiving COBOL program to use ptr2string pointer to access the Java String or StringBuffer. Using mf-jstring gives you access to the size and capacity of the Java object.

3 Use pointer for .cobcall(...).

4 StringBuffer objects can be received by native OO COBOL methods as pic x(n) data items but pic x(n) cannot be used to pass data to a Java method with a StringBuffer parameter.

The conversion of COBOL data types that are not listed in the COBOL or native OO COBOL columns of the above table is not supported. If you need to use a COBOL data item of a type not listed above, use an intermediate data item of a supported type and move your data to and from the intermediate data item as necessary.