commons-dev mailing list archives

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


Keith D Gregory commented on JXPATH-50:

No problem. I hereby grant the Apache Software Foundation rights to this patch as described
by "Individual Contributor License Agreement V2.0" (
), submitted separately.

> [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