You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@servicemix.apache.org by johper <ka...@hotmail.com> on 2007/03/15 10:03:54 UTC

Re: [implentation on an internal system host] FTP rename command

Hi Gert!
Ofcourse I will test and try the patch, but for the moment I run the
leightweight variant, not "servicemix-ftp"...

I fixed the FTP rename issue with a few lines of Java-code:

========= Java Code for doing FTP rename after successfull FTP transere, see
"quick and dirty" section ========
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.servicemix.components.net;

import java.io.IOException;
import java.io.OutputStream;

import javax.jbi.JBIException;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.SocketClient;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.servicemix.components.util.DefaultFileMarshaler;
import org.apache.servicemix.components.util.FileMarshaler;
import org.apache.servicemix.components.util.OutBinding;

/**
 * A component which sends a message to a file using FTP via the
 *  http://jakarta.apache.org/commons/net.html Jakarta Commons Net  library
 *
 * @version $Revision: 486715 $
 */
public class PostmanFTPSender extends OutBinding {
    private static final Log log =
LogFactory.getLog(PostmanFTPSender.class);

    private FTPClientPool clientPool;
    private FileMarshaler marshaler = new DefaultFileMarshaler();
    private String uniqueFileName = "ServiceMix";
    private boolean overwrite = false;
    private String fileRenameSuffix = ".tmp";


    // Properties
   
//-------------------------------------------------------------------------
    public void setFileRenameSuffix(String suffix)
    {
		fileRenameSuffix = suffix;
	}

	public String getFileRenameSuffix()
	{
		return fileRenameSuffix;
	}

    public FTPClientPool getClientPool() {
        return clientPool;
    }

    public void setClientPool(FTPClientPool clientPool) {
        this.clientPool = clientPool;
    }

    public FileMarshaler getMarshaler() {
        return marshaler;
    }

    public void setMarshaler(FileMarshaler marshaler) {
        this.marshaler = marshaler;
    }

    public String getUniqueFileName() {
        return uniqueFileName;
    }

    /**
     * Sets the name used to make a unique name if no file name is available
on the message.
     *
     * @param uniqueFileName the new value of the unique name to use for
generating unique names
     */
    public void setUniqueFileName(String uniqueFileName) {
        this.uniqueFileName = uniqueFileName;
    }

    public boolean isOverwrite() {
        return overwrite;
    }

    public void setOverwrite(boolean overwrite) {
        this.overwrite = overwrite;
    }

    // Implementation methods
   
//-------------------------------------------------------------------------
    protected void init() throws JBIException {
        if (clientPool == null) {
            throw new IllegalArgumentException("You must initialise the
clientPool property");
        }
        super.init();
    }

    protected void process(MessageExchange exchange, NormalizedMessage
message) throws Exception {
        FTPClient client = null;
        OutputStream out = null;
        String name = null;
        try {
            client = (FTPClient) getClientPool().borrowClient();

            name = marshaler.getOutputName(exchange, message);
            if (name == null) {
                if (uniqueFileName != null) {
                    out = client.storeUniqueFileStream(uniqueFileName);
                }
                else {
                    out = client.storeUniqueFileStream();
                }
            }
            else {
                out = client.storeFileStream(name);
                if (out == null) {
                    // lets try overwrite the previous file?
                    if (overwrite) {
                        client.deleteFile(name);
                    }
                    out = client.storeFileStream(name);
                }
            }
            if (out == null) {
                throw new IOException("No output stream available for output
name: "
                + name + ". Maybe the file already exists?");
            }

            marshaler.writeMessage(exchange, message, out, name);

            done(exchange);

        }
        finally {
            if (out != null) {
                try {
                    out.close();
                }
                catch (IOException e) {
                    log.error("Caught exception while closing stream on
error: " + e, e);
                }
            }
            client.completePendingCommand();

			//------- Start QnD FTP (quick and dirty) rename fix.----------
			if(client.rename(name, name.substring(0, name.length() -
4).concat(fileRenameSuffix)) == true){
				//"RENAME ON FTP SUCCEEDED"
			}else{
				//"RENAME ON FTP FAILED"
			}
			//------- Stop QnD (quick and dirty) FTP rename fix.-----------

            returnClient(client);
        }
    }

    protected void returnClient(SocketClient client) {
        if (client != null) {
            try {
                getClientPool().returnClient(client);
            }
            catch (Exception e) {
                log.error("Failed to return client to pool: " + e, e);
            }
        }
    }

}
===================================================

============ servicemix.xml file with rename suffix setup===========
<!-- Send files over FTP and after that rename with new suffix. -->
	<sm:activationSpec componentName="ftpSender" service="foo:ftpSender">
	<sm:component>
  		<bean class="org.apache.servicemix.components.net.PostmanFTPSender">
  			<property name="fileRenameSuffix" value=".emm"/>
   			<property name="clientPool">
				<bean id="ftpClientPool"
class="org.apache.servicemix.components.net.FTPClientPool">
	                       		<property name="host" value="localhost"/>
	                       		<property name="username" value="myuserid"/>
	                       		<property name="password" value="mypassword"/>
	       			</bean>
       			</property>
   			<property name="marshaler">
				<bean class="org.apache.servicemix.components.util.BinaryFileMarshaler">
					<property name="fileName">
			 			<bean class="org.apache.servicemix.expression.JAXPXPathExpression">
			   			<constructor-arg
value="concat(substring($org.apache.servicemix.file.name, 0,
string-length($org.apache.servicemix.file.name) - 3), '.tmp')" />
                               			</bean> 
					</property>
				</bean>
			</property>  	            
  		</bean>
	</sm:component>
	</sm:activationSpec>


