使用ErraiCallback处理服务调用错误

时间:2013-05-15 19:34:41

标签: java gwt errai

Service实现中的要求是什么,以便ErrorCallback能够在UI上打印错误消息。

我尝试在服务调用代码中注入ErrorCallback,当我打印Message对象时,它为null。

如果将throws SomeException放在实现方法上,那么Service实现应该是什么样的?要么?

myService.call(new RemoteCallback<String>() {
    @Override
    public void callback(String response) {
        Multimap<String, String> state =  ArrayListMultimap.create();
        state.put("hash", response);
        submit.go(state);
    }
}, new ErrorCallback() {
    @Override
    public boolean error(Message message, Throwable throwable) {
        throwable.printStackTrace();
        Window.alert("Error: " + message);
        return false;
    }
}).createmy(my);

1 个答案:

答案 0 :(得分:0)

您的代码应该按照问题中的说明运行。远程服务引发的异常应通过throwable方法的ErrorCallback.error()参数传递给您。

如果要抛出已检查的异常,则只需要在远程接口上放置throws子句。未经检查的异常应该像您一样工作。实际上,在远程接口上声明已检查的异常是有缺点的:您必须使用无用的try / catch块来包围RPC调用,如下所示:

@Remote public interface MyService {
  Result dangerousOperation() throws MyCheckedException;
}

和调用代码:

try {
  myService.call(new RemoteCallback<Result>() {
    @Override
    public void callback(final Result result) {
      Window.alert("Yay, got a result: " + result);
    }
  },
  new BusErrorCallback() {
    @Override
    public boolean error(Message message, Throwable throwable) {
      Window.alert("Got an exception from the remote service: " + throwable);
      return false;
    }
  }).dangerousOperation();
}
catch (MyCheckedException e) {
  throw new AssertionError(); // can't happen: caller stub won't throw this
}

因此,对于未经检查的例外,你可能会更好。