StatusCodeException Vs. RuntimeException en GWT

En mi aplicación GWT. Anulé RemoteServiceServlet para verificar si la sesión es válida justo antes de que se llame al método de servicio. Estoy tratando de lanzar una RuntimeException ("sesión expirada") desde el servidor y me gustaría que el cliente detecte esta excepción del asynccallback onFailure ...

En el cliente me gustaría: 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();
        }

    }

Sin embargo, en el cliente, el objeto capturado sigue siendo una StatusCodeException y el mensaje sigue siendo el valor predeterminado "... Excepción en el servidor ...". ¿Cómo puedo anular la excepción al menos el mensaje predeterminado para comparar si fue un mensaje de sesión caducada que envié desde el servidor?

Gracia

Hola Gursel, aquí está mi código: -> Custom RemoteServiceServlet. Estoy tratando de "interceptar" cada método antes de que se invoque. Compruebo la sesión y lanzo una RuntimeException si ya ha expirado. Básicamente, no es el método declarado el que arroja la excepción, sino el RemoteServiceServlet personalizado. Todavía va a "onFailure" en el cliente asíncrono, pero el objeto Throwable sigue siendo del tipo "StatusCodeException" sin el mensaje EXPIRED_SESSION_MSG. No sé cómo hacer que esto funcione. ¡Gracias

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

Respuestas a la pregunta(2)

Su respuesta a la pregunta