Commons JXPath
  1. Commons JXPath
  2. JXPATH-154

Resetting the default namespace causes a serious endless loop when requesting .asPath() on a node.

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.3
    • Fix Version/s: 1.4
    • Labels:
      None
    • Environment:

      jxpath eclipse plugin from orbit

      Description

      sample smaller case:

      <...>
       <b:foo xmlns:b="bla" xmlns="test111">    <!--  No nodes are placed in the tree within ns "test111" but the attribute is still there.-->
        <b:bar>a</b:bar>                         <!-- is in ns 'bla' -->
        <test xmlns=""></test>                   <!-- does not have a namespace -->
       </b:foo>
      </...>
      

      when requesting .asPath() on the 'test' node, it loops in org.apache.commons.jxpath.ri.NamespaceResolver.getPrefix(NodePointer, String),
      and if it didn't loop it would create a wrong xpath '//b:fo/null:test' DOMNodePointer.asPath().

      So I think that the fix should be in org.apache.commons.jxpath.ri.model.dom.DOMNodePointer.asPath()

      ....
                          String ln = DOMNodePointer.getLocalName(node);
                          String nsURI = getNamespaceURI();
                          if (nsURI == null) {
                              buffer.append(ln);
                              buffer.append('[');
                              buffer.append(getRelativePositionByName()).append(']');
                          }
                          else {
                              String prefix = getNamespaceResolver().getPrefix(nsURI);
                              if (prefix != null) {
      ...
      

      should become

      ...
                          String ln = DOMNodePointer.getLocalName(node);
                          String nsURI = getNamespaceURI();
                          if (nsURI == null || nsURI.length() == 0) { // check for empty string which means that the node doesn't have a namespace.
                              buffer.append(ln);
                              buffer.append('[');
                              buffer.append(getRelativePositionByName()).append(']');
                          }
                          else {
                              String prefix = getNamespaceResolver().getPrefix(nsURI);
                              if (prefix != null) {
      ...
      

        Activity

          People

          • Assignee:
            Unassigned
            Reporter:
            Hugo de Almeida Cocharro
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development