Erro Inesperado javax.el.ELException [Resolvido]

Boa tarde pessoal,

Estou desenvolvendo uma aplicação usando:

  • Java 7
  • VRaptor 3.4
  • Tiles 2.2
  • Tomcat 7.0.26

O problema é o seguinte, ontem estava funcionando tudo normal, mas hoje fui implementar uma funcionalidade e o servidor começou a mostrar o seguinte erro em várias telas que não foram alteradas:

Grave: Servlet.service() for servlet jsp threw exception
javax.el.ELException: Cannot convert C of type class java.lang.String to class java.lang.Long
	at org.apache.el.lang.ELSupport.coerceToNumber(ELSupport.java:304)
	at org.apache.el.lang.ELSupport.coerceToNumber(ELSupport.java:283)
	at org.apache.el.lang.ELSupport.equals(ELSupport.java:144)
	at org.apache.el.parser.AstEqual.getValue(AstEqual.java:40)
	at org.apache.el.parser.AstOr.getValue(AstOr.java:38)
	at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:985)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp._jspx_meth_c_005fif_005f1(formularioFatura_jsp.java:212)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp.access$4(formularioFatura_jsp.java:203)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp$Helper.invoke1(formularioFatura_jsp.java:1034)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp$Helper.invoke(formularioFatura_jsp.java:1233)
	at org.apache.tiles.jsp.context.JspUtil.evaluateFragmentAsString(JspUtil.java:297)
	at org.apache.tiles.jsp.taglib.PutAttributeTag.doTag(PutAttributeTag.java:256)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp._jspx_meth_tiles_005fputAttribute_005f0(formularioFatura_jsp.java:129)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp.access$0(formularioFatura_jsp.java:117)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp$Helper.invoke0(formularioFatura_jsp.java:1006)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp$Helper.invoke(formularioFatura_jsp.java:1230)
	at org.apache.tiles.jsp.context.JspUtil.evaluateFragment(JspUtil.java:279)
	at org.apache.tiles.jsp.taglib.InsertTemplateTag.doTag(InsertTemplateTag.java:254)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp._jspx_meth_tiles_005finsertTemplate_005f0(formularioFatura_jsp.java:112)
	at org.apache.jsp.WEB_002dINF.jsp.fatura.formularioFatura_jsp._jspService(formularioFatura_jsp.java:87)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at br.com.caelum.vraptor.core.DefaultStaticContentHandler.deferProcessingToContainer(DefaultStaticContentHandler.java:64)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:80)
	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.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:471)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:402)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
	at br.com.caelum.vraptor.view.DefaultPageResult.defaultView(DefaultPageResult.java:67)
	at br.com.caelum.vraptor.interceptor.ForwardToDefaultViewInterceptor.intercept(ForwardToDefaultViewInterceptor.java:60)
	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.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:85)
	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.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:87)
	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.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.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	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.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.metalurgica.interceptor.AutenticacaoInterceptor.intercept(AutenticacaoInterceptor.java:66)
	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.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
	at br.com.caelum.vraptor.ioc.guice.GuiceProvider.provideForRequest(GuiceProvider.java:81)
	at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
	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:169)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
	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:722)

Mar 30, 2012 4:51:29 PM org.apache.catalina.core.StandardWrapperValve invoke
Grave: Servlet.service() for servlet [default] in context with path [/Metalurgica] threw exception
br.com.caelum.vraptor.validator.ValidationException

Pelo erro ele está dizendo que estou tentando converter um P em Long, mas isso não existe no código, ontem essa mesma tela estava funcionando, e hoje sem mexer nela parou de funcionar.

Aguem tem alguma ideia?

Procure em seu código que vc ta tentando converter alguma String em um Long de forma incorreta.

Provavelmente desta linha 212.

É só ler o log do console.

Como eu respondi, não existe esse tipe de conversão. Estava tudo funcionando até ontem, mas hoje apenas criei um novo método e uma nova janela e começou a mostrar esse erro em várias telas.

Continuo aguardando sugestões.

Outra coisa, esse formularioFatura.jsp só tem 166 linhas.

Isso é o codigo fonte gerado, vai na tua página e manda exibir o código fonte. Isso é erro de programação se as libs estiverem todas corretas.

Cara, isso não é erro, troquei o servidor para Tomcat 7.0.19 e voltou a funcionar sem precisar de efetuar qualquer alteração.

Brocações de Java

Para quem precisar, finalmente consegui descobrir o problema.

Parece que a EL trata os atributos “char” como “Long”, ou seja, ela não pega o caracter em si, mas “valor” desse caracter na tabela ASCII.

O código estava assim:

${fatura.financeiro.tipo == "C" ? "Crédito" : "Débito"}

Agora eu só acrescentei o charAt(0):

${fatura.financeiro.tipo == "C".charAt(0) ? "Crédito" : "Débito"}

Problema resolvido.