如何在WSO2中使用文件连接器解压缩任何zip文件

时间:2018-10-16 09:45:29

标签: wso2 wso2esb

我正在尝试解压缩可能是任何名称的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 :(得分:1)

解压缩时,不能在源代码中使用正则表达式。如果可以,那么如果有多个匹配的文件怎么办?

如果您知道该zip文件始终位于该目录中,则可以使用文件连接器搜索来查找文件名。

<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>