Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerCompression Module v2.1
Compression Module では、最もよく使用されるファイルアーカイブツールと圧縮形式がサポートされ、Mule アプリケーションを介してそれらへのアクセスが提供されます。
ファイルアーカイブツールは、複数のファイルを 1 つのアーカイブファイルに結合してトランスポートや保存を容易にするコンピュータープログラムです。ほとんどのアーカイブツールはそのアーカイブ形式のデータ圧縮を使用して最終アーカイブのサイズを削減します。ただし、すべての圧縮アルゴリズムが複数のファイルをアーカイブできるとは限りません。一部の圧縮アルゴリズムは、単一ファイルのデータ圧縮に制限されます。
このモジュールでは、使用可能な各形式のファイルを、各形式に関連付けられたアルゴリズムにより提供される機能を失わずに、圧縮および圧縮解除します。
この機能を果たすため、このモジュールでは 2 組の操作が提供されます。1 つは、単一ファイルの圧縮と圧縮解除、もう 1 つは、ファイルのバンドルのアーカイブと抽出です。必要に応じて圧縮またはアーカイブ戦略を使用して、この各操作を設定できます。
リリースノート: Compression Module リリースノート
Exchange: Compression Module
入力ストリームが提供されると、モジュールはストリームを圧縮して新しい圧縮されたビットストリームを返します。これで、そのストリームをファイルシステムに保存したり、別のシステムに転送したりできます。
指定された圧縮形式のアーカイブであるとみなされる圧縮された単一エントリコンテンツを圧縮解除します。
圧縮解除ツール戦略では、ファイルまたは単一エントリアーカイブの圧縮解除方法が認識されています。
<entryName,InputStream> のマップが提供されると、アーカイブプロセスにより、提供されたすべてのエントリが 1 つの新しいアーカイブに、設定された形式で圧縮されます。
この操作では、圧縮するエントリとその値を特定するマップを受け取ります。この操作に渡された各エントリは、指定された名前を持つ圧縮されたアーカイブ内に配置されます。
<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 など) はディレクトリの分離を示します。これにより、アーカイブ内でディレクトリを作成するすべての名前が調べられます。
| DataWeave 式を使用して Archive 操作への入力を作成する場合、DataWeave 式で、Java Map オブジェクトをビルドするために使用するオブジェクトを出力する必要があります。各キーは、アーカイブに追加するオブジェクト全体で一意である必要があります。 |
いずれかの圧縮形式でアーカイブを表しているコンテンツを圧縮解除します。
<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'] のようにアクセスできます。
この例では、input という名前のフォルダーからすべてのファイルを読み取り、キーをファイル名、値を読み取られたファイルの値に設定してオブジェクトを作成することで圧縮されたアーカイブを作成します。次にアーカイブを抽出します。その後、For-Each スコープは抽出された各キー/値を反復処理し、キーを新しいファイル名、値を対応するファイルの抽出されたコンテンツとしてファイルを新しい出力フォルダーに書き込みます。
<flow name="archive-extract-test" >
<scheduler doc:name="Scheduler">
<scheduling-strategy >
<fixed-frequency frequency="15" timeUnit="SECONDS"/>
</scheduling-strategy>
</scheduler>
<file:list doc:name="List" config-ref="File_Config" directoryPath="input"/>
<set-payload value='#[output application/java
---
(0 to sizeOf(payload) - 1) as Array
reduce (index, acc={}) ->
acc ++ { (payload[index].attributes.fileName): payload[index].payload}]' doc:name="Set Payload" />
<compression:archive doc:name="Archive" >
<compression:archiver>
<compression:zip-archiver />
</compression:archiver>
</compression:archive>
<compression:extract doc:name="Extract" >
<compression:extractor >
<compression:zip-extractor />
</compression:extractor>
</compression:extract>
<foreach doc:name="For Each" collection="payload">
<file:write doc:name="Write" config-ref="File_Config" path='#[output application/json
---
"output/" ++ (payload pluck $$)[0]]' >
<file:content ><![CDATA[#[output application/java --- ( payload pluck $ )[0]]]]></file:content>
</file:write>
</foreach>
<logger level="INFO" doc:name="Logger" message="#[output application/json --- payload]"/>
</flow>
</mule>
次の例では、ファイルを読み取り、圧縮して、保存します。
<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>