Arvīds, On 9/11/13 11:07 AM, Arvīds Grabovskis wrote: > 2013/9/11 Konstantin Kolinko <knst.koli...@gmail.com > <mailto:knst.koli...@gmail.com>> > > 2013/9/11 Arvīds Grabovskis <arvids.grabovs...@gmail.com > <mailto:arvids.grabovs...@gmail.com>>: > > Hi, > > > > If JSP includes a line "<c:if > test="${nonExisting}">Hello,world!</c:if>" > > where "nonExisting" is attribute that does not exist, then > > NullPointerException will be thrown. The cause is at > > > > http://svn.apache.org/repos/asf/tomcat/trunk/java/org/apache/jasper/compiler/JspUtil.java > > at > > line #421 which generates something like: > > ((java.lang.Boolean) > > > > org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${nonExisting}", > > java.lang.Boolean.class, > (javax.servlet.jsp.PageContext)_jspx_page_context, > > null, false)).booleanValue() > > > > The result of proprietaryEvaluate() is null (because of EL 3.0 changes > > regarding coercing), hence calling booleanValue() will throw NPE. The > > latest changes in EL specification does require guarding against > such null > > pointer access (otherwise it will break lots of existing > applications). I > > really hope that this is not intended behavior. > > > > Double checked the existence of error with Tomcat v8.0.0-RC1 (the same > > problem affects the Glassfish v4, but they have a forked version > of JSPC > > > > 1. Why does it try to convert to "boolean" and not to "Boolean"? > > 2. Yes, a null cannot be converted to primitive boolean value, so an > NPE is the correct behaviour here. So the generated code is correct. > > So the question is why EL expression "${nonExisting}" or "${null}" was > not evaluated to Boolean.FALSE. > > What version of JSTL are you using? > Are you sure that you are using EL-aware versions of the tags > (JSTL 1.1+) instead of older JSTL 1.0 ones? > > What are the steps to reproduce the issue on a clear installation? > What is your version of Tomcat? > What is you stacktrace? > > > Best regards, > Konstantin Kolinko > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > <mailto:dev-unsubscr...@tomcat.apache.org> > For additional commands, e-mail: dev-h...@tomcat.apache.org > <mailto:dev-h...@tomcat.apache.org> > > > Konstantin, > > 1. Manual unboxing does solve potential NPE problems in other parts > (where auto-unboxing would throw NPE)... so this is not the real > problem... imho. > > 2. As far as I understand, this is direct result of incompatibility > between EL 3.0 > (http://download.oracle.com/otndocs/jcp/el-3_0-fr-eval-spec/index.html) > and 2.2 as stated in EL spec this is intended behavior of EL. Here's the > citation (Section A.4): > "The default coercion for nulls to non-primitive types (except String) > returns > nulls. For instance, a null coerced to Boolean now returns a null, while a > null coerced to boolean returns false." > > Environment: > * JSTL 1.2+ > * Tomcat version 8.0.0-RC1 (as previously stated) > * JDK 1.7.0_21 > > I also added a demo application (I hope that mail client won't block it) > - just drop it in fresh Tomcat v8 and you'll get the error.
The mailing list blocks it. I would recommend filing a bug in bugzilla, posting your original explanation, the stack trace below, and attaching your demo application. -chris > here's the stack trace: > java.lang.NullPointerException > org.apache.jsp.index_jsp._jspx_meth_c_005fif_005f0(index_jsp.java:109) > org.apache.jsp.index_jsp._jspService(index_jsp.java:81) > org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) > javax.servlet.http.HttpServlet.service(HttpServlet.java:728) > org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) > org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:403) > org.apache.jasper.servlet.JspServlet.service(JspServlet.java:347) > javax.servlet.http.HttpServlet.service(HttpServlet.java:728) > org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:91) > > -- Arvīds > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org > For additional commands, e-mail: dev-h...@tomcat.apache.org >
signature.asc
Description: OpenPGP digital signature