Uploaded image for project: 'Commons JXPath'
  1. Commons JXPath
  2. JXPATH-50

does not properly handle NodeSet returned by extension function

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 1.2 Final
    • 1.3
    • None
    • Operating System: other
      Platform: All

    • 38841

    Description

      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).

      Attachments

        1. ASF.LICENSE.NOT.GRANTED--jxpath-nodeset-functions.patch
          5 kB
          Keith D Gregory
        2. jxpath-50.patch.txt
          3 kB
          Matthew Jason Benson

        Activity

          People

            Unassigned Unassigned
            kgregory@healthmarketscience.com Keith D Gregory
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: