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);