プロパティ項目に、サポートされていない項目または誤った項目を設定した場合、呼び出したインタフェースが異常終了し、以下の詳細情報が設定されます。
| プロパティ項目 | 詳細情報 | 補足情報の設定個所 |
|---|---|---|---|
動的生成チャネル | 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プロパティ項目名を表示します。
詳細コードをチェックします。