commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Matt Benson (JIRA)" <>
Subject [jira] Commented: (JXPATH-50) [jxpath] does not properly handle NodeSet returned by extension function
Date Fri, 05 Jan 2007 17:01:27 GMT


Matt Benson commented on JXPATH-50:

Keith, since you're watching... right, only 2 files.  Apparently there was no licensing at
the time you submitted your original patch.  When I just submitted my rework, I mistakenly
selected the grant option, but since the work is actually yours for the most part that was
wrong.  Probably if you clarify your intent that the original patch be incorporated (sounds
silly, huh?) it would be for the best here.


> [jxpath] does not properly handle NodeSet returned by extension function
> ------------------------------------------------------------------------
>                 Key: JXPATH-50
>                 URL:
>             Project: Commons JXPath
>          Issue Type: Bug
>    Affects Versions: 1.2 Final
>         Environment: Operating System: other
> Platform: All
>            Reporter: Keith D Gregory
>             Fix For: 1.3
>         Attachments: jxpath-50.patch.txt, jxpath-nodeset-functions.patch
> Per the documentation, my function is returning a BasicNodeSet containing zero
> or more pointers:
>   public static NodeSet observations(ExpressionContext context) {
>     // the cast below shouldn't break, as this is the only pointer type that
>     // makes sense in this context
>     List<NodePointer> ptrs = extractObservations(
>                                   (NodePointer)context.getContextNodePointer(), 
>                                   new ArrayList<NodePointer>());
>     BasicNodeSet result = new BasicNodeSet();
>     for (NodePointer ptr : ptrs) {
>       result.add(ptr);
>     }
>     return result;
>   }
> However, if I call JXPathContext.selectNodes("ems:observations()"), I'm getting
> a single node containing the BasicNodeSet. I notice that there is a testcase for
> functions that return NodeSets, but that it uses expressions that actually
> return the children of the NodeSet ("test:nodeSet()/name").
> There appear to be two problems. First, Expression.iterate() and
> Expression.iteratePointers() do not correctly recognize a NodeSet as something
> iterable. I've resolved this by reaching into the NodeSet and getting an
> iterator over its pointers.
> Second, Expression.PointerIterator doesn't recognize when it already has a
> pointer, and instead tries to wrap it in a new pointer. This ends up treating
> the pointer as a bean.
> I've made these changes, and written a testcase that uses an unadorned NodeSet
> function. I also found a class that used a variable named "enum", and changed
> this so that it would compile under 1.5.
> The patch is attached. It's relative to "commons-jxpath-1.2" (root of extract
> directory).

This message is automatically generated by JIRA.
If you think it was sent incorrectly contact one of the administrators:
For more information on JIRA, see:


To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message