我想将在服务器端引发的异常发送到客户端。ATM 它部分工作。
当我的方法DatabaseServerConnectionImpl
失败时,我保存异常,然后客户端检测(onFailure)该方法失败并返回先前保存的异常并进一步回调。
此异常现在包含一条消息和一个堆栈跟踪。该消息是正确的,但堆栈跟踪是错误的。我在返回命令之前检查了服务器端的堆栈跟踪,它是正确的。例如(在服务器端):
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
当我创建异常时,我只是设置了消息和堆栈跟踪。而且 afaik 异常是默认序列化的。服务器端的另一种方法正在运行,没有任何问题。编辑:添加一些源代码:来自 DatabaseServerConnectionImpl 的示例方法 lastexception 是一个成员值!...
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;
}
我也用 try and catch 块尝试了上面的方法,但没有捕获到异常。