commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrew Hughes <ahhug...@gmail.com>
Subject Re: JXPath over Generic Collection<?>, How?
Date Wed, 11 Mar 2009 06:12:56 GMT
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
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message