サーバー側でスローされた例外をクライアント側に送信したい。ATMは部分的に動作します。
私のメソッドDatabaseServerConnectionImpl
が失敗すると、例外を保存します。その後、クライアントはメソッドが失敗したことを検出し(onFailure)、以前に保存した例外をさらにコールバックして返します。
この例外には、メッセージとスタックトレースが含まれるようになりました。メッセージは正しいですが、スタックトレースが間違っています。returnコマンドの前にサーバー側のスタックトレースを確認しましたが、それは正しいものでした。例(サーバー側):
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2077)
クライアント側では、例外は後で次のようになります。
com.google.gwt.user.client.rpc.core.java.lang.Exception_FieldSerializer.instantiate(Exception_FieldSerializer.java:16) and it has a different length
例外を作成するときは、メッセージとスタックトレースを設定するだけです。そして、例外はデフォルトでシリアル化されています。サーバー側のもう1つの方法は、問題なく機能しています。編集:いくつかのソースコードを追加します:DatabaseServerConnectionImplからのサンプルメソッド最後の例外はメンバー値です!..。
try {
database.doStuff(obj);
} catch (SQLException e) {
Logger.getInstance().log(e); // Logs the Errors
lastException = new Exception(e.getMessage());
StackTraceElement[] tmp = new StackTraceElement[e.getStackTrace().length];
for (int i = 0; i < tmp.length; i++) {
tmp[i] = e.getStackTrace()[i];
}
lastException.setStackTrace(tmp);
throw new IllegalArgumentException();
}
クライアント側で非同期コールバックが失敗した場合、サーバー側で次のメソッドを呼び出します。
@Override public final SerializableException getLatestException(){
return lastException;
}
上記の方法もtryandcatchブロックで試しましたが、例外はキャッチされませんでした。