Downloading Files using Camel and FTP


In this blog, we will download files from a Server using FTP and store them in a local directory

Add Additional Dependencies

In order to use FTP we need to add the camel-ftp artifact to the pom.xml as follows:

<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.5.0</version>
		</dependency>
		
		<!-- Needed for the FTP Component -->
		<dependency>
			<groupId>org.apache.camel</groupId>
			<artifactId>camel-ftp</artifactId>
			<version>2.5.0</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("?useername=")
			      .append(username)
			      .append("&passord=")
			      .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();
	}
}

FTPCopier.java

Edit FTPCopierTest.java

Edit FTPCopierTest.java as follows:

package com.skills421.examples.camel.basics;

import static org.junit.Assert.*;

import org.junit.Test;

public class FTPCopierTest
{

	@Test
	public void downloadFTPDir()
	{
		FTPCopier copier = new FTPCopier();

		String url = "someftpserver.com";
		String remotePath = "myfiles";
		String localPath = "/Users/johndunning/Desktop/Camel/CamelOut";
		String username = "username";
		String password = "password";

		try
		{
			copier.ftpDownload(url, remotePath, localPath, username, password);
		}
		catch (Exception e)
		{
			fail(e.getMessage());
		}
	}

}

FTPCopierTest.java

Note that you will need to define your own FTP Server to use to test this.

Run the JUnitTest

Assuming you have configured your FTPServer correctly, you should see that the files have been downloaded into the local directory that you specified.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s