VRaptor3 + Tiles2 (Runtime Composition in JSP pages)

finalzinho:

Caused by: java.lang.NullPointerException  
    at org.apache.tiles.template.InsertTemplateModel.start(InsertTemplateModel.java:74)  
    at org.apache.tiles.jsp.taglib.InsertTemplateTag.doTag(InsertTemplateTag.java:253)  
    at org.apache.jsp.WEB_002dINF.jsp.product.index_jsp._jspx_meth_tiles_005finsertTemplate_005f0(index_jsp.java:88)  
    at org.apache.jsp.WEB_002dINF.jsp.product.index_jsp._jspService(index_jsp.java:63) 

da uma olhada nesse product/index.jsp e dá uma olhada na chamada tiles:insertTemplate, vc tá passando algo null pra ela.

Olá pessoal!

Estou com o mesmo problema do @joaovdscostal. Não tem nenhuma linha inválida no JSP que possa causar o NULL, tanto que a aplicação funciona em algumas situações. A aplicação deve rodar em vários contextos diferentes no tomcat. Sempre que paro o tomcat e subo o WAR, a aplicação funciona sem problema algum. Quando subo o mesmo WAR em outro contexto, passa a dar problema no TILES.

Segue as configurações:

web.xml

    <!-- Tiles -->
    <servlet>
        <servlet-name>TilesServlet</servlet-name>
        <servlet-class>org.apache.tiles.web.startup.TilesServlet</servlet-class>
        <init-param>
            <param-name>org.apache.tiles.factory.TilesContainerFactory.MUTABLE</param-name>
            <param-value>true</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <!-- VRaptor -->
    <filter>
        <filter-name>vraptor</filter-name>
        <filter-class>br.com.caelum.vraptor.VRaptor</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>vraptor</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>REQUEST</dispatcher>
    </filter-mapping>

Exception:

type Exception report

message br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/login/form.jsp at line 5 2: <%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> 3: <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4: <%@taglib tagdir="/WEB-INF/tags" prefix="r" %> 5: <tiles:insertTemplate template="/WEB-INF/jsp/templates/login.jsp"> 6: <tiles:putAttribute name="body"> 7: <div class="login"> 8: <div class="logo"> Stacktrace:

description The server encountered an internal error (br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/login/form.jsp at line 5 2: <%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%> 3: <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4: <%@taglib tagdir="/WEB-INF/tags" prefix="r" %> 5: <tiles:insertTemplate template="/WEB-INF/jsp/templates/login.jsp"> 6: <tiles:putAttribute name="body"> 7: <div class="login"> 8: <div class="logo"> Stacktrace:) that prevented it from fulfilling this request.

exception

br.com.caelum.vraptor.InterceptionException: br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: An exception occurred processing JSP page /WEB-INF/jsp/login/form.jsp at line 5

2: <%@taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
3: <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
4: <%@taglib tagdir="/WEB-INF/tags" prefix="r" %>
5: <tiles:insertTemplate template="/WEB-INF/jsp/templates/login.jsp">
6: <tiles:putAttribute name="body">
7: <div class="login">
8: <div class="logo">

root cause

java.lang.NullPointerException
	org.apache.tiles.template.InsertTemplateModel.start(InsertTemplateModel.java:74)
	org.apache.tiles.jsp.taglib.InsertTemplateTag.doTag(InsertTemplateTag.java:253)
	org.apache.jsp.WEB_002dINF.jsp.login.form_jsp._jspx_meth_tiles_005finsertTemplate_005f0(form_jsp.java:107)
	org.apache.jsp.WEB_002dINF.jsp.login.form_jsp._jspService(form_jsp.java:79)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	br.com.caelum.vraptor.core.DefaultStaticContentHandler.deferProcessingToContainer(DefaultStaticContentHandler.java:69)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:79)
	br.com.caelum.vraptor.view.DefaultPageResult.defaultView(DefaultPageResult.java:67)
        ....

o seu template /WEB-INF/jsp/templates/login.jsp
usa algum dado que deveria estar no request?

Avançando um pouco mais, consegui duplicar o problema com apenas um contexto.

-> Faço o build do WAR (Netbeans 7.2)
-> Faço deploy no tomcat (7.0.29)
-> Acesso a aplicação (tudo funciona)
-> Faço o undeploy
-> Envio novamente o WAR no tomcat (simulando uma nova versão da aplicação)
-> Nesse momento para de funcionar!

Se reiniciar o tomcat, volta a funcionar sem problemas.

Lucas, nesse template uso o pageContext.request.serverName, pageContext.request.serverPort e pageContext.servletContext.contextPath

e qual é o problema de reiniciar o tomcat depois do deploy?

No ambiente de desenvolvimento nenhum, mas no de produção sim, pois existem outros contextos rodando no tomcat que não podem parar.

da uma olhada se isso é problema do tiles… pq o vraptor não tem nada a ver com isso, aparentemente…

abre um tópico perguntando específicamente isso que alguem deve responder, não manjo nada de tiles :stuck_out_tongue: