Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.3
-
None
-
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) { ...