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);
答案 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
}
因此,对于未经检查的例外,你可能会更好。