Все сервисы 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);
                }
            }

Ответы на вопрос(2)

Ваш ответ на вопрос