StateMachineConfigurerAdapter で定義されたカスタム アクションから例外をスローすると、それ以降のステート マシンへの呼び出しは null currentState を取得するため、NPE をスローします。
ステートマシンへの私の呼び出しは次のとおりです。
PersistStateMachineHandler handler;
handler.handleEventWithState(
MessageBuilder
.withPayload(event)
.setHeader("key", data)
.build()
,
previousState
)
スタックトレースは次のとおりです。
java.lang.NullPointerException
at org.springframework.statemachine.support.AbstractStateMachine.acceptEvent(AbstractStateMachine.java:591)
at org.springframework.statemachine.support.AbstractStateMachine.sendEvent(AbstractStateMachine.java:202)
at org.springframework.statemachine.recipes.persist.PersistStateMachineHandler.handleEventWithState(PersistStateMachineHandler.java:81)
その理由は、currentState が null になるため、this.currentState.getIds() が NPE をスローしているためです。
AbstractStateMachine にコードの問題があるようです
protected synchronized boolean acceptEvent(Message<E> message)
前の行はすべて currentState != null 条件を処理しているため、最後の行は処理していません。通常は不要な currentState を明示的に渡すことで、この例外をスキップできます。しかし、 currentState を与えた後でも、persistStateChangeListener の onPersist() メソッドを呼び出していない場合