我使用Shibboleth,它使用Spring Web Flow。在我的环境中,出现了预期的流ID和注册的流ID之间的不匹配。
Shibboleth尝试执行流程,但是我收到了这个错误:
Uncaught runtime exception
org.springframework.webflow.definition.registry.NoSuchFlowDefinition:
No flow definition 'authn/foo' found at
org.springframework.webflow.definition.registry.
FlowDefinitionRegistryImpl.getFlowDefinitionHolder
(FlowDefinitionRegistryImpl.java:123)
以下是日志中的this piece of code输出:
Registering flow definition 'file[D:¥Shibboleth¥IdP¥flows¥authn¥foo¥foo-flow.xml]'
under id 'D:/Shibboleth/IdP/flows/authn/foo'
我的环境是使用IBM Webshpere 8.5的日语Windows Server 2008 R2 Enterprise。
看起来某个地方Web Flow无法扣除正确的流ID,只是使用文件的整个路径。正如您所看到的,¥
(这是日语Windows中显示的内容而不是斜杠)和/
的混合使用。我不知道这是否会导致问题。
有没有办法解决这个问题或以某种方式强制使用正确的流名称(例如,我可以在foo-flow.xml中使用正确的流ID)?
答案 0 :(得分:0)
看看这个FlowDefinitionResourceFactory.java:
该人负责在文件系统上查找流文件并将其解析/转换为流定义。
从浏览代码我无法分析操作系统定义'/'
的位置,但我怀疑 FlowDefinitionResourceFactory.java 中的spring String / ResourceResolver实用程序类正在派生操作系统'¥'
。尝试进入该课程,看看你是否可以隔离它的确切位置。
无论如何,正如您所说,这是一个环境问题。我不确定您可以配置(在SWF上)除了将操作系统语言设置转换为英语之外更改此行为?我认为这是一个不可接受的答案。您可能能够@Override一些内部SWF或spring实用程序类...但我怀疑spring / swf的行为与预期一致,并且输入/配置(即环境)被输入它们是什么问题...我的猜测任何可能的“解决方案”都会涉及@Overriding或'hacking'某些东西以适应您环境中的SWF。