読者です 読者をやめる 読者になる 読者になる

S2RMI 1.0.2で、サーバ側で発生した例外が全てExceptionでラップされる。

[programming]
スポンサーリンク

RMIとしては、そのままの例外(Throwableは不可)を返せたと思うので、S2RMIでもサーバ側で発生した例外をそのまま返ってくるとうれしいです。

org.seasar.remoting.rmi.adaptor.RMIAdaptorImpl#invoke(String, String, Object[])で、ThrowableをcatchしてExceptionでラップしている(RMIでThrowableが投げられないでこうしていると思われる)ので、ここを変えればいけそうな気がします。

public Object invoke(String componetName, String methodName, Object[] args)
        throws RemoteException, Exception {
    try {
        return this.invoker.invoke(componetName, methodName, args);
    }
    catch (Throwable t) {
        throw new Exception(t);
    }
}

を、ExceptionとErrorはそのまま返すように、下記のように変更。

public Object invoke(String componetName, String methodName, Object[] args)
        throws RemoteException, Exception {
    try {
        return this.invoker.invoke(componetName, methodName, args);
    }
    catch (Exception e) {
        throw e;
    }
    catch (Error e) {
        throw e;
    }
    catch (Throwable t) {
        throw new Exception(t);
    }
}

なんか、もっといい書き方ありそうな気がしてなりませんが、これくらいしか思いつきません…
(Eclipse上でのビルドがうまく通せてないので、ちゃんと思った通りの結果になるか確認できてません)

                                                      • -

[追記@2006/11/30]
現在開発中のSVNリポジトリ上では、既に対処済みでした。(koichikさんに教えていただきました。ありがとうございます。)
対処済みのものをjarとして入手したい場合、、1.0.2から結構変わっている(フィルタ系のクラスが追加されている)ようなので、1.0.2を元に変更した方がよいか、SVNから最新を持ってくるべきか迷うところです。
1.1.0が(すぐに)リリースされてくれれば、それ使いたいのですが、、