WSDL および JSON での可変長配列の処理 - ネイティブ COBOL

WSDL ファイルまたは JSON スキーマ ファイル、または OpenAPI (Swagger) ファイルに可変サイズの (一般的には無制限の) 配列が含まれている場合、特にそのような配列が入れ子になっていると、生成されるサービスまたはクライアントのインターフェイス構造のサイズが大きくなることがあり、コンパイラの制限を超えることもあります。解決方法は、このような可変サイズの配列を実行時に動的に割り当てるように配列処理を構成することです。動的割り当てを行うように可変長配列が指定されている場合、生成されるメインまたは外側のインターフェイス構造に可変長配列は含まれません。代わりに、COBOL ポインターを使用して、配列があるメモリ内の個別の領域が示されます。配列のサイズは、COBOL ポインターの直前にある数値フィールドによって示されます。[Generate Web Service] ダイアログ ボックスの [Inline-Array-Size-Limit] フィールドでは、可変長配列を動的割り当てで個別の構造として生成する最小サイズとして、0 (ゼロ) から 32767 の数値を指定できます。たとえば、[Inline-Array-Size-Limit] のデフォルト値 0 (どの配列も動的に割り当てないことを意味する) を使用している場合に、生成されたサービスまたはクライアント プログラムとコピーブックが、実用的でないほど大きいときや、コンパイルできないときは、[Inline-Array-Size-Limit] を 1 または 2 に設定して生成を行ってみてください。詳細については、「[Generate Web Service] ダイアログ ボックス」を参照してください。

注: imtkmake コマンドの inlineoccurslimit パラメーターは、[Generate Web Service] ダイアログ ボックスの [Inline-Array-Size-Limit] フィールドに相当するコマンド ライン オプションです。詳細については、「imtkmake コマンド」のトピックを参照してください。

Variable array
WSDL
<element name="in_0_5" minOccurs="1" maxOccurs="5">
   <simpleType>
      <restriction base="string">
         <length value="8"/>
      </restriction>
   </simpleType>
</element>
JSON Schema or OpenAPI (Swagger)
{
   "in_0_5":
   {
      "type": "array",
      "maxItems": 5,
      "minItems": 1,
      "items":
      {
         "type": "string",
         "maxLength": 8
      }
   }
}
生成されるデータ構造
Default generation:
All array structures are generated into the main structure.
05 in-0-5-occurs   pic 9(9) comp-5.
05 in-0-5          pic x(8) occurs 1 to 5
                   count in in-0-5-occurs
                   of op1
                   of op1-input-parms.
Dynamic allocation generation:
Structures for the array size and a pointer to the array in memory are generated into the main structure:
05 in-0-5-occurs   pic 9(9) comp-5.
05 in-0-5-cont0001 pointer.

The array is generated into a separate group structure:

01 cont0001-in-0-5.
  03 in-0-5        pic x(8) occurs 0 to 1
                   count in in-0-5-occurs
                   of op1
                   of op1-input-parms.