2010-03-31 21 views
2

Lorsque je mélange des déclarations taglib JSTL 1.0 et JSTL 1.1, cela provoque une exception ParseException sur certains de mes serveurs, mais pas tous.Lorsque je mélange des déclarations taglib JSTL 1.0 et JSTL 1.1, cela provoque une exception ParseException sur certains de mes serveurs, mais pas tous. Pourquoi?

Voici le bloc de code qui me donne du mal:

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

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

Et voici l'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 = 'valeur': une erreur s'est produite lors de l'analyse de l'attribut d'action personnalisé " value "with value" $ {fn: contains (TEXTVARIABLE, '| STRINGOFTEXT |')} ": org.apache.taglibs.standard.lang.jstl.parser.ParseException: les fonctions EL ne sont pas prise en charge.

Cependant, tout fonctionne bien si je change l'URI de la déclaration de base à http://java.sun.com/jsp/jstl/core

Alors voici la partie vraiment bizarre: pour une raison quelconque, le mélange 1.0 et 1.1 des déclarations taglib provoque seulement une exception sur deux mes serveurs, mon serveur de transfert et mon serveur de production. Cela ne cause aucun problème sur ma machine locale ou sur mon serveur de développement. Pourquoi est-ce? Qu'est-ce qui pourrait causer cette différence de comportement? Les trois serveurs sont extrêmement similaires dans l'installation et la configuration.

La page JSP est mise à disposition par OpenCMS et j'utilise le serveur web Caucho's Resin. Je comprends que vous ne savez pas comment mes serveurs ou CMS sont configurés, mais vraiment, ce que je cherche, ce sont des idées. Toutes les idées aideraient, ce problème m'a rendu absolument chauve. Même si vous ne savez pas ce qui pourrait causer le problème, si vous avez des suggestions du tout pour savoir comment je pourrais résoudre le problème, cela serait extrêmement utile. Je ne comprends tout simplement pas ce qui pourrait causer cette différence de comportement entre mes serveurs.

Pour référence, voici la trace complète de la pile:

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 

Répondre

3

Elle peut être causée avoir différentes versions JSTL dans le classpath. En d'autres termes, le classpath est pollué. Débarrassez-vous de toutes les implémentations JSTL 1.0 afin que vous ayez seulement JSTL 1.1 dans le classpath. Les chemins couverts par le classpath par défaut de l'application Web sont sous chaque Appserver/lib, Webapp/WEB-INF/lib, JRE/lib, JRE/lib/ext, etc. Pour déterminer la version exacte JSTL, extraire jstl.jar avec un certain outil ZIP ou RAR et lire le fichier MANIFEST.MF.