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]