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

*Curl ORB for Java version 0.6 がリリースされました。リリースノートはこちら

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できるようになります。このマッピングにはset-exceptions-mapプロシージャを利用します。

{import * from TEST}

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

{set-exceptions-map “test.SVException”, CLException}

|| 複数登録可能
{set-exceptions-map “test.SVException1”, CLException1}
{set-exceptions-map “test.SVException2”, CLException2}

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

{try

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

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

注意
 Curl ORB 0.5 アルファ版では、第2引数をStringで指定するようになっています。 

{import * from TEST}

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

{set-exceptions-map “test.SVException”, “TEST.CLException”}

{try

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

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