|
|
|
I don't see a null pointer exception with a similar expression.
Can you try it with the 2.7.1-SNAPSHOT version and paste in the stack trace that you get? http://opencomponentry.com/repository/m2-snapshot-repo/ I still get the error with the latest snapshot:
"Unable to parse OGNL expression 'Page.LoggedInUser.Credentials.getOperationAuthorized(@com.encodo.system.AccessOperation@Configure, null)': java.lang.RuntimeException: java.lang.NullPointerException" Stack trace: ognl.ASTChain.toGetSourceString(ASTChain.java:328) org.apache.tapestry.services.impl.HiveMindExpressionCompiler.generateGetter(HiveMindExpressionCompiler.java:297) org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression(HiveMindExpressionCompiler.java:152) ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:524) ognl.Ognl.compileExpression(Ognl.java:141) org.apache.tapestry.services.impl.ExpressionCacheImpl.parse(ExpressionCacheImpl.java:152) org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression(ExpressionCacheImpl.java:115) $ExpressionCache_113aeb80276.getCompiledExpression($ExpressionCache_113aeb80276.java) org.apache.tapestry.binding.ExpressionBinding.resolveExpression(ExpressionBinding.java:134) org.apache.tapestry.binding.ExpressionBinding.getObject(ExpressionBinding.java:125) org.apache.tapestry.binding.AbstractBinding.getObject(AbstractBinding.java:84) org.apache.tapestry.enhance.EnhanceUtils.toBoolean(EnhanceUtils.java:173) $IfBean_11.getCondition($IfBean_11.java) org.apache.tapestry.components.IfBean.evaluateCondition(IfBean.java:128) org.apache.tapestry.components.IfBean.renderComponent(IfBean.java:66) org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180) org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539) org.apache.tapestry.components.IfBean.renderComponent(IfBean.java:94) org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180) org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539) org.apache.tapestry.html.Body.renderComponent(Body.java:38) org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180) org.apache.tapestry.AbstractComponent.renderBody(AbstractComponent.java:539) org.apache.tapestry.html.Shell.renderComponent(Shell.java:124) org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180) org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107) org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:180) org.apache.tapestry.BaseComponent.renderComponent(BaseComponent.java:107) org.apache.tapestry.AbstractComponent.render(AbstractComponent.java:725) org.apache.tapestry.services.impl.DefaultResponseBuilder.render(DefaultResponseBuilder.java:178) org.apache.tapestry.AbstractPage.renderPage(AbstractPage.java:249) org.apache.tapestry.engine.RequestCycle.renderPage(RequestCycle.java:397) org.apache.tapestry.services.impl.DefaultResponseBuilder.renderResponse(DefaultResponseBuilder.java:152) org.apache.tapestry.services.impl.ResponseRendererImpl.renderResponse(ResponseRendererImpl.java:33) $ResponseRenderer_113aeb80150.renderResponse($ResponseRenderer_113aeb80150.java) $ResponseRenderer_113aeb8014f.renderResponse($ResponseRenderer_113aeb8014f.java) org.apache.tapestry.engine.HomeService.service(HomeService.java:68) $IEngineService_113aeb801c1.service($IEngineService_113aeb801c1.java) org.apache.tapestry.services.impl.EngineServiceInnerProxy.service(EngineServiceInnerProxy.java:77) org.apache.tapestry.services.impl.EngineServiceOuterProxy.service(EngineServiceOuterProxy.java:72) org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:237) org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:54) $WebRequestServicer_113aeb8019a.service($WebRequestServicer_113aeb8019a.java) $WebRequestServicer_113aeb80199.service($WebRequestServicer_113aeb80199.java) org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCachingFilter.java:105) $WebRequestServicerFilter_113aeb8019c.service($WebRequestServicerFilter_113aeb8019c.java) $WebRequestServicerFilter_113aeb8019b.service($WebRequestServicerFilter_113aeb8019b.java) $WebRequestServicer_113aeb8019d.service($WebRequestServicer_113aeb8019d.java) $WebRequestServicer_113aeb80196.service($WebRequestServicer_113aeb80196.java) $WebRequestServicer_113aeb80195.service($WebRequestServicer_113aeb80195.java) org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:61) $ServletRequestServicer_113aeb8017c.service($ServletRequestServicer_113aeb8017c.java) $ServletRequestServicer_113aeb8017b.service($ServletRequestServicer_113aeb8017b.java) org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55) $ServletRequestServicerFilter_113aeb80178.service($ServletRequestServicerFilter_113aeb80178.java) $ServletRequestServicerFilter_113aeb80177.service($ServletRequestServicerFilter_113aeb80177.java) $ServletRequestServicer_113aeb8017d.service($ServletRequestServicer_113aeb8017d.java) org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52) $ServletRequestServicerFilter_113aeb80176.service($ServletRequestServicerFilter_113aeb80176.java) $ServletRequestServicerFilter_113aeb80175.service($ServletRequestServicerFilter_113aeb80175.java) $ServletRequestServicer_113aeb8017d.service($ServletRequestServicer_113aeb8017d.java) org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53) $ServletRequestServicerFilter_113aeb8017a.service($ServletRequestServicerFilter_113aeb8017a.java) $ServletRequestServicerFilter_113aeb80179.service($ServletRequestServicerFilter_113aeb80179.java) $ServletRequestServicer_113aeb8017d.service($ServletRequestServicer_113aeb8017d.java) $ServletRequestServicer_113aeb80170.service($ServletRequestServicer_113aeb80170.java) $ServletRequestServicer_113aeb8016f.service($ServletRequestServicer_113aeb8016f.java) org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:126) org.apache.tapestry.ApplicationServlet.doGet(ApplicationServlet.java:103) javax.servlet.http.HttpServlet.service(HttpServlet.java:596) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:428) org.mortbay.jetty.servlet.WebApplicationHandler.dispatch(WebApplicationHandler.java:473) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:568) org.mortbay.http.HttpContext.handle(HttpContext.java:1530) org.mortbay.jetty.servlet.WebApplicationContext.handle(WebApplicationContext.java:633) org.mortbay.http.HttpContext.handle(HttpContext.java:1482) org.mortbay.http.HttpServer.service(HttpServer.java:909) org.mortbay.http.HttpConnection.service(HttpConnection.java:820) org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986) org.mortbay.http.HttpConnection.handle(HttpConnection.java:837) org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245) org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357) org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534) Caused by: java.lang.RuntimeException: java.lang.NullPointerException ognl.ASTMethod.toGetSourceString(ASTMethod.java:288) ognl.ASTChain.toGetSourceString(ASTChain.java:273) ... 88 more Caused by: java.lang.NullPointerException ognl.ASTMethod.toGetSourceString(ASTMethod.java:264) ... 89 more I just downloaded the source and had a look around. I managed to prevent the error by modifying the following code in ASTMethod.java (starting at line 264):
} else if ((NodeType.class.isInstance(_children[i]) && ((NodeType)_children[i]).getGetterClass() != null && Number.class.isAssignableFrom(((NodeType)_children[i]).getGetterClass())) || (valueClass != null) && valueClass.isPrimitive()) { parmString = " ($w) " + parmString; } else if ((valueClass != null) && valueClass.isPrimitive()) { parmString = "($w) " + parmString; } Both checks for "(valueClass != null)" are new. The logic above does not prevent "value" from being null, but I have no idea whether this is true or not. Suffice it to say that my code *seems* to be working now, but it would be great if you take a look at this are to determine what the real fix should be. Thanks! | ||||||||||||||||||||||||||||||||||||||||||||||
Any word on this? This bug is preventing me from migrating one of my larger projects to Tapestry 4.1.2 (and the migration to 4.1.1 failed as well because the Scriptaculous "Suggest" component is only available in 4.1.2). For now, I'm stuck at 4.0.2 until I can either figure out a way around the NPE (not likely) or this bug gets fixed. I sure hope it's not too much trouble ...