Repository: nifi
Updated Branches:
  refs/heads/master 29c2e1883 -> c75604a56


NIFI-4966 - JacksonCSVRecordReader - NPE with some CSV formats

Signed-off-by: Matthew Burgess <mattyb...@apache.org>

This closes #2535


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/c75604a5
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/c75604a5
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/c75604a5

Branch: refs/heads/master
Commit: c75604a564c4abf5c4d26b512b4c6d7639fa592b
Parents: 29c2e18
Author: Pierre Villard <pierre.villard...@gmail.com>
Authored: Mon Mar 12 23:20:07 2018 +0100
Committer: Matthew Burgess <mattyb...@apache.org>
Committed: Tue Mar 13 16:49:47 2018 -0400

----------------------------------------------------------------------
 .../apache/nifi/csv/JacksonCSVRecordReader.java |  4 ++--
 .../nifi/csv/TestJacksonCSVRecordReader.java    | 23 ++++++++++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/c75604a5/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/JacksonCSVRecordReader.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/JacksonCSVRecordReader.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/JacksonCSVRecordReader.java
index 91cca81..a25df65 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/JacksonCSVRecordReader.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/main/java/org/apache/nifi/csv/JacksonCSVRecordReader.java
@@ -103,7 +103,7 @@ public class JacksonCSVRecordReader implements RecordReader 
{
         CsvSchema csvSchema = csvSchemaBuilder.build();
 
         // Add remaining config options to the mapper
-        List<CsvParser.Feature> features = new ArrayList<>(3);
+        List<CsvParser.Feature> features = new ArrayList<>();
         features.add(CsvParser.Feature.INSERT_NULLS_FOR_MISSING_COLUMNS);
         if (csvFormat.getIgnoreEmptyLines()) {
             features.add(CsvParser.Feature.SKIP_EMPTY_LINES);
@@ -114,7 +114,7 @@ public class JacksonCSVRecordReader implements RecordReader 
{
 
         ObjectReader objReader = mapper.readerFor(String[].class)
                 .with(csvSchema)
-                .withFeatures(features.toArray(new CsvParser.Feature[3]));
+                .withFeatures(features.toArray(new 
CsvParser.Feature[features.size()]));
 
         recordStream = objReader.readValues(reader);
     }

http://git-wip-us.apache.org/repos/asf/nifi/blob/c75604a5/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestJacksonCSVRecordReader.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestJacksonCSVRecordReader.java
 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestJacksonCSVRecordReader.java
index 9e08594..66486ee 100644
--- 
a/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestJacksonCSVRecordReader.java
+++ 
b/nifi-nar-bundles/nifi-standard-services/nifi-record-serialization-services-bundle/nifi-record-serialization-services/src/test/java/org/apache/nifi/csv/TestJacksonCSVRecordReader.java
@@ -124,6 +124,29 @@ public class TestJacksonCSVRecordReader {
     }
 
     @Test
+    public void testExcelFormat() throws IOException, MalformedRecordException 
{
+        final List<RecordField> fields = new ArrayList<RecordField>();
+        fields.add(new RecordField("fieldA", 
RecordFieldType.STRING.getDataType()));
+        fields.add(new RecordField("fieldB", 
RecordFieldType.STRING.getDataType()));
+        final RecordSchema schema = new SimpleRecordSchema(fields);
+
+        final String headerLine = "fieldA,fieldB";
+        final String inputRecord = "valueA,valueB";
+        final String csvData = headerLine + "\n" + inputRecord;
+        final byte[] inputData = csvData.getBytes();
+
+        try (final InputStream bais = new ByteArrayInputStream(inputData);
+            final JacksonCSVRecordReader reader = createReader(bais, schema, 
CSVFormat.EXCEL)) {
+
+            final Object[] record = reader.nextRecord().getValues();
+            final Object[] expectedValues = new Object[] {"valueA", "valueB"};
+            Assert.assertArrayEquals(expectedValues, record);
+
+            assertNull(reader.nextRecord());
+        }
+    }
+
+    @Test
     public void testMultipleRecords() throws IOException, 
MalformedRecordException {
         final List<RecordField> fields = getDefaultFields();
         fields.replaceAll(f -> f.getFieldName().equals("balance") ? new 
RecordField("balance", doubleDataType) : f);

Reply via email to