Search code examples
proxywso2vfswso2-esb

Unable to send file in out directory WSO2 ESB


I have a simple vfs based proxy service. I want to poll file "DiscardedContracts.csv" and I want to add time with file name and move it to Out directory.

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="ContractsDiscardedFileReader"
       startOnLoad="true"
       statistics="disable"
       trace="disable"
       transports="vfs">
   <target>
      <inSequence>
         <property expression="fn:concat('DiscardedContracts', get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '.csv')"
                   name="transport.vfs.ReplyFileName"/>
         <log separator="==-------Going to move discarded contract file in out directory---------=="/>
         <log level="custom" separator="==-------File--------==">
            <property expression="fn:concat('DiscardedContracts', get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '.csv')"
                      name="transport.vfs.ReplyFileName"/>
         </log>
         <property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
         <send>
            <endpoint name="FileEpr">
               <address uri="vfs:file:///opt/file/contracts/Out/"/>
            </endpoint>
         </send>
      </inSequence>
      <faultSequence>
         <sequence key="DeliveriesFileProcessingFaultSequence"/>
      </faultSequence>
   </target>
   <parameter name="transport.vfs.ContentType">text/plain</parameter>
   <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
   <parameter name="transport.vfs.CreateFolder">true</parameter>
   <parameter name="transport.vfs.MoveAfterFailure">vfs:file:///opt/file/contracts/Fail</parameter>
   <parameter name="sequential">true</parameter>
   <parameter name="transport.vfs.LockReleaseSameNode">false</parameter>
   <parameter name="transport.vfs.Build">false</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">vfs:file:///opt/file/contracts/Out/</parameter>
   <parameter name="coordination">true</parameter>
   <parameter name="transport.vfs.Streaming">true</parameter>
   <parameter name="transport.PollInterval">30</parameter>
   <parameter name="transport.vfs.FileURI">vfs:file:///opt/file/mysql</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   <parameter name="transport.vfs.AutoLockRelease">false</parameter>
   <parameter name="transport.vfs.FileSortAttribute">lastmodifiedtimestamp</parameter>
   <parameter name="transport.vfs.FileSortAscending">true</parameter>
   <parameter name="transport.vfs.DistributedLock">false</parameter>
   <parameter name="transport.vfs.FileNamePattern">.*.csv</parameter>
   <parameter name="transport.vfs.Locking">disable</parameter>
   <description/>
</proxy>

But Problem is I am able to concat datetime with file name but file is not moving to Out directory properly. It create a response.xml Which contains my data. I don't know how file name and extension is changing. Need help, Thanks.


Solution

  • I believe this is because you have not set transport.vfs.ReplyFileName. (You have only logged it.) Its default value is response.xml.

    If you take transport.vfs.ReplyFileName property out of the log mediator, it should work.

    Ref: https://docs.wso2.com/display/ESB500/VFS+Transport

    Update: Set scope="transport" to the property like below.

    <property expression="fn:concat('DiscardedContracts', get-property('SYSTEM_DATE', 'yyMMddHHmmss'), '.csv')" 
        scope="transport"
        name="transport.vfs.ReplyFileName"/>