diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index efe011e027d..e0c881fbdfb 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -543,6 +543,8 @@ Bug Fixes
* SOLR-2057: DataImportHandler never calls UpdateRequestProcessor.finish()
(Drew Farris via koji)
+
+* SOLR-1973: Empty fields in XML update messages confuse DataImportHandler. (koji)
Other Changes
----------------------
diff --git a/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java b/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java
index 0f1ea4d6b3f..0875945b8c3 100644
--- a/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java
+++ b/solr/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java
@@ -277,7 +277,7 @@ public class XPathRecordReader {
if (event == END_ELEMENT) {
if (flattenedStarts > 0) flattenedStarts--;
else {
- if (text.length() > 0 && valuesAddedinThisFrame != null) {
+ if (hasText && valuesAddedinThisFrame != null) {
valuesAddedinThisFrame.add(fieldName);
putText(values, text.toString(), fieldName, multiValued);
}
diff --git a/solr/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestXPathRecordReader.java b/solr/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestXPathRecordReader.java
index a06ac345ba8..dad5510610c 100644
--- a/solr/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestXPathRecordReader.java
+++ b/solr/contrib/dataimporthandler/src/test/java/org/apache/solr/handler/dataimport/TestXPathRecordReader.java
@@ -194,6 +194,29 @@ public class TestXPathRecordReader extends AbstractDataImportHandlerTestCase {
assertNull(((List) l.get(1).get("b")).get(0));
}
+ @Test
+ public void testElems2LevelEmpty() {
+ String xml="\n"
+ + "\t\n"
+ + "\t \n\t x0\n"
+ + "\t y0\n"
+ + "\t \n"
+ + "\t \n\t \n" // empty
+ + "\t y1\n"
+ + "\t \n"
+ + "\t\n"
+ + "";
+ XPathRecordReader rr = new XPathRecordReader("/root/a");
+ rr.addField("a", "/root/a/b/x", true);
+ rr.addField("b", "/root/a/b/y", true);
+ List