2013/9/11 Konstantin Kolinko <knst.koli...@gmail.com> > 2013/9/11 Arvīds Grabovskis <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 > For additional commands, e-mail: 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. 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