サンプルコード (FileToFileのCamelサンプル) | 2012-03-13 17:34 |
documents (OSC2015沖縄セミナー資料) | 2015-07-09 11:48 |
注意:このページは「 http://camel.apache.org/ 」のCamel ver.2.9.2時点での日本語訳です。 誤訳が含まれていますので、正確な情報が欲しい人は本家サイトを参照してください。
このコンポーネントを使うとFTPやSFTPプロトコルを使ってリモートファイルシステムにアクセスできます。
Mavenユーザーは次のdependencyをpom.xmlに追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-ftp</artifactId> <version>x.x.x</version> <!-- use the same version as your Camel core version --> </dependency>
★オプションはこれだけではない Fileコンポーネントの全てのオプションを継承しています。
★リモートFTPサーバからファイル受信 ファイル受信に関係する詳細な情報は「ファイル受信のデフォルト」のセクションを見てください。
URIフォーマット
ftp://[username@]hostname[:port]/directoryname[?options] sftp://[username@]hostname[:port]/directoryname[?options] ftps://[username@]hostname[:port]/directoryname[?options]
directorynameはディレクトリを指定します。ネストしたフォルダも指定できます。
usernameが指定されていない場合、anonymousログインを試します。パスワードは使いません。
port番号が指定されていない場合、Camelはプロトコルに従ってデフォルト値を指定します。(ftp = 21, sftp = 22, ftps = 2222)
ユーザーは次の書式でクエリオプションを追加できます。 ?option=value&option=value&....
このコンポーネントは、実際のFTPの動作のために2つの異なったライブラリを使います。FTPとFTPSはApache Commons Netを使い、SFTPはJCraft JSCHを使います。
FTPSコンポーネントはCamel2.2以上で使うことができます。
FTPS(FTP Secure)はFTPの拡張で、Transport Layer Security(TLS)とSecure Sockets Layer(SSL)暗号化プロトコルを追加サポートしています。
★オプションはこれだけではない Fileコンポーネントの全てのオプションを継承しています。
名前 | デフォルト値 | 説明 |
username | null | リモートファイルシステムにログインするために使用するユーザー名を指定します。 |
password | null | リモートファイルシステムにログインするために使用するパスワードを指定します。 |
binary | false | 転送モードをBINARYかASCIIに指定します。デフォルトはASCII(false)です。 |
disconnect | false | Camel2.2以上:使用後直ちにリモートFTPサーバから切断するかどうかを指定します。これはコンシューマとプロデューサの両方で使う事ができます。Disconnectは現在のFTPサーバのコネクションを切断のみに使う事ができます。もしユーザーがコンシューマを止めたい場合はコンシューマかルートを止める必要があります。 |
localWorkDirectory | null | 受信時、ローカル作業ディレクトリはリモートファイルの内容をローカルファイルに直接保存する事に使われます。これにより内容をメモリに読み込まれる事を防ぎます。これは便利で、もしすごく大きなリモートファイルを受信する時でもメモリを節約する事ができます。詳細は下記を参照。 |
passiveMode | false | FTPとFTPSのみ:パッシブモード接続かどうかを指定します。デフォルトはアクティブモード(false)です。 |
securityProtocol | TLS | FTPSのみ:セキュリティプロトコルをセットします。次の値が定義されています。 TLS: Transport Layer Security SSL: Secure Sockets Layer |
disableSecureDataChannelDefaults | false | Camel2.4以降:FTPSのみ:セキュアデータ通信時にexecPbszとexecProtのデフォルト値を無効にするかどうかを指定します。ユーザーはこのオプションをtrueに設定すると、execPbszとexecProtに何を使うかを完全にコントロールできます。 |
execProt | null | Camel2.4以降:FTPSのみ:セキュアデータチャネルのデフォルトが無効になっていない場合は、オプション P が使われます。使用可能な値は: C: Clear S: Safe (SSLプロトコルのみ) E: Confidential(SSLプロトコルのみ) P: Private |
execPbsz | null | Camel2.4以降:FTPSのみ:このオプションはセキュアデータチャネルのバッファサイズを指定します。useSecureDataChannelオプションを有効にしてこのオプションをセットしなかった場合は0の値が使われます。 |
isImplicit | false | FTPSのみ:セキュリティーモード(implicit/explicit)をセットします。デフォルトはexplicit(false)です |
knownHostsFile | null | SFTPのみ:known_hostsファイルをセットします。これでSFTPエンドポイントはホストキーの検証ができます |
privateKeyFile | null | SFTPのみ:プライベートキーファイルをセットします。SFTPエンドポイントはプライベートの検証ができます |
privateKeyFilePassphrase | null | SFTPのみ:プライベートキーファイルパスフレーズをセットします。SFTPエンドポイントはプライベートキーの検証ができます。 |
ciphers | null | Camel2.8.2, 2.9以降:SFTPのみ:カンマ区切り暗号リストをセットします。使用する優先順位になります。利用可能な暗号名はJCraft JSCHで定義されています。例:aes128-ctr,aes128-cbc,3des-ctr,3des-cbc,blowfish-cbc,aes192-cbc,aes256-cbc。指定していない場合、デフォルトリストはJSCHのものを使います。 |
fastExistsCheck | false | Camel2.8.2,2.9以降:このオプションをtrueにセットした場合、camel-ftpは直接ファイルリストを使ってファイルの有無を確認します。FTPサーバーの中には直接的なファイルリストをサポートしていないものもあり、このオプションをfalseにした場合、camel-ftpは古い方法でディレクトリのリストを取ってファイルの存在有無を確認します。 |
strictHostKeyChecking | no | SFTPのみ:Camel2.2以降:ホストキーチェックを必ずするかどうかをセットします。利用可能な値はno、yes、askです。askはCamelにとっては無意味で、ユーザーは質問に応えることができません。 |
maximumReconnectAttempts | 3 | CamelがリモートのFTPサーバに接続しようとしている時に、Camelが実施する再接続を試みる最大回数を指定します。0に設定すると再接続を実施しません。 |
reconnectDelay | 1000 | Camelの再接続間隔。ミリ秒 |
connectTimeout | 10000 | Camel2.4以降:接続タイムアウトです。ミリ秒で指定、FTP/FTPSではftpClient.connectTimeoutを使うのに相当します。SFTPに対して接続しようとしているときにもこのオプションが使われます。 |
soTimeout | null | FTPとFTPSのみ:Camel2.4以降:SocketOptions.SO_TIMEOUT値です。ミリ秒で指定。SFTPではsoTimeoutとして自動的にconnectTimeoutが使われます。 |
timeout | 30000 | FTPとFTPSのみ:Camel2.4以降:データタイムアウト。ミリ秒で指定。FTP/FTPSに対してはftpClient.dataTimeoutを使うのに相当します。SFTPに関してはデータタイムアウトはありません。 |
throwExceptionOnConnectFailed | false | Camel2.5:接続とログインが失敗した時に例外を投げるかどうかを設定します。カスタムpollStrategyで例外を扱うことができます。例えば、コンシューマーを止めるなど。 |
siteCommand | null | FTPとFTPSのみ:Camel2.5以降:ログイン成功したあと、siteコマンドを実行します。複数のsiteコマンドは改行(\n)区切りで指定可能です。自分のFTPサーバでどのsiteコマンドがサポートされているかはhelp siteを使ってください。 |
stepwise | true | Camel2.6以降:段階的なディレクトリの横断を使うかどうかを指定します。「段階的」の意味は、毎回1つのディレクトリで「CD」を使う事です。ユーザーはこのアプローチを使わないように無効化できます。 |
separator | Auto | Camel2.6以降:パスの分離文字を指定します。ファイルのアップロード時に使います。 Auto = 変換なしで提供されたパス名を使う UNIX = unixスタイルのパス分離文字 Windows = Windowsスタイルのパス分離文字 |
chmod | null | SFTPプロデューサのみ:Camel2.9以降:保存されたファイルにchmodをセットできます。例えばchmode=640 |
compression | 0 | SFTPのみ:Camel2.8.3/2.9以降:圧縮を使います。レベルを1から10に指定します。圧縮をサポートするにはユーザーはJSCH zlib JARをクラスパスに追加する必要があります。 |
ftpClient | null | FTPとFTPSのみ:Camel2.1以降:カスタムのorg.apache.commons.net.ftp.FTPClientインスタンスを使うことができます。 |
ftpClientConfig | null | FTPとFTPSのみ:Camel2.1以降:カスタムorg.apache.commons.net.ftp.FTPClientConfigインスタンスを使うことができます。 |
serverAliveInterval | 0 | SFTPのみ:Camel2.8以降:SFTPセッションのserverAliveIntervalがセットできます。 |
serverAliveCountMax | 1 | SFTPのみ:Camel2.8以降:SFTPセッションのserverAliveCountMaxがセットできます。 |
ftpClient.trustStore.file | null | trust store fileをセットします。FTPSクライアントは信頼された証明書をルックアップする事ができます。 |
ftpClient.trustStore.type | JKS | trust store typeをセットします。 |
ftpClient.trustStore.algorithm | SunX509 | FTPSのみ:trust sotre アルゴリズムをセットします |
ftpClient.trustStore.password | null | FTPSのみ:trust storeパスワードをセットします |
ftpClient.keyStore.file | null | FTPSのみ:key sotre ファイルをセットします。FTPSクライアントは自己証明書をルックアップする事ができます。 |
ftpClient.keyStore.type | JKS | FTPSのみ:key sotre 型をセットします |
ftpClient.keyStore.algorithm | SunX509 | FTPSのみ:key sotre アルゴリズムをセットします |
ftpClient.keyStore.password | null | FTPSのみ:key store パスワードをセットします |
ftpClient.keyStore.keyPassword | null | FTPSのみ:private key パスワードをセットします |
sslContextParameters | null | FTPSのみ:Camel2.9以降:Resigtry内のorg.apache.camel.util.jsse.SSLContextParametersを参照します。この参照は他のSSL関連のftpClientオプション設定を上書きします。「JSSE設定ユーティリティの使用」を参照。 |
★FTPSコンポーネントデフォルト trust store FTPSコンポーネントでSSL関連のftpClient.プロパティを使う時、このtrust storeはすべての証明書を使います。もしユーザーが証明書を選択したい場合、ユーザーはftpClient.trustStore.xxxオプションを使ってtrust storeを設定する必要があります。もしくはカスタムftpClientを設定する必要があります。 sslContextParametersを使う時は、trust storeは提供されているSSLContextParametersインスタンスの設定により管理されます。
ユーザーはURIから直接ftpClientとftpClientConfigの追加オプションを設定する事ができます。ftpClient. か ftpClientConfig. を頭に付けて使います。
For example to set the setDataTimeout on the FTPClient to 30 seconds you can do: 例えば、FTPClientのsetDataTimeoutを30秒に設定するには、
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
ユーザーは2つ同時に使うこともできます。例えば、日付フォーマットやタイムゾーンを設定する例では
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000&ftpClientConfig.serverLanguageCode=fr").to("bean:foo");
ユーザーは自由にたくさんのこれらのオプションを使えます。
Apache Commons FTP FTPClientConfigのドキュメントを参照して、可能なオプションや詳細を参照できます。 Apache Commons FTP FTPClientも同様です。
もし、URLにたくさんで長いURL設定したくない場合は、ユーザーはCamelにRegistryをルックアップさせることでftpClientやftpClientConfigを参照して設定することができます。
例えば
<bean id="myConfig" class="org.apache.commons.net.ftp.FTPClientConfig"> <property name="lenientFutureDates" value="true"/> <property name="serverLanguageCode" value="fr"/> </bean>
そして、Camelにこのbeanをルックアップさせます。この時ユーザーはURLの中で#表記を使います。
from("ftp://foo@myserver?password=secret&ftpClientConfig=#myConfig").to("bean:foo");
★Fileコンポーネントを参照してください。すべてのオプションはこのコンポーネントに適応されます。
ftp://someone@someftpserver.com/public/upload/images/holiday2008?password=secret&binary=true
ftp://someoneelse@someotherftpserver.co.uk:12049/reports/2008/password=secret&binary=false
ftp://publicftpserver.com/download
注意:FTPコンシューマは並列処理をサポートしていません。 FTPコンシューマは(同一エンドポイントで)並列処理をサポートしていません。(裏のFTPクライアントがスレッドセーフではない) ユーザーは異なるエンドポイントからマルチ的にFTPコンシューマでポーリングする事ができます。 FTPプロデューサはこの問題がありません。これは並列処理をサポートしています。
★その他の情報 このコンポーネントはファイルコンポーネントの拡張されたものです。他のサンプルや詳細はファイルコンポーネントのページにあります。
FTPコンシューマはデフォルトではリモートのFTPサーバの処理済のファイルに何もせずにそのまま残します。ユーザーは適切に設定する必要があります。それはもしユーザがファイルを削除したり別のロケーションに移動させたい場合のときです。たとえば、ユーザーがdelete=true を使ってファイルを削除したり、move=.doneを使ってファイルを隠しdoneサブディレクトリに移動することができます。
通常、ファイルコンシューマは違う動作で、デフォルトでは.camelサブディレクトリに移動させます。この理由は、CamelはデフォルトではFTPコンシューマにこの動作をさせる事ができません。それはデフォルトではファイルを移動させたり削除させるためのパーミッションが足りない場合があるからです。
readLockオプションはCamelに対し書き込み中のファイルを受信させないようにできます。しかし、このオプションはデフォルトではoffになっています。これはユーザに書き込み権限が必要になるからです。リードロックに対する詳細はファイルコンポーネントのオプション表を参照してください。
FTPを通してファイルアップロード中にファイルの読み込みを回避する方法は別にあります。たとえば、まずテンポラリに書き込みして、書き込み終わったらファイルを移動させます。
moveやpreMoveオプションを使ってファイルを移動させるとき、それらのファイルはFTP_ROOTフォルダに限定されてしまいます。 これはFTPエリアの外にファイルを移動させる事を制限されています。もし別のエリアにファイルを移動させたい場合は、ソフトリンクを使って、ソフトリンクされたフォルダに移動させることができます。
次のメッセージヘッダはこのコンポーネントの動作により反映されます。
ヘッダ | 説明 |
CamelFileName | 出力ファイル名を指定。(エンドポイントのディレクトリからの相対)エンドポイントに送信するときに出力メッセージとして使います。もし指定されていない場合、生成されているメッセージIDが変わりにファイル名として使われます。 |
CamelFileNameProduced The actual absolute filepath (path + name) for the output file that was written. This header is set by Camel and its purpose is providing end-users the name of the file that was written. CamelFileBatchIndex Current index out of total number of files being consumed in this batch. CamelFileBatchSize Total number of files being consumed in this batch. CamelFileHost The remote hostname. CamelFileLocalWorkPath Path to the local work file, if local work directory is used.