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>
* <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: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org