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"));
+  }
+  
+
 }


Reply via email to