As with Kalle, you can be about 97% sure it won't be fixed if there is no issue filed at http://jira.opensymphony.com/browse/OGNL .
On 6/27/07, Maximilian Weißböck <[EMAIL PROTECTED]> wrote:
We have another ognl problem with Tapestry 4.1.2. We use the expression "ognl:ordersPerShopLoop.index % 2 == 0" (for even/odd style in a table) and get the following error (see below). Any hints how to prevent this or how we have to rewrite the above ognl expression? Thanks, Max 2007-06-27 18:16:59,906 ERROR HiveMindExpressionCompiler.java:176 - Error generating OGNL getter for expression (ordersPerShopLoop.index % 2) == 0 with root [EMAIL PROTECTED]/OrderStatusListPage] and body: { return ($w) ((ognl.OgnlOps.remainder( ($w) (($OrderStatusListPage_27)$2).getOrdersPerShopLoop().getIndex(), ($w) 2) == 0));} org.apache.hivemind.ApplicationRuntimeException: Unable to add method java.lang.Object get(ognl.OgnlContext, java.lang.Object) to class $ASTEq_1136df7c1da: [source error] invalid types for == at org.apache.tapestry.enhance.ClassFabImpl.addMethod( ClassFabImpl.java:278) at org.apache.tapestry.services.impl.HiveMindExpressionCompiler.compileExpression (HiveMindExpressionCompiler.java:172) at ognl.OgnlRuntime.compileExpression(OgnlRuntime.java:498) at ognl.Ognl.compileExpression(Ognl.java:141) at org.apache.tapestry.services.impl.ExpressionCacheImpl.parse( ExpressionCacheImpl.java:152) at org.apache.tapestry.services.impl.ExpressionCacheImpl.getCompiledExpression (ExpressionCacheImpl.java:115) at $ExpressionCache_1136df7c14c.getCompiledExpression($ExpressionCache_1136df7c14c.java) at org.apache.tapestry.binding.ExpressionBinding.resolveExpression (ExpressionBinding.java:134) at org.apache.tapestry.binding.ExpressionBinding.getObject( ExpressionBinding.java:125) at org.apache.tapestry.binding.AbstractBinding.getObject( AbstractBinding.java:84) at org.apache.tapestry.enhance.EnhanceUtils.toBoolean( EnhanceUtils.java:173) at $IfBean_4.getCondition($IfBean_4.java) at org.apache.tapestry.components.IfBean.evaluateCondition( IfBean.java:138) at org.apache.tapestry.components.IfBean.renderComponent( IfBean.java:66) 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.ForBean.renderComponent( ForBean.java:181) 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.ForBean.renderComponent( ForBean.java:181) 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.form.FormSupportImpl.render( FormSupportImpl.java:502) at org.apache.tapestry.form.Form.renderComponent(Form.java:217) 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 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_1136df7c023.renderResponse($ResponseRenderer_1136df7c023.java) at org.apache.tapestry.engine.PageService.service(PageService.java :68) at $IEngineService_1136df7c091.service($IEngineService_1136df7c091.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_1136df7c06d.service($WebRequestServicer_1136df7c06d.java) at $WebRequestServicer_1136df7c069.service($WebRequestServicer_1136df7c069.java) at org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service (WebRequestServicerPipelineBridge.java:61) at $ServletRequestServicer_1136df7c04f.service($ServletRequestServicer_1136df7c04f.java) at org.apache.tapestry.request.DecodedRequestInjector.service( DecodedRequestInjector.java:55) at $ServletRequestServicerFilter_1136df7c04b.service($ServletRequestServicerFilter_1136df7c04b.java) at $ServletRequestServicer_1136df7c051.service($ServletRequestServicer_1136df7c051.java) at org.apache.tapestry.multipart.MultipartDecoderFilter.service( MultipartDecoderFilter.java:52) at $ServletRequestServicerFilter_1136df7c049.service($ServletRequestServicerFilter_1136df7c049.java) at $ServletRequestServicer_1136df7c051.service($ServletRequestServicer_1136df7c051.java) at org.apache.tapestry.services.impl.SetupRequestEncoding.service( SetupRequestEncoding.java:53) at $ServletRequestServicerFilter_1136df7c04d.service($ServletRequestServicerFilter_1136df7c04d.java) at $ServletRequestServicer_1136df7c051.service($ServletRequestServicer_1136df7c051.java) at $ServletRequestServicer_1136df7c043.service($ServletRequestServicer_1136df7c043.java) at org.apache.tapestry.ApplicationServlet.doService( ApplicationServlet.java:126) at org.apache.tapestry.ApplicationServlet.doGet( ApplicationServlet.java:103) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:173) at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal (OpenSessionInViewFilter.java:174) at org.springframework.web.filter.OncePerRequestFilter.doFilter( OncePerRequestFilter.java:77) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke( StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke( StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke( ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke( StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service( CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process( Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection (Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket( PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt( LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run( ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) Caused by: javassist.CannotCompileException: [source error] invalid types for == at javassist.CtBehavior.setBody(CtBehavior.java:347) at javassist.CtBehavior.setBody(CtBehavior.java:316) at org.apache.tapestry.enhance.ClassFabImpl.addMethod( ClassFabImpl.java:272) ... 85 more Caused by: compile error: invalid types for == at javassist.compiler.CodeGen.badTypes(CodeGen.java:1242) at javassist.compiler.CodeGen.convertOprandTypes(CodeGen.java :1303) at javassist.compiler.CodeGen.compareExpr(CodeGen.java:1193) at javassist.compiler.CodeGen.booleanExpr(CodeGen.java:1091) at javassist.compiler.CodeGen.atBinExpr(CodeGen.java:971) at javassist.compiler.ast.BinExpr.accept(BinExpr.java:40) at javassist.compiler.JvstCodeGen.atCastToWrapper(JvstCodeGen.java :201) at javassist.compiler.JvstCodeGen.atCastExpr(JvstCodeGen.java:171) at javassist.compiler.ast.CastExpr.accept(CastExpr.java:54) at javassist.compiler.CodeGen.compileExpr(CodeGen.java:223) at javassist.compiler.CodeGen.atReturnStmnt2(CodeGen.java:591) at javassist.compiler.JvstCodeGen.atReturnStmnt(JvstCodeGen.java :424) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:356) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atStmnt(CodeGen.java:344) at javassist.compiler.ast.Stmnt.accept(Stmnt.java:49) at javassist.compiler.CodeGen.atMethodBody(CodeGen.java:285) at javassist.compiler.Javac.compileBody(Javac.java:212) at javassist.CtBehavior.setBody(CtBehavior.java:341) ... 87 more > -----Ursprüngliche Nachricht----- > Von: Kalle Korhonen [mailto:[EMAIL PROTECTED] > Gesendet: Mittwoch, 27. Juni 2007 00:26 > An: Tapestry users > Betreff: OGNL 2.7 Must use #this > > Hi Jesse et al, > > while trying to migrate to Tap 4.1.2 we started getting lots > of OgnlExceptions with message "source is null" from > OgnlRuntime.getProperty. > The workaround was to add #this to a lot of places where we > used more complex OGNL expressions. I realize this is > probably much more to do with enhanced Ognl than Tapestry, so > I would have taken the discussion to ognl list, but > subscribing to ognl-interest failed with lists.ognl.org > domain not found. Anyway, an example of failing expression is: > ognl:object[linkProperty] > > that now only works with: > ognl:object[#this.linkProperty] > > Without knowing anything about how compiled OGNL works, just > following the ExpressionEvaluatorImpl.java source I tried to > make a test case that fails: > public String getKey() { > return "key"; > } > > public void testEnhancedOgnl() throws Exception { > map = new HashMap(); > map.put("key", "value"); > ClassResolver ognlResolver = new OgnlClassResolver(); > OgnlContext context = > (OgnlContext)Ognl.createDefaultContext(this, > ognlResolver); > Node expression = Ognl.compileExpression(context, map, "key"); > assertEquals(map.get("key"), > Ognl.getValue(expression.getAccessor(), > context, map)) ; > > context = (OgnlContext)Ognl.createDefaultContext(this, > ognlResolver); > expression = Ognl.compileExpression(context, this, > "#this[key]"); > assertEquals("key", > Ognl.getValue(expression.getAccessor(), context, > this)) ; > > context = (OgnlContext)Ognl.createDefaultContext(this, > ognlResolver); > expression = Ognl.compileExpression(context, this, > "#this.key"); > assertEquals("key", > Ognl.getValue(expression.getAccessor(), context, > this)) ; > > // Fails > context = (OgnlContext)Ognl.createDefaultContext(this, > ognlResolver); > expression = Ognl.compileExpression(context, this, "key"); > assertEquals("key", > Ognl.getValue(expression.getAccessor(), context, > this)) ; > } > > > I might be way off here (like I said, I don't know anything > about it :), but the last assert fails (on > CannotCompileException) even though to me the expression is > equal to the two above it (the first one's just me figuring > out how it works). > > Since 2.7 is already released and I can see Jesse has even > tagged Tap4.1.2 a few hours ago, I was mostly looking for a > quick explanation, maybe a better workaround if possible. If > this (pun intended) is the price to pay for faster OGNL, > here's my check and huge thanks to Jesse for all the hard work! > > Kalle > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
-- Jesse Kuhnert Tapestry/Dojo team member/developer Open source based consulting work centered around dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com