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が(すぐに)リリースされてくれれば、それ使いたいのですが、、