From 8bc76b4ed485f75d695cd36c319250e3450d132a Mon Sep 17 00:00:00 2001 From: Wesley-Lawrence Date: Thu, 8 Dec 2016 19:32:54 -0500 Subject: [PATCH] NIFI-3175 Fix a bug in the ValidateCSV processor to handle empty CSV columns --- .../nifi/processors/standard/ValidateCsv.java | 11 ++++++++--- .../processors/standard/TestValidateCsv.java | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java index 47880803160a..44bb35d3a4b4 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ValidateCsv.java @@ -580,11 +580,16 @@ private byte[] print(List list, CsvPreference csvPref, boolean isFirstLine) { } final int size = list.size(); - for(int i = 0; i < size; i++) { - buffer.append(list.get(i).toString()); - if(i != size - 1) { + int i = 0; + for (Object item : list) { + if (item != null) { + buffer.append(item.toString()); + } + + if (i < size - 1) { buffer.append((char) csvPref.getDelimiterChar()); } + i++; } return buffer.toString().getBytes(); diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java index d3c649376f71..09a83f2aff67 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestValidateCsv.java @@ -60,6 +60,25 @@ public void testHeaderAndSplit() { runner.getFlowFilesForRelationship(ValidateCsv.REL_INVALID).get(0).assertContentEquals("Name,Birthdate,Weight\nJohn,22/111954,63.2"); } + @Test + public void testNullValues() { + final TestRunner runner = TestRunners.newTestRunner(new ValidateCsv()); + runner.setProperty(ValidateCsv.DELIMITER_CHARACTER, ","); + runner.setProperty(ValidateCsv.END_OF_LINE_CHARACTER, "\n"); + runner.setProperty(ValidateCsv.QUOTE_CHARACTER, "\""); + runner.setProperty(ValidateCsv.HEADER, "true"); + runner.setProperty(ValidateCsv.VALIDATION_STRATEGY, ValidateCsv.VALIDATE_LINES_INDIVIDUALLY); + + runner.setProperty(ValidateCsv.SCHEMA, "Null, Null, Null"); + + runner.enqueue("#Name,Birthdate,Weight\nJohn,\"\",63.2\nBob,,45.0"); + runner.run(); + + runner.assertTransferCount(ValidateCsv.REL_VALID, 1); + runner.getFlowFilesForRelationship(ValidateCsv.REL_VALID).get(0).assertContentEquals("#Name,Birthdate,Weight\nJohn,,63.2\nBob,,45.0"); + runner.assertTransferCount(ValidateCsv.REL_INVALID, 0); + } + @Test public void testUniqueWithSplit() { final TestRunner runner = TestRunners.newTestRunner(new ValidateCsv());