Create  Edit  Diff  FrontPage  Index  Search  Changes  Login

The Backyard - ExceptionInRjb Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

!動機
Rubyの例外構文でJavaの例外を処理したい

!サンプル

integer = Rjb::import('java.lang.Integer')
begin
   n = integer.parseInt('Not Numerical Expression')
rescue NumberFormatException => e
   n = -1
end

!実装方法

rjb内でJavaの例外を検出した場合、例外クラスの名前(ただしパッケージ名は削除する)を利用して、StandardErrorクラスを継承したクラスを作成する。

次に、そのクラスを指定してrb_raiseを実行する。

!バージョン

rjb-0.1.2以降でサポート

!!制限事項とTODO

*異なるパッケージで同一名称の例外クラスがあれば後書きする。
*0.1.2ではJavaの例外クラス固有のメソッド/フィールドの実装までは行わない(例:SQLExceptionのSQLException#getErrorCode)。実装は予定している。
*JVM内のスタックトレースは保持していない。JVM内のスタックトレースを参照したい場合には$verboseをtrueにする(あるいはrubyの引数として-vを与える)。