users@glassfish.java.net

JSP in alternate docroot doesn't compile - bug or feature?

From: <glassfish_at_javadesktop.org>
Date: Sat, 16 May 2009 03:48:34 PDT

JSP's won't compile when it's stored in alternate docroot and custom servlet is used to forward requests to the jsp servlet.
Very easily reproducable problem:

sun-web.xml
...
<property name="alternatedocroot_2" value="from=/jsptestalternatedir/* dir=jsptestalternateroot"/>
...

web.xml
...
        <servlet>
                <servlet-name>JspTest</servlet-name>
                <servlet-class>info.calavera.web.JspTest</servlet-class>
        </servlet>
        <servlet>
                <servlet-name>JspServlet</servlet-name>
                <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
        </servlet>
        <servlet-mapping>
                <servlet-name>JspTest</servlet-name>
                <url-pattern>/jsptestalternatedir/test.jsp</url-pattern>
        </servlet-mapping>
...

JspTest.java
...
getServletContext().getNamedDispatcher("JspServlet").forward(req, resp);
...

Accsessing /jsptestalternatedir/test.jsp will give you 500 and error logs says:
SEVERE: StandardWrapperValve[JspTest]: PWC1406: Servlet.service() for servlet JspTest threw exception
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
PWC6199: Generated servlet error:
string:///test_jsp.java:3: package javax.servlet does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:4: package javax.servlet.http does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:5: package javax.servlet.jsp does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:7: package org.apache.jasper.runtime does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:8: package org.apache.jasper.runtime does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:10: cannot find symbol
symbol : class JspFactory
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:14: package org.glassfish.jsp.api does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:20: cannot find symbol
symbol : class HttpServletRequest
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:20: cannot find symbol
symbol : class HttpServletResponse
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:21: cannot find symbol
symbol : class ServletException
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:10: cannot find symbol
symbol : variable JspFactory
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:23: cannot find symbol
symbol : class PageContext
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:24: cannot find symbol
symbol : class HttpSession
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:25: cannot find symbol
symbol : class ServletContext
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:26: cannot find symbol
symbol : class ServletConfig
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:27: cannot find symbol
symbol : class JspWriter
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:28: incompatible types
found : org.apache.jsp.jsptestalternatedir.test_jsp
required: java.lang.Object
PWC6199: Generated servlet error:
string:///test_jsp.java:29: cannot find symbol
symbol : class JspWriter
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:30: cannot find symbol
symbol : class PageContext
location: class org.apache.jsp.jsptestalternatedir.test_jsp
PWC6199: Generated servlet error:
string:///test_jsp.java:42: package org.glassfish.jsp.api does not exist
PWC6199: Generated servlet error:
string:///test_jsp.java:60: cannot find symbol
symbol : class SkipPageException
location: class org.apache.jsp.jsptestalternatedir.test_jsp
        at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:126)
        at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:296)
        at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:369)
        at org.apache.jasper.compiler.Compiler.compile(Compiler.java:430)
        at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:608)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:473)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:366)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:431)
        at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:885)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:732)
        at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:554)
        at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:451)
        at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:377)
        at info.calavera.web.JspTest.doGet(JspTest.java:17)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:431)
        at org.apache.catalina.core.StandardWrapperValve.preInvoke(StandardWrapperValve.java:462)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:139)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:186)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:96)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:187)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:142)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:719)
        at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:657)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:651)
        at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1030)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:242)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:180)
        at com.sun.grizzly.http.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:633)
        at com.sun.grizzly.http.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:570)
        at com.sun.grizzly.http.DefaultProcessorTask.process(DefaultProcessorTask.java:827)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:152)
        at com.sun.enterprise.v3.services.impl.GlassfishProtocolChain.executeProtocolFilter(GlassfishProtocolChain.java:71)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:103)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:89)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:67)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:56)
        at com.sun.grizzly.util.WorkerThreadImpl.processTask(WorkerThreadImpl.java:325)
        at com.sun.grizzly.util.WorkerThreadImpl.run(WorkerThreadImpl.java:184)

Is this a bug or a feature?
[Message sent by forum member 'calaverainfo' (calaverainfo)]

http://forums.java.net/jive/thread.jspa?messageID=346467