===================================================

Gert Vanthienen wrote:
> 
> L.S.,
> 
> As far as I know, ServiceMix does not currently support this feature.  
> Because I also need it for my own applications, I'm currently working on 
> a patch to add this behavior to <ftp:sender />.  I won't have the time 
> to do it this week, but I can probably do it next week.  Would that be 
> soon enough for you?  Would you be willing to help me test the 
> modifications?
> 
> Regards,
> 
> Gert
> 
> 
> johper wrote:
>> Hi,
>>
>> Doing FTP file transfer from polling directory. In the FTP target
>> directory
>> we have to use '.tmp' extension. After successfull transfer, that '.tmp'
>> file must be renamed. How can this be done with ServiceMix and/or
>> FTPSender?
>>
>> tia
>>   
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/FTP-rename-command-tf3402902s12049.html#a9490661
Sent from the ServiceMix - User mailing list archive at Nabble.com.


Re: [implentation on an internal system host] FTP rename command

Posted by Guillaume Nodet <gn...@gmail.com>.
The lightweight components are kinda deprecated,
so I'm fine with new features going only into the
new versions.

On 3/22/07, Gert Vanthienen <ge...@skynet.be> wrote:
>
> L.S.,
>
> I added this rename behavior to servicemix-ftp.  You can now use an
> attribute uploadSuffix=".tmp" to get the desired the result.  The patch
> is attached to JIRA issue SM-889 [1].  If you want, I can also add the
> same modifications to the lightweight FTP component.  Isn't  there a way
> to share the message processing code between both components, so
> modifications become available to both variants without having to write
> the same code twice?
>
> Regards,
>
> Gert
>
>
> [1] https://issues.apache.org/activemq/browse/SM-889
>
> johper wrote:
> > Hi Gert!
> > Ofcourse I will test and try the patch, but for the moment I run the
> > leightweight variant, not "servicemix-ftp"...
> >
> > I fixed the FTP rename issue with a few lines of Java-code:
> >
> > ========= Java Code for doing FTP rename after successfull FTP transere,
> see
> > "quick and dirty" section ========
> > /*
> >  * Licensed to the Apache Software Foundation (ASF) under one or more
> >  * contributor license agreements.  See the NOTICE file distributed with
> >  * this work for additional information regarding copyright ownership.
> >  * The ASF licenses this file to You under the Apache License, Version
> 2.0
> >  * (the "License"); you may not use this file except in compliance with
> >  * the License.  You may obtain a copy of the License at
> >  *
> >  *      http://www.apache.org/licenses/LICENSE-2.0
> >  *
> >  * Unless required by applicable law or agreed to in writing, software
> >  * distributed under the License is distributed on an "AS IS" BASIS,
> >  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> >  * See the License for the specific language governing permissions and
> >  * limitations under the License.
> >  */
> > package org.apache.servicemix.components.net;
> >
> > import java.io.IOException;
> > import java.io.OutputStream;
> >
> > import javax.jbi.JBIException;
> > import javax.jbi.messaging.MessageExchange;
> > import javax.jbi.messaging.NormalizedMessage;
> >
> > import org.apache.commons.logging.Log;
> > import org.apache.commons.logging.LogFactory;
> > import org.apache.commons.net.SocketClient;
> > import org.apache.commons.net.ftp.FTPClient;
> > import org.apache.servicemix.components.util.DefaultFileMarshaler;
> > import org.apache.servicemix.components.util.FileMarshaler;
> > import org.apache.servicemix.components.util.OutBinding;
> >
> > /**
> >  * A component which sends a message to a file using FTP via the
> >  *  http://jakarta.apache.org/commons/net.html Jakarta Commons
> Net  library
> >  *
> >  * @version $Revision: 486715 $
> >  */
> > public class PostmanFTPSender extends OutBinding {
> >     private static final Log log =
> > LogFactory.getLog(PostmanFTPSender.class);
> >
> >     private FTPClientPool clientPool;
> >     private FileMarshaler marshaler = new DefaultFileMarshaler();
> >     private String uniqueFileName = "ServiceMix";
> >     private boolean overwrite = false;
> >     private String fileRenameSuffix = ".tmp";
> >
> >
> >     // Properties
> >
> >
> //-------------------------------------------------------------------------
> >     public void setFileRenameSuffix(String suffix)
> >     {
> >               fileRenameSuffix = suffix;
> >       }
> >
> >       public String getFileRenameSuffix()
> >       {
> >               return fileRenameSuffix;
> >       }
> >
> >     public FTPClientPool getClientPool() {
> >         return clientPool;
> >     }
> >
> >     public void setClientPool(FTPClientPool clientPool) {
> >         this.clientPool = clientPool;
> >     }
> >
> >     public FileMarshaler getMarshaler() {
> >         return marshaler;
> >     }
> >
> >     public void setMarshaler(FileMarshaler marshaler) {
> >         this.marshaler = marshaler;
> >     }
> >
> >     public String getUniqueFileName() {
> >         return uniqueFileName;
> >     }
> >
> >     /**
> >      * Sets the name used to make a unique name if no file name is
> available
> > on the message.
> >      *
> >      * @param uniqueFileName the new value of the unique name to use for
> > generating unique names
> >      */
> >     public void setUniqueFileName(String uniqueFileName) {
> >         this.uniqueFileName = uniqueFileName;
> >     }
> >
> >     public boolean isOverwrite() {
> >         return overwrite;
> >     }
> >
> >     public void setOverwrite(boolean overwrite) {
> >         this.overwrite = overwrite;
> >     }
> >
> >     // Implementation methods
> >
> >
> //-------------------------------------------------------------------------
> >     protected void init() throws JBIException {
> >         if (clientPool == null) {
> >             throw new IllegalArgumentException("You must initialise the
> > clientPool property");
> >         }
> >         super.init();
> >     }
> >
> >     protected void process(MessageExchange exchange, NormalizedMessage
> > message) throws Exception {
> >         FTPClient client = null;
> >         OutputStream out = null;
> >         String name = null;
> >         try {
> >             client = (FTPClient) getClientPool().borrowClient();
> >
> >             name = marshaler.getOutputName(exchange, message);
> >             if (name == null) {
> >                 if (uniqueFileName != null) {
> >                     out = client.storeUniqueFileStream(uniqueFileName);
> >                 }
> >                 else {
> >                     out = client.storeUniqueFileStream();
> >                 }
> >             }
> >             else {
> >                 out = client.storeFileStream(name);
> >                 if (out == null) {
> >                     // lets try overwrite the previous file?
> >                     if (overwrite) {
> >                         client.deleteFile(name);
> >                     }
> >                     out = client.storeFileStream(name);
> >                 }
> >             }
> >             if (out == null) {
> >                 throw new IOException("No output stream available for
> output
> > name: "
> >                 + name + ". Maybe the file already exists?");
> >             }
> >
> >             marshaler.writeMessage(exchange, message, out, name);
> >
> >             done(exchange);
> >
> >         }
> >         finally {
> >             if (out != null) {
> >                 try {
> >                     out.close();
> >                 }
> >                 catch (IOException e) {
> >                     log.error("Caught exception while closing stream on
> > error: " + e, e);
> >                 }
> >             }
> >             client.completePendingCommand();
> >
> >                       //------- Start QnD FTP (quick and dirty) rename
> fix.----------
> >                       if(client.rename(name, name.substring(0,
> name.length() -
> > 4).concat(fileRenameSuffix)) == true){
> >                               //"RENAME ON FTP SUCCEEDED"
> >                       }else{
> >                               //"RENAME ON FTP FAILED"
> >                       }
> >                       //------- Stop QnD (quick and dirty) FTP rename
> fix.-----------
> >
> >             returnClient(client);
> >         }
> >     }
> >
> >     protected void returnClient(SocketClient client) {
> >         if (client != null) {
> >             try {
> >                 getClientPool().returnClient(client);
> >             }
> >             catch (Exception e) {
> >                 log.error("Failed to return client to pool: " + e, e);
> >             }
> >         }
> >     }
> >
> > }
> > ===================================================
> >
> > ============ servicemix.xml file with rename suffix setup===========
> > <!-- Send files over FTP and after that rename with new suffix. -->
> >       <sm:activationSpec componentName="ftpSender"
> service="foo:ftpSender">
> >       <sm:component>
> >               <bean class="
> org.apache.servicemix.components.net.PostmanFTPSender">
> >                       <property name="fileRenameSuffix" value=".emm"/>
> >                       <property name="clientPool">
> >                               <bean id="ftpClientPool"
> > class="org.apache.servicemix.components.net.FTPClientPool">
> >                                       <property name="host"
> value="localhost"/>
> >                                       <property name="username"
> value="myuserid"/>
> >                                       <property name="password"
> value="mypassword"/>
> >                               </bean>
> >                               </property>
> >                       <property name="marshaler">
> >                               <bean class="
> org.apache.servicemix.components.util.BinaryFileMarshaler">
> >                                       <property name="fileName">
> >                                               <bean class="
> org.apache.servicemix.expression.JAXPXPathExpression">
> >                                               <constructor-arg
> > value="concat(substring($org.apache.servicemix.file.name, 0,
> > string-length($org.apache.servicemix.file.name) - 3), '.tmp')" />
> >                                                       </bean>
> >                                       </property>
> >                               </bean>
> >                       </property>
> >               </bean>
> >       </sm:component>
> >       </sm:activationSpec>
> >
> >
> > ===================================================
> >
> > Gert Vanthienen wrote:
> >
> >> L.S.,
> >>
> >> As far as I know, ServiceMix does not currently support this feature.
> >> Because I also need it for my own applications, I'm currently working
> on
> >> a patch to add this behavior to <ftp:sender />.  I won't have the time
> >> to do it this week, but I can probably do it next week.  Would that be
> >> soon enough for you?  Would you be willing to help me test the
> >> modifications?
> >>
> >> Regards,
> >>
> >> Gert
> >>
> >>
> >> johper wrote:
> >>
> >>> Hi,
> >>>
> >>> Doing FTP file transfer from polling directory. In the FTP target
> >>> directory
> >>> we have to use '.tmp' extension. After successfull transfer, that
> '.tmp'
> >>> file must be renamed. How can this be done with ServiceMix and/or
> >>> FTPSender?
> >>>
> >>> tia
> >>>
> >>>
> >>
> >>
> >
> >
>
>


