Thanks Matt for your response :).

I believe that JXPath is working the way that it's supposed to in
regards to what I'm doing.

I think I'm going to try out a DynamicPropertyHandler that will return
a list of no properties if I'm encountering an object that I've
already encountered before.  I'm guessing that this will require me to
create a Set that will keep track of all of the nodes that I've
already encountered.

Hopefully, I'll be able to implement a breadth first search by
customizing NodeIterator (I hope that's the right hook).

Thanks,

Warren

On Jan 25, 2008 9:50 AM, Matt Benson <[EMAIL PROTECTED]> wrote:
>
> --- Warren Liang <[EMAIL PROTECTED]> wrote:
>
> > Hi all,
> >
> > How does JXPath handle circular object paths?  My
> > object graph is can
> > have circular references to objects that are the
> > same instance (i.e.
> > obj1 == obj2), or are different instances but have
> > equivalent values
> > (i.e. obj1.equals(obj2))
> >
> > Right now, I'm evaluating JXPath expressions that do
> > not match
> > anything in the object graph and it seems like it's
> > going through an
> > infinite loop.  Some of my expressions use the
> > "match anywhere"
> > operator (i.e. //).
>
> If you are encountering behavior that feels wrong to
> you, feel welcome to open an issue in JIRA, preferably
> with some sample code that can easily be turned into a
> standalone JUnit test.
>
> >
> > Does JXPath use a breadth first search or a depth
> > first search through
> > the object graph?
> >
>
> In my experience, not being the original author of the
> code, JXPath determines matching nodes for a given
> level, then applies subsequent levels in
> recursive-descent fashion to each node selected at the
> current level.  So given:
>
> <a>
>   <b>
>     <c /><c />
>   </b>
>   <b>
>     <c /><c />
>   </b>
>   <b>
>     <c /><c />
>   </b>
> </a>
>
> and path "/a/b/c", JXPath will determine that a[1]
> matches the first step and apply the next step.  Now
> it determines that a[1]/b[1], a[1]/b[2] and a[1]/b[3]
> match the second step.  Then it applies the third step
> to a[1]/b[1], a[1]/b[2], and a[1]/b[3] in succession.
> I interpret this as being depth first.
>
> > Ideally, I'd be able to tell JXPath to recurse a
> > maximum depth, or to
> > recognize that a node has already been traversed
> > Are there hooks for
> > me to do this?
> >
>
> I suppose nothing would ever stop you from
> implementing a custom "I haven't seen this before"
> function to guard each step, but it might get a little
> heavy at RT depending on the size of your graph.  Off
> the top of my head I can't remember what, if any,
> safeguards are built into JXPath to prevent infinite
> recursion, hence my initial suggestion (and attempt to
> put the onus onto you ;) ) that you submit reports for
> problems encountered.
>
> Is any of this helpful whatsoever?
> -Matt
>
> > Thanks,
> >
> > Warren Liang
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> > [EMAIL PROTECTED]
> > For additional commands, e-mail:
> > [EMAIL PROTECTED]
> >
> >
>
>
>
>       
> ____________________________________________________________________________________
> Never miss a thing.  Make Yahoo your home page.
> http://www.yahoo.com/r/hs
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to