API アプリケーションで生じる問題を処理するには、 例外処理を使用します。
API は問題を検出すると、例外をスロー (throw) します。例外がスローされると、 DKException クラスまたはそのサブクラスの例外オブジェクトが 1 つ作成されます。
DKException が作成されると、コネクター層は、デフォルトのロギング構成が使用されていると想定し、診断情報をログ・ファイルに記録します。
DKException をキャッチ (catch) すると、エラー・メッセージ、エラー・コード、 および実行中に発生したエラー状態を表示することができます。 エラーが見つかると、 エラー・メッセージが例外がスローされたロケーションについての情報と共に発行されます。 エラー ID などの追加情報も示されます。
以下のコード例は、IBM® Content Manager のスローとキャッチのプロセスを示しています。
try{
... EIP API Operations ...
}
catch (DKException exc){
// NOTE: Print Function Provided in SConnectDisconnectICM API Sample.
System.out.println("");
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
System.out.println("X !!! Exception !!! X");
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
System.out.println(" Name: " + exc.name());
System.out.println(" Message: " + exc.getMessage());
System.out.println(" Message ID: " + exc.getErrorId());
System.out.println("Error State: " + exc.errorState());
System.out.println(" Error Code: " + exc.errorCode());
exc.printStackTrace();
System.out.println("----------------------------------");
} catch (Exception exc) {
// NOTE: Print Function Provided in SConnectDisconnectICM API Sample.
System.out.println("");
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
System.out.println("X !!! Exception !!! X");
System.out.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
System.out.println(" Name: " + exc.getClass().getName());
System.out.println(" Message: " + exc.getMessage());
exc.printStackTrace();
System.out.println("----------------------------------");
}
try{
... EIP API Operations ...
}
catch (DKException &exc){
// NOTE: Print Function Provided in SConnectDisconnectICM API Sample.
cout << endl;
cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl;
cout << "X !!! Exception !!! X" << endl;
cout << "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" << endl;
cout << " Name: " << exc.name() << endl;
cout << " Message ID: " << exc.errorId() << endl;
cout << "Error State: " << exc.errorState() << endl;
cout << " Error Code: " << exc.errorCode() << endl;
// Print API Location(s) Detecting Error
for(unsigned int j=0; j < exc.locationCount(); j++){ //Print all locations
const DKExceptionLocation* p = exc.locationAtIndex(j);
cout << " Location " << j << ": " << p->fileName() << "::"
<< p->functionName() << '[' << p->lineNumber() << ']' << endl;
}
if(exc.textCount()<=0) // Write statement if no locations.
cout << " Locations: <none> " << endl;
// Error Message(s)
for(unsigned int i=0; i < exc.textCount(); i++) // Print All Messages
cout << " Message " << i << ": " << exc.text(i) << endl;
if(exc.textCount()<=0) // Notify user if no messages.
cout << " Messages: <none> " << endl;
cout << "----------------------------------------" << endl;
}
エラーの検出および処理について詳しくは、SConnectDisconnectICM API 実習サンプルを参照してください。
