エラー情報取得機能は,CBLXML-GET-ERRORサービスルーチンによってXMLアクセスルーチンの詳細なエラー情報を取得する機能です。
XMLアクセスルーチンのエラー情報を取得するには,XMLドキュメントを開くXMLアクセスルーチンの前にCBLXML-CREATE-XML-POINTERサービスルーチンを呼び出して作成した空のポインタを用いて,XMLポインタを入力するアクセスモード"E"を指定し,XMLドキュメントを開くXMLアクセスルーチンを呼び出さなければなりません。また,XMLドキュメントを閉じるXMLアクセスルーチンのあとにCBLXML-FREE-XML-POINTERサービスルーチンを呼び出してCBLXML-CREATE-XML-POINTERサービスルーチンで作成したXMLポインタを解放しなければなりません。これらを行い,各XMLアクセスルーチンの直後にCBLXML-GET-ERRORサービスルーチンで呼び出すことでエラー情報を取得できます。
次にXMLドキュメントを開くCBLXML-OP-Interfaceアクセスルーチンのエラー情報の取得例を示します。
:
01 CBLXML-RETURN-CODE PIC 9(9) COMP.
01 FILE-NAME PIC X(255).
01 XML-FILE-NAME USAGE POINTER VALUE NULL.
01 XML-FILE-NAME-LENGTH PIC 9(9) COMP VALUE 0.
01 XML-MODE PIC X(16).
01 XML-POINTER USAGE POINTER VALUE NULL.
01 MESSAGE-BUFFER PIC X(255).
01 MESSAGE-BUFFER-LENGTH PIC 9(9) COMP VALUE 255.
01 MESSAGE-LENGTH PIC 9(9) COMP VALUE 0.
:
PROCEDURE DIVISION.
START-MAIN.
:
CALL 'CBLXML-CREATE-XML-POINTER'
USING XML-POINTER.
IF RETURN-CODE NOT = 0 THEN
EXIT PROGRAM
END-IF.
*open
MOVE 'WE' TO XML-MODE.
MOVE 'output.xml' TO FILE-NAME.
MOVE 10 TO XML-FILE-NAME-LENGTH.
COMPUTE XML-FILE-NAME = FUNCTION ADDR(FILE-NAME).
CALL 'CBLXML-OP-EXAMPLE'
USING XML-FILE-NAME
XML-FILE-NAME-LENGTH
XML-MODE
XML-POINTER
RETURNING CBLXML-RETURN-CODE.
IF CBLXML-RETURN-CODE NOT = 0 THEN
CALL 'CBLXML-GET-ERROR'
USING XML-POINTER
MESSAGE-BUFFER
MESSAGE-BUFFER-LENGTH
MESSAGE-LENGTH
DISPLAY 'ERROR = ' MESSAGE-BUFFER
ELSE
*write
CALL 'CBLXML-WR-EXAMPLE-BE'
USING XML-POINTER root
RETURNING CBLXML-RETURN-CODE
*close
CALL 'CBLXML-CL-EXAMPLE'
USING XML-POINTER
RETURNING CBLXML-RETURN-CODE
END-IF.
CALL 'CBLXML-FREE-XML-POINTER'
USING XML-POINTER.
:
直前に実行したXMLアクセスルーチンの詳細なエラー情報を取得します。エラー情報の取得対象となるXMLアクセスルーチンを次に示します。
引数のデータ型 | 指定 | 説明 |
---|---|---|
01 XML-POINTER USAGE POINTER. | ○ | XMLドキュメントのポインタを受け取るポインタ項目を指定する。 |
01 MESSAGE-BUFFER PIC X(n). | ○ | エラー情報を受け取る領域を英数字項目で指定する。 |
01 MESSAGE-BUFFER-LENGTH PIC 9(9) COMP. | ○ | エラー情報を受け取る領域の長さを4バイトの2進項目で指定する。 |
01 MESSAGE-LENGTH PIC 9(9) COMP. | △ | 受け取ったエラー情報の長さが設定される。この項目は4バイトの2進項目で指定する。 |
戻り値 | 内容 |
---|---|
1 | エラー情報の長さがエラー情報を受け取る領域の長さを超えた。 |
0 | 正常終了した。 |
-1 | CBLXML-GET-ERRORサービスルーチンの引数の値が不正である。 |
-2 | 操作を続けるためのメモリが不足した。 |
CBL-GET-ERRORサービスルーチンによって得られるエラー情報を表 9-4に示します。また,エラー情報の***番号***は,表 9-5に示す埋め字情報に従って埋め字に置き換わります。
表9-4 エラー情報
ステータス | エラー情報 | 埋め字情報 |
---|---|---|
0 | (ステータス0はエラー情報を出力しない) | - |
1 | [1]△要素"***1***"を出力できない。 | *** 1 ***: DTD |
3 | [3]△"***1***"を出力できない。 | *** 1 ***: DTD |
4 | [4]△BaseElement要素に対応する要素を見つけられない。 | - |
5 | [5]△BaseElement要素"***1***"を飛ばして,次のBaseElement要素を入力できない。 | *** 1 ***: DTD |
6 | [6]△要素"***2***"の選択要素に対して,***1***個選択したために出力を決定できない。 | ***1***:選択要素で出力しようとした個数 ***2***:選択要素の直下にある要素名 |
7 | [7]△出力の+付き要素の繰り返し回数に0が設定されている。 | - |
8 | [8]△"***1***"に不当な文字がある。 | *** 1 ***: Document |
9 | [9]△出力時のファイルまたはバッファを開けない。 | - |
10 | [10]△"***1***"に入力した値がデータ項目の長さを超えた。 | *** 1 ***: Document |
11 | [11]△"***1***"に不当な文字が設定されている。 | *** 1 ***: DTD |
12 | [12]△XMLドキュメントを1回も更新していない。 | - |
13 | [13]△更新の対象を指定しないでXMLドキュメントを更新した。 | - |
15 | [15]△直前に同じBaseElement要素単位の入力を呼び出していない。 | - |
101 | [101]△メモリを確保できない。 | - |
103 | [103]△XMLドキュメントを開けない。 | - |
104 | [104]△XMLドキュメントを閉じることができない。 | - |
105※1 | [105]△アクセスモードに不当な値が設定された。 | - |
106 | [106]△ファイルに出力できない。 | - |
109 | [109]△再帰的に定義された要素は出力できない。 | - |
110 | [110]△XMLドキュメントの解析でエラーが発生した。;***1*** | *** 1 ***: XMLパーサのメッセージ |
111 | [111]△BaseElement要素に対応した要素が見つからない。 | - |
114 | [114]△引数に無効なパラメタが指定された。 | - |
115 | [115]△要素の出力中に指定したバッファ領域の長さに達した。 | - |
117 | [117]△出力でファイルI/Oエラーが発生した。 | - |
118 | [118]△ドキュメントを閉じることができない。 | - |
119 | [119]△一つのXMLポインタに対して複数のXMLドキュメントを開こうとした。 | - |
121 | [121]△内部エラーが発生した。 | - |
122※2 | [122]△-unisrcオプションの指定と環境変数CBLLANGの設定に矛盾がある。 | - |
123※3 | [123]△-unisrcオプションの指定と環境変数LANGの設定に矛盾がある。 | - |
124※4 | [124]△互換性がない古いXMLアクセスルーチンを使用している。 | - |
表9-5 埋め字情報
埋め字の種類 | 埋め字に出力する情報 |
---|---|
DTD | 埋め字に示される要素は「/」文字を区切り文字として,階層でルート要素から「ルート要素/要素/要素」を出力する。 属性は「@」文字を区切り文字として「要素@属性」で出力する。 |
Document | 埋め字に示される要素は「/」文字を区切り文字として,階層でルート要素から「ルート要素/要素/要素」を出力する。 要素が繰り返しである場合,繰り返し順序を示す"[番号]"を要素に付ける。DTDで"*"または"+"によって繰り返しがあることが指定されている要素でも,XMLドキュメント中に1回しか現れない要素については,繰り返し順序を示す"[番号]"は付け加えられない。番号は1から開始し,取得できる要素の繰り返しの番号は,2,147,483,647までである。それを超えた場合は,保証しない。属性は"@"文字を区切り文字として"要素@属性"で出力する。 |
XMLパーサのメッセージ | XMLパーサが返すメッセージを出力する。 |