You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by dm...@apache.org on 2005/11/01 04:25:41 UTC

svn commit: r329964 - in /jakarta/commons/proper/jxpath/trunk/src: java/org/apache/commons/jxpath/ java/org/apache/commons/jxpath/ri/ java/org/apache/commons/jxpath/ri/axes/ java/org/apache/commons/jxpath/ri/compiler/ java/org/apache/commons/jxpath/ri/...

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>
      *   &lt;a xmlns="myns"&gt; 
      *     &lt;b&gt;109&lt;/b&gt;
      *   &lt;/a&gt; 
-     * </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: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org