客户端的GWT异常更改

时间:2012-10-15 13:33:07

标签: exception gwt serialization

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

1 个答案:

答案 0 :(得分:0)

Exception说,你的rpc-dto的一个元素无法序列化。

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

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