Vraptor - Erro ao exibir mensagem de erro na primeira requisição após iniciar o tomcat

4 respostas
filipesg

Olá pessoal, tenho alguns interceptors inclusive um para controle de acesso (login). Acabei de identificar um erro estranho que só acontece em uma situação específica.

Quando a minha primeira requisição pelo browser, após iniciar/reiniciar o tomcat é uma tentativa de login recebo o seguinte erro:
java.lang.NullPointerException
	java.util.PropertyResourceBundle.handleGetObject(PropertyResourceBundle.java:154)
	java.util.ResourceBundle.getObject(ResourceBundle.java:396)
	java.util.ResourceBundle.getString(ResourceBundle.java:362)
	br.com.caelum.vraptor.core.SafeResourceBundle.handleGetObject(SafeResourceBundle.java:57)
	java.util.ResourceBundle.getObject(ResourceBundle.java:396)
	java.util.ResourceBundle.getString(ResourceBundle.java:362)
	br.com.caelum.vraptor.validator.I18nMessage.getMessage(I18nMessage.java:71)
Código da página onde tento exibir a mensagem de erro.
<c:forEach var="msg" items="${errors}">
	${msg.message}
</c:forEach>
Quando eu tento imprimir apenas ${msg} veja o que aparece:
I18nMessage{category=, message=null, parameters=[Ljava.lang.Object;@2c00c115}
Meus interceptors executam nas seguintes ordens:
@Intercepts(after = MenuInterceptor.class, before = ForwardToDefaultViewInterceptor.class)
public class LoginInterceptor implements Interceptor { ... }

@Intercepts(after = MetodoInterceptor.class, before = LoginInterceptor.class)
public class MenuInterceptor implements Interceptor { ... }

@Intercepts(after = ExecuteMethodInterceptor.class, before = MenuInterceptor.class)
public class MetodoInterceptor implements Interceptor { ... }
Para mim parece que os interceptors estão em uma ordem errada, executando algo antes do ResourceBundle ser definido ou algo assim... Faz sentido?

4 Respostas

filipesg

Acho que finalmente consegui encontrar a origem do erro:

br.com.caelum.vraptor.InterceptionException: There are validation errors and you forgot to specify where to go. Please add in your method something like: validator.onErrorUse(page()).of(AnyController.class).anyMethod(); or any view that you like. If you didn't add any validation error, it is possible that a conversion error had happened. at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:71) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.plugin.hibernate4.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:33) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93) at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54) at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) at java.lang.Thread.run(Thread.java:679)
Estava ainda mais complicado porque também está dando erro na exibição da mensagem de erro…

Lucas_Cavalcanti

mas conseguiu resolver por aí?

filipesg

Descobri o erro original, mas estou tentando fazer que quando aconteça um erro assim, ele mostre para mim. Foi uma luta descobrir o erro.

O erro que está dando é um null pointer exception e eu tentei de 2 formas adicionar o erro ao validator mas estou com dificuldades.

validator.add(new ValidationMessage(e.getMessage(), "")); //e.getMessage() está retornando a String "null" //Desse jeito a mensagem fica vazia

validator.add(new I18nMessage("", e.getMessage())); //Desse jeito da o erro que postei na mensagem anterior
Mesmo meu messages.properties com essa linha:

Lucas_Cavalcanti

é que null é diferente de “null” :wink:

tenta colocar como new I18nMessage("", “” + e.getMessage())

Criado 21 de agosto de 2012
Ultima resposta 21 de ago. de 2012
Respostas 4
Participantes 2