From 18ae02ab02278fb2e63ba9373358061baa807491 Mon Sep 17 00:00:00 2001 From: Henning Poettker Date: Tue, 3 Nov 2020 14:34:59 +0100 Subject: [PATCH] Fix NullPointerException when creating job executions for job instances without executions --- .../core/repository/support/SimpleJobRepository.java | 4 ++++ .../repository/support/SimpleJobRepositoryTests.java | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java index 62935fa79..89bf9e64b 100644 --- a/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java +++ b/spring-batch-core/src/main/java/org/springframework/batch/core/repository/support/SimpleJobRepository.java @@ -116,6 +116,10 @@ public class SimpleJobRepository implements JobRepository { List executions = jobExecutionDao.findJobExecutions(jobInstance); + if (executions.isEmpty()) { + throw new IllegalStateException("Cannot find any job execution for job instance: " + jobInstance); + } + // check for running executions and find the last started for (JobExecution execution : executions) { if (execution.isRunning() || execution.isStopping()) { diff --git a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java index 65838107f..0609c43e7 100644 --- a/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java +++ b/spring-batch-core/src/test/java/org/springframework/batch/core/repository/support/SimpleJobRepositoryTests.java @@ -27,6 +27,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -274,6 +275,14 @@ public class SimpleJobRepositoryTests { jobRepository.createJobExecution("foo", new JobParameters()); } + @Test(expected = IllegalStateException.class) + public void testCreateJobExecutionInstanceWithoutExecutions() throws Exception { + when(jobInstanceDao.getJobInstance("foo", new JobParameters())).thenReturn(jobInstance); + when(jobExecutionDao.findJobExecutions(jobInstance)).thenReturn(Collections.emptyList()); + + jobRepository.createJobExecution("foo", new JobParameters()); + } + @Test public void testGetStepExecutionCount() { // Given