Все сервисы GWT являются сервлетами, поэтому GWT сериализует пользовательское исключение и отправляет клиенту в виде строки, мы следуем тому же самому :)
м приложении GWT. Я переопределил RemoteServiceServlet, чтобы проверить, действителен ли сеанс непосредственно перед вызовом метода сервиса. Я пытаюсь сгенерировать RuntimeException («истекший сеанс») с сервера, и я хотел бы, чтобы клиент перехватил это исключение из asynccallback onFailure ...
В клиенте я хотел бы: Asynccallback:
@Override
public void onFailure(Throwable caught) {
final String message = caught.getMessage();
if (!isNullOrEmptyString(message) && message.contains("expired session")) {
com.google.gwt.user.client.Window.Location.reload();
}
}
Однако в клиенте перехваченный объект по-прежнему является StatusCodeException, а сообщение по умолчанию по-прежнему «... Исключение на сервере ...». Как я могу переопределить исключение, по крайней мере, сообщение по умолчанию для сравнения, если это было сообщение об истечении сеанса, которое я отправил с сервера?
Спасибо
Привет Gursel, вот мой код: -> Пользовательский RemoteServiceServlet. Я пытаюсь «перехватить» каждый метод перед его вызовом. Я проверяю сеанс и выбрасываю RuntimeException, если он уже истек. Таким образом, в основном, это не объявленный метод, который генерирует исключение, а пользовательский RemoteServiceServlet. Он по-прежнему переходит к «onFailure» в асинхронном клиенте, но объект Throwable по-прежнему имеет тип «StatusCodeException» без сообщения EXPIRED_SESSION_MSG. Не знаю, как заставить это работать. Спасибо!
public class XRemoteServiceServlet extends RemoteServiceServlet {
private final static String EXPIRED_SESSION_MSG = "ERROR: Application has expired session.";
@Override
protected void onAfterRequestDeserialized(RPCRequest rpcRequest) {
HttpServletRequest httpServletRequest = this.getThreadLocalRequest();
HttpSession session = httpServletRequest.getSession(false);
if (session != null) {
final String sessionIdFromRequestHeader = getSessionIdFromHeader();
if (!isNullOrEmptyString(sessionIdFromRequestHeader)) {
final String sessionId = session.getId();
if (!sessionId.equals(sessionIdFromRequestHeader)) {
throw new RuntimeException(EXPIRED_SESSION_MSG);
}
}