In this example, we will download files from a Server using FTP and store them in a local directory
Create a Maven Project
- groupId: com.skills421.examples.camel
- artifactId: CamelBasics
- version: 0.0.1-SNAPSHOT
Update Pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.skills421.examples.camel</groupId> <artifactId>CamelBasics</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- Core Camel --> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>2.19.2</version> </dependency> <!-- Needed for the FTP Component --> <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-ftp</artifactId> <version>2.19.2</version> </dependency> <!-- JUnit for testing --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> </dependencies> </project>
pom.xml
Edit FTPCopier.java
Create the FTPCopier.java code as follows:
package com.skills421.examples.camel.basics; import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.impl.DefaultCamelContext; public class FTPCopier { public String getFtpPath(String type, String url,String remotePath,String username,String password) { StringBuilder ftpBuilder = new StringBuilder(type); ftpBuilder.append("://") .append(url) .append("/") .append(remotePath) .append("?username=") .append(username) .append("&password=") .append(password); return ftpBuilder.toString(); } public void ftpDownload(String url,String remotePath,final String localPath,String username,String password) throws Exception { CamelContext context = new DefaultCamelContext(); final String ftpPath = this.getFtpPath("ftp",url, remotePath, username, password); context.addRoutes(new RouteBuilder() { public void configure() { from(ftpPath).to("file:"+localPath); } }); context.start(); Thread.sleep(10000); context.stop(); } }
FTPCopierTest.java
Note that you will need to define your own FTP Server to use to test this.
Run the Test
Run the JUnit Test and you should see your files downloaded from your remote ftp server to your local directory.
Test Using a Free Public FTP Server
Choose an ftp server from http://www.sftp.net/public-online-sftp-servers
- hostname: test.rebex.net
- login: demo
- password: password
FTP from Server using bash commands:
ftp demo@test.rebex.net Password: password ftp> ls list the files in the directory ftp> get readme.txt ftp> bye more readme.txt
FTP from Server using FTPCopierTest
Now edit FtpCopierTest.java as follows
... String url = "test.rebex.net"; String remotePath = ""; String localPath = "/Users/johndunning/Desktop/Camel/CamelOut"; String username = "demo"; String password = "password"; ... }
note: you will need to change the localPath to something meaningful for your machine.
Run the FTPCopierTest JUnit test and the file should download into your localPath