tomcat-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher Schultz <ch...@christopherschultz.net>
Subject Re: NullPointerException for conditions in compiled JSPs
Date Wed, 11 Sep 2013 15:28:51 GMT
Arvīds,

On 9/11/13 11:07 AM, Arvīds Grabovskis wrote:
> 2013/9/11 Konstantin Kolinko <knst.kolinko@gmail.com
> <mailto:knst.kolinko@gmail.com>>
> 
>     2013/9/11 Arvīds Grabovskis <arvids.grabovskis@gmail.com
>     <mailto:arvids.grabovskis@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-unsubscribe@tomcat.apache.org
>     <mailto:dev-unsubscribe@tomcat.apache.org>
>     For additional commands, e-mail: dev-help@tomcat.apache.org
>     <mailto:dev-help@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-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
> 


Mime
View raw message