From 88d1b3de417370e785b642e16d417b90b8e1881e Mon Sep 17 00:00:00 2001 From: Patrick Baumgartner Date: Fri, 13 Jun 2025 15:25:49 +0200 Subject: [PATCH] Throwing error when TargetType and FieldSetMapper is provided Co-authored-by: martinfrancois Signed-off-by: Patrick Baumgartner Signed-off-by: martinfrancois --- .../file/builder/FlatFileItemReaderBuilder.java | 5 +++++ .../builder/FlatFileItemReaderBuilderTests.java | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilder.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilder.java index ab8601b18c..e52d4dbde9 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilder.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilder.java @@ -58,6 +58,8 @@ * @author Glenn Renfro * @author Mahmoud Ben Hassine * @author Drummond Dawson + * @author Patrick Baumgartner + * @author François Martin * @since 4.0 * @see FlatFileItemReader */ @@ -459,6 +461,9 @@ else if (this.delimitedBuilder != null) { throw new IllegalStateException("No LineTokenizer implementation was provided."); } + Assert.state(this.targetType == null || this.fieldSetMapper == null, + "Either a TargetType or FieldSetMapper can be set, can't be both."); + if (this.targetType != null || StringUtils.hasText(this.prototypeBeanName)) { if (this.targetType != null && this.targetType.isRecord()) { RecordFieldSetMapper mapper = new RecordFieldSetMapper<>(this.targetType); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilderTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilderTests.java index d1890ef383..e64ec68e5d 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilderTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/file/builder/FlatFileItemReaderBuilderTests.java @@ -56,6 +56,8 @@ * @author Mahmoud Ben Hassine * @author Drummond Dawson * @author Glenn Renfro + * @author Patrick Baumgartner + * @author François Martin */ class FlatFileItemReaderBuilderTests { @@ -563,6 +565,17 @@ void testErrorMessageWhenNoLineTokenizerWasProvided() { } } + @Test + void testErrorWhenTargetTypeAndFieldSetMapperIsProvided() { + var builder = new FlatFileItemReaderBuilder().name("fooReader") + .resource(getResource("1;2;3")) + .lineTokenizer(line -> new DefaultFieldSet(line.split(";"))) + .targetType(Foo.class) + .fieldSetMapper(fieldSet -> new Foo()); + var exception = assertThrows(IllegalStateException.class, builder::build); + assertEquals("Either a TargetType or FieldSetMapper can be set, can't be both.", exception.getMessage()); + } + @Test void testSetupWithRecordTargetType() { // given