views:

225

answers:

1

When I mix JSTL 1.0 and JSTL 1.1 taglib declarations, it causes a ParseException on some of my servers, but not all of them.

Here is the block of code that's giving me trouble:

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%&gt;
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%&gt;

<c:set var="TEXTVARIABLE">|STRINGOFTEXT|</c:set>
<c:set var="OTHERTEXTVARIABLE">${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}</c:set>

And here is the exception :

javax.servlet.jsp.JspException: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.

However, everything works fine if I change the URI for the core declaration to http://java.sun.com/jsp/jstl/core

So here's the really weird part: for some reason, mixing 1.0 and 1.1 taglib declarations only causes an exception on two of my servers, my staging server and my production server. It causes no problems at all on my local machine or my development server. Why is this? What could possibly be causing this difference in behavior? The three servers are extremely similar in setup and configuration.

The JSP page is being served up by OpenCMS, and I'm using the Caucho's Resin webserver. I understand that you don't know how my servers or CMS are set up, but really, what I'm looking for is ideas. Any ideas at all would help, this problem has been driving me absolutely batty. Even if you don't know what could be causing the problem, if you have any suggestions at all for how I could approach the problem, that would be extremely helpful. I just don't understand what could cause this difference in behavior between my servers.

For reference, here's the full stack trace :

javax.servlet.jsp.JspException: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.
    at org.opencms.jsp.CmsJspTagInclude.includeActionWithCache(CmsJspTagInclude.java:369)
    at org.opencms.jsp.CmsJspTagInclude.includeTagAction(CmsJspTagInclude.java:241)
    at org.opencms.jsp.CmsJspTagInclude.doEndTag(CmsJspTagInclude.java:472)
    at _jsp._WEB_22dINF._jsp._online._system._modules._com__MYCOMPANY__marketing._templates._MAIN_0PAGE__jsp._jspService(_MAIN_0PAGE__jsp.java:153)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:60)
    at com.caucho.jsp.Page.pageservice(Page.java:579)
    at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:179)
    at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
    at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:175)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeExternal(CmsFlexRequestDispatcher.java:194)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:169)
    at org.opencms.loader.CmsJspLoader.service(CmsJspLoader.java:1193)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeInternalWithCache(CmsFlexRequestDispatcher.java:423)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:173)
    at org.opencms.loader.CmsJspLoader.dispatchJsp(CmsJspLoader.java:1227)
    at org.opencms.loader.CmsJspLoader.load(CmsJspLoader.java:1171)
    at org.opencms.loader.A_CmsXmlDocumentLoader.load(A_CmsXmlDocumentLoader.java:232)
    at org.opencms.loader.CmsXmlContentLoader.load(CmsXmlContentLoader.java:52)
    at org.opencms.loader.CmsResourceManager.loadResource(CmsResourceManager.java:964)
    at org.opencms.main.OpenCmsCore.showResource(OpenCmsCore.java:1498)
    at org.opencms.main.OpenCmsServlet.doGet(OpenCmsServlet.java:152)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:115)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:92)
    at com.caucho.server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java:106)
    at com.caucho.filters.CmsGzipFilter.doFilter(CmsGzipFilter.java:177)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:277)
    at com.caucho.server.webapp.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:106)
    at com.caucho.server.dispatch.ForwardFilterChain.doFilter(ForwardFilterChain.java:80)
    at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:207)
    at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:173)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:274)
    at com.caucho.server.port.TcpConnection.run(TcpConnection.java:514)
    at com.caucho.util.ThreadPool.runTasks(ThreadPool.java:520)
    at com.caucho.util.ThreadPool.run(ThreadPool.java:442)
    at java.lang.Thread.run(Thread.java:595)     
Caused by: com.caucho.jsp.JspLineParseException: /WEB-INF/jsp/online/system/modules/com.MYCOMPANY.marketing/templates/common/MY_JSP_PAGE.jsp:1: tag = 'out' / attribute = 'value': An error occurred while parsing custom action attribute "value" with value "${fn:contains(TEXTVARIABLE, '|STRINGOFTEXT|')}": org.apache.taglibs.standard.lang.jstl.parser.ParseException: EL functions are not supported.
    at com.caucho.jsp.java.JspNode.error(JspNode.java:1489)
    at com.caucho.jsp.java.JspNode.error(JspNode.java:1480)
    at com.caucho.jsp.java.JavaJspGenerator.validate(JavaJspGenerator.java:466)
    at com.caucho.jsp.JspCompilerInstance.generate(JspCompilerInstance.java:475)
    at com.caucho.jsp.JspCompilerInstance.compile(JspCompilerInstance.java:373)
    at com.caucho.jsp.JspManager.compile(JspManager.java:233)
    at com.caucho.jsp.JspManager.createPage(JspManager.java:177)
    at com.caucho.jsp.JspManager.createPage(JspManager.java:157)
    at com.caucho.jsp.PageManager.getPage(PageManager.java:248)
    at com.caucho.jsp.PageManager.getPage(PageManager.java:166)
    at com.caucho.jsp.QServlet.getSubPage(QServlet.java:292)
    at com.caucho.jsp.QServlet.getPage(QServlet.java:210)
    at com.caucho.server.dispatch.PageFilterChain.compilePage(PageFilterChain.java:206)
    at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:133)
    at shared.filter.RemoteAddrFilterBase.doFilter(RemoteAddrFilterBase.java:57)
    at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:70)
    at com.caucho.server.webapp.DispatchFilterChain.doFilter(DispatchFilterChain.java:115)
    at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:175)
    at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:229)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:485)
    at com.caucho.server.webapp.RequestDispatcherImpl.include(RequestDispatcherImpl.java:350)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeExternal(CmsFlexRequestDispatcher.java:194)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:169)
    at org.opencms.loader.CmsJspLoader.service(CmsJspLoader.java:1193)
    at org.opencms.flex.CmsFlexRequestDispatcher.includeInternalWithCache(CmsFlexRequestDispatcher.java:423)
    at org.opencms.flex.CmsFlexRequestDispatcher.include(CmsFlexRequestDispatcher.java:173)
    at org.opencms.jsp.CmsJspTagInclude.includeActionWithCache(CmsJspTagInclude.java:364)
    ... 45 more
+2  A: 

It can be caused having different JSTL versions in the classpath. In other words, the classpath is polluted. Get rid of all JSTL 1.0 implementations so that you have only JSTL 1.1 in the classpath. Paths covered by the webapp's default classpath are under each Appserver/lib, Webapp/WEB-INF/lib, JRE/lib, JRE/lib/ext, etc. To determine the exact JSTL version, extract jstl.jar with some ZIP or RAR tool and read the MANIFEST.MF file.

BalusC