The main issue is that with scp you cannot list the content of a remote file system. It is possible to implement a consumer that can be used in conjunction with a ConsumerTemplate. The protocol is a bit tricky to implement, but too hard. Give me one day to put some code together.

Hadrian


On 05/02/2012 11:43 AM, mohammadwrk wrote:
Hi,

According to  http://camel.apache.org/jsch.html camel-jsch : Currently
camel-jsch only supports a Producer (i.e. copy files to another host)... It
is possible however to use camel-jsch in sink mode for one time copy from a
remote host using a ConsumerTemplate.

Here is the code I'm using to test this functionality:

camelContext = new DefaultCamelContext();
msgConsumer = camelContext.createConsumerTemplate();
camelContext.addRoutes(new RouteBuilder() {
        @Override
        public void configure() throws Exception {
                ScpConsumer scpConsumer = new ScpConsumer(msgConsumer,
                
"scp://remotehost/test_scp/test.txt?username=myuser&password=mypassword&knownHostsFile=/myhome/.ssh/known_hosts");
                from("timer://foo?period=5000").bean(scpConsumer, "receive");
                
        }
});
camelContext.start();



public static class ScpConsumer {
        
        private final ConsumerTemplate consumer;
        private final String uri;
        
        public ScpConsumer(ConsumerTemplate consumer, String uri) {
                this.consumer = consumer;
                this.uri = uri;
        }

        public void receive() {
                Object body = consumer.receiveBodyNoWait(uri);
                System.out.println(body);
        }
}

This code results in NPE (see below for stack trace). Here is the source
code for  org.apache.camel.component.jsch.ScpEndpoint.buildConsumer

     @Override
     protected RemoteFileConsumer<ScpFile>  buildConsumer(Processor processor)
{
         return null; // new ScpConsumer(this, processor,
createRemoteFileOperations());
     }

Which explains the NPE! Wondering if anybody knows how I can fix this issue?

08:14:01,664 ERROR DefaultErrorHandler:161 - Failed delivery for (MessageId:
ID-msg-35692-1335971640877-0-1 on ExchangeId:
ID-msg-35692-1335971640877-0-2). Exhausted after delivery attempt: 1 caught:
org.apache.camel.FailedToCreateConsumerException: Failed to create Consumer
for endpoint:
Endpoint[scp://remotehost/test_scp/test.txt?knownHostsFile=/myhome/.ssh/known_hosts&password=******&username=myuser].
Reason: java.lang.NullPointerException
org.apache.camel.FailedToCreateConsumerException: Failed to create Consumer
for endpoint:
Endpoint[scp://remotehost/test_scp/test.txt?knownHostsFile=/myhome/.ssh/known_hosts&password=******&username=myuser].
Reason: java.lang.NullPointerException
        at 
org.apache.camel.impl.ConsumerCache.getConsumer(ConsumerCache.java:81)
        at
org.apache.camel.impl.ConsumerCache.receiveNoWait(ConsumerCache.java:116)
        at
org.apache.camel.impl.DefaultConsumerTemplate.receiveNoWait(DefaultConsumerTemplate.java:92)
        at
org.apache.camel.impl.DefaultConsumerTemplate.receiveBodyNoWait(DefaultConsumerTemplate.java:131)
        at
ca.sk.gov.cjimspoc.service.camel.CamelService$ScpConsumer.receive(CamelService.java:81)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.apache.camel.component.bean.MethodInfo.invoke(MethodInfo.java:340)
        at
org.apache.camel.component.bean.MethodInfo$1.proceed(MethodInfo.java:237)
        at
org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:166)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at
org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at
org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:333)
        at
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:223)
        at
org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at
org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:304)
        at
org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:45)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at
org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150)
        at
org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117)
        at
org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:50)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73)
        at
org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90)
        at
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:71)
        at
org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:99)
        at
org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:86)
        at
org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:134)
        at
org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:63)
        at java.util.TimerThread.mainLoop(Timer.java:512)
        at java.util.TimerThread.run(Timer.java:462)
Caused by: java.lang.NullPointerException
        at
org.apache.camel.component.file.remote.RemoteFileEndpoint.createConsumer(RemoteFileEndpoint.java:94)
        at
org.apache.camel.component.file.remote.RemoteFileEndpoint.createConsumer(RemoteFileEndpoint.java:31)
        at
org.apache.camel.impl.EventDrivenPollingConsumer.doStart(EventDrivenPollingConsumer.java:140)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
        at 
org.apache.camel.impl.ConsumerCache.getConsumer(ConsumerCache.java:79)
        ... 41 more

--
View this message in context: 
http://camel.465427.n5.nabble.com/camel-jsch-in-sink-mode-for-one-time-copy-from-a-remote-host-using-SCP-tp5680887.html
Sent from the Camel - Users mailing list archive at Nabble.com.

--
Hadrian Zbarcea
Principal Software Architect
Talend, Inc
http://coders.talend.com/
http://camelbot.blogspot.com/

Reply via email to