【发布时间】:2012-10-15 13:33:07
【问题描述】:
我想将在服务器端抛出的异常发送到客户端。 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();
}
当异步回调在客户端失败时,我在服务器端调用以下方法:
@覆盖 public final SerializableException getLatestException() {
return lastException;
}
我也用 try and catch 块尝试了上面的方法,但没有捕获到异常。
【问题讨论】:
-
你能发布一些非常短的示例代码吗?
标签: exception gwt serialization