Compression モジュール

Compression モジュールでは、最もよく使用されるファイルアーカイブツールと圧縮形式がサポートされ、Mule アプリケーションを介してそれらへのアクセスが提供されます。

ファイルアーカイブツールは、複数のファイルを 1 つのアーカイブファイルに結合してトランスポートや保存を容易にするコンピュータプログラムです。ほとんどのアーカイブツールはそのアーカイブ形式のデータ圧縮を使用して最終アーカイブのサイズを削減します。ただし、すべての圧縮アルゴリズムが複数のファイルをアーカイブできるとは限りません。一部の圧縮アルゴリズムは、単一ファイルのデータ圧縮に制限されます。

このモジュールでは、使用可能な各形式のファイルを、各形式に関連付けられたアルゴリズムにより提供される機能を失わずに、圧縮および圧縮解除します。

この機能を果たすため、このモジュールでは 2 組の操作が提供されます。1 つは、単一ファイルの圧縮と圧縮解除、もう 1 つは、ファイルのバンドルのアーカイブと抽出です。必要に応じて圧縮またはアーカイブ戦略を使用して、この各操作を設定できます。

単一ファイルの圧縮と圧縮解除

コンテンツの圧縮

入力ストリームが提供されると、モジュールはストリームを圧縮して新しい圧縮されたビットストリームを返します。これで、そのストリームをファイルシステムに保存したり、別のシステムに転送したりできます。

圧縮ツール戦略

圧縮ツール戦略では、ファイルまたは単一エントリアーカイブを圧縮できます。

GZip 圧縮ツール戦略

操作でこの戦略を使用した場合、コンテンツを gzip 形式で圧縮する必要があることが宣言されます。

<compression:gzip-compressor/>
Zip 圧縮ツール戦略

操作でこの戦略を使用した場合、コンテンツを zip 形式で圧縮する必要があることが宣言されます。

<compression:zip-compressor/>

Compress 操作

<compression:compress>
   <compression:content>#[payload.data]</compression:content> (1)
   <compression:compressor>
       <compression:zip-compressor/> (2)
   </compression:compressor>
</compression:compress>
1 圧縮する InputStream。デフォルトは #[payload] です。
2 使用する圧縮ツール戦略。

圧縮エラー

コンテンツの圧縮中にエラーが発生した場合、COMPRESSION:COULD_NOT_COMPRESS エラーがスローされます。

コンテンツの圧縮解除

指定された圧縮形式のアーカイブであるとみなされる圧縮された単一エントリコンテンツを圧縮解除します。

圧縮解除ツール戦略

圧縮解除ツール戦略では、ファイルまたは単一エントリアーカイブの圧縮解除方法が認識されています。

GZip 圧縮解除ツール戦略

操作でこの戦略を使用した場合、コンテンツを gzip 形式で圧縮解除する必要があることが宣言されます。

<compression:gzip-decompressor/>

Zip 圧縮解除ツール戦略

操作でこの戦略を使用した場合、コンテンツを zip 形式で圧縮解除する必要があることが宣言されます。

<compression:zip-decompressor/>

Decompress 操作

<compression:decompress>
   <compression:content>#[payload]</compression:content> (1)
   <compression:decompressor>
       <compression:gzip-decompressor/> (2)
   </compression:decompressor>
</compression:decompress>
1 圧縮解除する InputStream。デフォルトは #[payload] です。
2 使用する圧縮解除ツール戦略。

圧縮解除エラー

提供されたコンテンツが、設定された戦略の形式に一致しない場合、COMPRESSION:INVALID_ARCHIVE エラーがスローされます。

圧縮解除するアーカイブに複数のエントリが含まれる場合、この操作は COMPRESSION:TOO_MANY_ENTRIES エラーで失敗します。返す 1 つのエントリのみを選択できないためです。この場合、Extract 操作を使用する必要があります。

複数のエントリのアーカイブと抽出

Archive

<entryName,InputStream> のマップが提供されると、アーカイブプロセスにより、提供されたすべてのエントリが 1 つの新しいアーカイブに、設定された形式で圧縮されます。

