Author: ab
Date: Fri Sep 17 19:05:22 2010
New Revision: 998261
URL: http://svn.apache.org/viewvc?rev=998261&view=rev
Log:
NUTCH-906 Nutch OpenSearch sometimes raises DOMExceptions.
Modified:
nutch/branches/branch-1.2/CHANGES.txt
nutch/branches/branch-1.2/src/java/org/apache/nutch/searcher/OpenSearchServlet.java
nutch/branches/branch-1.2/src/test/org/apache/nutch/searcher/TestOpenSearchServlet.java
Modified: nutch/branches/branch-1.2/CHANGES.txt
URL:
http://svn.apache.org/viewvc/nutch/branches/branch-1.2/CHANGES.txt?rev=998261&r1=998260&r2=998261&view=diff
==============================================================================
--- nutch/branches/branch-1.2/CHANGES.txt (original)
+++ nutch/branches/branch-1.2/CHANGES.txt Fri Sep 17 19:05:22 2010
@@ -2,6 +2,8 @@ Nutch Change Log
Release 1.2 - 08/07/2010
+* NUTCH-906 Nutch OpenSearch sometimes raises DOMExceptions (Asheesh Laroia
via ab)
+
* NUTCH-862 HttpClient null pointer exception (Sebastian Nagel via ab)
* NUTCH-905 Configurable file protocol parent directory crawling (Thorsten
Scherler, mattmann, ab)
Modified:
nutch/branches/branch-1.2/src/java/org/apache/nutch/searcher/OpenSearchServlet.java
URL:
http://svn.apache.org/viewvc/nutch/branches/branch-1.2/src/java/org/apache/nutch/searcher/OpenSearchServlet.java?rev=998261&r1=998260&r2=998261&view=diff
==============================================================================
---
nutch/branches/branch-1.2/src/java/org/apache/nutch/searcher/OpenSearchServlet.java
(original)
+++
nutch/branches/branch-1.2/src/java/org/apache/nutch/searcher/OpenSearchServlet.java
Fri Sep 17 19:05:22 2010
@@ -271,21 +271,21 @@ public class OpenSearchServlet extends H
}
private static Element addNode(Document doc, Node parent, String name) {
- Element child = doc.createElement(name);
+ Element child = doc.createElement(getLegalTagName(name));
parent.appendChild(child);
return child;
}
private static void addNode(Document doc, Node parent,
String name, String text) {
- Element child = doc.createElement(name);
+ Element child = doc.createElement(getLegalTagName(name));
child.appendChild(doc.createTextNode(getLegalXml(text)));
parent.appendChild(child);
}
private static void addNode(Document doc, Node parent,
String ns, String name, String text) {
- Element child = doc.createElementNS(NS_MAP.get(ns), ns+":"+name);
+ Element child = doc.createElementNS(NS_MAP.get(ns),
ns+":"+getLegalTagName(name));
child.appendChild(doc.createTextNode(getLegalXml(text)));
parent.appendChild(child);
}
@@ -332,4 +332,12 @@ public class OpenSearchServlet extends H
|| (c >= 0xe000 && c <= 0xfffd) || (c >= 0x10000 && c <= 0x10ffff);
}
+ static String getLegalTagName(String string) {
+ char firstChar = string.charAt(0);
+ if (firstChar >= '0' &&
+ firstChar <= '9') {
+ string = "nutch_" + string;
+ }
+ return string;
+ }
}
Modified:
nutch/branches/branch-1.2/src/test/org/apache/nutch/searcher/TestOpenSearchServlet.java
URL:
http://svn.apache.org/viewvc/nutch/branches/branch-1.2/src/test/org/apache/nutch/searcher/TestOpenSearchServlet.java?rev=998261&r1=998260&r2=998261&view=diff
==============================================================================
---
nutch/branches/branch-1.2/src/test/org/apache/nutch/searcher/TestOpenSearchServlet.java
(original)
+++
nutch/branches/branch-1.2/src/test/org/apache/nutch/searcher/TestOpenSearchServlet.java
Fri Sep 17 19:05:22 2010
@@ -30,4 +30,24 @@ public class TestOpenSearchServlet exten
assertEquals("hello",OpenSearchServlet.getLegalXml("\u0000he\u0000llo\u0000"));
}
+ /**
+ * Test turning Lucene column names into valid XML names.
+ *
+ * The Nutch FAQ explains that OpenSearch includes "all fields that are
available
+ * at search result time." However, some Lucene column names can start
+ * with numbers. Valid XML tags cannot. If Nutch is generating OpenSearch
results
+ * for a document with a Lucene document column whose name starts with
numbers,
+ * the underlying Xerces library throws this exception:
+ *
+ *
+ * org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal
XML character is specified.
+ *
+ * Therefore, we test here that Nutch can turn strings into valid XML tags.
+ */
+ public void testGetLegalTagName(){
+ assertEquals("nutch_000_numbers_first",
OpenSearchServlet.getLegalTagName("000_numbers_first"));
+ assertEquals("letters_first_000",
OpenSearchServlet.getLegalTagName("letters_first_000"));
+ }
+
+
}