StatusCodeException Vs. RuntimeException no GWT
No meu aplicativo GWT. Substituí o RemoteServiceServlet para verificar se a sessão é válida logo antes da chamada do método de serviço. Estou tentando lançar uma RuntimeException ("sessão expirada") do servidor e gostaria que o cliente capturasse essa exceção do asynccallback onFailure ...
No cliente eu gostaria de: 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();
}
}
No entanto, no cliente, o objeto capturado ainda é um StatusCodeException e a mensagem ainda é o padrão "... Exceção no servidor ...". como posso substituir a exceção pelo menos a mensagem padrão para comparar se foi uma mensagem expirada da sessão que enviei do servido
obrigad
Oi Oi, Aqui está o meu código: -> Custom RemoteServiceServlet. Estou tentando "interceptar" todos os métodos antes de serem invocados. Verifico a sessão e lanço uma RuntimeException, se ela já expirou. Portanto, basicamente, não é o método declarado que lança a exceção, mas o RemoteServiceServlet personalizado. Ele ainda vai para "onFailure" no cliente assíncrono, mas o objeto Throwable ainda é do tipo "StatusCodeException" sem a mensagem EXPIRED_SESSION_MSG. Não sei como fazer isso funcionar. Obrigado
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);
}
}