同様の問題があり、フィルターで解決しました。inbound-channel-adapter では、カスタム フィルターの実装を設定できます。したがって、ポーリングする前にフィルターが呼び出され、ファイルに関するすべての情報が得られます。たとえば、そのファイルをダウンロードするかどうかを決定できます。
<int-sftp:inbound-channel-adapter id="test"
session-factory="sftpSessionFactory"
channel="testChannel"
remote-directory="${sftp.remote.dir}"
local-directory="${sftp.local.dir}"
filter="customFilter"
delete-remote-files="false">
<int:poller trigger="pollingTrigger" max-messages-per-poll="${sftp.max.msg}"/>
</int-sftp:inbound-channel-adapter>
<beans:bean id="customFilter" class="your.class.location.SftpRemoteFilter"/>
Filter クラスは、FileListFilter インターフェイスの単なる実装です。ここではダミーフィルターの実装です。
public class SftpRemoteFilter implements FileListFilter<LsEntry> {
private static final Logger log = LoggerFactory.getLogger(SftpRemoteFilter.class);
@Override
public final List<LsEntry> filterFiles(LsEntry[] files) {
log.info("Here is files.");
//Do something smart
return Collections.emptyList();
}
}
しかし、あなたが説明したようにそれをしたい場合は、ペイロードにヘッダーを設定し、そのペイロードを使用しているときに同じヘッダーを使用することでそれを行うことができると思いますが、その場合はMessage<File>
サービスアクティベーターメソッドで代わりに File を使用する必要があります.