0

ラクダのシナリオ:

  • ファイルを読む
  • データベースにコンテンツを保存するなど、何かをする
  • Activiti プロセスを実行し、前のステップの変数を渡します

ルートビルダー:

from("file:/home/work/Inbox")
.to("bean:sourceFileService?method=storeFile")
.to("activiti:Receive?copyVariablesFromProperties=true")

Bean の呼び出し中に sourceFileService プロパティ 'sourceFileId' が設定されます。この変数は、変数として受信プロセスに転送する必要があります。

copyVariablesFromProperties を使用しない場合、変数は処理中に設定されません。copyVariablesFromProperties=true の場合は反対側で、キャメルがすべてのプロパティを渡そうとすると例外が発生します。

ActivitiException: GenericFile をシリアル化できる変数の型が見つかりませんでした

(プロパティの 1 つは、読み取りファイルを表すオブジェクトであるため、他に 7 つの不要なプロパティがあります)

選択したプロパティのみを activiti エンドポイントまたはキャメルの次の 'to' に渡すにはどうすればよいですか?

4

2 に答える 2

0

sourceFileServicestoreFileメソッド シグネチャを次のように変更します。

public String storeFile(... your other params, @OutHeaders Map headers) {
       ...
       headers.put("sourceFileId", "32132132");
       ....
}

エンドポイントでセットsourceFileIdにアクセスできますactiviti

于 2013-04-11T22:48:46.657 に答える
0

copyVariablesFromProperties を使用する必要がないことがわかりました。同じことが達成されます

.setBody().properties()
.to("activiti:Receive")

本体にある場合は、そのマップを使用するアクティビティ プロセスのキャメル セット変数をマップします。しかし、同じ理由で例外が発生します(シリアル化できないオブジェクトを渡す)。

私が見つけた唯一の解決策は

from("file:/home/work/Inbox")
.to("bean:sourceFileService?method=storeFile")
.setBody(method(Helper.class))
.to("activiti:Receive")

どこ

public class Helper {
    @Handler
    public Map getProcessVariables(Exchange exchange) {
        Map<String, Object> variables = new HashMap<String, Object>();
        variables.put("sourceFileId, exchange.getProperty("sourceFileId"));
        return variables;
    }
}
于 2013-04-12T08:02:45.390 に答える