0

Spring Webflow テストをデバッグして、問題の最初の部分を突き止めました。 commons') の場合、resourceFactory.createFileResource(pathToFlowFile) を使用するだけでは機能しません。これは、id がファイル名であると想定しているためです。

ID をオーバーライドするために使用できるメソッドがあります。resourceFactory.createResource(pathToFlowFile, attributesMap, overrideId)

ただし、これはクラスローダーを使用してファイルを解決しますが、createFileResource は別の手段を使用したようです。

Classloader にフロー ファイルを認識させる方法がわかりません。クラスパスを調べたところ、JAR 依存関係のみがあり、ターゲット/クラスおよびターゲット/テスト クラス フォルダーが動的に作成されました。私のプロジェクトへの参照はありません。

これは Maven プロジェクトで、プロジェクト ルートからフローまでのパスは次のようになります。

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

Webflow テストを見てきましたが、既に発見したことを繰り返すフロー モデルを見つけることができませんでしたが、何らかの理由で、他にはないように見えるクラスローダーに問題があります。

人々が正常にフロー ファイルを参照しているのを見ると、それらはプロジェクト ルートから相対的であるか、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 が発生した場合は、スタックトレースをチェックして、ファイルを探している場所を確認してください。

お役に立てれば。

M

于 2013-03-05T09:24:33.033 に答える