[ https://issues.apache.org/jira/browse/JXPATH-50?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12462532 ]
Keith D Gregory commented on JXPATH-50: --------------------------------------- Sorry 'bout that :-) I think there were only 1 or 2 files that got changed, particularly if you delete the "enum" patch. Glad to see that JxPath development seems to be moving again. > [jxpath] does not properly handle NodeSet returned by extension function > ------------------------------------------------------------------------ > > Key: JXPATH-50 > URL: https://issues.apache.org/jira/browse/JXPATH-50 > 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: https://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]