In this example, we will download files using Camel and SFTP.

This is not much of a change from using FTP, except that there is a new dependency we must add to our pom.xml as follows:

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.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>

		<!-- Needed for com/jcraft/jsch/Logger - SFTP -->
		<dependency>
			<groupId>com.jcraft</groupId>
			<artifactId>jsch</artifactId>
			<version>0.1.42</version>
		</dependency>

		<!-- JUnit for testing -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>

	</dependencies>

</project>

pom.xml

Edit FTPCopier.java

Edit ftpCopier.java to add the method sftpDownload 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();
	}

	public void sftpDownload(String url,String remotePath,final String localPath,String username,String password) throws Exception
	{
		CamelContext context = new DefaultCamelContext();

		final String ftpPath = this.getFtpPath("sftp",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 to @Ignore the ftp test and add the sftp test as follows:

package com.skills421.examples.camel.basics;

import static org.junit.Assert.*;

import org.junit.Ignore;
import org.junit.Test;

public class FTPCopierTest
{

	@Test
	@Ignore
	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());
		}
	}

	@Test
	public void downloadSFTPDir()
	{
		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.sftpDownload(url, remotePath, localPath, username, password);
		}
		catch (Exception e)
		{
			fail(e.getMessage());
		}
	}

}

FTPCopierTest.java

Note, you will need to configure a sftp server to test your code.

Run the Test

Run the JUnit Test and you should see your files downloaded from your remote sftp server to your local directory.

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