This is an automated email from the ASF dual-hosted git repository.
mthomsen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new dd8681e3a2 NIFI-13819 Provided a row number and sheet name if
ExcelReader throws exception when it fails to convert a value.
dd8681e3a2 is described below
commit dd8681e3a24882a94e7fc9ab0c35cbc25aac988e
Author: dan-s1 <[email protected]>
AuthorDate: Mon Sep 30 22:42:18 2024 +0000
NIFI-13819 Provided a row number and sheet name if ExcelReader throws
exception when it fails to convert a value.
This closes #9327
Signed-off-by: Mike Thomsen <[email protected]>
---
.../org/apache/nifi/excel/ExcelRecordReader.java | 10 ++++++++--
.../org/apache/nifi/excel/TestExcelRecordReader.java | 20 ++++++++++++++++++++
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git
a/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/main/java/org/apache/nifi/excel/ExcelRecordReader.java
b/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/main/java/org/apache/nifi/excel/ExcelRecordReader.java
index f9df73a38c..8c49603c11 100644
---
a/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/main/java/org/apache/nifi/excel/ExcelRecordReader.java
+++
b/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/main/java/org/apache/nifi/excel/ExcelRecordReader.java
@@ -76,14 +76,20 @@ public class ExcelRecordReader implements RecordReader {
@Override
public Record nextRecord(boolean coerceTypes, boolean dropUnknownFields)
throws MalformedRecordException {
+ Row currentRow = null;
try {
if (rowIterator.hasNext()) {
- Row currentRow = rowIterator.next();
+ currentRow = rowIterator.next();
Map<String, Object> currentRowValues =
getCurrentRowValues(currentRow, coerceTypes, dropUnknownFields);
return new MapRecord(schema, currentRowValues);
}
} catch (Exception e) {
- throw new MalformedRecordException("Read next Record from Excel
XLSX failed", e);
+ String exceptionMessage = "Read next Record from Excel XLSX
failed";
+ if (currentRow != null) {
+ exceptionMessage = String.format("%s on row %s in sheet %s",
+ exceptionMessage, currentRow.getRowNum(),
currentRow.getSheet().getSheetName());
+ }
+ throw new MalformedRecordException(exceptionMessage, e);
}
return null;
}
diff --git
a/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/test/java/org/apache/nifi/excel/TestExcelRecordReader.java
b/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/test/java/org/apache/nifi/excel/TestExcelRecordReader.java
index 3f30b53e82..acc0b8d2a0 100644
---
a/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/test/java/org/apache/nifi/excel/TestExcelRecordReader.java
+++
b/nifi-extension-bundles/nifi-poi-bundle/nifi-poi-services/src/test/java/org/apache/nifi/excel/TestExcelRecordReader.java
@@ -284,6 +284,26 @@ public class TestExcelRecordReader {
assertEquals(7, records.size());
}
+ @Test
+ void testWhereCellValueDoesNotMatchSchemaType() {
+ RecordSchema schema = new SimpleRecordSchema(Arrays.asList(new
RecordField("first", RecordFieldType.STRING.getDataType()),
+ new RecordField("second",
RecordFieldType.FLOAT.getDataType())));
+ List<String> requiredSheets = Collections.singletonList("TestSheetA");
+ ExcelRecordReaderConfiguration configuration = new
ExcelRecordReaderConfiguration.Builder()
+ .withSchema(schema)
+ .withFirstRow(2)
+ .withRequiredSheets(requiredSheets)
+ .build();
+
+ final MalformedRecordException mre =
assertThrows(MalformedRecordException.class, () -> {
+ ExcelRecordReader recordReader = new
ExcelRecordReader(configuration, getInputStream(MULTI_SHEET_FILE), logger);
+ getRecords(recordReader, true, false);
+ });
+
+ assertInstanceOf(NumberFormatException.class, mre.getCause());
+ assertTrue(mre.getMessage().contains("on row") &&
mre.getMessage().contains("in sheet"));
+ }
+
@Test
void testPasswordProtected() throws Exception {
RecordSchema schema = getPasswordProtectedSchema();