0

我想将在服务器端引发的异常发送到客户端。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 块尝试了上面的方法,但没有捕获到异常。

4

1 回答 1

0

异常说,您的 rpc-dto 的一个元素无法序列化。

这可能是捕获的异常。异常有无参数构造函数吗?如果不是,则无法序列化。

我认为将完整的 stcktrace 发送给客户端并不是一个好主意。一个简单的错误代码对您的用例来说还不够吗?

于 2012-10-15T17:19:39.783 回答