FTP Connector を使用したファイルの読み取りの例 - Mule 4

FTP 用 Anypoint Connector (FTP Connector) の ​Read​ 操作では、フローの任意の時点でファイルを読み取ることができます。この操作は、特定のパスのファイルを読み取り、次の属性が含まれる Mule メッセージを返します。

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

  • ファイルのメタデータをメッセージ属性内に含む。

  • ファイルが存在しない場合、​FTP:ILLEGAL_PATH​ エラーになる。

    この操作では、ディレクトリを読み取りません。 ファイルを FTP ソースフォルダーから読み取る場合、ファイルは手動で削除するまで同じフォルダーにとどまります。

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

反復可能なストリームについての詳細は、​「Mule 4 でのストリーミング」​ドキュメントを参照してください。

Studio で Read 操作を設定する

Studio で ​Read​ 操作を追加および設定する手順は、次のとおりです。

  1. [Mule Palette (Mule パレット)]​ ビューで「​ftp​」を検索し、​[Read]​ 操作を選択します。

  2. [Read]​ 操作を Studio キャンバスにドラッグします。

  3. 操作の設定画面の ​[General (一般)]​ タブで、​[Connector configuration (コネクタ設定)]​ 項目の横にあるプラス記号 (​+​) をクリックし、グローバル要素設定項目にアクセスします。

  4. 接続情報を指定し、​[OK]​ をクリックします。

  5. [General (一般)]​ タブで、​[File Path (ファイルパス)]​ を、読み取るファイルのパスに設定します (例: #[path]​)。

  6. [MIME Type (MIME タイプ)]​ タブで ​[MIME Type (MIME タイプ)]​ を ​application/xml​ に設定し、​[Encoding (エンコード)]​ を ​ISO 10646/Unicode(UTF-8)​ に設定します。

Studio の Read 操作の設定

設定 XML​ エディターでは、​<ftp:read>​ 設定は次のように記述されます。

<ftp:read path="#[path]"
  lock="true|false"
  outputEncoding="UTF-8"
  outputMimeType="application/xml" />
xml

MIME タイプおよび文字コード

各コネクタはファイルの MIME タイプをその拡張子から判別しようとします。​MIME Type (MIME タイプ)​ (​outputMimeType​) パラメーターを使用して強制的に MIME タイプを別の値に変更できます。

同じプロセスが文字コードでも機能します。デフォルトでは、コネクタは、Mule Runtime のデフォルトの文字コードがファイルの MIME タイプに一致するものとみなします。ただし、文字コードは ​Encoding (エンコード)​ (​outputEncoding​) パラメーターで設定できます。

MIME タイプが重要な理由

ペイロードと他の値を生成する操作内に DataWeave 式を埋め込むことができます。適切な MIME タイプを設定することで、DataWeave は型を自動で割り当てることができるほか、適切な出力を生成できます。また、DataSense の機能を最大限活用することで、ユーザーエクスペリエンスが向上します。

ファイルロック

FTP または SFTP ではファイルシステムレベルのロックができないため、同じ Mule アプリケーション内の他のフローからのみファイルを保護する Mule ロックを各操作で使用します。ファイルは外部システムからは保護されません。ただし、Mule アプリケーションがクラスターで実行されている場合、ロックは分散します。

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

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

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

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