-- 
Cheers,
Guillaume Nodet
------------------------
Architect, LogicBlaze (http://www.logicblaze.com/)
Blog: http://gnodet.blogspot.com/

Re: [implentation on an internal system host] FTP rename command

Posted by Gert Vanthienen <ge...@skynet.be>.
L.S.,

I added this rename behavior to servicemix-ftp.  You can now use an 
attribute uploadSuffix=".tmp" to get the desired the result.  The patch 
is attached to JIRA issue SM-889 [1].  If you want, I can also add the 
same modifications to the lightweight FTP component.  Isn't  there a way 
to share the message processing code between both components, so 
modifications become available to both variants without having to write 
the same code twice?

Regards,

Gert


[1] https://issues.apache.org/activemq/browse/SM-889

johper wrote:
> Hi Gert!
> Ofcourse I will test and try the patch, but for the moment I run the
> leightweight variant, not "servicemix-ftp"...
>
> I fixed the FTP rename issue with a few lines of Java-code:
>
> ========= Java Code for doing FTP rename after successfull FTP transere, see
> "quick and dirty" section ========
> /*
>  * Licensed to the Apache Software Foundation (ASF) under one or more
>  * contributor license agreements.  See the NOTICE file distributed with
>  * this work for additional information regarding copyright ownership.
>  * The ASF licenses this file to You under the Apache License, Version 2.0
>  * (the "License"); you may not use this file except in compliance with
>  * the License.  You may obtain a copy of the License at
>  *
>  *      http://www.apache.org/licenses/LICENSE-2.0
>  *
>  * Unless required by applicable law or agreed to in writing, software
>  * distributed under the License is distributed on an "AS IS" BASIS,
>  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>  * See the License for the specific language governing permissions and
>  * limitations under the License.
>  */
> package org.apache.servicemix.components.net;
>
> import java.io.IOException;
> import java.io.OutputStream;
>
> import javax.jbi.JBIException;
> import javax.jbi.messaging.MessageExchange;
> import javax.jbi.messaging.NormalizedMessage;
>
> import org.apache.commons.logging.Log;
> import org.apache.commons.logging.LogFactory;
> import org.apache.commons.net.SocketClient;
> import org.apache.commons.net.ftp.FTPClient;
> import org.apache.servicemix.components.util.DefaultFileMarshaler;
> import org.apache.servicemix.components.util.FileMarshaler;
> import org.apache.servicemix.components.util.OutBinding;
>
> /**
>  * A component which sends a message to a file using FTP via the
>  *  http://jakarta.apache.org/commons/net.html Jakarta Commons Net  library
>  *
>  * @version $Revision: 486715 $
>  */
> public class PostmanFTPSender extends OutBinding {
>     private static final Log log =
> LogFactory.getLog(PostmanFTPSender.class);
>
>     private FTPClientPool clientPool;
>     private FileMarshaler marshaler = new DefaultFileMarshaler();
>     private String uniqueFileName = "ServiceMix";
>     private boolean overwrite = false;
>     private String fileRenameSuffix = ".tmp";
>
>
>     // Properties
>    
> //-------------------------------------------------------------------------
>     public void setFileRenameSuffix(String suffix)
>     {
> 		fileRenameSuffix = suffix;
> 	}
>
> 	public String getFileRenameSuffix()
> 	{
> 		return fileRenameSuffix;
> 	}
>
>     public FTPClientPool getClientPool() {
>         return clientPool;
>     }
>
>     public void setClientPool(FTPClientPool clientPool) {
>         this.clientPool = clientPool;
>     }
>
>     public FileMarshaler getMarshaler() {
>         return marshaler;
>     }
>
>     public void setMarshaler(FileMarshaler marshaler) {
>         this.marshaler = marshaler;
>     }
>
>     public String getUniqueFileName() {
>         return uniqueFileName;
>     }
>
>     /**
>      * Sets the name used to make a unique name if no file name is available
> on the message.
>      *
>      * @param uniqueFileName the new value of the unique name to use for
> generating unique names
>      */
>     public void setUniqueFileName(String uniqueFileName) {
>         this.uniqueFileName = uniqueFileName;
>     }
>
>     public boolean isOverwrite() {
>         return overwrite;
>     }
>
>     public void setOverwrite(boolean overwrite) {
>         this.overwrite = overwrite;
>     }
>
>     // Implementation methods
>    
> //-------------------------------------------------------------------------
>     protected void init() throws JBIException {
>         if (clientPool == null) {
>             throw new IllegalArgumentException("You must initialise the
> clientPool property");
>         }
>         super.init();
>     }
>
>     protected void process(MessageExchange exchange, NormalizedMessage
> message) throws Exception {
>         FTPClient client = null;
>         OutputStream out = null;
>         String name = null;
>         try {
>             client = (FTPClient) getClientPool().borrowClient();
>
>             name = marshaler.getOutputName(exchange, message);
>             if (name == null) {
>                 if (uniqueFileName != null) {
>                     out = client.storeUniqueFileStream(uniqueFileName);
>                 }
>                 else {
>                     out = client.storeUniqueFileStream();
>                 }
>             }
>             else {
>                 out = client.storeFileStream(name);
>                 if (out == null) {
>                     // lets try overwrite the previous file?
>                     if (overwrite) {
>                         client.deleteFile(name);
>                     }
>                     out = client.storeFileStream(name);
>                 }
>             }
>             if (out == null) {
>                 throw new IOException("No output stream available for output
> name: "
>                 + name + ". Maybe the file already exists?");
>             }
>
>             marshaler.writeMessage(exchange, message, out, name);
>
>             done(exchange);
>
>         }
>         finally {
>             if (out != null) {
>                 try {
>                     out.close();
>                 }
>                 catch (IOException e) {
>                     log.error("Caught exception while closing stream on
> error: " + e, e);
>                 }
>             }
>             client.completePendingCommand();
>
> 			//------- Start QnD FTP (quick and dirty) rename fix.----------
> 			if(client.rename(name, name.substring(0, name.length() -
> 4).concat(fileRenameSuffix)) == true){
> 				//"RENAME ON FTP SUCCEEDED"
> 			}else{
> 				//"RENAME ON FTP FAILED"
> 			}
> 			//------- Stop QnD (quick and dirty) FTP rename fix.-----------
>
>             returnClient(client);
>         }
>     }
>
>     protected void returnClient(SocketClient client) {
>         if (client != null) {
>             try {
>                 getClientPool().returnClient(client);
>             }
>             catch (Exception e) {
>                 log.error("Failed to return client to pool: " + e, e);
>             }
>         }
>     }
>
> }
> ===================================================
>
> ============ servicemix.xml file with rename suffix setup===========
> <!-- Send files over FTP and after that rename with new suffix. -->
> 	<sm:activationSpec componentName="ftpSender" service="foo:ftpSender">
> 	<sm:component>
>   		<bean class="org.apache.servicemix.components.net.PostmanFTPSender">
>   			<property name="fileRenameSuffix" value=".emm"/>
>    			<property name="clientPool">
> 				<bean id="ftpClientPool"
> class="org.apache.servicemix.components.net.FTPClientPool">
> 	                       		<property name="host" value="localhost"/>
> 	                       		<property name="username" value="myuserid"/>
> 	                       		<property name="password" value="mypassword"/>
> 	       			</bean>
>        			</property>
>    			<property name="marshaler">
> 				<bean class="org.apache.servicemix.components.util.BinaryFileMarshaler">
> 					<property name="fileName">
> 			 			<bean class="org.apache.servicemix.expression.JAXPXPathExpression">
> 			   			<constructor-arg
> value="concat(substring($org.apache.servicemix.file.name, 0,
> string-length($org.apache.servicemix.file.name) - 3), '.tmp')" />
>                                			</bean> 
> 					</property>
> 				</bean>
> 			</property>  	            
>   		</bean>
> 	</sm:component>
> 	</sm:activationSpec>
>
>
> ===================================================
>
> Gert Vanthienen wrote:
>   
>> L.S.,
>>
>> As far as I know, ServiceMix does not currently support this feature.  
>> Because I also need it for my own applications, I'm currently working on 
>> a patch to add this behavior to <ftp:sender />.  I won't have the time 
>> to do it this week, but I can probably do it next week.  Would that be 
>> soon enough for you?  Would you be willing to help me test the 
>> modifications?
>>
>> Regards,
>>
>> Gert
>>
>>
>> johper wrote:
>>     
>>> Hi,
>>>
>>> Doing FTP file transfer from polling directory. In the FTP target
>>> directory
>>> we have to use '.tmp' extension. After successfull transfer, that '.tmp'
>>> file must be renamed. How can this be done with ServiceMix and/or
>>> FTPSender?
>>>
>>> tia
>>>   
>>>       
>>
>>     
>
>