如何从DB中读取文件名列表并将其上传到ftp站点

时间:2016-07-11 16:39:28

标签: wso2 wso2esb

我需要有一个计划作业来从DB读取文件名列表,然后将它们上传到ftp站点。我如何在WSO2 ESB中做到这一点?

由于

更新(2016年7月19日):根据给出的建议,我编写了一个存储过程,以xml格式返回所有文件名。现在我需要弄清楚如何解析这个xml格式化的结果,并且它们可以是使用fileconnector的ftp。如果我的方法可行,请告诉我。非常感谢你的帮助。

<proxy name="FileUpload2CDGPS" startOnLoad="true" trace="disable" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <sequence key="FileLookupSeq"/>
            <sequence key="SendFile2VendorSeq"/>
            <send/>
        </inSequence>
        <outSequence/>
        <faultSequence>
            <drop/>
        </faultSequence>
    </target>
</proxy>

<sequence name="FileLookupSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <log description="LogMessage" level="custom">
    <property name="message" value="Find CDR files to upload"/>
  </log>
  <dblookup description="Get CDR files to be upload">
    <connection>
      <pool>
        <password>***</password>
        <driver>org.postgresql.Driver</driver>
        <url>jdbc:postgresql://localhost:5432/esbcdrdb</url>
        <user>***</user>
      </pool>
    </connection>
    <statement>
      <sql><![CDATA[SELECT * FROM find_cdr_file_to_upload(1)]]></sql>
      <result name="xml_file" column="find_cdr_file_to_upload"/>
    </statement>
  </dblookup>
</sequence>

<sequence name="SendFile2VendorSeq" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
  <iterate attachPath="//files/files-set" description=""
    expression="//files/files-set/file" preservePayload="true">
    <target>
      <sequence>
        <property description="fileName"
          expression="//files/files-set/file/name" name="fileName"
          scope="default" type="STRING"/>
        <property description="fileId"
          expression="//files/files-set/file/id" name="fileId"
          scope="default" type="STRING"/>
        <property description="fileSource"
          expression="//files/files-set/file/path" name="fileSource"
          scope="default" type="STRING"/>
        <property description="vendorId"
          expression="//files/files-set/file/vendor-id" name="vendorId"
          scope="default" type="STRING"/>
        <property description="vendorDest"
          expression="//files/files-set/file/vendor-dest"
          name="vendorDest" scope="default" type="STRING"/>
        <fileconnector.copy>
          <source>{$ctx:fileSource}</source>
          <destination>{$ctx:vendorDest}</destination>
          <filePattern>{$ctx:fileName}</filePattern>
        </fileconnector.copy>
      </sequence>
    </target>
  </iterate>
</sequence>

1 个答案:

答案 0 :(得分:2)

有很多方法可以完成这项工作。

  • 您可以直接在计划任务中编写您的需求,该任务处理数据库连接并将文件上载到ftp站点。 如何write a schedule task
  • 或者您可以通过计划任务sample can be found here调用代理。在代理内部,您可以连接到数据库并获取所需数据并将其上传到ftp using vfs,或者您可以编写一个custom mediator来代理内部执行。