0

我调试了我的 Spring Webflow 测试以找出问题的第一部分:当您有一个文件名与流的 id 不同的流时('commons-flow.xml' with id=' commons') 然后仅使用 resourceFactory.createFileResource(pathToFlowFile) 不起作用,因为假定 id 是文件名。

有一种方法可以覆盖 id,resourceFactory.createResource(pathToFlowFile, attributesMap, overrideId)

但是,这使用 Classloader 来解析文件,而 createFileResource 似乎使用了不同的方法。

我无法弄清楚我应该如何让 Classloader 识别流文件。我检查了它的类路径,它只有 JAR 依赖项,然后动态创建了 target/classes 和 target/test-classes 文件夹。没有参考我的项目。

这是一个 Maven 项目,我从项目根到流的路径类似于:

src/main/webapp/WEB-INF/flows/<flow-folder>/<flow-filename>.xml

我见过webflow 测试,无法找到重申我已经发现的流模型,但由于某种原因,我遇到了其他似乎没有的 Classloader 问题。

在我看到人们成功引用流文件的地方,他们似乎要么与项目根目录相关,要么与 src/main/webapp 的 WebContext 相关。

我正在使用 Eclipse 中的运行配置以及 maven 测试目标运行 JUnit 测试。

我可以为 Eclipse 中的运行配置配置自定义类路径,以包含我定义为 pathToFlowFile 的相对路径的父文件夹。

然而,这对 Maven 一点帮助都没有,它在执行测试目标时仍然存在类加载器/类路径问题。

4

1 回答 1

0

我遇到了类似的情况,我必须设置流 ID 并指定路径。因此,我没有使用 FlowDefinitionResourceFactory,而是创建了一个 FlowDefinitionResource 实例,如下所示

FlowDefinitionResource resource = new FlowDefinitionResource(flowId, path, attributes);

所以在你的方法中你应该有这样的东西

protected FlowDefinitionResource[] getModelResources(FlowDefinitionResourceFactory resourceFactory) {
    FlowDefinitionResource resource = new FlowDefinitionResource("flowId", src/main/webapp/WEB-INF/flows/<flow-folder>/<flow-filename>.xml", null);
    return new FlowDefinitionResource[] {resource};
}

如果您收到 FileNotFoundException,只需检查堆栈跟踪以查看它在哪里寻找文件。

希望这可以帮助。

于 2013-03-05T09:24:33.033 回答