diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java index 100d83721..65ce0c459 100755 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantChunkProcessor.java @@ -236,7 +236,7 @@ public class FaultTolerantChunkProcessor extends SimpleChunkProcessor extends SimpleChunkProcessor extends SimpleChunkProcessor extends SimpleChunkProcessor extends SimpleChunkProcessor.ChunkIterator inputIterator, Chunk.ChunkIterator outputIterator, Throwable e, StepContribution contribution) { logger.debug("Checking skip policy after failed write"); - if (itemWriteSkipPolicy.shouldSkip(e, contribution.getStepSkipCount())) { + if (shouldSkip(itemWriteSkipPolicy, e, contribution.getStepSkipCount())) { contribution.incrementWriteSkipCount(); inputIterator.remove(); outputIterator.remove(e); @@ -498,7 +515,7 @@ public class FaultTolerantChunkProcessor extends SimpleChunkProcessor extends SimpleChunkProvider { } catch (Exception e) { - if (skipPolicy.shouldSkip(e, contribution.getStepSkipCount())) { + if (shouldSkip(skipPolicy, e, contribution.getStepSkipCount())) { // increment skip count and try again contribution.incrementReadSkipCount(); chunk.skip(e); @@ -99,4 +99,20 @@ public class FaultTolerantChunkProvider extends SimpleChunkProvider { } } + /** + * Convenience method for calling process skip policy. + * + * @param policy the skip policy + * @param e the cause of the skip + * @param skipCount the current skip count + */ + private boolean shouldSkip(SkipPolicy policy, Throwable e, int skipCount) { + try { + return policy.shouldSkip(e, skipCount); + } + catch (RuntimeException ex) { + throw new SkipListenerFailedException("Fatal exception in SkipPolicy.", ex, e); + } + } + } diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java index 50e8b725b..c263f8587 100755 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/step/item/FaultTolerantStepFactoryBean.java @@ -35,6 +35,7 @@ import org.springframework.batch.core.step.skip.NonSkippableReadException; import org.springframework.batch.core.step.skip.SkipLimitExceededException; import org.springframework.batch.core.step.skip.SkipListenerFailedException; import org.springframework.batch.core.step.skip.SkipPolicy; +import org.springframework.batch.core.step.skip.SkipPolicyFailedException; import org.springframework.batch.core.step.tasklet.TaskletStep; import org.springframework.batch.item.ItemReader; import org.springframework.batch.item.ItemStream; @@ -321,9 +322,9 @@ public class FaultTolerantStepFactoryBean extends SimpleStepFactoryBean