diff --git a/camel-api/README.md b/camel-api/README.md
new file mode 100644
index 0000000000..fe8dadcfe1
--- /dev/null
+++ b/camel-api/README.md
@@ -0,0 +1,15 @@
+Example for the Article on Camel API with SpringBoot
+
+to start up, run:
+ mvn spring-boot:run
+
+them, do a POST http request to:
+ http://localhost:8080/camel/api/bean
+
+with the HEADER: Content-Type: application/json,
+
+and a BODY Payload like {"id": 1,"name": "World"}
+
+and we will get a return code of 201 and the response: Hello, World - if the transform() method from Application class is uncommented and the process() method is commented
+
+or return code of 201 and the response: {"id": 10,"name": "Hello, World"} - if the transform() method from Application class is commented and the process() method is uncommented
diff --git a/camel-api/pom.xml b/camel-api/pom.xml
new file mode 100644
index 0000000000..6db9f9bfd1
--- /dev/null
+++ b/camel-api/pom.xml
@@ -0,0 +1,80 @@
+
+
+
+ 4.0.0
+
+ com.example
+ spring-boot-camel
+ 0.0.1-SNAPSHOT
+
+ Spring-Boot - Camel API
+
+
+ UTF-8
+ 3.6.0
+ 2.19.1
+ 2.19.1
+ 1.5.4.RELEASE
+
+
+
+
+ org.apache.camel
+ camel-servlet-starter
+ ${camel.version}
+
+
+ org.apache.camel
+ camel-jackson-starter
+ ${camel.version}
+
+
+ org.apache.camel
+ camel-swagger-java-starter
+ ${camel.version}
+
+
+ org.apache.camel
+ camel-spring-boot-starter
+ ${camel.version}
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+ ${spring-boot-starter.version}
+
+
+
+
+ spring-boot:run
+
+
+
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot-starter.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
diff --git a/camel-api/src/main/java/com/baeldung/camel/Application.java b/camel-api/src/main/java/com/baeldung/camel/Application.java
new file mode 100644
index 0000000000..f805385ff9
--- /dev/null
+++ b/camel-api/src/main/java/com/baeldung/camel/Application.java
@@ -0,0 +1,104 @@
+package com.baeldung.camel;
+
+import javax.ws.rs.core.MediaType;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.servlet.CamelHttpTransportServlet;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.model.rest.RestBindingMode;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.boot.web.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.stereotype.Component;
+
+@SpringBootApplication
+@ComponentScan(basePackages="com.baeldung.camel")
+public class Application extends SpringBootServletInitializer {
+
+ @Value("${server.port}")
+ String serverPort;
+
+ @Value("${baeldung.api.path}")
+ String contextPath;
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+ @Bean
+ ServletRegistrationBean servletRegistrationBean() {
+ ServletRegistrationBean servlet = new ServletRegistrationBean(new CamelHttpTransportServlet(), contextPath+"/*");
+ servlet.setName("CamelServlet");
+ return servlet;
+ }
+
+
+ @Component
+ class RestApi extends RouteBuilder {
+
+ @Override
+ public void configure() {
+
+ CamelContext context = new DefaultCamelContext();
+
+
+ // http://localhost:8080/camel/api-doc
+ restConfiguration().contextPath(contextPath) //
+ .port(serverPort)
+ .enableCORS(true)
+ .apiContextPath("/api-doc")
+ .apiProperty("api.title", "Test REST API")
+ .apiProperty("api.version", "v1")
+ .apiProperty("cors", "true") // cross-site
+ .apiContextRouteId("doc-api")
+ .component("servlet")
+ .bindingMode(RestBindingMode.json)
+ .dataFormatProperty("prettyPrint", "true");
+/**
+The Rest DSL supports automatic binding json/xml contents to/from POJOs using Camels Data Format.
+By default the binding mode is off, meaning there is no automatic binding happening for incoming and outgoing messages.
+You may want to use binding if you develop POJOs that maps to your REST services request and response types.
+This allows you, as a developer, to work with the POJOs in Java code.
+*/
+
+ rest("/api/").description("Teste REST Service")
+ .id("api-route")
+ .post("/bean")
+ .produces(MediaType.APPLICATION_JSON)
+ .consumes(MediaType.APPLICATION_JSON)
+// .get("/hello/{place}")
+ .bindingMode(RestBindingMode.auto)
+ .type(MyBean.class)
+ .enableCORS(true)
+// .outType(OutBean.class)
+
+ .to("direct:remoteService");
+
+
+ from("direct:remoteService")
+ .routeId("direct-route")
+ .tracing()
+ .log(">>> ${body.id}")
+ .log(">>> ${body.name}")
+// .transform().simple("blue ${in.body.name}")
+ .process(new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ MyBean bodyIn = (MyBean) exchange.getIn().getBody();
+
+ ExampleServices.example(bodyIn);
+
+ exchange.getIn().setBody(bodyIn);
+ }
+ })
+ .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(201));
+ }
+ }
+}
diff --git a/camel-api/src/main/java/com/baeldung/camel/ExampleServices.java b/camel-api/src/main/java/com/baeldung/camel/ExampleServices.java
new file mode 100644
index 0000000000..ec8f368e68
--- /dev/null
+++ b/camel-api/src/main/java/com/baeldung/camel/ExampleServices.java
@@ -0,0 +1,15 @@
+package com.baeldung.camel;
+
+/**
+ * a Mock class to show how some other layer
+ * (a persistence layer, for instance)
+ * could be used insida a Camel
+ *
+ */
+public class ExampleServices {
+
+ public static void example(MyBean bodyIn) {
+ bodyIn.setName( "Hello, " + bodyIn.getName() );
+ bodyIn.setId(bodyIn.getId()*10);
+ }
+}
diff --git a/camel-api/src/main/java/com/baeldung/camel/MyBean.java b/camel-api/src/main/java/com/baeldung/camel/MyBean.java
new file mode 100644
index 0000000000..5368e40c93
--- /dev/null
+++ b/camel-api/src/main/java/com/baeldung/camel/MyBean.java
@@ -0,0 +1,18 @@
+package com.baeldung.camel;
+
+public class MyBean {
+ private Integer id;
+ private String name;
+ public Integer getId() {
+ return id;
+ }
+ public void setId(Integer id) {
+ this.id = id;
+ }
+ public String getName() {
+ return name;
+ }
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/camel-api/src/main/resources/application.properties b/camel-api/src/main/resources/application.properties
new file mode 100644
index 0000000000..bce95f8eaf
--- /dev/null
+++ b/camel-api/src/main/resources/application.properties
@@ -0,0 +1,15 @@
+logging.config=classpath:logback.xml
+
+# the options from org.apache.camel.spring.boot.CamelConfigurationProperties can be configured here
+camel.springboot.name=MyCamel
+
+# lets listen on all ports to ensure we can be invoked from the pod IP
+server.address=0.0.0.0
+management.address=0.0.0.0
+
+# lets use a different management port in case you need to listen to HTTP requests on 8080
+management.port=8081
+
+# disable all management enpoints except health
+endpoints.enabled = true
+endpoints.health.enabled = true
\ No newline at end of file
diff --git a/camel-api/src/main/resources/application.yml b/camel-api/src/main/resources/application.yml
new file mode 100644
index 0000000000..3a4b913db7
--- /dev/null
+++ b/camel-api/src/main/resources/application.yml
@@ -0,0 +1,27 @@
+server:
+ port: 8080
+
+# for example purposes of Camel version 2.18 and below
+baeldung:
+ api:
+ path: '/camel'
+
+camel:
+ springboot:
+ # The Camel context name
+ name: ServicesRest
+
+# Binding health checks to a different port
+management:
+ port: 8081
+
+# disable all management enpoints except health
+endpoints:
+ enabled: false
+ health:
+ enabled: true
+
+# The application configuration properties
+quickstart:
+ generateOrderPeriod: 10s
+ processOrderPeriod: 30s
diff --git a/camel-api/src/main/resources/logback.xml b/camel-api/src/main/resources/logback.xml
new file mode 100644
index 0000000000..d0b4334f5a
--- /dev/null
+++ b/camel-api/src/main/resources/logback.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+