为什么Apache Camel文件到sftp路由失败

时间:2018-11-24 16:56:04

标签: java file apache-camel sftp

我是骆驼的新手。我阅读了基础知识,并设法完成了简单的文件到文件路由。当我尝试从文件到sftp。失败了。

为了进行测试,我将Windows 10作为主机操作系统,将Mining Linux作为来宾操作系统。我可以通过sftp客户端从win访问linux。因此,我与来宾之间的访问没有问题。我尝试了以下代码:-

 public class App 
    {
        public static void main(String[]args) throws Exception {
            CamelContext camelContext = new DefaultCamelContext();
            try {
                camelContext.addRoutes(new FtpRouteBuilder());
                camelContext.start();
                Thread.sleep(200000);
                // do other stuff...
            }catch (Exception e){
                System.out.printf("ex: "+e.getMessage());
            }
            finally {
                camelContext.stop();
            }
        }
    }


    public class FtpRouteBuilder extends RouteBuilder {
        @Override
        public void configure() throws Exception {
            try{
                from("file:c:/temp/input/")
                        .to("sftp://sftpuser@192.168.10.54/?password=dev&passiveMode=true");
            }catch (Exception ex){
                System.out.printf("ex: "+ex.getMessage());
            }
        }
    }

当我尝试此代码时。我收到以下异常:-

  

无法在以下位置创建路由route1:>>>   到[sftp://sftpuser@192.168.10.54/?password = dev&passiveMode = true] <<<   在路由中:Route(route1)[[From [file:c:/ temp / input /]]->   [To [sftp:// sftp ...,因为无法解析端点:   sftp://sftpuser@192.168.10.54/?passiveMode = true&password = dev是由于:   未找到使用方案的组件:sftp18 / 11/24 17:50:30 INFO   impl.DefaultCamelContext:Apache Camel 2.15.1(CamelContext:camel-1)   正常运行时间0.296秒

怎么了?如何解决?

1 个答案:

答案 0 :(得分:1)

感谢ernest_k指出缺少的库。我添加了:-

<dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-ftp</artifactId>
   <version>2.15.1</version>
</dependency>

public class FtpRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        try{
            from("file:c:/temp/input/")
                    ..streamCaching()
                    .to("sftp://sftpuser@192.168.10.54:/sftpuser/?password=dev");
        }catch (Exception ex){
            System.out.printf("ex: "+ex.getMessage());
        }
    }
}

它是固定的,主要要注意sftp URI。有用。