Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
2.7.1
-
None
-
Tapestry 4.1.3 snapshot from 7-27, OGNL 2.7.1 snapshot from 7-23, WinXP, Firefox 2
Description
If an object is accessed by OGNL that has a toString() which returns null, OGNL blows up with an NPE. Failsafe does not catch this. A Tapestry example is posted below.
.html:
<span jwcid="@Insert" value="ognl:block.imageBlock" />
.java:
public class TestObject
{
public boolean isImageBlock()
{ return true; }public String toString()
{ return null; }}
public TestObject getBlock()
{ return new TestObject(); }The stack:
07-08-02 17:00:23 ERROR (ErrorPage.java:46) - app=Director user=24 page=DirectorAccount GET http://localhost:8080/DirectorAccount.html
org.apache.tapestry.BindingException: Unable to parse OGNL expression 'block.imageBlock': java.lang.NullPointerException [context:/WEB-INF/app/DirectorAccount.html, line 9]
at org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:145)
at org.apache.tapestry.binding.ExpressionBinding.getObject(ExpressionBinding.java:125)
at org.apache.tapestry.binding.AbstractBinding.getObject(AbstractBinding.java:84)
at $Insert_46.getValue($Insert_46.java)
at org.apache.tapestry.components.Insert.renderComponent(Insert.java:48)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.RenderBody.renderComponent(RenderBody.java:39)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.IfBean.renderComponent(IfBean.java:94)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107)
at collective.ui.components.CollectiveComponent.renderComponent(CollectiveComponent.java:70)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.RenderBody.renderComponent(RenderBody.java:39)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.RenderBody.renderComponent(RenderBody.java:39)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.RenderBody.renderComponent(RenderBody.java:39)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107)
at collective.ui.components.CollectiveComponent.renderComponent(CollectiveComponent.java:70)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.Any.renderComponent(Any.java:44)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.html.Body.renderComponent(Body.java:38)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.html.Shell.renderComponent(Shell.java:124)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107)
at collective.ui.components.CollectiveComponent.renderComponent(CollectiveComponent.java:70)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539)
at org.apache.tapestry.components.ElseBean.renderComponent(ElseBean.java:47)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107)
at collective.ui.components.CollectiveComponent.renderComponent(CollectiveComponent.java:70)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180)
at org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107)
at org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:178)
at org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:249)
at org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:397)
at org.apache.tapestry.services.impl.DefaultResponseBuilder.renderResponse(DefaultResponseBuilder.java:152)
at org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(ResponseRendererImpl.java:33)
at $ResponseRenderer_1142897c285.renderResponse($ResponseRenderer_1142897c285.java)
at org.apache.tapestry.engine.PageService.service(PageService.java:68)
at $IEngineService_1142897c325.service($IEngineService_1142897c325.java)
at org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72)
at org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:237)
at org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54)
at $WebRequestServicer_1142897c300.service($WebRequestServicer_1142897c300.java)
at org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCachingFilter.java:54)
at $WebRequestServicerFilter_1142897c302.service($WebRequestServicerFilter_1142897c302.java)
at $WebRequestServicer_1142897c304.service($WebRequestServicer_1142897c304.java)
at $WebRequestServicer_1142897c2fc.service($WebRequestServicer_1142897c2fc.java)
at org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61)
at $ServletRequestServicer_1142897c2db.service($ServletRequestServicer_1142897c2db.java)
at collective.ui.custom.HibernateFilter.service(HibernateFilter.java:40)
at $ServletRequestServicerFilter_1142897c2df.service($ServletRequestServicerFilter_1142897c2df.java)
at $ServletRequestServicer_1142897c2e1.service($ServletRequestServicer_1142897c2e1.java)
at collective.ui.custom.LuceneIndexFilter.service(LuceneIndexFilter.java:24)
at $ServletRequestServicerFilter_1142897c2dd.service($ServletRequestServicerFilter_1142897c2dd.java)
at $ServletRequestServicer_1142897c2e1.service($ServletRequestServicer_1142897c2e1.java)
at org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
at $ServletRequestServicerFilter_1142897c2d7.service($ServletRequestServicerFilter_1142897c2d7.java)
at $ServletRequestServicer_1142897c2e1.service($ServletRequestServicer_1142897c2e1.java)
at org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
at $ServletRequestServicerFilter_1142897c2d5.service($ServletRequestServicerFilter_1142897c2d5.java)
at $ServletRequestServicer_1142897c2e1.service($ServletRequestServicer_1142897c2e1.java)
at org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
at $ServletRequestServicerFilter_1142897c2d9.service($ServletRequestServicerFilter_1142897c2d9.java)
at $ServletRequestServicer_1142897c2e1.service($ServletRequestServicer_1142897c2e1.java)
at $ServletRequestServicer_1142897c2cb.service($ServletRequestServicer_1142897c2cb.java)
at org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:126)
at collective.ui.CollectiveApplicationServlet.doService(CollectiveApplicationServlet.java:72)
at org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:427)
at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:832)
at collective.servlet.ResponseHeaderFilter.doFilter(ResponseHeaderFilter.java:32)
at org.mortbay.jetty.servlet.WebApplicationHandler$CachedChain.doFilter(WebApplicationHandler.java:823)
at org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:473)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:556)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1563)
at org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:623)
at org.mortbay.http.HttpContext.handle(HttpContext.java:1515)
at org.mortbay.http.HttpServer.service(HttpServer.java:956)
at org.mortbay.http.HttpConnection.service(HttpConnection.java:814)
at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:981)
at org.mortbay.http.HttpConnection.handle(HttpConnection.java:831)
at org.mortbay.http.SocketListener.handleConnection(SocketListener.java:244)
at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
Caused by: org.apache.hivemind.ApplicationRuntimeException: Unable to parse OGNL expression 'block.imageBlock': java.lang.NullPointerException
at org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:156)
at org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression(ExpressionCacheImpl.java:115)
at $ExpressionCache_1142897c403.getCompiledExpression($ExpressionCache_1142897c403.java)
at org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:134)
... 115 more
Caused by: java.lang.NullPointerException
at ognl.ObjectPropertyAccessor.getSourceSetter(ObjectPropertyAccessor.java:251)
at ognl.ASTProperty.toSetSourceString(ASTProperty.java:520)
at ognl.ASTChain.toSetSourceString(ASTChain.java:369)
at org.apache.tapestry.services.impl.HiveMindExpressionCompiler.generateSetter(HiveMindExpressionCompiler.java:400)
at org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:186)
at ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:524)
at ognl.Ognl.compileExpression(Ognl.java:141)
at org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:152)
... 118 more