File Connector を使用したファイルの読み取り

ファイル用 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"/>
xml

次の例は、フルパスを使用してファイルを読み取ります。

<file:read path="fullPath"/>
xml

Studio では、参照ボタン (…​) をクリックして次のようなファイルを見つけます。
/Users/me/myfile

XML では、​path​ 属性を使用して次のようなファイルへのパスを指定します。
<file:read path="/Users/me/myfile" />

返される情報

Read​ 操作は、次の情報を含むメッセージを返します。

  • ペイロードとしてのファイルコンテンツ

  • メッセージ属性のファイルのメタデータ、メッセージ属性のメタデータ (名前、作成時間、サイズなど)。

ファイルが存在しない場合、​Read​ 操作は ​FILE:ILLEGAL_PATH​ エラーをスローします。この操作では、ディレクトリを読み取りません。

Read​ 操作は (non-void 値を返す他の操作と同様)、対象パラメーターをサポートしています。 「Mule 対象変数」​を参照してください。

相対パスの設定

同じ 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>
xml

この設定を参照する ​Read​ 操作は次のようになります。

<flow>
    <file:read config-ref="File_Config" path="manual.txt" />
    <file:read config-ref="File_Config" path="readme.txt" />
</flow>
xml

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​ という名前のファイルを定義する場合、次のプロジェクト構造を使用します。

project resources

ランタイムでは、ファイルにアクセスするパスは ​${app.home}/MyFiles/Example.txt​ です。

ファイルを読み取るには、次の設定を定義します。

<file:config name="File_Config" >
    <file:connection workingDir="${app.home}" />
</file:config>
xml

Read​ 操作を次のように設定します。

<file:read config-ref="File_Config" path="MyFiles/Example.txt" />
xml
前述のように、アプリケーションがデプロイされるたびに、​src/main/resources​ フォルダーのコンテンツは ​${app.home}​ ディレクトリにコピーされ、実行中にこれらのファイルに加えられた変更は、アプリケーションが停止または再デプロイされると失われます。そのため、アプリケーションの実行中に読み取る必要があるファイルのみを ​resource​ フォルダーに置くことをお勧めします。

ファイルロック

lock​ パラメーターを ​true​ に設定することで、ファイルの読み取り中に他のプロセスがそのファイルにアクセスするのを防ぐことができます。ただし、これはホストのファイルシステムにより提供されるため、ロックの動作は、マウントされたドライブと、Mule が実行されているオペレーティングシステムに応じて変わる可能性があります。このロックに依存する前に以上の点を考慮してください。

ファイルが他のユーザーによりすでにロックされている場合、コネクタはファイルをロックできず、操作で ​FILE:FILE_LOCK​ エラーがスローされます。

次のいずれかの状況が発生した場合、ロックは自動的にリリースされます。

  • ファイルをロックしていた Mule フローが終了した。

  • ファイルコンテンツが完全に読み取られた。

次に、ロックの例を示します。

<file:read config-ref="File_Config" path="relativePath" lock="true" />
xml

出力 MIME タイプおよびエンコードの変更

outputEncoding​ および ​outputMimeType​ パラメーターを使用して、​Read​ 操作が出力する MIME タイプまたはエンコードを変更できます。これはファイルコンテンツは変換せず、MIME タイプまたはエンコード情報を上書きするだけです。次に例を示します。

<file:read config-ref="File_Config" path="relativePath"
    outputEncoding="UTF-8"
    outputMimeType="application/csv; headers=false" />
xml

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>
xml

15 秒の確認は、​Read​ 操作時ではなく ​logger​ コンポーネントの実行時に行われます。

反復可能ストリーム

List​ 操作では、Mule 4 で導入された反復可能ストリーム機能が使用されます。この操作ではメッセージのリストが返されます。各メッセージはリスト内のファイルを表し、ファイルへのストリームを保持します。デフォルトでは、ストリームは反復可能です。

詳細は、​「Mule 4 でのストリーミング」​を参照してください。