SFTP コネクタを使用したファイルのリスト

List 操作ではメッセージのリストが返されます。各メッセージは、ディレクトリパス (directoryPath) 内で見つかったファイルまたはフォルダを表します。

デフォルトでは、この操作は directoryPath のサブフォルダ内のファイルまたはフォルダを読み取ったり、それらのリストを作成したりしません。

サブフォルダ内のファイルまたはフォルダのリストを作成するには、recursive パラメータを true に設定できます。

この例では、directoryPath 内のすべてのメッセージのリストを作成します。ただし、サブフォルダの内容のリストは作成しません。パスには絶対パスを指定できます。また、ファイル設定 (<sftp:config/>) で設定した作業ディレクトリ (workingDir) を基準とする相対パスを指定することもできます。

<flow name="list">
  <sftp:list directoryPath="~/dropFolder" />
  <foreach>
    <choice>
      <when expression="#[attributes.directory]">
        <flow-ref name="processDirectory" />
      </when>
      <otherwise>
        <logger message="Found file #[attributes.path] which content is #[payload]" />
      </otherwise>
    </choice>
  </foreach>
</flow>

上の例では、フォルダの内容のリストを作成した後、For Each および Choice コンポーネントを使用して、リスト内の各ディレクトリを各ファイルとは異なる方法で処理します。

ディレクトリのポーリング

ディレクトリをポーリングして、処理する新規ファイルを探します。Mule 4 には (Mule 3 トランスポートとは異なり) ポーリングメッセージソースがなくなったため、Mule 4 では <scheduler /> 要素を <sftp:list> 要素と連携させてポーリングできます。

<flow name="poll">
  <scheduler>
      <scheduling-strategy>
          <fixed-frequency frequency="1000"/>
      </scheduling-strategy>
  </scheduler>
  <sftp:list directoryPath="~/dropFolder" />
  <foreach>
      <flow-ref name="processFile" />
      <sftp:delete path="#[attributes.path]" />
  </foreach>
</flow>

この例では、フローによって 1 秒に 1 回フォルダの内容がリストされます。フローは続いてファイルを 1 つずつ処理し、処理が終わると各ファイルを削除します。

注意: フローが終了したときにファイルを自動的に削除または移動していた Mule 3 トランスポートとは異なり、手動で削除する必要があります。これにより、特に障害シナリオでは、制御レベルが格段に高くなります。さらに、移動、名前変更、外部システムへの送信、その他のアクションの実行を選択することもでき、他の条件または障害に応じて動作を変更することもできます。

フィルタの一致

ファイルをリストする場合、特定の条件に一致するファイルのみを考慮する必要があります。

そのために、<sftp:matcher> 要素が存在しています。この要素は、ファイルを受け入れるか拒否するために使用できる条件を定義します。

マッチャーの定義:

<sftp:matcher
filename-pattern="a?*.{htm,html,pdf}"
path-pattern="a?*.{htm,html,pdf}"
createdSince="2019-06-03T13:21:58+00:00"
createdUntil="2019-07-03T13:21:58+00:00"
updatedSince="2019-05-03T13:21:58+00:00"
updatedUntil="2019-06-03T13:21:58+00:00"
accessedSince="2019-06-03T13:21:58+00:00"
accessedUntil="2019-06-03T13:21:58+00:00"
directory="true|false"
regularFile="true|false"
symbolicLink="true|false"
minSize="0"
maxSize="1024" />

これらの各属性は省略可能です。これらの各属性を指定しなかった場合、無視されます。これらのすべての属性は AND 演算子と組み合わされます。

各属性:

  • accessedSince: DateTime インスタンスまたは ISO-8601 形式の String (文字列) で表現されるファイルアクセススタンプの下限 (境界を含む)。

  • accessedUntil: DateTime インスタンスまたは ISO-8601 形式の String (文字列) で表現されるファイルアクセススタンプの上限 (境界を含む)。

  • createdSince: DateTime インスタンスまたは ISO-8601 形式の String (文字列) で表現されるファイル作成スタンプの下限 (境界を含む)。

  • createdUntil: DateTime インスタンスまたは ISO-8601 形式の String (文字列) で表現されるファイル作成スタンプの上限 (境界を含む)。

  • directory: ファイルがディレクトリの場合のみ一致する。

  • filename-pattern: 現在のファイル名パターンフィルタ度同じだがより強力。グロブ表現および正規表現がサポートされています。グロブがデフォルトです。プレフィックスを設定することでどちらを使用するか選択できます。例: glob:*.{java, js}、regex:`[0-9]_test.csv`。

  • maxSize: バイト数で表現されるファイルサイズの上限 (境界を含む)。

  • minSize: バイト数で表現されるファイルサイズの下限 (境界を含む)。

  • path-pattern: filename-pattern と同じだが、ファイルパス全体で適用する。単なるファイル名ではありません。

  • regularFile: ファイルが正規ファイルの場合のみ一致する。

  • symbolicLink: ファイルがシンボリックリンクの場合のみ一致する。

  • updatedSince: DateTime インスタンスまたは ISO-8601 形式の String (文字列) で表現されるファイル変更スタンプの下限 (境界を含む)。

  • updatedUntil: DateTime インスタンスまたは ISO-8601 形式の String (文字列) で表現されるファイル変更スタンプの上限 (境界を含む)。

ファイルマッチャーは名前付きのトップレベル要素として使用して再利用を可能にするか、特定のコンポーネントに固有の内部要素として使用することができます。それぞれの例を示します。

  • トップレベルの再利用可能なマッチャーの例 (Flow Designer では使用できません):

    <sftp:matcher name="smallFileMatcher" maxSize="100" />
          <flow name="smallFiles">
          <sftp:list path="~/smallfiles" matcher="smallFileMatcher" />
          ...
    </flow>
  • 内部の再利用不能なマッチャーの例:

    <flow name="smallFiles">
          <sftp:list path="~/smallfiles" matcher="smallFileMatcher">
                <ftp:matcher maxSize="100" />
          </sftp:list>
          ...
    </flow>

マッチャーの機能についての詳細は、「SFTP コネクタドキュメントリファレンス」を参照してください。

反復可能ストリーム

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

このトピックについての詳細は、Mule 4 でのストリーミングを参照してください。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub