Author: dmitri Date: Mon Oct 31 19:25:32 2005 New Revision: 329964 URL: http://svn.apache.org/viewcvs?rev=329964&view=rev Log: Another attempt at closing bug 32360.
See http://issues.apache.org/bugzilla/show_bug.cgi?id=32360 Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathContext.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Path.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodeIterator.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodeIterator.java jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/Vendor.xml jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathContext.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathContext.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathContext.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/JXPathContext.java Mon Oct 31 19:25:32 2005 @@ -862,32 +862,29 @@ } /** - * If true, default namespace declarations in XML are ignored. Thus, if you - * have this XML: + * Binds a namespace URI for XPath QNames that are missing the prefix. + * If you have this XML: * <pre> * <a xmlns="myns"> * <b>109</b> * </a> - * </pos> - * you can use the path "/a/b" to retrieve the contents of the nested element. - * <p> - * If false (default), you have to do the default thing, which is this: + * </pre> + * and * <pre> - * context.registerNamespace("ns", "myns"); - * context.getValue("/ns:a/ns:b"); + * context.setDefaultNamespaceURI("myns"); * </pre> - */ - public boolean isDefaultNamespaceIgnored() { - return false; - } - - - /** - * Changing this flag to true makes jxpath forgive missing default namespace specification. - * @see #isDefaultNamespaceIgnored(boolean) - */ - public void setDefaultNamespaceIgnored(boolean flag) { + * you can use the path "/a/b" instead of "/foo:a/foo:b" (the assumption + * here is that the prefix "foo" is bound to "myns" by calling + * registerNamespace). + */ + public void registerDefaultNamespace(String uri) { throw new UnsupportedOperationException( "Namespace registration is not implemented by " + getClass()); } + + /** + */ + public String getDefaultNamespaceURI() { + return null; + } } Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/JXPathContextReferenceImpl.java Mon Oct 31 19:25:32 2005 @@ -112,7 +112,7 @@ private Pointer contextPointer; protected NamespaceResolver namespaceResolver; - private boolean defaultNamespaceIgnored; + private String defaultNamespaceURI; // The frequency of the cache cleanup private static final int CLEANUP_THRESHOLD = 500; @@ -683,23 +683,23 @@ public NamespaceResolver getNamespaceResolver() { namespaceResolver.seal(); - namespaceResolver.setDefaultNamespaceIgnored(isDefaultNamespaceIgnored()); + namespaceResolver.registerDefaultNamespaceURI(getDefaultNamespaceURI()); return namespaceResolver; } - public boolean isDefaultNamespaceIgnored() { - if (defaultNamespaceIgnored) { - return true; + public String getDefaultNamespaceURI() { + if (defaultNamespaceURI != null) { + return defaultNamespaceURI; } if (parentContext != null) { - return parentContext.isDefaultNamespaceIgnored(); + return parentContext.getDefaultNamespaceURI(); } - return false; + return null; } - public void setDefaultNamespaceIgnored(boolean flag) { - defaultNamespaceIgnored = flag; + public void registerDefaultNamespace(String uri) { + defaultNamespaceURI = uri; } /** Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/NamespaceResolver.java Mon Oct 31 19:25:32 2005 @@ -35,8 +35,8 @@ protected HashMap namespaceMap = new HashMap(); protected HashMap reverseMap; protected NodePointer pointer; + private String defaultNamespaceURI; private boolean sealed; - private boolean defaultNamespaceIgnored; public NamespaceResolver(NamespaceResolver parent) { this.parent = parent; @@ -116,12 +116,12 @@ return prefix; } - public boolean isDefaultNamespaceIgnored() { - return defaultNamespaceIgnored; + public String getDefaultNamespaceURI() { + return defaultNamespaceURI; } - public void setDefaultNamespaceIgnored(boolean flag) { - this.defaultNamespaceIgnored = flag; + public void registerDefaultNamespaceURI(String uri) { + this.defaultNamespaceURI = uri; } public boolean isSealed() { Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/axes/SimplePathInterpreter.java Mon Oct 31 19:25:32 2005 @@ -815,11 +815,11 @@ NodeTest nodeTest = step.getNodeTest(); QName qname = ((NodeNameTest) nodeTest).getNodeName(); String prefix = qname.getPrefix(); - if (prefix != null) { - String namespaceURI = context.getJXPathContext() - .getNamespaceURI(prefix); + String namespaceURI = prefix != null + ? context.getJXPathContext().getNamespaceURI(prefix) + : context.getJXPathContext().getDefaultNamespaceURI(); + if (namespaceURI != null) { nodeTest = new NodeNameTest(qname, namespaceURI); - } return pointer.childIterator(nodeTest, false, null); } Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Path.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Path.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Path.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/compiler/Path.java Mon Oct 31 19:25:32 2005 @@ -261,9 +261,10 @@ if (nodeTest instanceof NodeNameTest) { QName qname = ((NodeNameTest) nodeTest).getNodeName(); String prefix = qname.getPrefix(); - if (prefix != null) { - String namespaceURI = context.getJXPathContext() - .getNamespaceURI(prefix); + String namespaceURI = prefix != null + ? context.getJXPathContext().getNamespaceURI(prefix) + : context.getJXPathContext().getDefaultNamespaceURI(); + if (namespaceURI != null) { nodeTest = new NodeNameTest(qname, namespaceURI); } } Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodeIterator.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodeIterator.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodeIterator.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodeIterator.java Mon Oct 31 19:25:32 2005 @@ -140,8 +140,6 @@ } private boolean testChild() { - boolean ignoreNS = - parent.getNamespaceResolver().isDefaultNamespaceIgnored(); - return DOMNodePointer.testNode(child, nodeTest, ignoreNS); + return DOMNodePointer.testNode(child, nodeTest); } } Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/dom/DOMNodePointer.java Mon Oct 31 19:25:32 2005 @@ -80,17 +80,10 @@ } public boolean testNode(NodeTest test) { - return testNode(node, test, - getNamespaceResolver().isDefaultNamespaceIgnored()); + return testNode(node, test); } public static boolean testNode(Node node, NodeTest test) { - return testNode(node, test, false); - } - - public static boolean testNode(Node node, NodeTest test, - boolean ignoreDefaultNamespace) - { if (test == null) { return true; } @@ -111,10 +104,6 @@ if (wildcard || testName.getName() .equals(DOMNodePointer.getLocalName(node))) { - if (ignoreDefaultNamespace && testPrefix == null - && node.getPrefix() == null) { - return true; - } String nodeNS = DOMNodePointer.getNamespaceURI(node); return equalStrings(namespaceURI, nodeNS); } @@ -393,13 +382,10 @@ if (success) { NodeTest nodeTest; String prefix = name.getPrefix(); - if (prefix != null) { - String namespaceURI = context.getNamespaceURI(prefix); - nodeTest = new NodeNameTest(name, namespaceURI); - } - else { - nodeTest = new NodeNameTest(name); - } + String namespaceURI = prefix != null + ? context.getNamespaceURI(prefix) + : context.getDefaultNamespaceURI(); + nodeTest = new NodeNameTest(name, namespaceURI); NodeIterator it = childIterator(nodeTest, false, null); if (it != null && it.setPosition(index + 1)) { @@ -470,10 +456,10 @@ || buffer.charAt(buffer.length() - 1) != '/') { buffer.append('/'); } - String nsURI = getNamespaceURI(); String ln = DOMNodePointer.getLocalName(node); - - if (nsURI == null) { + String nsURI = getNamespaceURI(); + if (equalStrings(nsURI, + getNamespaceResolver().getDefaultNamespaceURI())) { buffer.append(ln); buffer.append('['); buffer.append(getRelativePositionByName()).append(']'); Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodeIterator.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodeIterator.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodeIterator.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodeIterator.java Mon Oct 31 19:25:32 2005 @@ -160,8 +160,6 @@ } private boolean testChild() { - boolean ignoreNS = - parent.getNamespaceResolver().isDefaultNamespaceIgnored(); - return JDOMNodePointer.testNode(parent, child, nodeTest, ignoreNS); + return JDOMNodePointer.testNode(parent, child, nodeTest); } } Modified: jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/java/org/apache/commons/jxpath/ri/model/jdom/JDOMNodePointer.java Mon Oct 31 19:25:32 2005 @@ -336,8 +336,7 @@ } public boolean testNode(NodeTest test) { - return testNode(this, node, test, - getNamespaceResolver().isDefaultNamespaceIgnored()); + return testNode(this, node, test); } public static boolean testNode( @@ -345,12 +344,6 @@ Object node, NodeTest test) { - return testNode(pointer, node, test, false); - } - - public static boolean testNode(NodePointer pointer, Object node, - NodeTest test, boolean ignoreDefaultNamespace) - { if (test == null) { return true; } @@ -371,10 +364,6 @@ if (wildcard || testName.getName() .equals(JDOMNodePointer.getLocalName(node))) { - if (ignoreDefaultNamespace && testPrefix == null - && ((Element)node).getNamespacePrefix().equals("")) { - return true; - } String nodeNS = JDOMNodePointer.getNamespaceURI(node); return equalStrings(namespaceURI, nodeNS); } @@ -510,13 +499,10 @@ if (success) { NodeTest nodeTest; String prefix = name.getPrefix(); - if (prefix != null) { - String namespaceURI = context.getNamespaceURI(prefix); - nodeTest = new NodeNameTest(name, namespaceURI); - } - else { - nodeTest = new NodeNameTest(name); - } + String namespaceURI = prefix != null + ? context.getNamespaceURI(prefix) + : context.getDefaultNamespaceURI(); + nodeTest = new NodeNameTest(name, namespaceURI); NodeIterator it = childIterator(nodeTest, false, null); @@ -595,7 +581,8 @@ String nsURI = getNamespaceURI(); String ln = JDOMNodePointer.getLocalName(node); - if (nsURI == null) { + if (equalStrings(nsURI, + getNamespaceResolver().getDefaultNamespaceURI())) { buffer.append(ln); buffer.append('['); buffer.append(getRelativePositionByName()).append(']'); Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/Vendor.xml URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/Vendor.xml?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/Vendor.xml (original) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/Vendor.xml Mon Oct 31 19:25:32 2005 @@ -47,10 +47,16 @@ <?report average only ?> </product> - <pos xmlns="temp"> + <pos xmlns="temp"> <register xmlns=""> <number>109</number> </register> </pos> + <pos xmlns="temp"> + <register> + <number>110</number> + </register> + </pos> + </vendor> Modified: jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java?rev=329964&r1=329963&r2=329964&view=diff ============================================================================== --- jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java (original) +++ jakarta/commons/proper/jxpath/trunk/src/test/org/apache/commons/jxpath/ri/model/XMLModelTestCase.java Mon Oct 31 19:25:32 2005 @@ -382,9 +382,10 @@ } public void testDefaultNamespaceIgnored() { - context.setDefaultNamespaceIgnored(true); - assertXPathValue(context, "vendor/pos//number", "109"); - context.setDefaultNamespaceIgnored(false); + context.registerDefaultNamespace("temp"); + assertXPathValueAndPointer(context, "//pos//number", "110", + "/node()[1]/pos[2]/register[1]/number[1]"); + context.registerDefaultNamespace(null); } public void testAxisChildIndexPredicate() { --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]