diff --git a/src/main/java/com/poiji/exception/HeaderMissingException.java b/src/main/java/com/poiji/exception/HeaderMissingException.java index 4445059..ce2a1aa 100644 --- a/src/main/java/com/poiji/exception/HeaderMissingException.java +++ b/src/main/java/com/poiji/exception/HeaderMissingException.java @@ -1,12 +1,29 @@ package com.poiji.exception; +import java.util.Set; + /** * Exception thrown if namedHeaderMandatory is set in the options, but a header specified in an @ExcelCellName * is missing in the sheet. */ @SuppressWarnings("serial") public class HeaderMissingException extends PoijiException { - public HeaderMissingException(String message) { + + private final Set missingExcelCellHeaders; + private final Set missingExcelCellNameHeaders; + + public HeaderMissingException(String message, Set missingExcelCellHeaders, + Set missingExcelCellNameHeaders) { super(message); + this.missingExcelCellHeaders = Set.copyOf(missingExcelCellHeaders); + this.missingExcelCellNameHeaders = Set.copyOf(missingExcelCellNameHeaders); + } + + public Set getMissingExcelCellHeaders() { + return missingExcelCellHeaders; + } + + public Set getMissingExcelCellNameHeaders() { + return missingExcelCellNameHeaders; } } diff --git a/src/main/java/com/poiji/util/AnnotationUtil.java b/src/main/java/com/poiji/util/AnnotationUtil.java index 5ff9226..71b1b15 100644 --- a/src/main/java/com/poiji/util/AnnotationUtil.java +++ b/src/main/java/com/poiji/util/AnnotationUtil.java @@ -77,7 +77,7 @@ public static void validateMandatoryNameColumns(PoijiOptions options, .forEach(missingMessage::append); message += missingMessage; } - throw new HeaderMissingException(message); + throw new HeaderMissingException(message, missingExcelCellHeaders, missingExcelCellNameHeaders); } } } diff --git a/src/test/java/com/poiji/deserialize/MandatoryNamedColumnsExceptionTest.java b/src/test/java/com/poiji/deserialize/MandatoryNamedColumnsExceptionTest.java index 7dd18ed..2d1b280 100644 --- a/src/test/java/com/poiji/deserialize/MandatoryNamedColumnsExceptionTest.java +++ b/src/test/java/com/poiji/deserialize/MandatoryNamedColumnsExceptionTest.java @@ -10,6 +10,10 @@ import java.io.File; import java.util.Arrays; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; @RunWith(Parameterized.class) public class MandatoryNamedColumnsExceptionTest { @@ -28,10 +32,17 @@ public static Iterable queries() { }); } - @Test(expected = HeaderMissingException.class) + @Test public void testExcelMandatoryColumn() { - Poiji.fromExcel(new File(path), PersonByNameWithMissingColumn.class, PoijiOptions.PoijiOptionsBuilder - .settings() - .build()); + try { + Poiji.fromExcel(new File(path), PersonByNameWithMissingColumn.class, PoijiOptions.PoijiOptionsBuilder + .settings() + .build()); + } catch (HeaderMissingException e) { + assertEquals(Set.of(6), e.getMissingExcelCellHeaders()); + assertEquals(Set.of("This column will be missing"), e.getMissingExcelCellNameHeaders()); + return; + } + fail("Expected exception: " + HeaderMissingException.class.getName()); } }