0

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

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

Service 实现应该是什么样子,我应该把throws SomeException实现方法放在哪里?或者?

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);
4

1 回答 1

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
}

因此,使用未经检查的异常可能会更好。

于 2013-05-15T20:02:08.813 回答