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

GWT でグローバル例外ハンドラを登録する方法

java

Map に Date 型の値を詰めて、GWT RPC で引数としてサービスに渡したら、UmbrellaException が発生してしまいます。この UmbrellaException ってやつは複数の例外をまとめたものなので、格納されている値を見ないとエラーの詳細がわかりません。


GWT RPC 使っているコードを try-catch で囲んで UmbrellaException をキャッチしてやればいいんですが、何度も同じコードを書くのはナンセンスなので、グローバル例外ハンドラで処理することにしました。


GWT では、下記のようにしてグローバル例外ハンドラを設定できます。

GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler(){
    public void onUncaughtException(Throwable e) {
        if (e.getClass() == UmbrellaException.class) {
            for (Throwable t : ((UmbrellaException)e).getCauses()){
                GWT.log(t.toString());
            }
        } else {
            GWT.log(t.toString());
        }
    }            
});


これで、クライアント側で発生した例外の内容が見れるようになってめでたしめでたし、と思ったらエラーの詳細を見ても原因がわかりません…。どうも Map に詰めたはず Date オブジェクトがシリアライズされてないっぽいけど。


試しに、Date 型のフィールドをもつクラスのインスタンスに値を詰めて試したら上手くいきました。Date を直接引数で渡しても問題なし。Map に詰めたときだけエラーになってしまいます。GWT のバグ?