在 WebFlow 中无法正确评估时如何调试 SpEL 评估?

How to debug SpEL evaluation when it doesn't evaluate properly in WebFlow?

我正在使用 Spring WebFlow 2.5.0,但我的 SpEL 表达式未被正确评估。我认为我的 WebFlow 配置或 SpEL 一定有问题,但我不确定是哪一个。

我在登录时有以下决定状态-flow.xml:

<decision-state id="submitChallenge">
    <on-entry>
        <evaluate expression="authenticationService.respondToChallenge(externalContext.nativeRequest, authRequest)"  result="flowScope.challengeName" result-type="org.springframework.webflow.execution.Event"/>
    </on-entry>
    <if test="flowScope.challengeName == 'success'" then="loginComplete" else="answerChallenge"/>
</decision-state>

然而,即使我的 respondToChallenge() 方法 returns 一个 Event.success(),我也永远不会转换到 loginComplete 状态。测试似乎总是评估为 FALSE。

是我的 SpEL 错了,还是我做 evaluation/test 的方式不对?我如何调试 SpEL 评估以查看发生了什么?

我尝试将调试点放在 org.springframework.binding.expression.spel.SpringELExpression class 中,但是当我在执行 getValue()/etc 时尝试跟踪逻辑时,我有点迷路了.我所能看到的是它始终评估为 false。

在使用调试器更仔细地调试之后,我发现我的 flowScope.challengeNamesuccess 的类型不同。因此 Spring 在表达式评估中返回 false,因为它们属于不同类型。