commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Benson <gudnabr...@yahoo.com>
Subject Re: JXPath over Generic Collection<?>, How?
Date Wed, 11 Mar 2009 14:18:11 GMT

For me:

context.selectNodes("/root/animal/dog/*[name]")

selects

[LazyDynaBean {name=(BOXER)}, LazyDynaBean {name=(LABRADOR)}]

--- On Wed, 3/11/09, Andrew Hughes <ahhughes@gmail.com> wrote:

> From: Andrew Hughes <ahhughes@gmail.com>
> Subject: Re: JXPath over Generic Collection<?>, How?
> To: "Commons Users List" <user@commons.apache.org>
> Date: Wednesday, March 11, 2009, 1:12 AM
> A whirl and a win!
> I'm very close to a complete solution here (with loads of
> assistance from
> Matt, THANK YOU) based on Dyna Beans however there is one
> remaining problem
> (since we have duplicate elements).
> 
> According to:  <http://www.w3.org/TR/xpath#path-abbrev>
> http://www.w3.org/TR/xpath#path-abbrev
> 
> "* selects all element children of the context node"
> >
> 
> Expression: '/root/animal/dog/*' should return all dog's,
> instead it returns
> the first() dog (BOXER) only. I am unsure if this in an
> unrealistic
> requirement of JXPath and also where should I look to
> possibly 'fix' this if
> it indeed would compliment the current features?
> 
> 
> Thanks HEAPS!
> 
> 
> 
> 
> On Thu, Mar 5, 2009 at 3:05 AM, Matt Benson <gudnabrsam@yahoo.com>
> wrote:
> 
> >
> > Apparently the reason I was so ready to agree this was
> a bug that should be
> > fixed is that I already fixed it as
> > http://issues.apache.org/jira/browse/JXPATH-128 . 
> So since you're already
> > experienced with building JXPath now you should be
> able to build from svn
> > trunk and give that a whirl.
> >
> > -Matt
> >
> > --- On Wed, 3/4/09, Matt Benson <gudnabrsam@yahoo.com>
> wrote:
> >
> > > From: Matt Benson <gudnabrsam@yahoo.com>
> > > Subject: Re: JXPath over Generic
> Collection<?>, How?
> > > To: "Commons Users List" <user@commons.apache.org>
> > > Date: Wednesday, March 4, 2009, 7:57 AM
> > >
> > > Hi Andrew,
> > >   I agree that going through the
> list of properties
> > > should avoid the explicit "class" check problem
> (I think
> > > this is because you are using LazyDynaBeans
> instead of
> > > "regular" DynaBeans).  As for returning all
> matches vs.
> > > the first match, rather than selectValue(...) you
> need to
> > > selectNodes(...), or iterate(...).  There
> are other
> > > useful methods, e.g. those dealing with pointers,
> also
> > > available on JXPathContext.
> > >
> > > So as for your bug, yes it can/should be fixed,
> but you
> > > might also consider whether you can use non-lazy
> DynaBeans
> > > instead.
> > >
> > > Regards,
> > > Matt
> > >
> > > --- On Tue, 3/3/09, Andrew Hughes <ahhughes@gmail.com>
> > > wrote:
> > >
> > > > From: Andrew Hughes <ahhughes@gmail.com>
> > > > Subject: Re: JXPath over Generic
> Collection<?>,
> > > How?
> > > > To: "Commons Users List" <user@commons.apache.org>
> > > > Date: Tuesday, March 3, 2009, 5:37 PM
> > > > For efficiency reasons I can see why
> > > > you are using String[] here and not
> > > > List.add()...
> > > > Anyway, I have a fix (sort of) for this bug.
> The
> > > number of
> > > > names needs to be
> > > > calculated a little differently to what it
> currently
> > > is...
> > > >
> > > >     public String[]
> getPropertyNames() {
> > > >         /*
> @todo do something about the
> > > > sorting - LIKE WHAT? - MJB */
> > > >         if
> (names == null) {
> > > >         
>    DynaClass
> > > > dynaClass = dynaBean.getDynaClass();
> > > >         
>    DynaProperty[]
> > > > properties = dynaClass.getDynaProperties();
> > > >         
>    int count =
> > > > properties.length;
> > > >         
>    boolean hasClass
> > > > = dynaClass.getDynaProperty("class") !=
> null;
> > > >
> > > >         
>    //count the
> > > > number of property names we have
> > > >         
>    count = 0;
> > > >         
>    for (int i = 0; i
> > > > < properties.length; i++) {
> > > >
> > > > String name = properties[i].getName();
> > > >           
>      if
> > > > (!hasClass || !name.equals("class")) {
> > > >
> > > >     count++; //it's only
> a property is it's not a
> > > > class and
> > > > doesn't just have a class property.
> > > >           
>      }
> > > >         
>    }
> > > >         
>    //read the
> > > > property names into a String[] to return
> > > >         
>    names = new
> > > > String[count];
> > > >         
>    for (int i = 0, j
> > > > = 0; i < properties.length; i++) {
> > > >
> > > > String name = properties[i].getName();
> > > >           
>      if
> > > > (!hasClass || !name.equals("class")) {
> > > >
> > > >     names[j++] = name;
> > > >           
>      }
> > > >         
>    }
> > > >
> > > > Arrays.sort(names);
> > > >         }
> > > >         return
> names;
> > > >     }
> > > >
> > > > Now I can sort of sucessfully run all my
> expressions,
> > > > yippee!! However, I
> > > > now have a problem with multiple deep
> results. Queries
> > > like
> > > > //dog/* I would
> > > > expect to return all "dog's"[] but this just
> returns
> > > the
> > > > first one it finds.
> > > > Maybe this is asking a little too much of
> JXPath and
> > > > child/node
> > > > step-up/step-down traversal? Matt can
> probably tell me
> > > if
> > > > this is or is not
> > > > the case pleeeease :)
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > On Wed, Mar 4, 2009 at 9:38 AM, Andrew
> Hughes <ahhughes@gmail.com>
> > > > wrote:
> > > >
> > > > > Pretty sure this is a bug in JXPath -
> and it is
> > > not
> > > > tested by the current
> > > > > unit tests.
> > > > > I can't quite work out 100% of what's
> going on
> > > here...
> > > > but it has to do
> > > > > with gathering the property names from
> a
> > > DynaBean
> > > > child member of a (parent)
> > > > > DynaBean. Especially, when it try's to
> deal with
> > > the
> > > > property named 'name'
> > > > > and 'class'.
> > > > >
> > > > > The problem with query '//dog' etc's
> > > > 'ArrayOutOfBoundsException 0' occurs
> > > > > below. And rightfully so, names[] is a
> zero
> > > length
> > > > array and for some
> > > > > reason JXPath is trying to set a value
> for the
> > > first
> > > > entry of a zero length
> > > > > array.  That aint ever going to
> work! But why
> > > is
> > > > the array length zero?
> > > > > Because the properties.length==1,
> however the
> > > > 'hasClass==true' and it's
> > > > > count-- then negates the correct count
> calculated
> > > from
> > > > properties.length. I
> > > > > think the problem is in the hasClass
> > > calculation...
> > > > 'boolean hasClass =
> > > > > dynaClass.getDynaProperty("class") !=
> null;'
> > > or
> > > > the conditional 'if'
> > > > > statement. I don't understand the
> JXPath logic
> > > here
> > > > completely, but I know
> > > > > it doesn't deal with the way I am using
> it and I
> > > > genuinely feel this is a
> > > > > bug we can fix :'(
> > > > >
> > > > >
> > > > >     public
> String[]
> > > > getPropertyNames() {
> > > > >     
>    /* @todo do
> > > > something about the sorting - LIKE WHAT? -
> MJB */
> > > > >     
>    if (names ==
> > > > null) {
> > > > >
> > > >    DynaClass dynaClass =
> > > > dynaBean.getDynaClass();
> > > > >
> > > >    DynaProperty[] properties =
> > > > dynaClass.getDynaProperties();
> > > > >  //returns one property
> 'name=root' (correct)
> > > > >
> > > >    int count = properties.length;
> > > > //returns/set's '1' (correct)
> > > > >
> > > >    boolean hasClass =
> > > > dynaClass.getDynaProperty("class") != null;
> > > > > //returns/sets 'true' (?unknown?)
> > > > >         
>    if
> > > > (hasClass) { //this is true and executes
> > > > >
> > > >    count--;   
>    //
> > > > Exclude "class" from properties
> > > > >         
>    }
> > > > >
> > > >    names = new String[count];
> //names is a
> > > > zero length array.....
> > > > > WRONG!!! I do have at least 1 property
> called
> > > > 'name'!!!!
> > > > >
> > > >    for (int i = 0, j = 0; i <
> > > > properties.length; i++) {
> > > > >
> > > >    String name =
> properties[i].getName();
> > > > >
> > > >    if (!hasClass ||
> !name.equals("class")) {
> > > > >
> > > >      names[j++] = name; //it
> breaks
> > > > here
> > > > > ArrayOutOfBoundsException 0!!!!! WRONG
> :'(
> > > > >
> > > >    }
> > > > >         
>    }
> > > > >
> > > >    Arrays.sort(names);
> > > > >     
>    }
> > > > >     
>    return names;
> > > > >     }
> > > > >
> > > > >
> > > > >
> > > > >
> > > > > On Fri, Feb 27, 2009 at 10:02 AM,
> Andrew Hughes
> > > <ahhughes@gmail.com>wrote:
> > > > >
> > > > >> Thanks again Matt, good to hear
> that it's
> > > working
> > > > at your end :) At my end
> > > > >> JXPath's DynaBeanPropertyPointer
> seems to get
> > > into
> > > > problems
> > > > >> with ArraIndexOutOfBounds
> exceptions on the
> > > > PropertyNames of my DynaBean (see
> > > > >> the strack trace below) with many
> of the
> > > queries.
> > > > I can only speculate
> > > > >> why this might be... and I won't
> speculate
> > > > publically. I'm running the code
> > > > >> with JXPath 1.3,  BeanUtils
> 1.8.0, and Java
> > > > 1.6_u11 (within eclipse 3.4). The
> > > > >> code I'm trying to run is pasted
> below
> > > > VERBATIM.... if that works on your
> > > > >> environment and not mine then it
> must be a
> > > > compatibility/platform problem.
> > > > >> You've helped me out heaps so far
> Matt but
> > > can I
> > > > please ask you to
> > > > >> copy/paste the VERBATIM code and
> test?
> > > > >>
> > > > >> 2009-02-27 08:43:59,940 ERROR
> (Main.java:89)
> > > > [runEvaluation] Failed to
> > > > >> evaluate
> /root/animal/cat/tiger[last()]
> > > > >>
> > > > >>
> 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.nextSet(EvalContext.java:340)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:339)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:339)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.axes.PredicateContext.nextSet(PredicateContext.java:174)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.EvalContext.getSingleNodePointer(EvalContext.java:311)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
> > > > >>
> > > > >>  at
> rnd.Main.runEvaluation(Main.java:68)
> > > > >>
> > > > >>  at
> rnd.Main.main(Main.java:56)
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 INFO
> > > (Main.java:66)
> > > > [runEvaluation] About to
> > > > >> evaulate the expression:
> /root/animal/dog/*
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 ERROR
> (Main.java:89)
> > > > [runEvaluation] Failed to
> > > > >> evaluate /root/animal/dog/*
> > > > >>
> > > > >>
> 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.nextSet(EvalContext.java:340)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:339)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.EvalContext.nextSet(EvalContext.java:339)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
> > > > >>
> > > > >>  at
> rnd.Main.runEvaluation(Main.java:68)
> > > > >>
> > > > >>  at
> rnd.Main.main(Main.java:57)
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 INFO
> > > (Main.java:66)
> > > > [runEvaluation] About to
> > > > >> evaulate the expression: //dog
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 ERROR
> (Main.java:89)
> > > > [runEvaluation] Failed to
> > > > >> evaluate //dog
> > > > >>
> > > > >>
> 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.getNodePointer(PropertyIterator.java:106)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:76)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
> > > > >>
> > > > >>  at
> rnd.Main.runEvaluation(Main.java:68)
> > > > >>
> > > > >>  at
> rnd.Main.main(Main.java:58)
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 INFO
> > > (Main.java:66)
> > > > [runEvaluation] About to
> > > > >> evaulate the expression: //dog/*
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 ERROR
> (Main.java:89)
> > > > [runEvaluation] Failed to
> > > > >> evaluate //dog/*
> > > > >>
> > > > >>
> 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.nextSet(EvalContext.java:340)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.axes.ChildContext.getSingleNodePointer(ChildContext.java:70)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
> > > > >>
> > > > >>  at
> rnd.Main.runEvaluation(Main.java:68)
> > > > >>
> > > > >>  at
> rnd.Main.main(Main.java:59)
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 INFO
> > > (Main.java:66)
> > > > [runEvaluation] About to
> > > > >> evaulate the expression:
> > > > //cat/*[objectName='LION']
> > > > >>
> > > > >> 2009-02-27 08:43:59,956 ERROR
> (Main.java:89)
> > > > [runEvaluation] Failed to
> > > > >> evaluate
> //cat/*[objectName='LION']
> > > > >>
> > > > >>
> 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.nextSet(EvalContext.java:340)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.axes.PredicateContext.nextSet(PredicateContext.java:174)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.EvalContext.getSingleNodePointer(EvalContext.java:311)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> org.apache.commons.jxpath.ri.compiler.Path.searchForPath(Path.java:201)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.Path.getSingleNodePointerForSteps(Path.java:176)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.compiler.LocationPath.computeValue(LocationPath.java:87)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:353)
> > > > >>
> > > > >>  at
> > > > >>
> > > >
> > >
> >
> org.apache.commons.jxpath.ri.JXPathContextReferenceImpl.getValue(JXPathContextReferenceImpl.java:313)
> > > > >>
> > > > >>  at
> rnd.Main.runEvaluation(Main.java:68)
> > > > >>
> > > > >>  at
> rnd.Main.main(Main.java:60)
> > > > >>
> > > > >>
> > > > >>
> > > > >>
> > > > >> My Code VERBATIM
> > > > >>
> > > > >>  package rnd;
> > > > >>
> > > > >> import java.util.ArrayList;
> > > > >>
> > > > >> import
> > > org.apache.commons.beanutils.LazyDynaBean;
> > > > >> import
> > > org.apache.commons.jxpath.JXPathContext;
> > > > >> import org.apache.log4j.Logger;
> > > > >>
> > > > >> public class Main {
> > > > >>
> > > > >> private static final Logger log =
> > > > Logger.getLogger(Main.class);
> > > > >>
> > > > >> public static void main(String[]
> args) {
> > > > >>  log.info("Starting...");
> > > > >>  LazyDynaBean lazyDynaBean =
> new
> > > > LazyDynaBean(); //the transparent root.
> > > > >>  LazyDynaBean root = new
> LazyDynaBean();
> > > > >>  LazyDynaBean animal = new
> LazyDynaBean();
> > > > >>  LazyDynaBean dog = new
> LazyDynaBean();
> > > > >>  LazyDynaBean cat = new
> LazyDynaBean();
> > > > >>  LazyDynaBean boxer = new
> LazyDynaBean();
> > > > >>  LazyDynaBean labrador = new
> > > LazyDynaBean();
> > > > >>  LazyDynaBean tiger1 = new
> LazyDynaBean();
> > > > >>  LazyDynaBean tiger2 = new
> LazyDynaBean();
> > > > >>  LazyDynaBean tiger3 = new
> LazyDynaBean();
> > > > >>  LazyDynaBean lion = new
> LazyDynaBean();
> > > > >>  //set the @objectName
> property of each
> > > bean,
> > > > user UPPER to make them
> > > > >> distinct for examples.
> > > > >> 
> root.set("objectName","ROOT");
> > > > >> 
> animal.set("objectName","ANIMAL");
> > > > >>  dog.set("objectName","DOG");
> > > > >>  cat.set("objectName","CAT");
> > > > >> 
> boxer.set("objectName","BOXER");
> > > > >> 
> labrador.set("objectName","LABRADOR");
> > > > >> 
> tiger1.set("objectName","TIGER-ONE");
> > > > >> 
> tiger2.set("objectName","TIGER-TWO");
> > > > >> 
> tiger3.set("objectName","TIGER-THREE");
> > > > >> 
> lion.set("objectName","LION");
> > > > >>  //build the bean hierarchy.
> > > > >>  lazyDynaBean.set("root",0,
> root);
> > > > >>  root.set("animal",0,
> animal);
> > > > >>  animal.set("dog",0,dog);
> > > > >>  animal.set("cat",0,cat);
> > > > >> 
> dog.set("labrador",0,labrador);
> > > > >>  dog.set("boxer",0, boxer);
> > > > >> 
> cat.set("tiger",0,tiger1);//duplicate
> > > > >> 
> cat.set("tiger",1,tiger2);//duplicate
> > > > >> 
> cat.set("tiger",2,tiger3);//duplicate
> > > > >>  cat.set("lion",0,lion);
> > > > >>
> > > > >>
> > > >    JXPathContext context =
> > > > JXPathContext.newContext(lazyDynaBean);
> > > > >>
> > > > >>     
>    //these all
> > > > work
> > > > >>
> > > >   
> runEvaluation("/root/animal/dog",
> > > > context); //absolute & single
> > > > >>
> > > >   
> runEvaluation("/root/animal/cat/tiger[2]",
> > > > context); //absolute &
> > > > >> single
> > > > >>
> > > >   
> runEvaluation("/root/animal/cat/tiger",
> > > > context); //absolute &
> > > > >> multiple
> > > > >>     
>    //everything
> > > > below fails
> > > > >>
> > > >   
> runEvaluation("/root/animal/cat/tiger[last()]",
> > > > context);
> > > > >> //absolute & single
> > > > >>
> > > >   
> runEvaluation("/root/animal/dog/*",
> > > > context); //absolute &
> > > > >> multiple
> > > > >>
> > > >    runEvaluation("//dog",
> context); //deep
> > > > search
> > > > >>
> > > >    runEvaluation("//dog/*",
> context);//deep
> > > > multiple
> > > > >>
> > > >   
> runEvaluation("//cat/*[objectName='LION']",
> > > > context);//deep filter
> > > > >>
> > > > >> }
> > > > >>
> > > > >>
> > > > >>  public static void
> runEvaluation(String
> > > > expression,JXPathContext
> > > > >> context){
> > > > >>  log.info("About to evaulate
> the
> > > expression:
> > > > "+expression);
> > > > >>     
>    try {
> > > > >> Object value =
> context.getValue(expression);
> > > > >>  //we got a single result.
> > > > >>  if (value instanceof
> LazyDynaBean) {
> > > > >>  LazyDynaBean r =
> > > > (LazyDynaBean)context.getValue(expression);
> > > > >>  log.info("Ran '" + expression
> + "' and got
> > > > objectName='" +
> > > > >> r.get("objectName") + "'");
> > > > >>
> > > > >>  }
> > > > >>  //we got multiple results
> > > > >>  else if (value instanceof
> ArrayList) {
> > > > >>  String titles = "";
> > > > >>  for (LazyDynaBean bean :
> > > > ((ArrayList<LazyDynaBean>) value )){
> > > > >>  titles +=
> (bean.get("objectName")+",");
> > > > >>  }
> > > > >>  log.info("Ran " + expression
> + " and got
> > > > "+((ArrayList)value).size()+"
> > > > >> results: "+titles);
> > > > >>  }
> > > > >>  //we got a non-dyna bean.
> > > > >>  else {
> > > > >>  log.info("Ran '" + expression
> + "' and got
> > > a
> > > > class '" +
> > > > >> value.getClass().getName() + "'
> with
> > > toString() '"
> > > > +value.toString() + "'");
> > > > >>  }
> > > > >>  } catch (Exception e) {
> > > > >>  // TODO Auto-generated catch
> block
> > > > >>  log.error("Failed to
> evaluate
> > > > "+expression,e);
> > > > >>  }
> > > > >>  }
> > > > >> }
> > > > >>
> > > > >>
> > > > >>
> > > > >>
> > > > >> On Fri, Feb 27, 2009 at 3:56 AM,
> Matt Benson
> > > > <gudnabrsam@yahoo.com>wrote:
> > > > >>
> > > > >>>
> > > > >>> Those paths work for me. 
> Maybe
> > > something
> > > > else is going awry?
> > > > >>>
> > > > >>> -Matt
> > > > >>>
> > > > >>> --- On Thu, 2/26/09, Andrew
> Hughes <ahhughes@gmail.com>
> > > > wrote:
> > > > >>>
> > > > >>> > From: Andrew Hughes <ahhughes@gmail.com>
> > > > >>> > Subject: Re: JXPath over
> Generic
> > > > Collection<?>, How?
> > > > >>> > To: "Commons Users List"
> <user@commons.apache.org>
> > > > >>> > Date: Thursday, February
> 26, 2009,
> > > 12:53
> > > > AM
> > > > >>> > Many queries don't
> work,  I
> > > > >>> > can't get any results for
> the
> > > following
> > > > (code
> > > > >>> > taken from previous
> email)...
> > > > >>> >
> > > > >>> >
> > > >
> runEvaluation("/root/animal/cat/tiger[last()]",
> > > context);
> > > > >>> > //absolute
> > > > >>> > & single
> > > > >>> >
> > > > >>> >
> runEvaluation("/root/animal/dog/*",
> > > > context); //absolute
> > > > >>> > & multiple
> > > > >>> >
> > > >    runEvaluation("//dog",
> > > > >>> > context); //deep search
> > > > >>> >
> > > >    runEvaluation("//dog/*",
> > > > >>> > context);//deep multiple
> > > > >>> >
> > > > >>> >
> > > > runEvaluation("//cat/*[objectName='LION']",
> > > context);//deep
> > > > >>> > filter
> > > > >>> >
> > > > >>> > These are the really
> interesting
> > > benefits
> > > > on xpath that I
> > > > >>> > would dearly like
> > > > >>> > to have.
> > > > >>> >
> > > > >>> > A Huge Thanks once again
> for your
> > > reply
> > > > Matt!!! :)
> > > > >>> >
> > > > >>> >
> > > > >>> >
> > > > >>> > On Thu, Feb 26, 2009 at
> 10:55 AM,
> > > Matt
> > > > Benson <gudnabrsam@yahoo.com>
> > > > >>> > wrote:
> > > > >>> >
> > > > >>> > >
> > > > >>> > > How so?  If you
> simply treat
> > > > the name property as
> > > > >>> > an element rather than an
> > > > >>> > > attribute, you're
> done, no?
> > > > >>> > >
> > > > >>> > > -Matt
> > > > >>> > >
> > > > >>> > > --- On Wed, 2/25/09,
> Andrew
> > > Hughes
> > > > <ahhughes@gmail.com>
> > > > >>> > wrote:
> > > > >>> > >
> > > > >>> > > > From: Andrew
> Hughes <ahhughes@gmail.com>
> > > > >>> > > > Subject: Re:
> JXPath over
> > > > Generic
> > > > >>> > Collection<?>, How?
> > > > >>> > > > To: "Commons
> Users List"
> > > <user@commons.apache.org>
> > > > >>> > > > Date: Wednesday,
> February
> > > 25,
> > > > 2009, 6:22 PM
> > > > >>> > > > Indeed Matt, you
> are
> > > correct
> > > > and I do
> > > > >>> > > > apologize... but
> I must
> > > say I
> > > > find
> > > > >>> > > > your emailed
> explanation
> > > much
> > > > better. Kudos &
> > > > >>> > Thanks!
> > > > >>> > > > I'll (finally)
> get a
> > > chance to
> > > > work on this
> > > > >>> > tomorrow, but I
> > > > >>> > > > think I am
> still
> > > > >>> > > > stuck :'(
> > > > >>> > > >
> > > > >>> > > >
> > > > >>> > > > Cheers for
> everything so
> > > > far!!!!
> > > > >>> > > >
> > > > >>> > > >
> > > > >>> > > > On Tue, Feb 24,
> 2009 at
> > > 1:43
> > > > PM, Matt Benson
> > > > >>> > <gudnabrsam@yahoo.com>
> > > > >>> > > > wrote:
> > > > >>> > > >
> > > > >>> > > > >
> > > > >>> > > > > I won't get
> to look
> > > at
> > > > this again at least
> > > > >>> > before
> > > > >>> > > > tomorrow (9PM
> for me now
> > > > >>> > > > > and still
> have some
> > > > late-night $work to look
> > > > >>> > at), but
> > > > >>> > > > I thought I
> would
> > > > >>> > > > > mention
> straight off
> > > that
> > > > the @name feature
> > > > >>> > actually
> > > > >>> > > > IS mentioned in
> the
> > > > >>> > > > > userguide
> under the
> > > > section about working
> > > > >>> > with
> > > > >>> > > >
> (java.util.)Maps.  If
> > > you
> > > > >>> > > > > have a
> suggestion of
> > > where
> > > > in the guide
> > > > >>> > would be
> > > > >>> > > > another good
> place to
> > > > >>> > > > > mention it
> as a
> > > caveat
> > > > and/or even the
> > > > >>> > wording to use,
> > > > >>> > > > feel free to
> open a
> > > > >>> > > > >
> documentation issue
> > > in
> > > > JIRA for it.
> > > > >>> > > > >
> > > > >>> > > > > TBC,
> > > > >>> > > > > Matt
> > > > >>> > > > >
> > > > >>> > > > > --- On Mon,
> 2/23/09,
> > > > Andrew Hughes <ahhughes@gmail.com>
> > > > >>> > > > wrote:
> > > > >>> > > > >
> > > > >>> > > > > > From:
> Andrew
> > > Hughes
> > > > <ahhughes@gmail.com>
> > > > >>> > > > > >
> Subject: Re:
> > > JXPath
> > > > over Generic
> > > > >>> > > >
> Collection<?>, How?
> > > > >>> > > > > > To:
> "Commons
> > > Users
> > > > List" <user@commons.apache.org>
> > > > >>> > > > > > Date:
> Monday,
> > > > February 23, 2009, 6:24
> > > > >>> > PM
> > > > >>> > > > > > Hi
> Matt,
> > > > >>> > > > > > Thanks
> HEAPS for
> > > you
> > > > reply, I am really
> > > > >>> > really
> > > > >>> > > > really
> > > > >>> > > > > >
> grateful. I
> > > think
> > > > that
> > > > >>> > > > > > I
> have
> > > progressed
> > > > just a little with
> > > > >>> > this but
> > > > >>> > > > there are
> > > > >>> > > > > > still
> some BIG
> > > > >>> > > > > >
> shortfalls with
> > > this.
> > > > I've attached
> > > > >>> > code that
> > > > >>> > > > should run
> > > > >>> > > > > > out
> the box and
> > > is
> > > > >>> > > > > > based
> on
> > > previous
> > > > emails. If I can get
> > > > >>> > the
> > > > >>> > > > expressions
> > > > >>> > > > > > below
> to
> > > correctly
> > > > >>> > > > > >
> evaluate I would
> > > be
> > > > heaps happy.
> > > > >>> > > > > >
> > > > >>> > > > > > Thanks
> heaps
> > > again,
> > > > hopefully this will
> > > > >>> > work soon
> > > > >>> > > > enough.
> > > > >>> > > > > >
> > > > >>> > > > > > p.s. I
> can
> > > understand
> > > > the 'name' vs
> > > > >>> > '@name',
> > > > >>> > > > perhaps the
> > > > >>> > > > > >
> userguide could
> > > > >>> > > > > >
> mention this is
> > > about
> > > > all I can add.
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> > > > > >
> code...
> > > > >>> > > > > >
> > > > >>> > > > > >
> package rnd;
> > > > >>> > > > > >
> > > > >>> > > > > >
> import
> > > > java.util.ArrayList;
> > > > >>> > > > > >
> > > > >>> > > > > >
> import
> > > > >>> > > >
> > > > org.apache.commons.beanutils.LazyDynaBean;
> > > > >>> > > > > >
> import
> > > > >>> >
> > > org.apache.commons.jxpath.JXPathContext;
> > > > >>> > > > > >
> import
> > > > org.apache.log4j.Logger;
> > > > >>> > > > > >
> > > > >>> > > > > > public
> class
> > > Main {
> > > > >>> > > > > >
> > > > >>> > > > > >
> private static
> > > final
> > > > Logger log =
> > > > >>> > > > > >
> > > > Logger.getLogger(Main.class);
> > > > >>> > > > > >
> > > > >>> > > > > > public
> static
> > > void
> > > > main(String[] args)
> > > > >>> > {
> > > > >>> > > > > >
> > > > log.info("Starting...");
> > > > >>> > > > > >
> LazyDynaBean
> > > > lazyDynaBean = new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > //the
> > > > >>> > > > > >
> transparent
> > > root.
> > > > >>> > > > > >
> LazyDynaBean
> > > root =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > animal =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean dog
> > > =
> > > > new LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean cat
> > > =
> > > > new LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > boxer =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > labrador
> > > > = new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > tiger1 =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > tiger2 =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > tiger3 =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > >
> LazyDynaBean
> > > lion =
> > > > new
> > > > >>> > LazyDynaBean();
> > > > >>> > > > > > //set
> the
> > > @objectName
> > > > property of each
> > > > >>> > bean, user
> > > > >>> > > > UPPER to
> > > > >>> > > > > > make
> them
> > > > >>> > > > > >
> distinct for
> > > > examples.
> > > > >>> > > > > >
> > > > root.set("objectName","ROOT");
> > > > >>> > > > > >
> > > > animal.set("objectName","ANIMAL");
> > > > >>> > > > > >
> > > > dog.set("objectName","DOG");
> > > > >>> > > > > >
> > > > cat.set("objectName","CAT");
> > > > >>> > > > > >
> > > > boxer.set("objectName","BOXER");
> > > > >>> > > > > >
> > > > labrador.set("objectName","LABRADOR");
> > > > >>> > > > > >
> > > > tiger1.set("objectName","TIGER-ONE");
> > > > >>> > > > > >
> > > > tiger2.set("objectName","TIGER-TWO");
> > > > >>> > > > > >
> > > > >>> >
> > > tiger3.set("objectName","TIGER-THREE");
> > > > >>> > > > > >
> > > > lion.set("objectName","LION");
> > > > >>> > > > > >
> //build the
> > > bean
> > > > hierarchy.
> > > > >>> > > > > >
> > > > lazyDynaBean.set("root",0, root);
> > > > >>> > > > > >
> > > root.set("animal",0,
> > > > animal);
> > > > >>> > > > > >
> > > > animal.set("dog",0,dog);
> > > > >>> > > > > >
> > > > animal.set("cat",0,cat);
> > > > >>> > > > > >
> > > > dog.set("labrador",0,labrador);
> > > > >>> > > > > >
> > > dog.set("boxer",0,
> > > > boxer);
> > > > >>> > > > > >
> > > > cat.set("tiger",0,tiger1);//duplicate
> > > > >>> > > > > >
> > > > cat.set("tiger",1,tiger2);//duplicate
> > > > >>> > > > > >
> > > > cat.set("tiger",2,tiger3);//duplicate
> > > > >>> > > > > >
> > > > cat.set("lion",0,lion);
> > > > >>> > > > > >
> > > > >>> > > >   
> JXPathContext
> > > > context =
> > > > >>> > > > > >
> > > > >>> >
> > > JXPathContext.newContext(lazyDynaBean);
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> >    //these all
> > > > >>> > > > work
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > runEvaluation("/root/animal/dog",
> > > > >>> > context);
> > > > >>> > > > //absolute
> &
> > > > >>> > > > > >
> single
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> >
> > > > runEvaluation("/root/animal/cat/tiger[2]",
> > > > >>> > > > context);
> > > > >>> > > > > >
> //absolute
> > > &
> > > > >>> > > > > >
> single
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > runEvaluation("/root/animal/cat/tiger",
> > > > >>> > context);
> > > > >>> > > > //absolute
> > > > >>> > > > > > &
> > > > >>> > > > > >
> multiple
> > > > >>> > > > > >
> > > > >>> > > >   
> //everything below
> > > > fails
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> >
> > > >
> runEvaluation("/root/animal/cat/tiger[last()]",
> > > > >>> > > > context);
> > > > >>> > > > > >
> //absolute
> > > > >>> > > > > > &
> single
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > runEvaluation("/root/animal/dog/*",
> > > > >>> > context);
> > > > >>> > > > //absolute
> > > > >>> > > > > > &
> multiple
> > > > >>> > > > > >
> > > > >>> > > >
> > > > runEvaluation("//dog",
> > > > >>> > > > > >
> context);
> > > //deep
> > > > search
> > > > >>> > > > > >
> > > > >>> > > >
> > > > runEvaluation("//dog/*",
> > > > >>> > > > > >
> context);//deep
> > > > multiple
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> >
> > > > runEvaluation("//cat/*[objectName='LION']",
> > > > >>> > > > context);//deep
> > > > >>> > > > > >
> filter
> > > > >>> > > > > >
> > > > >>> > > > > > }
> > > > >>> > > > > > 
> public static
> > > > void
> > > > >>> > runEvaluation(String
> > > > >>> > > > > >
> > > > expression,JXPathContext context){
> > > > >>> > > > > >
> log.info("About
> > > to
> > > > evaulate the
> > > > >>> > expression:
> > > > >>> > > > "+expression);
> > > > >>> > > > > >
> > > > >>> >    try {
> > > > >>> > > > > > Object
> value =
> > > > >>> >
> context.getValue(expression);
> > > > >>> > > > > > //we
> got a
> > > single
> > > > result.
> > > > >>> > > > > > if
> (value
> > > instanceof
> > > > LazyDynaBean) {
> > > > >>> > > > > >
> LazyDynaBean r
> > > =
> > > > >>> > > > > >
> > > > >>> >
> > > > (LazyDynaBean)context.getValue(expression);
> > > > >>> > > > > >
> log.info("Ran '"
> > > +
> > > > expression + "' and
> > > > >>> > got
> > > > >>> > > > objectName='" +
> > > > >>> > > > > >
> > > r.get("objectName") +
> > > > "'");
> > > > >>> > > > > > 
> }
> > > > >>> > > > > > //we
> got
> > > multiple
> > > > results
> > > > >>> > > > > > else
> if (value
> > > > instanceof ArrayList) {
> > > > >>> > > > > > String
> titles =
> > > "";
> > > > >>> > > > > > for
> > > (LazyDynaBean
> > > > bean :
> > > > >>> > > >
> > > > ((ArrayList<LazyDynaBean>)
> > > > >>> > > > > > value
> )){
> > > > >>> > > > > > titles
> +=
> > > > >>> >
> (bean.get("objectName")+",");
> > > > >>> > > > > > }
> > > > >>> > > > > >
> log.info("Ran "
> > > +
> > > > expression + " and
> > > > >>> > got
> > > > >>> > > > > >
> > > > "+((ArrayList)value).size()+"
> > > > >>> > > > > >
> results:
> > > "+titles);
> > > > >>> > > > > > }
> > > > >>> > > > > > //we
> got a
> > > non-dyna
> > > > bean.
> > > > >>> > > > > > else
> {
> > > > >>> > > > > >
> log.info("Ran '"
> > > +
> > > > expression + "' and
> > > > >>> > got a
> > > > >>> > > > class '" +
> > > > >>> > > > > >
> > > > value.getClass().getName() + "' with
> > > > >>> > toString()
> > > > >>> > > > '"
> > > > >>> > > > > >
> > > +value.toString() +
> > > > "'");
> > > > >>> > > > > > }
> > > > >>> > > > > > }
> catch
> > > (Exception e)
> > > > {
> > > > >>> > > > > >
> log.error(e);
> > > > >>> > > > > > }
> > > > >>> > > > > > }
> > > > >>> > > > > > }
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> > > > > >
> > > > >>> > > > > > On
> Tue, Feb 24,
> > > 2009
> > > > at 8:58 AM, Matt
> > > > >>> > Benson
> > > > >>> > > > <gudnabrsam@yahoo.com>
> > > > >>> > > > > >
> wrote:
> > > > >>> > > > > >
> > > > >>> > > > > > >
> > > > >>> > > > > > >
> And the
> > > answer
> > > > is:
> > > > >>> > > > > > >
> > > > >>> > > > > >
> >  In
> > > JXPath,
> > > > a decision was
> > > > >>> > made to
> > > > >>> > > > overload the
> > > > >>> > > > > > name
> attribute
> > > to
> > > > refer to
> > > > >>> > > > > > >
> an
> > > "element"'s
> > > > property name WRT
> > > > >>> > its
> > > > >>> > > > parent. 
> The
> > > > >>> > > > > > reason
> this was
> > > done
> > > > was
> > > > >>> > > > > > >
> to support
> > > query
> > > > maps with
> > > > >>> > non-String keys
> > > > >>> > > > in
> > > > >>> > > > > >
> JXPath.  This
> > > > means that
> > > > >>> > > > > > >
> anytime
> > > you
> > > > actually want to refer
> > > > >>> > to a
> > > > >>> > > > property whose
> > > > >>> > > > > > name
> literally
> > > is
> > > > >>> > > > > > >
> "name", you
> > > must
> > > > treat it as a
> > > > >>> > child element
> > > > >>> > > > rather
> > > > >>> > > > > > than
> an
> > > > attribute.  So
> > > > >>> > > > > > >
> in your
> > > case you
> > > > could either
> > > > >>> > change "name"
> > > > >>> > > > to "title"
> > > > >>> > > > > > and
> query
> > > > >>> > > > > > >
> > > [@title='foo']
> > > > or simply use
> > > > >>> > [name='foo'].
> > > > >>> > > > > > >
> > > > >>> > > > > > >
> Regards,
> > > > >>> > > > > > >
> Matt
> > > > >>> > > > > > >
> > > > >>> > > > > > >
> --- On
> > > Mon,
> > > > 2/23/09, Matt Benson
> > > > >>> > <gudnabrsam@yahoo.com>
> > > > >>> > > > > >
> wrote:
> > > > >>> > > > > > >
> > > > >>> > > > > > >
> > From:
> > > Matt
> > > > Benson <gudnabrsam@yahoo.com>
> > > > >>> > > > > > >
> >
> > > Subject:
> > > > Re: JXPath over
> > > > >>> > Generic
> > > > >>> > > > > >
> > > Collection<?>,
> > > > How?
> > > > >>> > > > > > >
> > To:
> > > > "Commons Users List"
> > > > >>> > <user@commons.apache.org>
> > > > >>> > > > > > >
> > Date:
> > > > Monday, February 23,
> > > > >>> > 2009, 2:58
> > > > >>> > > > PM
> > > > >>> > > > > > >
> >
> > > > >>> > > > > > >
> > To
> > > follow
> > > > up, the 'name'
> > > > >>> > attribute in
> > > > >>> > > > particular
> > > > >>> > > > > > is
> what
> > > > >>> > > > > > >
> >
> > > doesn't
> > > > seem to be working
> > > > >>> > here (change
> > > > >>> > > > it to
> > > > >>> > > > > > e.g.
> 'game'
> > > > >>> > > > > > >
> > and
> > > it
> > > > works fine)... if you
> > > > >>> > could file
> > > > >>> > > > a bug it
> > > > >>> > > > > > would
> help
> > > > >>> > > > > > >
> > me
> > > remember
> > > > as I don't have
> > > > >>> > time to do
> > > > >>> > > > it myself
> > > > >>> > > > > > right
> this
> > > > >>> > > > > > >
> >
> > > minute.
> > > > >>> > > > > > >
> >
> > > > >>> > > > > > >
> > -Matt
> > > > >>> > > > > > >
> >
> > > > >>> > > > > > >
> > --- On
> > > Mon,
> > > > 2/23/09, Matt
> > > > >>> > Benson <gudnabrsam@yahoo.com>
> > > > >>> > > > > > >
> >
> > > wrote:
> > > > >>> > > > > > >
> >
> > > > >>> > > > > > >
> > >
> > > From:
> > > > Matt Benson <gudnabrsam@yahoo.com>
> > > > >>> > > > > > >
> > >
> > > > Subject: Re: JXPath over
> > > > >>> > Generic
> > > > >>> > > > > >
> > > Collection<?>,
> > > > >>> > > > > > >
> > How?
> > > > >>> > > > > > >
> > >
> > > To:
> > > > "Commons Users List"
> > > > >>> > <user@commons.apache.org>
> > > > >>> > > > > > >
> > >
> > > Date:
> > > > Monday, February
> > > > >>> > 23, 2009,
> > > > >>> > > > 12:27 PM
> > > > >>> > > > > > >
> > >
> > > > >>> > > > > > >
> > >
> > > > Andrew,
> > > > >>> > > > > > >
> >
> > > > >   I've
> > > > >>> > been meaning
> > > > >>> > > > to look
> > > > >>> > > > > > into
> this but
> > > > haven't
> > > > >>> > > > > > >
> > >
> > > > yet.  If you have
> > > > >>> > any
> > > > >>> > > > ready-to-run
> code
> > > > >>> > > > > > you
> can send
> > > > >>> > > > > > >
> > to
> > > > >>> > > > > > >
> > >
> > > the
> > > > list, that wouldn't
> > > > >>> > hurt...
> > > > >>> > > > > > >
> > >
> > > > >>> > > > > > >
> > >
> > > -Matt
> > > > >>> > > > > > >
> > >
> > > > >>> > > > > > >
> > >
> > > --- On
> > > > Mon, 2/23/09,
> > > > >>> > Andrew Hughes
> > > > >>> > > > <ahhughes@gmail.com>
> > > > >>> > > > > > >
> > >
> > > > wrote:
> > > > >>> > > > > > >
> > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > From: Andrew Hughes
> > > > >>> > <ahhughes@gmail.com>
> > > > >>> > > > > > >
> > >
> > > >
> > > > Subject: Re: JXPath
> > > > >>> > over
> > > > >>> > > > Generic
> > > > >>> > > > > > >
> >
> > > > Collection<?>,
> > > > >>> > > > > > >
> > >
> > > How?
> > > > >>> > > > > > >
> > >
> > > >
> > > > To: "Commons Users
> > > > >>> > List"
> > > > >>> > > > <user@commons.apache.org>
> > > > >>> > > > > > >
> > >
> > > >
> > > > Date: Monday,
> > > > >>> > February 23,
> > > > >>> > > > 2009, 5:42
> > > > >>> > > > > > AM
> > > > >>> > > > > > >
> > >
> > > >
> > > > OK, email #19 to
> > > > >>> > the list.
> > > > >>> > > > I'm both
> > > > >>> > > > > > >
> > >
> > > >
> > > > incredibly patient
> > > > >>> > and
> > > > >>> > > > skeptical that
> > > > >>> > > > > > >
> > >
> > > >
> > > > this will ever
> > > > >>> > work. I might
> > > > >>> > > > try and
> > > > >>> > > > > > run
> this in
> > > > >>> > > > > > >
> > a
> > > > >>> > > > > > >
> > >
> > > > debugger
> > > > >>> > > > > > >
> > >
> > > >
> > > > and track down
> > > > >>> > > > > > >
> > >
> > > >
> > > > "how" JXPath
> > > > >>> > traverses the
> > > > >>> > > > DynaBean....
> > > > >>> > > > > > but
> given
> > > > >>> > > > > > >
> > the
> > > > >>> > > > > > >
> > >
> > > >
> > > > reflection
> > > > >>> > involved
> > > > >>> > > > > > >
> > >
> > > >
> > > > that might be a
> > > > >>> > painful
> > > > >>> > > > task.
> > > > >>> > > > > > >
> > >
> > > >
> > > > --AH
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > On Tue, Feb 17,
> > > > >>> > 2009 at 1:11
> > > > >>> > > > PM, Andrew
> > > > >>> > > > > >
> Hughes
> > > > >>> > > > > > >
> > <ahhughes@gmail.com>
> > > > >>> > > > > > >
> > >
> > > >
> > > > wrote:
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > > Ping... if
> > > > >>> > anyone can
> > > > >>> > > > help with
> > > > >>> > > > > > this
> JXPath
> > > > >>> > > > > > >
> > >
> > > &
> > > > >>> > > > > > >
> > >
> > > >
> > > > DynaBeans problem
> > > > >>> > I'd be
> > > > >>> > > > > > >
> > >
> > > >
> > > > > REALLY
> > > > >>> > THANKFUL :)
> > > > >>> > > > > > >
> > >
> > > >
> > > > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > > On Fri, Feb
> > > > >>> > 13, 2009 at
> > > > >>> > > > 1:55 PM,
> > > > >>> > > > > >
> Andrew
> > > > >>> > > > > > >
> >
> > > Hughes
> > > > >>> > > > > > >
> > >
> > > <ahhughes@gmail.com>
> > > > >>> > > > > > >
> > >
> > > >
> > > > wrote:
> > > > >>> > > > > > >
> > >
> > > >
> > > > >
> > > > >>> > > > > > >
> > >
> > > >
> > > > >> Howdy,
> > > > >>> > > > > > >
> > >
> > > >
> > > > >> I've taken
> > > > >>> > Matt's
> > > > >>> > > > suggestion
> > > > >>> > > > > >
> onboard and
> > > > >>> > > > > > >
> > I
> > > > >>> > > > > > >
> > >
> > > have
> > > > >>> > > > > > >
> > >
> > > >
> > > > investigated
> > > > >>> > DynaBeans.
> > > > >>> > > > > > >
> > >
> > > >
> > > > >> These look
> > > > >>> > pretty
> > > > >>> > > > good for
> > > > >>> > > > > > all
> > > > >>> > > > > > >
> >
> > > intestive
> > > > >>> > > > > > >
> > >
> > > > purposes
> > > > >>> > > > > > >
> > >
> > > >
> > > > and there's a code
> > > > >>> > > > > > >
> > >
> > > >
> > > > >> examples
> > > > >>> > below how
> > > > >>> > > > to build
> > > > >>> > > > > > the
> data
> > > > >>> > > > > > >
> > >
> > > > structure:
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > >
> > > > >> + root
> > > > >>> > > > [@name="ROOT"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > >    +
> > > > >>> > > > > >
> animal
> > > > [@name="ANIMAL"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > 
>   + dog
> > > > >>> > > > > > >
> > >
> > > >
> > > > [@name="DOG"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > > >    +
> > > > >>> > boxer
> > > > >>> > > > [@name="BOXER"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > > >    +
> > > > >>> > labrador
> > > > >>> > > > > >
> > > [@name="LABRADOR"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > 
>   + cat
> > > > >>> > > > > > >
> > >
> > > >
> > > > [@name="CAT"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > > >    +
> > > > >>> > tiger
> > > > >>> > > > > >
> > > [@name="TIGER-ONE"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > > >    +
> > > > >>> > tiger
> > > > >>> > > > > >
> > > [@name="TIGER-TWO"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > > >    +
> > > > >>> > tiger
> > > > >>> > > > > >
> > > > [@name="TIGER-THREE"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > > >    +
> > > > >>> > lion
> > > > >>> > > > [@name="LION"]
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > >
> > > > >> And the
> > > > >>> > code looks
> > > > >>> > > > like...
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > > > > > >
> > >
> > > >
> > > > >>
> > > > >>> > LazyDynaBean
> > > > >>> > > > > >
> lazyDynaBean =
> > > new
> > > > >>> > > > > > >
> > >
> > > >
> > > > LazyDynaBean();
> > > > >>> > //the
> > > > >>> > > > transpar
> > > > >>>
> > > > >> ...
> > > > >>
> > > > >> [Message clipped]
> > > > >
> > > > >
> > > > >
> > > >
> > >
> > >
> > >
> > >
> > >
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > > For additional commands, e-mail: user-help@commons.apache.org
> > >
> > >
> >
> >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> > For additional commands, e-mail: user-help@commons.apache.org
> >
> >
> 


      

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message