diff --git a/spring-apache-camel/README.md b/spring-apache-camel/README.md
new file mode 100644
index 0000000000..28b95bdf89
--- /dev/null
+++ b/spring-apache-camel/README.md
@@ -0,0 +1,28 @@
+
+Configure and Use Apache Camel with Spring
+
+This article will demonstrate how to configure and use Apache Camel with Spring Framework.
+
+Relevant Article
+
+
+
+Framework Versions:
+
+
+ - Spring 4.2.4
+ - Apache Camel 2.16.1
+
+
+Build and Run Application
+
+To build this application execute following maven command in ApacheCamelFileProcessor directory.
+
+mvn clean install
+
+To run this application you can either run our main class org.apache.camel.main.App from your IDE or you can execute following maven command:
+
+mvn exec:java -Dexec.mainClass="org.apache.camel.main.App"
\ No newline at end of file
diff --git a/spring-apache-camel/pom.xml b/spring-apache-camel/pom.xml
new file mode 100644
index 0000000000..fbea9b779d
--- /dev/null
+++ b/spring-apache-camel/pom.xml
@@ -0,0 +1,67 @@
+
+ 4.0.0
+ org.apache.camel
+ spring-apache-camel
+ jar
+ 1.0-SNAPSHOT
+ spring-apache-camel
+ http://maven.apache.org
+
+
+ 2.16.1
+ 4.2.4.RELEASE
+ 1.7
+ 4.1
+
+
+
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+
+ org.apache.camel
+ camel-core
+ ${env.camel.version}
+
+
+
+ org.apache.camel
+ camel-spring
+ ${env.camel.version}
+
+
+
+ org.apache.camel
+ camel-stream
+ ${env.camel.version}
+
+
+
+ org.springframework
+ spring-context
+ ${env.spring.version}
+
+
+
+
+
+
+
+ maven-compiler-plugin
+
+ true
+ true
+ ${java.version}
+ ${java.version}
+ ${java.version}
+
+
+
+
+
diff --git a/spring-apache-camel/src/main/java/org/apache/camel/main/App.java b/spring-apache-camel/src/main/java/org/apache/camel/main/App.java
new file mode 100644
index 0000000000..8674caefca
--- /dev/null
+++ b/spring-apache-camel/src/main/java/org/apache/camel/main/App.java
@@ -0,0 +1,12 @@
+package org.apache.camel.main;
+
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+public class App {
+ public static void main(final String[] args) throws Exception {
+ ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("camel-context.xml");
+ // Keep main thread alive for some time to let application finish processing the input files.
+ Thread.sleep(5000);
+ applicationContext.close();
+ }
+}
\ No newline at end of file
diff --git a/spring-apache-camel/src/main/java/org/apache/camel/processor/FileProcessor.java b/spring-apache-camel/src/main/java/org/apache/camel/processor/FileProcessor.java
new file mode 100644
index 0000000000..a98c77feb8
--- /dev/null
+++ b/spring-apache-camel/src/main/java/org/apache/camel/processor/FileProcessor.java
@@ -0,0 +1,14 @@
+package org.apache.camel.processor;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+public class FileProcessor implements Processor {
+
+ public void process(Exchange exchange) throws Exception {
+ String originalFileContent = exchange.getIn().getBody(String.class);
+ String upperCaseFileContent = originalFileContent.toUpperCase();
+ exchange.getIn().setBody(upperCaseFileContent);
+ }
+
+}
diff --git a/spring-apache-camel/src/main/resources/camel-context.xml b/spring-apache-camel/src/main/resources/camel-context.xml
new file mode 100644
index 0000000000..75e2a61711
--- /dev/null
+++ b/spring-apache-camel/src/main/resources/camel-context.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${body.toLowerCase()}
+
+
+
+
+
+
+
+ .......... File content conversion completed ..........
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-apache-camel/src/test/data/sampleInputFile/file.txt b/spring-apache-camel/src/test/data/sampleInputFile/file.txt
new file mode 100644
index 0000000000..c1df3791c9
--- /dev/null
+++ b/spring-apache-camel/src/test/data/sampleInputFile/file.txt
@@ -0,0 +1 @@
+THIS IS UPPERCASE CONTENT. this is lowercase content.
\ No newline at end of file
diff --git a/spring-apache-camel/src/test/java/org/apache/camel/main/AppTest.java b/spring-apache-camel/src/test/java/org/apache/camel/main/AppTest.java
new file mode 100644
index 0000000000..75a161d8cc
--- /dev/null
+++ b/spring-apache-camel/src/test/java/org/apache/camel/main/AppTest.java
@@ -0,0 +1,117 @@
+package org.apache.camel.main;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.channels.FileChannel;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+import junit.framework.TestCase;
+
+import org.apache.camel.util.FileUtil;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AppTest extends TestCase {
+
+ private static final String FILE_NAME = "file.txt";
+ private static final String SAMPLE_INPUT_DIR = "src/test/data/sampleInputFile/";
+ private static final String TEST_INPUT_DIR = "src/test/data/input/";
+ private static final String UPPERCARE_OUTPUT_DIR = "src/test/data/outputUpperCase/";
+ private static final String LOWERCASE_OUTPUT_DIR = "src/test/data/outputLowerCase/";
+
+ @Before
+ public void setUp() throws Exception {
+ // Prepare input file for test
+ copySampleFileToInputDirectory();
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ System.out.println("Deleting the test input and output files...");
+ deleteFile(TEST_INPUT_DIR);
+ deleteFile(LOWERCASE_OUTPUT_DIR);
+ deleteFile(UPPERCARE_OUTPUT_DIR);
+ }
+
+ @Test
+ public final void testMain() throws Exception {
+ App.main(null);
+
+ String inputFileContent = readFileContent(SAMPLE_INPUT_DIR+FILE_NAME);
+ String outputUpperCase = readFileContent(UPPERCARE_OUTPUT_DIR+FILE_NAME);
+ String outputLowerCase = readFileContent(LOWERCASE_OUTPUT_DIR+FILE_NAME);
+
+ System.out.println("Input File content = ["+inputFileContent+"]");
+ System.out.println("UpperCaseOutput file content = ["+outputUpperCase+"]");
+ System.out.println("LowerCaseOtput file content = ["+outputLowerCase+"]");
+
+ assertEquals(inputFileContent.toUpperCase(), outputUpperCase);
+ assertEquals(inputFileContent.toLowerCase(), outputLowerCase);
+ }
+
+ private String readFileContent(String path) throws IOException {
+ byte[] encoded = Files.readAllBytes(Paths.get(path));
+ return new String(encoded);
+ }
+
+ private void deleteFile(String path) {
+ try {
+ FileUtil.removeDir(new File(path));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Copy sample input file to input directory.
+ */
+ private void copySampleFileToInputDirectory() {
+ File sourceFile = new File(SAMPLE_INPUT_DIR + FILE_NAME);
+ File destFile = new File(TEST_INPUT_DIR + FILE_NAME);
+
+ if (!sourceFile.exists()) {
+ System.out.println("Sample input file not found at location = [" + SAMPLE_INPUT_DIR + FILE_NAME + "]. Please provide this file.");
+ }
+
+ if (!destFile.exists()) {
+ try {
+ System.out.println("Creating input file = [" + TEST_INPUT_DIR + FILE_NAME + "]");
+
+ File destDir = new File(TEST_INPUT_DIR);
+ if(!destDir.exists()) {
+ destDir.mkdir();
+ }
+ destFile.createNewFile();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ FileChannel source = null;
+ FileChannel destination = null;
+
+ try {
+ source = new FileInputStream(sourceFile).getChannel();
+ destination = new FileOutputStream(destFile).getChannel();
+ if (destination != null && source != null) {
+ destination.transferFrom(source, 0, source.size());
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ source.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ try {
+ destination.close();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+}