アーカイブツール戦略

アーカイブツール戦略の目的は、複数のエントリを 1 つのアーカイブに圧縮することです。

Zip アーカイブツール戦略

操作で Zip アーカイブツール戦略を使用した場合、コンテンツを zip 形式で圧縮する必要があることが宣言されます。

<compression:zip-archiver/>

Archive 操作

この操作では、圧縮するエントリとその値を特定するマップを受け取ります。この操作に渡された各エントリは、指定された名前を持つ圧縮されたアーカイブ内に配置されます。

<compression:archive>
   <compression:entries> (1)
    #[
       {
         summary.pdf: vars.summary,
         'details/result_001.pdf': vars.file1
         'details/result_002.pdf': vars.file2
       }
     ]
   </compression:entries>
   <compression:archiver>
       <compression:zip-archiver/> (2)
   </compression:archiver>
</compression:archive>
1 圧縮するエントリの各名前をキーとして定義し、そのエントリのコンテンツを値として定義する DataWeave スクリプト。
2 使用するアーカイブツール戦略。

結果のアーカイブには 3 つのエントリ​が含まれます。1 つはルートレベルの summary.pdf という名前のエントリ。その他は details というディレクトリ内の result_001.pdf および result_002.pdf というエントリです。

+- content.zip
|  \- summary.pdf
|  \+ details
   |  \- result_001.pdf
   |  \- result_002.pdf

エントリの名前の中にあるスラッシュ (/) (details/result_001.pdf など) はディレクトリの分離を示します。これにより、アーカイブ内でディレクトリを作成するすべての名前が調べられます。

アーカイブエラー

コンテンツの圧縮中に問題が発生した場合、COMPRESSION:COULD_NOT_COMPRESS エラーがスローされます。

Extract

いずれかの圧縮形式でアーカイブを表しているコンテンツを圧縮解除します。

抽出ツール戦略

抽出ツール戦略では、特定の形式で圧縮されている複数のエントリを含むアーカイブを圧縮解除できます。

Zip 戦略

操作でこの戦略を使用した場合、コンテンツを zip 形式で抽出する必要があることが宣言されます。

<compression:zip-archiver/>

Extract 操作

<compression:extract>
    <compression:compressed>#[vars.archive]</compression:compressed> (1)
    <compression:extractor>
        <compression:zip-extractor/> (2)
    </compression:extractor>
</compression:extract>
1 抽出する圧縮済みコンテンツ。デフォルトは #[payload] です。
2 このアーカイブのエントリはオブジェクトとして返され、各オブジェクトにはその名前でアクセスできます。たとえば、次の構造を持つ 3 つのエントリを含むアーカイブが圧縮解除されたとします。
+- Archive
|  \- summary.pdf
|  \+ details
   |  \- result_001.pdf
   |  \- result_002.pdf

この場合、各エントリの抽出したコンテンツに次のようにアクセスできます。 payload['summary.pdf'] または payload.details['result_001.pdf']

抽出ツールエラー

コンテンツが、設定された形式ではない場合、COMPRESSION:INVALID_ARCHIVE エラーがスローされます。圧縮プロセス中にその他のエラーが発生した場合、操作で COMPRESSION:COULD_NOT_DECOMPRESS エラーがスローされます。

一般的なユースケース

ファイルの圧縮

次の例では、ファイルを読み取り、圧縮して、保存します。

<file:read path="file.txt"/>
<compression:compress>
   <compression:compressor>
       <compression:gzip-compressor/>
   </compression:compressor>
</compression:compress>
<file:write path="file-txt.gz"/>

リモートサービスからのペイロードの圧縮解除

次の例では、Zip ファイルを返して圧縮解除するサーバを呼び出します。

<wsc:consume config="ZipServiceConfig" operation="returnsZip"/>
<compression:decompress>
   <compression:content>
      #[payload.body.zipContent]
   </compression:content>
   <compression:decompressor>
       <compression:zip-decompressor/>
   </compression:decompressor>
</compression:decompress>

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub