diff --git a/spring-apache-camel/pom.xml b/spring-apache-camel/pom.xml
index 2d0d632546..9c7cc14381 100644
--- a/spring-apache-camel/pom.xml
+++ b/spring-apache-camel/pom.xml
@@ -47,6 +47,17 @@
camel-spring-javaconfig
${env.camel.version}
+
+ org.apache.camel
+ camel-jackson
+ ${env.camel.version}
+
+
+ org.apache.camel
+ camel-test
+ ${env.camel.version}
+ test
+
diff --git a/spring-apache-camel/src/main/java/com/baeldung/camel/jackson/Fruit.java b/spring-apache-camel/src/main/java/com/baeldung/camel/jackson/Fruit.java
new file mode 100644
index 0000000000..1932131ddd
--- /dev/null
+++ b/spring-apache-camel/src/main/java/com/baeldung/camel/jackson/Fruit.java
@@ -0,0 +1,24 @@
+package com.baeldung.camel.jackson;
+
+public class Fruit {
+
+ private String name;
+ private int id;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+}
diff --git a/spring-apache-camel/src/main/java/com/baeldung/camel/jackson/FruitList.java b/spring-apache-camel/src/main/java/com/baeldung/camel/jackson/FruitList.java
new file mode 100644
index 0000000000..02f2b6feb0
--- /dev/null
+++ b/spring-apache-camel/src/main/java/com/baeldung/camel/jackson/FruitList.java
@@ -0,0 +1,17 @@
+package com.baeldung.camel.jackson;
+
+import java.util.List;
+
+public class FruitList {
+
+ private List fruits;
+
+ public List getFruits() {
+ return fruits;
+ }
+
+ public void setFruits(List fruits) {
+ this.fruits = fruits;
+ }
+
+}
diff --git a/spring-apache-camel/src/test/java/com/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java b/spring-apache-camel/src/test/java/com/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java
new file mode 100644
index 0000000000..4810d7370e
--- /dev/null
+++ b/spring-apache-camel/src/test/java/com/baeldung/camel/jackson/FruitArrayJacksonUnmarshalUnitTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.camel.jackson;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.ListJacksonDataFormat;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class FruitArrayJacksonUnmarshalUnitTest extends CamelTestSupport {
+
+ @Test
+ public void givenJsonFruitArray_whenUnmarshalled_thenSuccess() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:marshalledObject");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(List.class);
+
+ String json = readJsonFromFile("/json/fruit-array.json");
+ template.sendBody("direct:jsonInput", json);
+ assertMockEndpointsSatisfied();
+
+ @SuppressWarnings("unchecked")
+ List fruitList = mock.getReceivedExchanges().get(0).getIn().getBody(List.class);
+ assertNotNull("Fruit lists should not be null", fruitList);
+
+ assertEquals("There should be two fruits", 2, fruitList.size());
+
+ Fruit fruit = fruitList.get(0);
+ assertEquals("Fruit name", "Banana", fruit.getName());
+ assertEquals("Fruit id", 100, fruit.getId());
+
+ fruit = fruitList.get(1);
+ assertEquals("Fruit name", "Apple", fruit.getName());
+ assertEquals("Fruit id", 101, fruit.getId());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+
+ from("direct:jsonInput").unmarshal(new ListJacksonDataFormat(Fruit.class))
+ .to("mock:marshalledObject");
+ }
+ };
+ }
+
+ private String readJsonFromFile(String path) throws URISyntaxException, IOException {
+ URL resource = FruitArrayJacksonUnmarshalUnitTest.class.getResource(path);
+ return new String(Files.readAllBytes(Paths.get(resource.toURI())));
+ }
+
+}
diff --git a/spring-apache-camel/src/test/java/com/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java b/spring-apache-camel/src/test/java/com/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java
new file mode 100644
index 0000000000..b5647f02f9
--- /dev/null
+++ b/spring-apache-camel/src/test/java/com/baeldung/camel/jackson/FruitListJacksonUnmarshalUnitTest.java
@@ -0,0 +1,59 @@
+package com.baeldung.camel.jackson;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jackson.JacksonDataFormat;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class FruitListJacksonUnmarshalUnitTest extends CamelTestSupport {
+
+ @Test
+ public void givenJsonFruitList_whenUnmarshalled_thenSuccess() throws Exception {
+ MockEndpoint mock = getMockEndpoint("mock:marshalledObject");
+ mock.expectedMessageCount(1);
+ mock.message(0).body().isInstanceOf(FruitList.class);
+
+ String json = readJsonFromFile("/json/fruit-list.json");
+ template.sendBody("direct:jsonInput", json);
+ assertMockEndpointsSatisfied();
+
+ FruitList fruitList = mock.getReceivedExchanges().get(0).getIn().getBody(FruitList.class);
+ assertNotNull("Fruit lists should not be null", fruitList);
+
+ List fruits = fruitList.getFruits();
+ assertEquals("There should be two fruits", 2, fruits.size());
+
+ Fruit fruit = fruits.get(0);
+ assertEquals("Fruit name", "Banana", fruit.getName());
+ assertEquals("Fruit id", 100, fruit.getId());
+
+ fruit = fruits.get(1);
+ assertEquals("Fruit name", "Apple", fruit.getName());
+ assertEquals("Fruit id", 101, fruit.getId());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ from("direct:jsonInput").unmarshal(new JacksonDataFormat(FruitList.class))
+ .to("mock:marshalledObject");
+ }
+ };
+ }
+
+ private String readJsonFromFile(String path) throws URISyntaxException, IOException {
+ URL resource = FruitListJacksonUnmarshalUnitTest.class.getResource(path);
+ return new String(Files.readAllBytes(Paths.get(resource.toURI())));
+ }
+
+}
diff --git a/spring-apache-camel/src/test/resources/json/fruit-array.json b/spring-apache-camel/src/test/resources/json/fruit-array.json
new file mode 100644
index 0000000000..0bd917c53f
--- /dev/null
+++ b/spring-apache-camel/src/test/resources/json/fruit-array.json
@@ -0,0 +1,10 @@
+[
+ {
+ "id": 100,
+ "name": "Banana"
+ },
+ {
+ "id": 101,
+ "name": "Apple"
+ }
+]
\ No newline at end of file
diff --git a/spring-apache-camel/src/test/resources/json/fruit-list.json b/spring-apache-camel/src/test/resources/json/fruit-list.json
new file mode 100644
index 0000000000..357e08f7d5
--- /dev/null
+++ b/spring-apache-camel/src/test/resources/json/fruit-list.json
@@ -0,0 +1,12 @@
+{
+ "fruits": [
+ {
+ "id": 100,
+ "name": "Banana"
+ },
+ {
+ "id": 101,
+ "name": "Apple"
+ }
+ ]
+}
\ No newline at end of file