В целом обработка исключений при работе в GWT через RPC довольно детально описана в разделе документации DevGuideHandlingExceptions
Важный момент на который следуют обратить внимание – throws для метода.
Например, вот Ваш интерфейс:
public interface MyService extends RemoteService {
public String myMethod(String s);
}
Допустим Вы сделали класс MyException который наследуется от RuntimeException. Например, это исключение вы создали для своих прикладных нужд и хотите чтобы оно могло быть перекинуто и обработано на клиенте.
Это конечно удобно, т.к. полученный тип исключений является Unchecked Exception. Таким образом его не нужно явно декларировать, оно может произойти где угодно (не надо прописывать везде throws) и такое исключение Вы не обязаны явно отлавливать.
Другими словами, мы же не пишем для каждого метода throws RuntimeException!
Тем не менее, если где-то у Вас в программе произойдет это исключение:
public class MyServiceImpl extends RemoteServiceServlet implements
MyService {
public String myMethod(String s) {
// Do something interesting with 's' here on the server.
if (isError() ) { throw new MyException("ups");
//
return s;
}
}
То это исключение в методе onFailure(Throwable caught) будет передано просто как InvocationException, а не как MyException!
Дело в том, что если заглянуть в реализацию метода обработки вызова RPC-вызовов:
RemoteServiceServlet. processCall() → RPC.invokeAndEncodeResponse() → RPC.encodeResponseForFailure() → RPCServletUtils.isExpectedException()
мы найдем использование следующей конструкции:
Class< ?>[] exceptionsThrown = serviceIntfMethod.getExceptionTypes();
Другими словами, если Вы хотите чтобы Ваше исключение попадало в onFailure(Throwable caught) как MyException, то нужно обязательно декларировать throws, даже если Ваше исключение extends RuntimeException!
В нашем примере это будет выглядеть так:
public interface MyService extends RemoteService {
public String myMethod(String s) throws MyException;
}
Вот такая вроде мелочь, но если ее не знать, могут возникнуть определенные неудобства.