Hi

Dynamically adding routes is not support (yet). So the addRouteBuilder
stuff is not quite possible.

So instead have a route like this

from(seda queue).process(your processor code below).to(file)

And then in your processor you can set the target filename the file
should be saved in your local filesystem by adding a header to IN
message
org.apache.camel.file.name
There is also a constant for it at FileComponent

Note: The file endpoint can be configured with a root path that the
filename should be stored relative to, such as
"file://mycoolapp/inbox/"



On Fri, Jan 9, 2009 at 6:15 PM, Davis Ford <davisf...@gmail.com> wrote:
> Hi, I'm trying to do something fairly simple: copy a file via sftp to
> localhost.  I build a route with sftp and file components.  This is
> event driven, so I don't want to have a consumer constantly polling.
>
> I'm trying to follow the sample described at "Consuming a remote FTP
> server triggered by a route" http://activemq.apache.org/camel/ftp.html
> where it shows a message comes in from a seda queue that has the
> path/host to the file.
>
> I'm trying to do exactly the same thing without the seda queue.
>
> See the method below which will be executed when I receive an event
> that a file is ready to be downloaded.  context is CamelContext
> injected via spring so it should already be started.
>
>        @Override
>        public File download(String host, String localDirectory, String 
> remotePath) {
>                // the sftp url
>                final String url = getUrl(host, remotePath);
>                // path to local file
>                final String localFile = getLocalFilePath(localDirectory, 
> remotePath);
>                try {
>                        context.addRoutes(new RouteBuilder() {
>                                public void configure() {
>                                        from(url).process(new Processor() {
>                                                @Override
>                                                public void process(Exchange 
> exchange) throws Exception {
>                                                        Endpoint ftp = 
> context.getEndpoint(url);
>                                                        PollingConsumer 
> consumer = ftp.createPollingConsumer();
>                                                        consumer.start();
>                                                        Exchange result = 
> consumer.receive();
>                                                        
> exchange.getIn().setBody(result.getIn().getBody());
>                                                        consumer.stop();
>                                                }
>                                        }).to("file://"+localFile);
>                                }
>                        });
>                } catch (Exception e) {
>                        // TODO Auto-generated catch block
>                        e.printStackTrace();
>                }
>                return null;
>        }
>
> When I try this, the log messages indicate:
>
> remote endpoint is created ->
>
> 12:02:28,538 DEBUG [main] impl.DefaultCamelContext
> (DefaultCamelContext.java:333) -
> sftp://t...@198.180.208.188/home/toor/newfile.txt?password=password&binary=true&directory=false&consumer.delay=5000&consumer.deleteFile=true
> converted to endpoint:
> Endpoint[sftp://t...@198.180.208.188/home/toor/newfile.txt] by
> component: RemoteFileComponent
>
> local file endpoint is created ->
>
> 12:02:28,647 DEBUG [main] impl.DefaultComponentResolver
> (DefaultComponentResolver.java:67) - Found component: file via type:
> org.apache.camel.component.file.FileComponent via
> META-INF/services/org/apache/camel/component/file
> 12:02:28,663 DEBUG [main] impl.DefaultComponent
> (DefaultComponent.java:79) - Creating endpoint
> uri=[file://C:\SVN\.\target\newfile.txt],
> path=[C:\SVN\.\target\newfile.txt], parameters=[{}]
> 12:02:28,663 DEBUG [main] impl.DefaultCamelContext
> (DefaultCamelContext.java:333) - file://C:\SVN\.\target\newfile.txt
> converted to endpoint: Endpoint[file://C:\SVN\.\target\newfile.txt] by
> component: org.apache.camel.component.file.filecompon...@9b87f6
>
> consumer  is started ->
>
> 12:02:28,803 INFO  [main] remote.SftpConsumer (SftpConsumer.java:51) - 
> Starting
> 12:02:28,819 DEBUG [main] impl.DefaultCamelContext
> (DefaultCamelContext.java:401) - Adding routes from: Routes:
> [Route[[From[sftp://t...@198.180.208.188/home/toor/newfile.txt]] ->
> [Interceptor[Delegate(Pipeline[DeadLetterChannel[Delegate(sftpfiledownloader$...@8b6c39),
> RecipientList[log:org.apache.camel.DeadLetterChannel?level=error]],
> DeadLetterChannel[Delegate(sendTo(Endpoint[file://C:\SVN\.\target\newfile.txt])),
> RecipientList[log:org.apache.camel.DeadLetterChannel?level=error]]])]]]]
> routes: []
>
> ...but nothing happens after that?  the file isn't copied, no
> exception is thrown, etc.  I call it from a JUnit test, and the test
> just exits.  I think I must be missing something simple?
>
> Regards,
> Davis
>



-- 

/Claus Ibsen
Apache Camel Committer
Blog: http://davsclaus.blogspot.com/

Reply via email to