The problem is now fixed. In some situations JXPath would not open containers during path traversal. I went through the entire code base to see that container opening is done properly everywhere.
I ran the test you provided and it now runs fine. Thank you very much for pointing out this problem. - Dmitri ----- Original Message ----- From: "Dmitri Plotnikov" <[EMAIL PROTECTED]> To: "Jakarta Commons Users List" <[EMAIL PROTECTED]> Sent: Tuesday, March 09, 2004 12:08 PM Subject: Re: [jxpath] problem with Container interface > I'll look into this. I haven't tried putting a collection in a container - > it's quite possible there is a bug there. > > Out of curiosity - what purpose does the container serve in your situation? > Why don't you use the contents of the container as the context object? > > Thanks, > > - Dmitri > > ----- Original Message ----- > From: "Uwe Janner" <[EMAIL PROTECTED]> > To: <[EMAIL PROTECTED]> > Sent: Monday, March 08, 2004 1:38 PM > Subject: Re: [jxpath] problem with Container interface > > > > to describe my problem more precisely, i also append this test; > > i dont understand why it evaluates correcty with index [1], but not with > > index [2]. > > both ctx.getValue("/a") and ctx.getValue("/b") correctly evaluate to the > > whole arraylist "[x,y]"; > > > > thank you in advance for any help, uwe! > > > > public class XpathUtilTest extends TestCase { > > public void testEval(){ > > JXPathContext ctx = JXPathContext.newContext(new MyObject()); > > // this test succeeds: > > assertEquals("x", ctx.getValue("/a[1]")); > > // this test fails because of: > > // "JXPathException: No value for xpath: /a[2]" > > assertEquals("y", ctx.getValue("/a[2]")); > > } > > public class MyObject implements Container{ > > Map map; > > public MyObject(){ > > map = new HashMap(); > > map.put( "a", new ListEntry()); map.put( "b", new > ListEntry()); > > } > > public Object getValue() { > > return map; > > } > > public void setValue(Object arg0) {} > > } > > public class ListEntry implements Container{ > > private List list; > > public ListEntry(){ > > this.list = new ArrayList(); > > list.add("x"); list.add("y"); > > } > > public Object getValue() { > > return list; > > } > > public void setValue(Object arg0) {} > > } > > } > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]