第16章 File 言語
概要
File 言語 は Simple 言語 の拡張であり、File 言語自体は独立した言語ではありません。しかし、File 言語は、File または FTP エンドポイントと組み合わせた場合のみ使用できます。
16.1. File 言語を使用する場合
概要
File 言語は、Simple 言語の拡張であり、どこでも利用できるではありません。File 言語は以下の状況で使用できます。
エスケープ文字 \
は、File 言語では使用できません。
File または FTP コンシューマーエンドポイントでの使用
File または FTP コンシューマーエンドポイントで設定できる URI オプションがいくつかあり、それらに File 言語の式を適用できます。たとえば、File コンシューマーエンドポイント URI で、File 式を使用して fileName
、move
、preMove
、moveFailed
、および sortBy
オプションを設定することができます。
File コンシューマーエンドポイントでは、fileName
オプションはフィルターとして機能し、開始ディレクトリーから実際に読み取られるファイルを決定します。プレーンテキスト文字列が指定されている場合 (例: fileName=report.txt
)、File コンシューマーは更新されるたびに同じファイルを読み込みます。しかし、File 言語の式を指定することで、このオプションをより動的なものにすることができます。たとえば、以下のように、File コンシューマーがディレクトリーをポーリングするたびに、Counter Bean を使用して異なるファイルを読み込めます。
file://target/filelanguage/bean/?fileName=${bean:counter.next}.txt&delete=true
${bean:counter.next}
式が、ID counter
で登録された Bean 上で next()
のメソッドを呼び出します。
move
オプションは、File コンシューマーエンドポイントによってファイルが読み込まれた後、ファイルをバックアップ場所に移動するために使用されます。たとえば、以下のエンドポイント URI は、ファイルが処理された後にファイルをバックアップディレクトリーに移動します。
file://target/filelanguage/?move=backup/${date:now:yyyyMMdd}/${file:name.noext}.bak&recursive=false
${file:name.noext}.bak
式は、ファイルの拡張子を .bak
に置き換えて、元のファイル名を変更します。
sortBy
オプションを使用すると、ファイルを処理する順序を指定できます。たとえば、ファイル名のアルファベット順でファイルを処理するには、次のように File コンシューマーエンドポイントを指定します。
file://target/filelanguage/?sortBy=file:name
たとえば、ファイルの最終更新日時の順でファイルを処理するには、以下のように File コンシューマーエンドポイントを指定します。
file://target/filelanguage/?sortBy=file:modified
また、以下のように reverse:
接頭辞を追加すると順序を逆にすることもできます。
file://target/filelanguage/?sortBy=reverse:file:modified
File または FTP コンシューマーによって作成されたエクスチェンジ
エクスチェンジ が File または FTP コンシューマーエンドポイントによって作成されている場合、ルート全体を通して、File 言語をエクスチェンジに適用することができます (元のメッセージヘッダーが残っている場合のみ)。たとえば、以下のように、ファイルの拡張子に応じてメッセージをルーティングするコンテンツベースルーターを定義することができます。
<from uri="file://input/orders"/> <choice> <when> <simple>${file:ext} == 'txt'</simple> <to uri="bean:orderService?method=handleTextFiles"/> </when> <when> <simple>${file:ext} == 'xml'</simple> <to uri="bean:orderService?method=handleXmlFiles"/> </when> <otherwise> <to uri="bean:orderService?method=handleOtherFiles"/> </otherwise> </choice>