ファイル用 Anypoint Connector (File Connector) を使用すると、トランスポートは Mule 3 実装でのインバウンドエンドポイントポーリングの結果としてのみでなく、フローの任意の時点でファイルを読み取ることができます。
Read 操作で必須のパラメーターは、読み取られるファイルへのパスのみです。パスには、ファイルへのフルパスまたは相対パスを指定できます。パスは、config-ref パラメーターによって参照される設定で定義された作業ディレクトリの値を使用します。Anypoint Studio では、[File path (ファイルパス)] 項目でパスを設定できます。XML では、<file:read ステートメントで path 属性を使用してパスを指定します。
設定が参照されていない場合、作業ディレクトリはデフォルトで user.home システムプロパティの値に設定されます。システムプロパティが設定されていない場合、コネクタは初期化に失敗します。
次の例は、ファイル設定と相対パスを使用してファイルを読み取ります。
<file:read config-ref="File_Config" path="relativePath"/>
次の例は、フルパスを使用してファイルを読み取ります。
<file:read path="fullPath"/>
Studio では、参照ボタン (…) をクリックして次のようなファイルを見つけます。
/Users/me/myfile
XML では、path 属性を使用して次のようなファイルへのパスを指定します。
<file:read path="/Users/me/myfile" />
返される情報
Read 操作は、次の情報を含むメッセージを返します。
-
ペイロードとしてのファイルのコンテンツ
-
メッセージ属性のファイルのメタデータ、メッセージ属性のメタデータ (名前、作成時間、サイズなど)。
ファイルが存在しない場合、Read 操作は FILE:ILLEGAL_PATH エラーをスローします。この操作では、ディレクトリを読み取りません。
|
|
相対パスの設定
同じ Mule アプリケーションで多数の Read 操作 (またはその他のファイル操作) がパスの一部を共有している場合、ベースパスをファイル設定に抽出して容易に再利用できます。
たとえば、フルパスが /Users/Documents/Examples/manual.txt と /Users/Documents/Examples/readme.txt の 2 つのファイルにアクセスするには、次のように設定でパスの同じ部分を定義します。
<file:config name="File_Config" >
<file:connection workingDir="/Users/Documents/Examples" />
</file:config>
この設定を参照する Read 操作は次のようになります。
<flow>
<file:read config-ref="File_Config" path="manual.txt" />
<file:read config-ref="File_Config" path="readme.txt" />
</flow>
MIME タイプおよび文字コード
各コネクタはファイルの MIME タイプをその拡張子から判別しようとします。MIME Type (MIME タイプ) (outputMimeType) パラメーターを使用して強制的に MIME タイプを別の値に変更できます。
同じプロセスが文字コードでも機能します。デフォルトでは、コネクタは、Mule Runtime のデフォルトの文字コードがファイルの MIME タイプに一致するものとみなします。ただし、文字コードは Encoding (エンコード) (outputEncoding) パラメーターで設定できます。
MIME タイプが重要な理由
ペイロードと他の値を生成する操作内に DataWeave 式を埋め込むことができます。適切な MIME タイプを設定することで、DataWeave は型を自動で割り当てることができるほか、適切な出力を生成できます。また、DataSense の機能を最大限活用することで、ユーザーエクスペリエンスが向上します。
Mule アプリケーションで定義されてファイルへのアクセス
Mule アプリケーションの開発中、フォルダーとファイルを resources フォルダーに保存できます。アプリケーションがデプロイされると、それらのフォルダーとファイルは ${app.home} プロパティで定義されたディレクトリにコピーされます。
たとえば、resources フォルダー内に MyFiles という名前のフォルダーを定義し、MyFiles フォルダー内に Example.txt という名前のファイルを定義する場合、次のプロジェクト構造を使用します。
ランタイムでは、ファイルにアクセスするパスは ${app.home}/MyFiles/Example.txt です。
ファイルを読み取るには、次の設定を定義します。
<file:config name="File_Config" >
<file:connection workingDir="${app.home}" />
</file:config>
Read 操作を次のように設定します。
<file:read config-ref="File_Config" path="MyFiles/Example.txt" />
前述のように、アプリケーションがデプロイされるたびに、src/main/resources フォルダーの内容は ${app.home} ディレクトリにコピーされ、実行中にこれらのファイルに加えられた変更は、アプリケーションが停止または再デプロイされると失われます。そのため、アプリケーションの実行中に読み取る必要があるファイルのみを resource フォルダーに置くことをお勧めします。
|
ファイルロック
lock パラメーターを true に設定することで、ファイルの読み取り中に他のプロセスがそのファイルにアクセスするのを防ぐことができます。ただし、これはホストのファイルシステムにより提供されるため、ロックの動作は、マウントされたドライブと、Mule が実行されているオペレーティングシステムに応じて変わる可能性があります。このロックに依存する前に以上の点を考慮してください。
ファイルが他のユーザーによりすでにロックされている場合、コネクタはファイルをロックできず、操作で FILE:FILE_LOCK エラーがスローされます。
次のいずれかの状況が発生した場合、ロックは自動的にリリースされます。
-
ファイルをロックしていた Mule フローが終了した。
-
ファイルのコンテンツが完全に読み取られた。
次に、ロックの例を示します。
<file:read config-ref="File_Config" path="relativePath" lock="true" />
出力 MIME タイプおよびエンコードの変更
outputEncoding および outputMimeType パラメーターを使用して、Read 操作が出力する MIME タイプまたはエンコードを変更できます。これはファイルのコンテンツは変換せず、MIME タイプまたはエンコード情報を上書きするだけです。次に例を示します。
<file:read config-ref="File_Config" path="relativePath"
outputEncoding="UTF-8"
outputMimeType="application/csv; headers=false" />
Time Between Size Checks (サイズ確認の時間間隔) パラメーター
Read 操作で返されるファイルのコンテンツを読み取り、ファイルがまだ書き込み中であるか不明な場合は、TimeBetweenSizeChecks パラメーターを使用できます。このパラメーターは、TimeBetweenSizeCheckUnit パラメーターと連携します。この 2 つのパラメーターの組み合わせで、2 つのサイズ確認が実行されます。
-
1 つは、ストリームがコンシュームされるポイントにフローが到達したとき。
Read はファイルのコンテンツを参照する遅延ストリームを返すため、Read 操作では時間の確認は行われません。そのため、ストリームがコンシュームされるときにのみサイズ確認を行うことが理にかなっています。 -
もう 1 つの確認は、
TimeBetweenSizeChecks および TimeBetweenSizeCheckUnit パラメーターで設定された待機時間後に実行。
この両方のサイズ確認で同じファイルサイズが返された場合、ストリームは正常にコンシュームされています。2 つのサイズ確認で異なるファイルサイズが返された場合、ファイルはまだ書き込み中であるため、ストリームはコンシュームされず、操作はエラーで失敗します。
サイズ確認パラメーターを含む Read 操作を使用して、Logger コンポーネントで出力ストリームをコンシュームできます。
<file:read config-ref="File_Config"
path="filePath"
timeBetweenSizeCheck="15"
timeBetweenSizeCheckUnit="SECONDS">
<logger level="INFO" message="#[payload]"/>
</file:read>
15 秒の確認は、Read 操作時ではなく logger コンポーネントの実行時に行われます。
反復可能ストリーム
List 操作では、Mule 4 で導入された反復可能ストリーム機能が使用されます。この操作ではメッセージのリストが返されます。各メッセージはリスト内のファイルを表し、ファイルへのストリームを保持します。デフォルトでは、ストリームは反復可能です。
詳細は、「Mule 4 でのストリーミング」を参照してください。