diff --git a/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java b/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java index ea95ef09..670631c9 100644 --- a/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java +++ b/spring-statemachine-core/src/main/java/org/springframework/statemachine/support/AbstractStateMachine.java @@ -591,9 +591,10 @@ public abstract class AbstractStateMachine extends StateMachineObjectSuppo public void resetStateMachine(StateMachineContext stateMachineContext) { // TODO: this function needs a serious rewrite if (stateMachineContext == null) { - log.info("Got null context, resetting to initial state and clearing extended state"); + log.info("Got null context, resetting to initial state, clearing extended state and machine id"); currentState = initialState; extendedState.getVariables().clear(); + setId(null); return; } if (log.isDebugEnabled()) { diff --git a/spring-statemachine-core/src/test/java/org/springframework/statemachine/persist/StateMachinePersistTests3.java b/spring-statemachine-core/src/test/java/org/springframework/statemachine/persist/StateMachinePersistTests3.java index 787e6146..c1b51dfb 100644 --- a/spring-statemachine-core/src/test/java/org/springframework/statemachine/persist/StateMachinePersistTests3.java +++ b/spring-statemachine-core/src/test/java/org/springframework/statemachine/persist/StateMachinePersistTests3.java @@ -113,6 +113,25 @@ public class StateMachinePersistTests3 extends AbstractStateMachineTests { assertThat(stateMachine.getId(), is("newid")); } + @Test + public void testRestoreClearWithNullContext() throws Exception { + context.register(Config1.class); + context.refresh(); + InMemoryStateMachinePersist1 stateMachinePersist = new InMemoryStateMachinePersist1(); + StateMachinePersister persister = new DefaultStateMachinePersister<>(stateMachinePersist); + @SuppressWarnings("unchecked") + StateMachineFactory stateMachineFactory = context.getBean(StateMachineFactory.class); + + StateMachine stateMachine = stateMachineFactory.getStateMachine("testid2"); + assertThat(stateMachine, notNullValue()); + assertThat(stateMachine.getId(), is("testid2")); + + persister.persist(stateMachine, "xxx"); + + stateMachine = persister.restore(stateMachine, "notfound"); + assertThat(stateMachine.getId(), nullValue()); + } + @Configuration @EnableStateMachineFactory public static class Config1 extends StateMachineConfigurerAdapter {