【发布时间】:2016-06-07 09:43:15
【问题描述】:
当我从 StateMachineConfigurerAdapter 中定义的自定义操作中引发异常时,对状态机的任何后续调用都会引发 NPE,因为它获取 null currentState。
我对状态机的调用是:
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)
原因是 this.currentState.getIds() 正在抛出 NPE,因为 currentState 即将为空。
AbstractStateMachine 中似乎有一些代码问题
protected synchronized boolean acceptEvent(Message<E> message)
最后一行没有处理 currentState != null 条件,因为所有前一行都在处理它。您可以通过显式传递 currentState 来跳过此异常,这通常不是必需的。但是即使给出currentState后,也不是调用persistStateChangeListener的onPersist()方法
【问题讨论】:
标签: java spring state-machine spring-statemachine