Exceptionハンドリングとバインディング

Curl ORBは、サーバサイドで発生したExceptionを、クライアントサイドでcatchすることができます。また、サーバサイドで定義したExceptionをクライアントの任意のExceptionにバインディングすることができます。

Exceptionハンドリング

通常サーバサイドにてExceptionが発生した場合、クライアントサイドではCOM.CURLAP.ORB.SERVLET.ORBServerExceptionというExceptionとしてcatchすることができます。サーバサイドにて発生したExceptionクラス名を取得するには、このORBServerExceptionのexception-content.exception-nameで取得できます。また、メッセージはexception-content.messageで取得できます。

{try

    || ここにORBを使ったサーバサイド連携のコード

 catch e:ORBServerException do
    || サーバサイドのException名
    {output “exception name” & e.exception-content.exception-name}
    || パッケージ名が大文字での出力(Curlのコーディングスタイル)
    {output “exception name for curl” & e.exception-content.exception-name-as-curl-style
    || メッセージ
    {output “message” & e.exception-content.message}
    || javaのprintStackTrace()のようなもの
    {e.print-stack-trace}
}

また、サーバ通信に関係ない場合に発生するExceptionはORBClientExceptionとなります。

Exceptionバインディング

サーバサイドにて発生したExceptionに対して、クライアントサイドのExceptionにマッピングすることができます。例えば、サーバサイドのtest.SVExceptionをTEST.CLExceptionにマッピングすることができます。マッピングしますとクライアントサイドでは、TEST.CLExceptionをcatchできるようになります。このマッピングにはbind-exceptionプロシージャを利用します。

{import * from TEST}

|| arg1:java exception (String)
|| arg2:Curl exception (ClassType)

{bind-exception “test.SVException”, CLException}

|| 複数登録可能
{bind-exception “test.SVException1”, CLException1}
{bind-exception “test.SVException2”, CLException2}

|| 同一のCLExceptionにまとめることも可能
{bind-exception “test.SVExceptionXX”, CLException}

{try

   || サーバサイドでtest.SVExceptionが発生する可能性のあるコード

 catch e:CLException do
    {dump e.message}
}