プロパティ項目に、サポートされていない項目または誤った項目を設定した場合、呼び出したインタフェースが異常終了し、以下の詳細情報が設定されます。
| プロパティ項目 | 詳細情報 | 補足情報の設定個所 |
---|---|---|---|
動的生成チャネル | QoS | ユーザ例外 UnsupportedQoS | qos_err |
Admin | ユーザ例外 UnsupportedAdmin | admin_err | |
静的生成チャネル | QoS | ユーザ例外 UnsupportedQoS | qos_err |
メッセージ | QoS | システム例外 BAD_QOS | - |
イベントチャネルに対し、プロパティ項目の設定時にエラーとなった場合、QoSプロパティ項目の場合は、UnsupportedQoS例外のqos_errメンバに、Adminプロパティ項目の場合、UnsupportedAdmin例外のadmin_errメンバに、それぞれ補足情報が設定されます。アプリケーションでは、詳細情報および補足情報を解析することにより、誤ったProperties情報の設定内容を判断できます。
UnsupportedQoS例外のqos_errメンバ、およびUnsupportedAdmin例外のadmin_errメンバは、PropertyErrorSeq型です。PropertyErrorSeq型は、PropertyError構造体からなるシーケンス型です。
PropertyError構造体は、codeおよびnameで以下のように形成されています。
イベントチャネルに対し、プロパティ項目の設定時にエラーとなった場合、以下が設定されます。
エラーになったプロパティ項目名
詳細コード
設定される詳細コードおよびエラーの意味を以下に示します。たとえば、存在しないQoSプロパティ項目を設定した場合、codeにはBAD_PROPERTYが設定されます。
詳細コード | エラーの意味 |
---|---|
UNAVAILABLE_VALUE | 指定されたプロパティ項目のうち、設定範囲外の値が設定されていた項目があります。これらの項目は設定されませんでした。 |
BAD_PROPERTY | 不正なプロパティ項目名が指定されました。 |
BAD_TYPE | プロパティ項目の値のデータ型に誤りがあります。 |
BAD_VALUE | 不正な値が設定されました(create_channelメソッド発行時のみ)。 |
静的生成イベントチャネルに対してQoSプロパティ項目の設定時にエラーとなった場合の例外処理方法、および処理の流れを以下に示します。
[プロパティ項目設定時の例外処理の例(C言語の場合)]
... CosNotifyChannelAdmin_EventChannel_set_qos( channel, pQoS, &env ); /* 1 */ ... if(env._major == CORBA_USER_EXCEPTION) { printf("UnsupportedQoS occured.\n"); ErrCodeCheck(&env ); ... } ... void ErrCodeCheck(CORBA_Environment *env ) { /* ---- error qos length --------------------------------- */ int length, i; char errcode[30]; CosNotification_PropertyErrorSeq *qos_err; qos_err = (CosNotification_PropertyErrorSeq *) /* 2 */ CORBA_exception_value( env ); length = qos_err->_length; printf( "PropertyErrorSeq length=[%d]\n", length ); /* 3 */ for( i = 0 ; i < length ; i++ ){ /* ---- error qos name -------------------------------- */ printf("err name = [%s]\n",(char*) qos_err->_buffer[i].name ); /* 4 */ /* ---- error_code ------------------------------------ */ switch(qos_err->_buffer[i].code ){ /* 5 */ case CosNotification_UNSUPPORTED_VALUE: strcpy( errcode, "UNSUPPORTED_VALUE" ); break; case CosNotification_BAD_PROPERTY: strcpy( errcode, "BAD_PROPERTY" ); break; case CosNotification_BAD_TYPE: strcpy( errcode, "BAD_TYPE" ); break; default : strcpy( errcode, "error" ); } printf( "err_code = [%s]\n", errcode ); } return; }
イベントチャネルに対して、QoSプロパティ項目を設定します。
ユーザ例外UnsupportedQoSを受け取ります。
設定されず、エラーとなったQoSプロパティ項目数を表示します。
設定されず、エラーとなったQoSプロパティ項目名を表示します。
詳細コードをチェックします。
[プロパティ項目設定時の例外処理の例(C++言語の場合)]
try{ ... channel->set_qos( *pQoS, env ); /* 1 */ ... } catch( CosNotification::UnsupportedQoS &ue ) { /* 2 */ printf("UnsupportedQoS occured.\n"); ErrCodeCheck( ue ); ... } ... void ErrCodeCheck( CosNotification::UnsupportedQoS ue ) { /* ---- error qos length --------------------------------- */ int length; char errcode[30]; length = ue.qos_err().length(); printf("PropertyErrorSeq length=[%d]\n", length ); /* 3 */ for( int i = 0 ; i < length ; i++ ){ /* ---- error qos name -------------------------------- */ printf("err name = [%s]\n",(char*)ue.qos_err()[i]->name ); /* 4 */ /* ---- error_code ------------------------------------ */ switch( ue.qos_err()[i]->code ){ /* 5 */ case CosNotification::UNAVAILABLE_VALUE: strcpy( errcode, "UNAVAILABLE_VALUE" ); break; case CosNotification::BAD_PROPERTY: strcpy( errcode, "BAD_PROPERTY" ); break; case CosNotification::BAD_TYPE: strcpy( errcode, "BAD_TYPE" ); break; default : strcpy( errcode, "error" ); } printf( "err_code = [%s]\n", errcode ); } return; }
イベントチャネルに対して、QoSプロパティ項目を設定します。
ユーザ例外UnsupportedQoSを受け取ります。
設定されず、エラーとなったQoSプロパティ項目数を表示します。
設定されず、エラーとなったQoSプロパティ項目名を表示します。
詳細コードをチェックします。
[プロパティ項目設定時の例外処理の例(Java言語の場合)]
try{ ... channel.set_qos(QoS); /* 1 */ ... } catch(org.omg.CosNotification.UnsupportedQoS e) { /* 2 */ System.out.println("UnsupportedQoS occured."); errCodeCheck(e); ... } ... void errCodeCheck(org.omg.CosNotification.UnsupportedQoS e) { /* ---- error qos length --------------------------------- */ String errcode = null; int length = e.qos_err.length; System.out.println("PropertyErrorSeq length=[" + length + "]"); /* 3 */ for( int i = 0 ; i < length ; i++ ){ /* ---- error qos name -------------------------------- */ System.out.println("err name = [" + e.qos_err[i].name" + "]"); /* 4 */ /* ---- error_code ------------------------------------ */ switch(e.qos_err[i].value){ /* 5 */ case org.omg.CosNotification.QosError_code._UNAVAILABLE_VALUE: errcode = "UNAVAILABLE_VALUE"; break; case org.omg.CosNotification.QosError_code._BAD_PROPERTY: errcode = "BAD_PROPERTY"; break; case org.omg.CosNotification._BAD_TYPE: errcode = "BAD_TYPE"; break; default : errcode = "error"; } System.out.println("err_code = [" + errcode + "]"); } return; }
イベントチャネルに対して、QoSプロパティ項目を設定します。
ユーザ例外UnsupportedQoSを受け取ります。
設定されず、エラーとなったQoSプロパティ項目数を表示します。
設定されず、エラーとなったQoSプロパティ項目名を表示します。
詳細コードをチェックします。
[プロパティ項目設定時の例外処理の例(COBOLの場合)]
WORKING-STORAGE SECTION. DATA DIVISION. 01 EXCEP USAGE POINTER. 01 TMP-SEQ-POINTER USAGE IS POINTER. 01 TMP-POINTER USAGE IS POINTER. 01 WORK-COUNT PIC 9(09) COMP-5. 01 TMP-STRING-BUF PIC X(64). 01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY STRING-LENGTH. LINKAGE SECTION. 01 COPY PROPERTYERRORSEQ IN COSEVENTCOMM REPLACING PROPERTYERRORSEQ BY PROPERTYERROR-SEQ. 01 COPY PROPERTYERROR IN COSEVENTCOMM REPLACING PROPERTYERROR BY PROPERTY-ERROR. PROCEDURE DIVISION. ... CALL "COSNOTIFICATION-QOSADMIN-SET-QOS" USING EVENT-CHNL QOS-PROPERTY ENV. /* 1 */ PERFORM SET-QOS-ENV-CHECK. ... SET-QOS-ENV-CHECK SECTION. EVALUATE TRUE WHEN CORBA-NO-EXCEPTION OF MAJOR OF ENV ... WHEN CORBA-USER-EXCEPTION OF MAJOR OF ENV DISPLAY "UnsupportedQoS occured." CALL "CORBA-EXCEPTION-VALUE" USING ENV EXCEP /* 2 */ SET ADDRESS OF PROPERTYERROR-SEQ TO EXCEP MOVE FUNCTION ADDR( PROPERTYERROR-SEQ ) TO TMP-SEQ-POINTER DISPLAY "PropertyErrorSeq length=" SEQ-LENGTH OF PROPERTYERROR-SEQ /* 3 */ PERFORM VARYING WORK-COUNT FROM 1 BY 1 UNTIL WORK-COUNT > SEQ-LENGTH OF PROPERTYERROR-SEQ CALL "CORBA-SEQUENCE-ELEMENT-GET" USING TMP-SEQ-POINTER WORK-COUNT TMP-POINTER SET ADDRESS OF PROPERTY-ERROR TO TMP-POINTER MOVE FUNCTION LENG( TMP-STRING-BUF ) TO STRING-LENGTH CALL "CORBA-STRING-GET" USING NAME OF PROPERTY-ERROR STRING-LENGTH TMP-STRING-BUF DISPLAY "err name = " TMP-STRING-BUF /* 4 */ EVALUATE TRUE /* 5 */ WHEN COSNOTIFICATION-UNAVAILABLE-VA OF IDL-CODE OF PROPERTY-ERROR DISPLAY "err_code = UNAVAILABLE-VALUE" WHEN COSNOTIFICATION-BAD-PROPERTY OF IDL-CODE OF PROPERTY-ERROR DISPLAY "err_code = BAD-PROPERTY" WHEN COSNOTIFICATION-BAD-TYPE OF IDL-CODE OF PROPERTY-ERROR DISPLAY "err_code = BAD-TYPE" WHEN OTHER DISPLAY "err_code = error" END-EVALUATE END-PERFORM EXIT PROGRAM WHEN CORBA-SYSTEM-EXCEPTION OF MAJOR OF ENV ... END-EVALUATE. SET-QOS-ENV-CHECK-END.
イベントチャネルに対して、QoSプロパティ項目を設定します。
ユーザ例外UnsupportedQoSを受け取ります。
設定されず、エラーとなったQoSプロパティ項目数を表示します。
設定されず、エラーとなったQoSプロパティ項目名を表示します。
詳細コードをチェックします。