user2611714
user2611714

Reputation: 143

WSO2 ESB. Transfer file with VFS

I need to check each file in directory "/home/user/from/" with com.wso2esb.command.MyCommand and if the result == true, replace file to "home/user/to/". I have the following proxy:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="fromto"
       transports="vfs"
       statistics="enable"
       trace="enable"
       startOnLoad="true">
   <target>
      <inSequence>
         <pojoCommand name="com.wso2esb.command.MyCommand">
            <axis2ns47:property xmlns:axis2ns47="http://ws.apache.org/ns/synapse"
                                name="fileURL"
                                expression="$trp:FILE_PATH"
                                action="ReadMessage"/>
            <axis2ns48:property xmlns:axis2ns48="http://ws.apache.org/ns/synapse"
                                name="result"
                                context-name="com.fx.FileIsOBI"
                                action="UpdateContext"/>
         </pojoCommand>
         <switch source="$ctx:com.fx.FileIsOBI">
            <case regex="^true$">
               <log level="custom">
                  <property name="OUTPUT"
                            expression="fn:concat('===555===', $ctx:com.fx.FileIsOBI)"/>
               </log>
               <property name="OUT_ONLY" value="true" scope="default"/>
               <property xmlns:ns="http://org.apache.synapse/xsd"
                         xmlns:ns3="http://org.apache.synapse/xsd"
                         name="transport.vfs.ReplyFileName"
                         expression="$trp:FILE_NAME"
                         scope="transport"/>
               <send>
                  <endpoint>
                     <address uri="vfs:file:////home/user/to"/>
                  </endpoint>
               </send>
            </case>
         </switch>
      </inSequence>
   </target>
   <parameter name="transport.PollInterval">10</parameter>
   <parameter name="transport.vfs.ActionAfterProcess">DELETE</parameter>
   <parameter name="transport.vfs.FileURI">vfs:file:////home/user/from/</parameter>
   <parameter name="transport.vfs.FileNamePattern">.*\.txt</parameter>
   <parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">DELETE</parameter>
   <description/>
</proxy>

I can see the string "===555=== true" in the log file, it means that com.fx.FileIsOBI == true. But my file wasn't moved to "/home/user/to/". I think the problem is in

<property name="OUT_ONLY" value="true" scope="default"/>
<property xmlns:ns="http://org.apache.synapse/xsd"
         xmlns:ns3="http://org.apache.synapse/xsd"
         name="transport.vfs.ReplyFileName"
         expression="$trp:FILE_NAME"
         scope="transport"/>
<send>
  <endpoint>
     <address uri="vfs:file:////home/user/to"/>
  </endpoint>
</send>

What's wrong?

Upvotes: 1

Views: 740

Answers (2)

Ravindra Ranwala
Ravindra Ranwala

Reputation: 21124

I think there is an issue in your file path. Could you change it as below.

<parameter name="transport.vfs.FileURI">vfs:file:///home/user/from/</parameter>

<send>
   <endpoint>
        <address uri="vfs:file:///home/user/to"/>
   </endpoint>
</send>

More over since you are processing an xml file change the content type as follows.

<parameter name="transport.vfs.FileNamePattern">.*\.xml</parameter>
<parameter name="transport.vfs.ContentType">text/xml</parameter>

Do these suggested changes and let us know your feedback.

Upvotes: 1

Please check if VFS transport is enabled, https://docs.wso2.com/display/ESB490/VFS+Transport

Following works fine for me

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
   name="fromto"
   statistics="enable"
   trace="enable"
   startOnLoad="true">
 <target>
  <inSequence>
     <log level="custom">
        <property name="OUTPUT" value="===555==="/>
     </log>
     <property name="OUT_ONLY" value="true" scope="default"/>
     <property xmlns:ns="http://org.apache.synapse/xsd"
               xmlns:ns3="http://org.apache.synapse/xsd"
               name="transport.vfs.ReplyFileName"
               expression="$trp:FILE_NAME"
               scope="transport"/>
     <send>
        <endpoint>
           <address uri="vfs:file:///Users/lahiru/work/wso2/esb/9/to"/>
        </endpoint>
     </send>
  </inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">DELETE</parameter>
<parameter name="transport.PollInterval">10</parameter>
<parameter name="transport.vfs.FileURI">vfs:file:///Users/lahiru/work/wso2/esb/9/from</parameter>
<parameter name="transport.vfs.FileNamePattern">.*\.txt</parameter>
<parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
<parameter name="transport.vfs.ActionAfterFailure">DELETE</parameter>
<description/>
</proxy>

Upvotes: 1

Related Questions