Re: JXPath and LazyDynaBeans
The code above should work, returning a number of absolute pointers to 'car'. You can copy/past it if you feel like it. I'd expect to see something printed out like: Got pointer: /car[0] Got pointer: /car[1] Got pointer: /car[2] :'( On Sat, Nov 22, 2008 at 5:15 AM, Niall Pemberton [EMAIL PROTECTED]wrote: On Thu, Nov 20, 2008 at 12:10 AM, Andrew Hughes [EMAIL PROTECTED] wrote: Hi All, There are so many options here, I'm not sure which one is the easiest/best solution. I've got a data structure which I am using to populate (a hierarchy of) LazyDynaBean's so that we can run JXPath across it. It's working perfectly, until I try and introduce duplicate key entries (i.e. a node can have 1 children of the same name). My example heirarchy I wish to build is this... / /car='Ferrari' /car='Porsche' /car=Lamborghini' In xml it might look like... root carFerrari/car carPorsche/car carLamborghini/car /root Anyway, to cut to the chase. I have multiple 'car' property entries and I am trying to run the follwing code: LazyDynaBean lazyDynaBean = new LazyDynaBean(); JXPathContext jxPathContext = JXPathContext.newContext(lazyDynaBean); lazyDynaBean.set(car,0, Ferrari); lazyDynaBean.set(car,1, Porsche); lazyDynaBean.set(car,2, Lamborghini); Iterator i = jxPathContext.iteratePointers(car); while(i.hasNext()){ System.out.println(Got pointer: +i.next().toString()); } The error is: Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 0 at org.apache.commons.jxpath.ri.model.dynabeans.DynaBeanPropertyPointer.getPropertyNames(DynaBeanPropertyPointer.java:84) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.prepareForIndividualProperty(PropertyIterator.java:270) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionIndividualProperty(PropertyIterator.java:154) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) at org.apache.commons.jxpath.ri.axes.ChildContext.setPosition(ChildContext.java:101) at org.apache.commons.jxpath.ri.axes.ChildContext.nextNode(ChildContext.java:87) at org.apache.commons.jxpath.ri.EvalContext.performIteratorStep(EvalContext.java:155) at org.apache.commons.jxpath.ri.EvalContext.hasNext(EvalContext.java:115) at rnd.JXPathRND.App.main(App.java:24) How am I supposed to populate the DynaBean so that it can contain more than one 'car' property? I would have expected the lazy DynaBean to contain a list of Strings - I would check if it does. If it does then the issue is in JXPath. Niall Also, I would prefer not to have to specify the index 0,1,2 if that is at all possible. Thanks in advance. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: JXPath and LazyDynaBeans
On Thu, Nov 20, 2008 at 12:10 AM, Andrew Hughes [EMAIL PROTECTED] wrote: Hi All, There are so many options here, I'm not sure which one is the easiest/best solution. I've got a data structure which I am using to populate (a hierarchy of) LazyDynaBean's so that we can run JXPath across it. It's working perfectly, until I try and introduce duplicate key entries (i.e. a node can have 1 children of the same name). My example heirarchy I wish to build is this... / /car='Ferrari' /car='Porsche' /car=Lamborghini' In xml it might look like... root carFerrari/car carPorsche/car carLamborghini/car /root Anyway, to cut to the chase. I have multiple 'car' property entries and I am trying to run the follwing code: LazyDynaBean lazyDynaBean = new LazyDynaBean(); JXPathContext jxPathContext = JXPathContext.newContext(lazyDynaBean); lazyDynaBean.set(car,0, Ferrari); lazyDynaBean.set(car,1, Porsche); lazyDynaBean.set(car,2, Lamborghini); Iterator i = jxPathContext.iteratePointers(car); while(i.hasNext()){ System.out.println(Got pointer: +i.next().toString()); } The error is: Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 0 at org.apache.commons.jxpath.ri.model.dynabeans.DynaBeanPropertyPointer.getPropertyNames(DynaBeanPropertyPointer.java:84) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.prepareForIndividualProperty(PropertyIterator.java:270) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionIndividualProperty(PropertyIterator.java:154) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) at org.apache.commons.jxpath.ri.axes.ChildContext.setPosition(ChildContext.java:101) at org.apache.commons.jxpath.ri.axes.ChildContext.nextNode(ChildContext.java:87) at org.apache.commons.jxpath.ri.EvalContext.performIteratorStep(EvalContext.java:155) at org.apache.commons.jxpath.ri.EvalContext.hasNext(EvalContext.java:115) at rnd.JXPathRND.App.main(App.java:24) How am I supposed to populate the DynaBean so that it can contain more than one 'car' property? I would have expected the lazy DynaBean to contain a list of Strings - I would check if it does. If it does then the issue is in JXPath. Niall Also, I would prefer not to have to specify the index 0,1,2 if that is at all possible. Thanks in advance. - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
JXPath and LazyDynaBeans
Hi All, There are so many options here, I'm not sure which one is the easiest/best solution. I've got a data structure which I am using to populate (a hierarchy of) LazyDynaBean's so that we can run JXPath across it. It's working perfectly, until I try and introduce duplicate key entries (i.e. a node can have 1 children of the same name). My example heirarchy I wish to build is this... / /car='Ferrari' /car='Porsche' /car=Lamborghini' In xml it might look like... root carFerrari/car carPorsche/car carLamborghini/car /root Anyway, to cut to the chase. I have multiple 'car' property entries and I am trying to run the follwing code: LazyDynaBean lazyDynaBean = new LazyDynaBean(); JXPathContext jxPathContext = JXPathContext.newContext(lazyDynaBean); lazyDynaBean.set(car,0, Ferrari); lazyDynaBean.set(car,1, Porsche); lazyDynaBean.set(car,2, Lamborghini); Iterator i = jxPathContext.iteratePointers(car); while(i.hasNext()){ System.out.println(Got pointer: +i.next().toString()); } The error is: Exception in thread main java.lang.ArrayIndexOutOfBoundsException: 0 at org.apache.commons.jxpath.ri.model.dynabeans.DynaBeanPropertyPointer.getPropertyNames(DynaBeanPropertyPointer.java:84) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.prepareForIndividualProperty(PropertyIterator.java:270) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPositionIndividualProperty(PropertyIterator.java:154) at org.apache.commons.jxpath.ri.model.beans.PropertyIterator.setPosition(PropertyIterator.java:139) at org.apache.commons.jxpath.ri.axes.ChildContext.setPosition(ChildContext.java:101) at org.apache.commons.jxpath.ri.axes.ChildContext.nextNode(ChildContext.java:87) at org.apache.commons.jxpath.ri.EvalContext.performIteratorStep(EvalContext.java:155) at org.apache.commons.jxpath.ri.EvalContext.hasNext(EvalContext.java:115) at rnd.JXPathRND.App.main(App.java:24) How am I supposed to populate the DynaBean so that it can contain more than one 'car' property? Also, I would prefer not to have to specify the index 0,1,2 if that is at all possible. Thanks in advance.