1

SpringDSLでラクダ2.10.3を使用しています。

CSVファイルのディレクトリを監視しています。各ファイルには、他のメタデータ(誰がそれを要求したかなど)とともに、何かをダウンロードする場所に関する情報が含まれています。

ファイルを消費し、HTTPComponentを使用してファイルで参照されているエンティティをダウンロードし、それをディスクに保存します(後で処理します)。次のようになります。

<route>
  <from uri="file:/incoming"/>
  <unmarshall ref="csv"/>
  <recipientList><simple>${in.body[1]}</simple></recipientList>
  <to uri="file:/attachemnts"/>
  <to ref="furtherProcessing"/>
</route>

URLはCSVファイルの内容に基づいて動的であるため、recipientListを使用しています。HTTPComponentが交換のin.body(CSVファイルの内容の値)をHTTPサービスに送信しようとするため、上記は機能しません。

後で処理するときにCSVファイルの値が必要になるので、それらを吹き飛ばすことはできません。これを解決するための最初の試みは、CSVファイルのすべての値をヘッダーに移動し、本文をnullに設定して、HTTPComponentが文句を言わないようにすることでした(文句を言わなくても、元の値を保持する必要があります)。 CSVデータ)。これは機能しますが、実際にはルートが乱雑になります。ヘッダーがたくさんあり、それぞれを手動でコピーする必要があります。

ダウンロードを行うには、ある種のサイドルートが必要なようです。カスタムのaggregationStrategyでマルチキャストを使用することを考えました。次に、一方のエンドポイントをダウンロードし、もう一方のエンドポイントをノーオペレーションにしましたが、これはそれほどクリーンではありませんでした。また。

これをきれいに行う方法について誰かがアドバイスを持っています、私は本当に単純なものが欠けているように感じますか?

4

1 に答える 1

3

私があなたのケースを理解している限り、リクエストにペイロードデータなしでHTTP/GET操作を行う必要があるCSVファイルにURLがあります。

メッセージの本文を交換プロパティにコピーします。非整列化されたコンテンツは であるためList<List<String>>、それをプロパティに設定し、後でそのプロパティから全体として取得できます。

このようなもの(実際にはテストしていないので、構文タイプOSに注意してください)。

<route>
  <from uri="file:/incoming"/>
  <unmarshall ref="csv"/>
  <setProperty propertyName="originalData">  
     <simple>${body}</simple>  
  </setProperty>
  <setBody>
     <simple>null</simple><!-- will make HTTP use GET method and not send data -->
  </setBody>
  <recipientList><simple>${in.property.originalData[1]}</simple></recipientList>
  <to uri="file:/attachemnts"/>
  <to ref="furtherProcessing"/>
</route>
于 2013-02-22T22:27:59.367 に答える