私が取り組んでいるアプリケーションには、Spring Integration 2.5 を使用した統合レイヤー ビルドがあり、FTP アダプターを使用して FTP サーバーから CSV ファイルをプルしようとし、ファイル アダプターによってポーリングされるローカル サーバーにドロップします。そのため、ファイルが ftp によってダウンロードされるとすぐに、ファイル アダプターはそれをスプリッターに渡します。スプリッターでは、CSV ファイルが個別のレコードに分割され、ダウンストリームに送信されてさらに処理されます。
この問題は、FTP アダプターによってダウンロードされたファイルがスプリッターで認識されない場合に発生します。以下は、構成の詳細と、ファイルが存在するかどうかを確認し、ファイルが存在しない場合はユーザー定義の例外をスローするスプリッターのコードです。
問題は、常に例外が発生することです。
<ftp:inbound-channel-adapter id="ftpInbound" channel="ftpChannel"
session-factory="ftpClientFactory"
filename-regex="${ftp.server.remotefilename}"
auto-create-local-directory="true" delete-remote-files="false"
remote-directory="${ftp.server.remotefolder}"
local-directory="file:${ftp.server.localfolder}">
<si:poller ref="FTPPoller"></si:poller>
</ftp:inbound-channel-adapter>
<si:channel id="ftpChannel">
<si:queue />
</si:channel>
<file:inbound-channel-adapter id="fileInboundAdapter"
channel="fileIn" directory="file:${ftp.server.localfolder}"
filename-pattern="${ftp.server.localfilename}"
auto-create-directory="true" prevent-duplicates="false">
<si:poller ref="filePoller"></si:poller>
</file:inbound-channel-adapter>
<si:channel id="fileIn" />
<si:splitter input-channel="fileIn" output-channel="csvRowsIn" ref="inboundFileRowSplitter" method="extractRows" />
public class InboundFileRowSplitter {
@Splitter
public Collection<String[]> extractRows( @Headers
Map<String, Object> headers, File keywordFile ) {
>>Other Processing<<
return processKeywordsFile( keywordFile );
}
private Collection<String[]> processKeywordsFile( File keywordFile ) {
try {
if (keywordFile.exists()) {
>>Other Processing<<
} else {
throw new ResourceLoaderException( "............................" );
}
} catch (Exception e) {
>>Other Processing<<
} finally {
>>Other Processing<<
}
}
以下のコードでは、定義された予想で ResourceLoaderException をスローします。この問題を解決する方法についての提案をいただければ幸いです。その製品の問題と早期の対応が本当に必要です。