diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/SimpleStepBuilder.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/SimpleStepBuilder.java index 79cea8e86f..aea40e7336 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/SimpleStepBuilder.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/builder/SimpleStepBuilder.java @@ -111,6 +111,7 @@ protected SimpleStepBuilder(SimpleStepBuilder parent) { this.reader = parent.reader; this.writer = parent.writer; this.processor = parent.processor; + this.itemProcessorFunction = parent.itemProcessorFunction; this.itemListeners = parent.itemListeners; this.readerTransactionalQueue = parent.readerTransactionalQueue; } diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/StepBuilderTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/StepBuilderTests.java index 81f2f073d0..ef59d20764 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/StepBuilderTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/step/builder/StepBuilderTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2021 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -56,6 +56,7 @@ * @author Dave Syer * @author Michael Minella * @author Mahmoud Ben Hassine + * @author Parikshit Dutta * */ @SuppressWarnings("serial") @@ -214,6 +215,15 @@ public void testItemListeners() throws Exception { @Test public void testFunctions() throws Exception { + assertStepFunctions(false); + } + + @Test + public void testFunctionsWithFaultTolerantStep() throws Exception { + assertStepFunctions(true); + } + + private void assertStepFunctions(boolean faultTolerantStep) throws Exception { JobRepository jobRepository = new MapJobRepositoryFactoryBean().getObject(); StepExecution execution = jobRepository.createJobExecution("foo", new JobParameters()).createStepExecution("step"); jobRepository.add(execution); @@ -228,20 +238,24 @@ public void testFunctions() throws Exception { ItemReader reader = new ListItemReader<>(items); ListItemWriter itemWriter = new ListItemWriter<>(); - @SuppressWarnings("unchecked") + SimpleStepBuilder builder = new StepBuilder("step") - .repository(jobRepository) - .transactionManager(transactionManager) - .chunk(3) - .reader(reader) - .processor((Function) s -> s.toString()) - .writer(itemWriter) - .listener(new AnnotationBasedStepExecutionListener()); + .repository(jobRepository) + .transactionManager(transactionManager) + .chunk(3) + .reader(reader) + .processor((Function) s -> s.toString()) + .writer(itemWriter) + .listener(new AnnotationBasedStepExecutionListener()); + + if (faultTolerantStep) { + builder = builder.faultTolerant(); + } builder.build().execute(execution); assertEquals(BatchStatus.COMPLETED, execution.getStatus()); - List writtenItems = itemWriter.getWrittenItems(); + List writtenItems = ((ListItemWriter) itemWriter).getWrittenItems(); assertEquals("1", writtenItems.get(0)); assertEquals("2", writtenItems.get(1)); assertEquals("3", writtenItems.get(2));