commit e73d3bd030153ff7722a0e21663f963438bde1e1
Author: Kosmynin, Arkadi (CASS, Marsfield) <Arkadi.Kosmynin@csiro.au>
Date:   Tue Apr 21 16:54:48 2015 +1000

    Fix for NUTCH-1993 contributed by Arjkadi Kosmynin

diff --git a/CHANGES.txt b/CHANGES.txt
index 7c2c9c5..ce00c0a 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,6 +2,8 @@ Nutch Change Log
  
 Nutch Current Development 1.10-SNAPSHOT
 
+* NUTCH-1993 - Make ParseUtil use backup parsers (Arkadi Kosmynin)
+
 * NUTCH-1987 - Make bin/crawl indexer agnostic (Michael Joyce, snagel via mattmann)
  
 * NUTCH-1854 bin/crawl fails with a parsing fetcher (Asitang Mishra via snagel)
diff --git a/src/java/org/apache/nutch/parse/ParseResult.java b/src/java/org/apache/nutch/parse/ParseResult.java
index 92d8871..1eb16ce 100644
--- a/src/java/org/apache/nutch/parse/ParseResult.java
+++ b/src/java/org/apache/nutch/parse/ParseResult.java
@@ -175,4 +175,18 @@ public class ParseResult implements Iterable<Map.Entry<Text, Parse>> {
     }
     return true;
   }
+
+  /**
+   * A convenience method which returns true only if ANY parses are successful.
+   * Parse success is determined by <code>ParseStatus#isSuccess()</code>.
+   */
+  public boolean isAnySuccess() {
+    for (Iterator<Entry<Text, Parse>> i = iterator(); i.hasNext();) {
+      Entry<Text, Parse> entry = i.next();
+      if (entry.getValue().getData().getStatus().isSuccess()) {
+        return true;
+      }
+    }
+    return false;
+  }
 }
diff --git a/src/java/org/apache/nutch/parse/ParseUtil.java b/src/java/org/apache/nutch/parse/ParseUtil.java
index 39024dc..37223ab 100644
--- a/src/java/org/apache/nutch/parse/ParseUtil.java
+++ b/src/java/org/apache/nutch/parse/ParseUtil.java
@@ -96,8 +96,8 @@ public class ParseUtil {
       else
         parseResult = parsers[i].getParse(content);
 
-      if (parseResult != null && !parseResult.isEmpty())
-        return parseResult;
+      if (parseResult != null && parseResult.isAnySuccess()) 
+         return parseResult; 
     }
 
     if (LOG.isWarnEnabled()) {
@@ -150,9 +150,9 @@ public class ParseUtil {
       parseResult = runParser(p, content);
     else
       parseResult = p.getParse(content);
-    if (parseResult != null && !parseResult.isEmpty()) {
-      return parseResult;
-    } else {
+    if (parseResult != null && parseResult.isAnySuccess()) 
+      return parseResult; 
+      else {
       if (LOG.isWarnEnabled()) {
         LOG.warn("Unable to successfully parse content " + content.getUrl()
             + " of type " + content.getContentType());
