Commons JXPath
  1. Commons JXPath
  2. JXPATH-97

Incomplete handling of undefined namespaces

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.2 Final, Nightly Builds
    • Fix Version/s: 1.3
    • Labels:
      None

      Description

      Mcduffey, Joe <jdmcduf@nsa.gov>

      Can someone tell me how to register namespaces so that attributes with namespaces does not cause the exception

      org.apache.common.ri.model.dom.DOMNodePointer.createAttribute
      unknown namespace prefix: xsi

      For example the following
      <ElementA A:myAttr="Mytype">
      <B:ElementB>MY VALUE</B:ElementB>
      </ElementA>

      Would result in the following exception:
      org.apache.common.ri.model.dom.DOMNodePointer.createAttribute
      unknown namespace prefix: A

      FYI: In this example there was a namespace decaration in the file and I also manually called the
      registerNamespace(A,"/http...");
      registerNamespace(B,"/http...");

      There was no problem encountered for elements. Only attributes. Can someone help? Thanks.

      1. NamespacesTest.java
        1.0 kB
        Sergey Vladimirov
      2. patch.txt
        19 kB
        Sergey Vladimirov

        Activity

        Hide
        Matt Benson added a comment -

        fixed createPathAndSetValue() in trunk.

        Show
        Matt Benson added a comment - fixed createPathAndSetValue() in trunk.
        Hide
        Matt Benson added a comment -

        reopening to note that Joe McD also reported that createPathAndSetValue() wasn't working for ext-reg'd ns'd attrs.

        Show
        Matt Benson added a comment - reopening to note that Joe McD also reported that createPathAndSetValue() wasn't working for ext-reg'd ns'd attrs.
        Hide
        Matt Benson added a comment -

        elements handled.

        Show
        Matt Benson added a comment - elements handled.
        Hide
        Sergey Vladimirov added a comment -

        Matt,

        sorry for the bad patch. But one of the main point is change in DOMNodePointer:

        @@ -102,9 +107,12 @@
        return true;
        }

        • if (wildcard
        • testName.getName()
        • .equals(DOMNodePointer.getLocalName(node))) {
          + // the same as for attribute ( DOMAttributeIterator::testAttr() )
          + if (equalStrings(nodePrefix, testPrefix)) { + return true; + }

          +
          + if (wildcard || testName.getName().equals(nodeLocalName))

          { String nodeNS = DOMNodePointer.getNamespaceURI(node); return equalStrings(namespaceURI, nodeNS); }
        Show
        Sergey Vladimirov added a comment - Matt, sorry for the bad patch. But one of the main point is change in DOMNodePointer: @@ -102,9 +107,12 @@ return true; } if (wildcard testName.getName() .equals(DOMNodePointer.getLocalName(node))) { + // the same as for attribute ( DOMAttributeIterator::testAttr() ) + if (equalStrings(nodePrefix, testPrefix)) { + return true; + } + + if (wildcard || testName.getName().equals(nodeLocalName)) { String nodeNS = DOMNodePointer.getNamespaceURI(node); return equalStrings(namespaceURI, nodeNS); }
        Hide
        Matt Benson added a comment -

        reopening... elements still don't work apparently for prefixes that are only declared externally?

        Show
        Matt Benson added a comment - reopening... elements still don't work apparently for prefixes that are only declared externally?
        Hide
        Matt Benson added a comment -

        This should work in trunk. Thanks all!

        Show
        Matt Benson added a comment - This should work in trunk. Thanks all!

          People

          • Assignee:
            Unassigned
            Reporter:
            Sergey Vladimirov
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development