Hey Jesse - saw you had marked http://jira.opensymphony.com/browse/OGNL-97as resolved so I assumed the fix might be in the latest snapshot ognl-2.7.1-20070630.205921-4 posted later but there were no changes as far as I could notice. Certainly don't want to sound impatient as you are doing superb job in fixing these, but how do I know in which snapshot the fix might be?
Kalle On 6/26/07, Kalle Korhonen <[EMAIL PROTECTED]> wrote:
Thanks. I wasn't 100% how legitimate, but filed as http://jira.opensymphony.com/browse/OGNL-97 Kalle On 6/26/07, Jesse Kuhnert <[EMAIL PROTECTED]> wrote: > > No time to look at this right now, but if you file a jira report here: > > http://jira.opensymphony.com/browse/OGNL > > it can be looked in to for the next 2.7.1 release. > > The forums are here: > > http://forums.opensymphony.com/category.jspa?categoryID=10 > > (though I'm thinking of moving them to google groups as well) > > On 6/26/07, Kalle Korhonen <[EMAIL PROTECTED]> wrote: > > > > 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.orgdomain > > 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.2a > > 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 > > > > > > -- > Jesse Kuhnert > Tapestry/Dojo team member/developer > > Open source based consulting work centered around > dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com >