我发现张贴巴兹链路解决方案:https://groups.google.com/forum/#!topic/google-web-toolkit/D2MPaD2EpOQ
而不是抛出这样的异常(这是不可能的,因为签名只允许SerializationException
:
@Override
public String processCall(String payload) throws SerializationException {
if(!userIsAuthorized()){
throw new MyAuthorizationException();
}
return super.processCall(payload);
}
的异常必须被返回编码在这样的响应中:
@Override
public String processCall(String payload) throws SerializationException {
if(!userIsAuthorized()){
return RPC.encodeResponseForFailure(null, new MyAuthorizationException());
}
return super.processCall(payload);
}
这将在每次调用RPC调用时被调用并且如果用户未被授权并且检查的异常将被传送到可以相应处理的前端,则该方法将不被执行。
编辑 @Baz:这就是我的客户端处理方式。但是我认为如果你得到一个IncompatibleRemoteServiceException,你有一个问题就是一些旧的东西被缓存在浏览器中,你需要清理缓存。
@Override
public void onFailure(Throwable caught) {
try {
throw caught;
}
catch (SessionExpiredException ex){
onSessionExpired();
}catch(Throwable e){
MyCallback.this.onFailure(e);
}
}
来源
2014-10-01 22:31:20
jan
你可以做一些像[this](http://www.objectpartners.com/2013/04/04/improving-the-gwt-async-callback/)。 – Baz 2014-10-01 09:23:09
@巴兹我有这样的事情。但这并不能帮助我,因为这只是在客户端。如果我在后端抛出未经检查的异常,我只是在客户端收到一个通用错误,无法确定哪里出错。 – jan 2014-10-01 09:33:10
我似乎不明白。为什么只能从服务器中引发一个未经检查的异常? – Baz 2014-10-01 10:07:44