サーバアプリケーションで例外情報に値を設定したにもかかわらず、クライアントアプリケーションで参照すると空になっている場合、以下の可能性があります。
■apfwExceptionの領域をサーバアプリケーション内で獲得している
例外情報の領域(C言語の場合にはapfwExcept構造体、COBOLの場合には集団項目APFW_EXCEPTION)は、アプリケーション連携実行基盤が領域を獲得してサーバアプリケーションに渡しています。そのためサーバアプリケーション内で、例外情報の領域を上書きして再獲得した場合、アプリケーション連携実行基盤が獲得した領域に例外情報が書き込まれていない可能性があります。
例外情報の領域をサーバアプリケーション内で獲得しないようにしてください。
■例外情報内のポインタの領域を獲得していない
例外情報内のエラーメッセージとエラーデータの領域を、サーバアプリケーション内で獲得していないため、スコープが外れた際に設定したデータが破棄されている可能性があります。
以下の対処を行ってください。
◆C言語サーバアプリケーションの場合
apfwExcept->errmessageにエラーメッセージを設定する場合には、malloc関数などで領域を獲得し、strncpy関数などで文字列を設定してください。
なお、設定する文字列はNULL終端になるように設定してください。
apfwExcept->errdata.valにエラーデータを設定する場合には、apfwExcept->errdata.arealenに獲得する領域の領域長を設定してください。
次に、malloc関数などでapfwExcept->errdata.arealenの大きさの領域を獲得し、memcpy関数などでデータを設定してください。
また、設定したデータ長をapfwExcept->errdata.vallenに設定してください。
注意
C言語アプリケーションを使用できるのは、同期アプリケーション連携実行基盤だけです。
◆COBOLサーバアプリケーションの場合
APFW_MESSAGE_ADDRにエラーメッセージを設定する場合には、獲得するエラーメッセージの領域長をAPFW_MESSAGE_LENに設定してください。
次に、APFW_SEQUENCE_OCTET_ALLOCBUFを使用して、APFW_MESSAGE_LENに設定した大きさの領域を獲得し、文字列を設定してください。
設定する文字列はNULL終端になる必要はありません。
APFW_ADDRにエラーデータを設定する場合には、獲得するエラーメッセージの領域長をAPFW_AREA_LENに設定してください。
次に、APFW_SEQUENCE_OCTET_ALLOCBUFを使用して、APFW_AREA_LENの大きさの領域を獲得し、データを設定してください。
また、設定したデータ長をAPFW_VAL_LENに設定してください。
■同期アプリケーション連携実行基盤でメモリ不足が発生した
例外の生成中にサーバ側でメモリ不足が発生した可能性があります。
サーバ側のログからもとのエラーを確認し、対処を行ってください。また、メモリの増設を検討してください。