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

Reply via email to