camel over FTPで複数のファイルをダウンロードした後、それらを処理する必要がありますが、tar.gzip形式です。 Camelはgzipをサポートしています。2.16.0以降のtarエンドポイントも見ることができます(http://camel.apache.org/camel-2160-release.html)。camel unpacking tar.gzip files
gzipの抽出のための私が持っているコード:
from("file:modelFiles?readLock=changed&recursive=true&consumer.delay=1000")
.unmarshal(new ZipFileDataFormat())
.choice()
.when(body().isNotNull())
.log("Uziping file ${file:name}.")
.to("file:modelFiles_unzipped")
.endChoice()
.end();
すべてのファイルは、ルールを介して実行しかし、彼らは再び.tar.gzファイルとして作成されますが、悪化したコンテンツも破損していることであるが、彼らはgzipアーカイブとして後でオープンすることさえできません。
質問:
- がどのように私はgzipでアーカイブを解凍する必要がありますか?
- のtarファイルでどうすればいいですか?
アップデート1:ポストジェレミーため
感謝。提案されたように私はこのようなコードを変更:
from("file:modelFilesSBML2?readLock=changed&recursive=true&consumer.delay=1000")
.unmarshal().gzip()
.split(new TarSplitter())
.to("file:modelFilesSBML_unzipped");
その後、私は次の例外(だけの情報のためのtar.gzipファイルは、長さがゼロではない)受信:FailedException:ファイルにヌル体を書き込むことができません:modelFilesSBML_unzippedを\ 2006-01-31 \ BioModels_Database-R4-sbml_files.tar.gz:
2016-03-22 14:11:47,950 [ERROR|org.apache.camel.processor.DefaultErrorHandler|MarkerIgnoringBase] Failed delivery for (MessageId: ID-JOY-49807-1458652278822-0-592 on ExchangeId: ID-JOY-49807-1458652278822-0-591). Exhausted after delivery attempt: 1 caught: org.apache.camel.component.file.GenericFileOperationFailedException: Cannot write null body to file: modelFilesSBML_unzipped\2006-01-31\BioModels_Database-r4-sbml_files.tar.gz
ソリューション:
多くの方法を試した後、次のように、私は最終的にそれを使用しています(それは2.16.0または2.16.1では動作しませんでしたキャメル2.17.0 で):キャメル2.17.0で
from("file:modelFilesSBML?noop=true&recursive=true&consumer.delay=1000")
.unmarshal().gzip()
.split(new TarSplitter())
.to("log:tar.gzip?level=INFO&showHeaders=true")
.choice()
.when(body().isNotNull())
.log("### Extracting file: ${file:name}.")
.to("file:modelFilesSBML_unzipped?fileName=${in.header.CamelFileRelativePath}_${file:name}")
.endChoice()
.end();
あなたも身体()isNotNull()チェックをスキップすることができます。
ジェレミーの提案は多くの助けになるので、解決策として彼の答えを受け入れることにします。それにもかかわらず、メッセージボディにヌルがないかどうかチェックしなければ、例外が発生します。 fileName = $ {in.header.CamelFileRelativePath} _ $ {file:name}は、ファイル名の先頭にfile.tar.gzが付いている元のファイル構造も保持していますが、他の方法でファイルを保存することはできませんファイルのエンドポイントは( "file:directory?options ..."の)ディレクトリの式を受け入れません。
ありがとうございましたJeremie、私はそれを試しましたが、例外はnullボディについて不平を言います。これは元のコードにヌルボディチェックを追加したものの、すべてが省略されている元の例外と似ています。 – Tamas
私は分かりません。私は自分のマシン上でseverals tar.gzで私の答えのコードをテストしました。それはヌルチェックなしで動作していました。 –
Jeremie、ソリューションについてどう思いますか?私は元のディレクトリ構造を維持するための部分を意味します。ご意見ありがとうございました。 – Tamas