the following jspx works fine in tomcat 5.5.23 but fails in 6.0.13 <?xml version="1.0" encoding="iso-8859-1"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:jsp="http://java.sun.com/JSP/Page"> <jsp:output omit-xml-declaration="true" doctype-root-element="html" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" /> <head> <title>error!!!</title> </head> <body> <p>${true? (false?true:false):false}</p> </body> </html> org.apache.jasper.JasperException: An exception occurred processing JSP page /test.jspx at line 15 12: <title>error!!!</title> 13: </head> 14: <body> 15: <p>${true? (false?true:false):false}</p> 16: </body> 17: </html> Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:435) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) root cause javax.el.ELException: Error Parsing: ${true? (false?true:false):false} org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:125) org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:146) org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:190) org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:922) org.apache.jsp.test_jspx._jspService(test_jspx.java:62) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) root cause org.apache.el.parser.ParseException: Encountered "true: false" at line 1, column 16. Was expecting one of: "(" ... <IDENTIFIER> ... <NAMESPACE> <IDENTIFIER> ... org.apache.el.parser.ELParser.generateParseException(ELParser.java:1874) org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:1754) org.apache.el.parser.ELParser.NonLiteral(ELParser.java:1136) org.apache.el.parser.ELParser.ValuePrefix(ELParser.java:1030) org.apache.el.parser.ELParser.Value(ELParser.java:978) org.apache.el.parser.ELParser.Unary(ELParser.java:960) org.apache.el.parser.ELParser.Multiplication(ELParser.java:723) org.apache.el.parser.ELParser.Math(ELParser.java:643) org.apache.el.parser.ELParser.Compare(ELParser.java:455) org.apache.el.parser.ELParser.Equality(ELParser.java:349) org.apache.el.parser.ELParser.And(ELParser.java:293) org.apache.el.parser.ELParser.Or(ELParser.java:237) org.apache.el.parser.ELParser.Choice(ELParser.java:203) org.apache.el.parser.ELParser.Expression(ELParser.java:183) org.apache.el.parser.ELParser.NonLiteral(ELParser.java:1122) org.apache.el.parser.ELParser.ValuePrefix(ELParser.java:1030) org.apache.el.parser.ELParser.Value(ELParser.java:978) org.apache.el.parser.ELParser.Unary(ELParser.java:960) org.apache.el.parser.ELParser.Multiplication(ELParser.java:723) org.apache.el.parser.ELParser.Math(ELParser.java:643) org.apache.el.parser.ELParser.Compare(ELParser.java:455) org.apache.el.parser.ELParser.Equality(ELParser.java:349) org.apache.el.parser.ELParser.And(ELParser.java:293) org.apache.el.parser.ELParser.Or(ELParser.java:237) org.apache.el.parser.ELParser.Choice(ELParser.java:203) org.apache.el.parser.ELParser.Expression(ELParser.java:183) org.apache.el.parser.ELParser.DynamicExpression(ELParser.java:155) org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:52) org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93) org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:146) org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:190) org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68) org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:922) org.apache.jsp.test_jspx._jspService(test_jspx.java:62) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
The problem seems to be with the "false?true:false" part of the expression (the same excepion is thrown specifying just "${false?true:false}". As a workaround, adding a space before the colon seems to resolve it - both the following work OK: ${false?true :false} ${true? (false?true :false):false} Now to understand JavaCC/JJTree to work out why...
I confirm the same problem! I am trying to keep up to date and want to move to Tomcat 6, too. Also, it is not a Windows specific problem... Same goes for Tomcat 6 in Linux1 It is a very annoying problem for people who have the - good - habit of using EL expressions. Anybody knows if it is truly considered a bug and if it is going to be fixed?
I can confirm this too. If the ternary expression doesn't have space before the colon it doesn't work, as pointed out in comment 1.
This is really blocking me from upgrading to tomcat6.
Created attachment 20913 [details] Patch for this bug This patch fixes this bug (possible incorrect presumption that the presence of a ":" involves a function call when a value was specified) and another minor bug (valid namespaces names are not detected as such.) I was not able to find this bug, but checking the grammar and checking the specification makes this very simple to detect. The fix for this second bug does not follow the standard guidelines but it is closer to doing so than the previous grammar.
Created attachment 20975 [details] Cleaner patch Cleaner patch
The only real modification is on the .jjt file, everything else was auto generated by jjtree.
*** Bug 43714 has been marked as a duplicate of this bug. ***
I can reproduce the bug only if the operand left of the colon is *NOT* a string literal or a numeric literal.
(In reply to comment #9) > I can reproduce the bug only if the operand left of the colon is *NOT* a string > literal or a numeric literal. Can you reproduce the bug with the test case you are using is you apply the patch?
So can the patch be checked in? Would like to move to tc6...
(In reply to comment #11) > So can the patch be checked in? Would like to move to tc6... > the patch works fine for us, please check in, thanks a lot!
Many thanks for the patch. It has been applied to trunk and proposed for 6.0.x
This was applied to 6.0.x and included in 6.0.18 onwards. However, this patch caused a regression: bug 45511