Fix NPE when return an eventExitCode before ApplicationFailedEvent

This commit is contained in:
Miguel Gomes
2016-08-06 01:34:37 +01:00
committed by Michael Minella
parent 2f03474bbe
commit 9ccbe60cba
2 changed files with 16 additions and 2 deletions

View File

@@ -125,7 +125,6 @@ public class TaskLifecycleListener implements ApplicationListener<ApplicationEve
}
else if(applicationEvent instanceof ExitCodeEvent){
this.exitCodeEvent = (ExitCodeEvent) applicationEvent;
doTaskEnd();
}
else if(applicationEvent instanceof ApplicationReadyEvent) {
doTaskEnd();
@@ -159,7 +158,7 @@ public class TaskLifecycleListener implements ApplicationListener<ApplicationEve
this.taskExecution.setErrorMessage(stackTraceToString(this.applicationFailedEvent.getException()));
}
if(this.taskExecution.getExitCode() != 0){
if (this.applicationFailedEvent != null && this.taskExecution.getExitCode() != 0) {
taskExecution.setExitMessage(invokeOnTaskError(taskExecution,
this.applicationFailedEvent.getException()).getExitMessage());
}

View File

@@ -27,6 +27,7 @@ import org.junit.Before;
import org.junit.Test;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ExitCodeEvent;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.context.event.ApplicationFailedEvent;
@@ -111,6 +112,20 @@ public class TaskLifecycleListenerTests {
verifyTaskExecution(0, true, 1, exception);
}
@Test
public void testTaskFailedWithExitCodeEvent() {
final int exitCode = 10;
context.refresh();
RuntimeException exception = new RuntimeException("This was expected");
SpringApplication application = new SpringApplication();
this.taskExplorer = context.getBean(TaskExplorer.class);
context.publishEvent(new ExitCodeEvent(context, exitCode));
context.publishEvent(new ApplicationFailedEvent(application, new String[0], context, exception));
context.publishEvent(new ApplicationReadyEvent(application, new String[0], context));
verifyTaskExecution(0, true, exitCode, exception);
}
@Test
public void testNoClosingOfContext() {
ConfigurableApplicationContext applicationContext = SpringApplication.run(new Object[] {TestDefaultConfiguration.class, PropertyPlaceholderAutoConfiguration.class},