Как распаковать любой zip-файл с помощью File Connector в WSO2 - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь распаковать zip-файл, который может иметь любое имя.Ниже мой код: -

<proxy name="Unzip" startOnLoad="true" transports="http https" xmlns="http://ws.apache.org/ns/synapse">
<target>
    <inSequence>
        <fileconnector.unzip>
            <source>file:///D:/AfterProcess/.*\.zip</source>
            <destination>file:///D:/001/</destination>
        </fileconnector.unzip>
        <respond></respond>
    </inSequence>
    <outSequence/>
    <faultSequence/>
</target>

Но он не может его распаковать.Если я попытаюсь дать имя файла, как показано ниже: -

<source>file:///D:/AfterProcess/Hello.zip</source>

, то это работает.Как распаковать файл, если я не знаю его имени?

1 Ответ

0 голосов
/ 17 октября 2018

Вы не можете использовать регулярные выражения в источнике при разархивировании.Если вы могли бы тогда, что произойдет, если существует несколько совпадающих файлов?

Если вы знаете, что zip-файл всегда будет находиться в этом каталоге, то вы можете использовать поиск по коннектору файлов, чтобы узнать имяfile.

<fileconnector.search>
    <source>file:///D:/AfterProcess/</source>
    <filePattern>.*\.zip</filePattern>
    <recursiveSearch>False</recursiveSearch>
</fileconnector.search>

Поиск вернет следующее, если это единственный zip-файл в каталоге.

<fc:result xmlns:fc="http://org.wso2.esbconnectors.FileConnector">
    <fc:file>/AfterProcess/Hello.zip</fc:file>
</fc:result>

Оттуда вы можете ввести путь в функцию распаковки.Вам нужно добавить к результату поиска префикс file:///D:, чтобы снова сделать его абсолютным путем.

<fileconnector.unzip>
    <source xmlns:fc="http://org.wso2.esbconnectors.FileConnector">{fn:concat('file:///D:', //fc:result/fc:file/text())}</source>
    <destination>file:///D:/001/</destination>
</fileconnector.unzip>
...