You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2019/04/25 10:33:15 UTC
[camel] 10/17: CAMEL-13449: camel3 - Move bean component out of
camel-core
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch bean
in repository https://gitbox.apache.org/repos/asf/camel.git
commit e7cc6e1b3266be002e9b55c2063ba20e91a67282
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 25 09:58:40 2019 +0200
CAMEL-13449: camel3 - Move bean component out of camel-core
---
MIGRATION.md | 3 +
.../camel-bean}/src/main/docs/bean-component.adoc | 0
.../camel-bean}/src/main/docs/class-component.adoc | 0
.../apache/camel/component/bean/MethodInfo.java | 33 +++---
.../apache/camel/component/bean/ParameterInfo.java | 3 +
.../java/org/apache/camel/language/bean}/Bean.java | 2 +-
.../apache/camel/language/bean/BeanExpression.java | 0
.../apache/camel/language/bean/BeanLanguage.java | 0
.../bean/RuntimeBeanExpressionException.java | 0
.../org/apache/camel/language/bean/package.html | 0
.../camel/spi/AnnotationBasedProcessorFactory.java | 7 +-
.../DefaultAnnotationBasedProcessorFactory.java | 7 +-
.../camel/impl/SubscribeMethodProcessor.java | 2 +
.../org/apache/camel/processor/RoutingSlip.java | 19 +--
.../file/FileConsumerMoveExpressionTest.java | 1 -
.../language/BeanAnnotationParameterTest.java | 1 +
.../language/BeanAnnotationParameterTwoTest.java | 1 +
.../springboot/BeanComponentAutoConfiguration.java | 128 +++++++++++++++++++++
.../springboot/BeanComponentConfiguration.java | 68 +++++++++++
.../ClassComponentAutoConfiguration.java | 128 +++++++++++++++++++++
.../springboot/ClassComponentConfiguration.java | 68 +++++++++++
.../springboot/BeanLanguageAutoConfiguration.java | 117 +++++++++++++++++++
.../bean/springboot/BeanLanguageConfiguration.java | 52 +++++++++
.../src/main/resources/META-INF/spring.factories | 23 ++++
24 files changed, 630 insertions(+), 33 deletions(-)
diff --git a/MIGRATION.md b/MIGRATION.md
index 533d903..2b3dd26 100644
--- a/MIGRATION.md
+++ b/MIGRATION.md
@@ -33,6 +33,7 @@ You may find how to do that in the examples.
We have also modularized many of the core components and moved them out of `camel-core` to individual components:
+- camel-bean
- camel-browse
- camel-controlbus
- camel-dataformat
@@ -220,6 +221,8 @@ The annotation `org.apache.camel.language.XPath` has been moved to `org.apache.c
The exception `org.apache.camel.builder.xml.InvalidXPathExpression` has been renamed to `org.apache.camel.language.xpath.InvalidXPathException` and in the `camel-xpath` JAR.
+The annotation `org.apache.camel.language.Bean` has been moved to `org.apache.camel.language.bean.Bean` and in the `camel-bean` JAR.
+
#### camel-test
If you are using camel-test and override the `createRegistry` method, for example to register beans from the `JndiRegisty` class, then this is no longer necessary, and instead
diff --git a/core/camel-core/src/main/docs/bean-component.adoc b/components/camel-bean/src/main/docs/bean-component.adoc
similarity index 100%
rename from core/camel-core/src/main/docs/bean-component.adoc
rename to components/camel-bean/src/main/docs/bean-component.adoc
diff --git a/core/camel-core/src/main/docs/class-component.adoc b/components/camel-bean/src/main/docs/class-component.adoc
similarity index 100%
rename from core/camel-core/src/main/docs/class-component.adoc
rename to components/camel-bean/src/main/docs/class-component.adoc
diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/MethodInfo.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/MethodInfo.java
index 317acdf..8a7a443 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/MethodInfo.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/MethodInfo.java
@@ -32,6 +32,7 @@ import java.util.concurrent.Callable;
import java.util.concurrent.CompletionStage;
import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.ExchangePattern;
@@ -43,10 +44,6 @@ import org.apache.camel.Pattern;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.RuntimeExchangeException;
import org.apache.camel.StreamCache;
-// TODO: avoid these imports
-import org.apache.camel.processor.DynamicRouter;
-import org.apache.camel.processor.RecipientList;
-import org.apache.camel.processor.RoutingSlip;
import org.apache.camel.support.DefaultMessage;
import org.apache.camel.support.ExchangeHelper;
import org.apache.camel.support.ExpressionAdapter;
@@ -75,9 +72,9 @@ public class MethodInfo {
private final boolean hasHandlerAnnotation;
private Expression parametersExpression;
private ExchangePattern pattern = ExchangePattern.InOut;
- private RecipientList recipientList;
- private RoutingSlip routingSlip;
- private DynamicRouter dynamicRouter;
+ private AsyncProcessor recipientList;
+ private AsyncProcessor routingSlip;
+ private AsyncProcessor dynamicRouter;
/**
* Adapter to invoke the method which has been annotated with the @DynamicRouter
@@ -127,7 +124,7 @@ public class MethodInfo {
org.apache.camel.RoutingSlip routingSlipAnnotation =
(org.apache.camel.RoutingSlip)collectedMethodAnnotation.get(org.apache.camel.RoutingSlip.class);
if (routingSlipAnnotation != null && matchContext(routingSlipAnnotation.context())) {
- routingSlip = (RoutingSlip) camelContext.getAnnotationBasedProcessorFactory().createRoutingSlip(camelContext, routingSlipAnnotation);
+ routingSlip = camelContext.getAnnotationBasedProcessorFactory().createRoutingSlip(camelContext, routingSlipAnnotation);
// add created routingSlip as a service so we have its lifecycle managed
try {
camelContext.addService(routingSlip);
@@ -140,7 +137,7 @@ public class MethodInfo {
(org.apache.camel.DynamicRouter)collectedMethodAnnotation.get(org.apache.camel.DynamicRouter.class);
if (dynamicRouterAnnotation != null
&& matchContext(dynamicRouterAnnotation.context())) {
- dynamicRouter = (DynamicRouter) camelContext.getAnnotationBasedProcessorFactory().createDynamicRouter(camelContext, dynamicRouterAnnotation);
+ dynamicRouter = camelContext.getAnnotationBasedProcessorFactory().createDynamicRouter(camelContext, dynamicRouterAnnotation);
// add created dynamicRouter as a service so we have its lifecycle managed
try {
camelContext.addService(dynamicRouter);
@@ -153,7 +150,7 @@ public class MethodInfo {
(org.apache.camel.RecipientList)collectedMethodAnnotation.get(org.apache.camel.RecipientList.class);
if (recipientListAnnotation != null
&& matchContext(recipientListAnnotation.context())) {
- recipientList = (RecipientList) camelContext.getAnnotationBasedProcessorFactory().createRecipientList(camelContext, recipientListAnnotation);
+ recipientList = camelContext.getAnnotationBasedProcessorFactory().createRecipientList(camelContext, recipientListAnnotation);
// add created recipientList as a service so we have its lifecycle managed
try {
camelContext.addService(recipientList);
@@ -242,12 +239,14 @@ public class MethodInfo {
private boolean doProceed(AsyncCallback callback) throws Exception {
// dynamic router should be invoked beforehand
if (dynamicRouter != null) {
- if (!dynamicRouter.isStarted()) {
+ if (!ServiceHelper.isStarted(dynamicRouter)) {
ServiceHelper.startService(dynamicRouter);
}
+ // TODO: Maybe use a new constant than EVALUATE_EXPRESSION_RESULT
// use a expression which invokes the method to be used by dynamic router
Expression expression = new DynamicRouterExpression(pojo);
- return dynamicRouter.doRoutingSlip(exchange, expression, callback);
+ exchange.setProperty(Exchange.EVALUATE_EXPRESSION_RESULT, expression);
+ return dynamicRouter.process(exchange, callback);
}
// invoke pojo
@@ -270,16 +269,18 @@ public class MethodInfo {
if (recipientList != null) {
// ensure its started
- if (!recipientList.isStarted()) {
+ if (!ServiceHelper.isStarted(recipientList)) {
ServiceHelper.startService(recipientList);
}
- return recipientList.sendToRecipientList(exchange, result, callback);
+ exchange.setProperty(Exchange.EVALUATE_EXPRESSION_RESULT, result);
+ return recipientList.process(exchange, callback);
}
if (routingSlip != null) {
- if (!routingSlip.isStarted()) {
+ if (!ServiceHelper.isStarted(routingSlip)) {
ServiceHelper.startService(routingSlip);
}
- return routingSlip.doRoutingSlip(exchange, result, callback);
+ exchange.setProperty(Exchange.EVALUATE_EXPRESSION_RESULT, result);
+ return routingSlip.process(exchange, callback);
}
//If it's Java 8 async result
diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/ParameterInfo.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/ParameterInfo.java
index 6adb2da..b747271 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/ParameterInfo.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/ParameterInfo.java
@@ -25,6 +25,9 @@ import org.apache.camel.Expression;
* Parameter information to be used for method invocation.
*/
public class ParameterInfo {
+
+ // TODO: Move to camel-support
+
private final int index;
private final Class<?> type;
private final Annotation[] annotations;
diff --git a/core/camel-core/src/main/java/org/apache/camel/language/Bean.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/Bean.java
similarity index 97%
rename from core/camel-core/src/main/java/org/apache/camel/language/Bean.java
rename to components/camel-bean/src/main/java/org/apache/camel/language/bean/Bean.java
index e82fbae..7d494d1 100644
--- a/core/camel-core/src/main/java/org/apache/camel/language/Bean.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/Bean.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.camel.language;
+package org.apache.camel.language.bean;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
diff --git a/core/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java
similarity index 100%
rename from core/camel-core/src/main/java/org/apache/camel/language/bean/BeanExpression.java
rename to components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanExpression.java
diff --git a/core/camel-core/src/main/java/org/apache/camel/language/bean/BeanLanguage.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
similarity index 100%
rename from core/camel-core/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
rename to components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanLanguage.java
diff --git a/core/camel-core/src/main/java/org/apache/camel/language/bean/RuntimeBeanExpressionException.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/RuntimeBeanExpressionException.java
similarity index 100%
rename from core/camel-core/src/main/java/org/apache/camel/language/bean/RuntimeBeanExpressionException.java
rename to components/camel-bean/src/main/java/org/apache/camel/language/bean/RuntimeBeanExpressionException.java
diff --git a/core/camel-core/src/main/java/org/apache/camel/language/bean/package.html b/components/camel-bean/src/main/java/org/apache/camel/language/bean/package.html
similarity index 100%
rename from core/camel-core/src/main/java/org/apache/camel/language/bean/package.html
rename to components/camel-bean/src/main/java/org/apache/camel/language/bean/package.html
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java
index 856d7a0..c720652 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.spi;
+import org.apache.camel.AsyncProcessor;
import org.apache.camel.CamelContext;
import org.apache.camel.DynamicRouter;
import org.apache.camel.Processor;
@@ -30,16 +31,16 @@ public interface AnnotationBasedProcessorFactory {
/**
* Creates dynamic router processor from the configured annotation.
*/
- Processor createDynamicRouter(CamelContext camelContext, DynamicRouter annotation);
+ AsyncProcessor createDynamicRouter(CamelContext camelContext, DynamicRouter annotation);
/**
* Creates recipient list processor from the configured annotation.
*/
- Processor createRecipientList(CamelContext camelContext, RecipientList annotation);
+ AsyncProcessor createRecipientList(CamelContext camelContext, RecipientList annotation);
/**
* Creates routing slip processor from the configured annotation.
*/
- Processor createRoutingSlip(CamelContext camelContext, RoutingSlip annotation);
+ AsyncProcessor createRoutingSlip(CamelContext camelContext, RoutingSlip annotation);
}
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultAnnotationBasedProcessorFactory.java b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultAnnotationBasedProcessorFactory.java
index 512da98..21945ff 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/DefaultAnnotationBasedProcessorFactory.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/DefaultAnnotationBasedProcessorFactory.java
@@ -19,6 +19,7 @@ package org.apache.camel.impl;
import java.util.concurrent.ExecutorService;
import org.apache.camel.AggregationStrategy;
+import org.apache.camel.AsyncProcessor;
import org.apache.camel.CamelContext;
import org.apache.camel.DynamicRouter;
import org.apache.camel.Processor;
@@ -31,7 +32,7 @@ import org.apache.camel.util.ObjectHelper;
public final class DefaultAnnotationBasedProcessorFactory implements AnnotationBasedProcessorFactory {
@Override
- public Processor createDynamicRouter(CamelContext camelContext, DynamicRouter annotation) {
+ public AsyncProcessor createDynamicRouter(CamelContext camelContext, DynamicRouter annotation) {
org.apache.camel.processor.DynamicRouter dynamicRouter = new org.apache.camel.processor.DynamicRouter(camelContext);
dynamicRouter.setDelimiter(annotation.delimiter());
dynamicRouter.setIgnoreInvalidEndpoints(annotation.ignoreInvalidEndpoints());
@@ -40,7 +41,7 @@ public final class DefaultAnnotationBasedProcessorFactory implements AnnotationB
}
@Override
- public Processor createRecipientList(CamelContext camelContext, RecipientList annotation) {
+ public AsyncProcessor createRecipientList(CamelContext camelContext, RecipientList annotation) {
org.apache.camel.processor.RecipientList recipientList = new org.apache.camel.processor.RecipientList(camelContext, annotation.delimiter());
recipientList.setStopOnException(annotation.stopOnException());
recipientList.setStopOnAggregateException(annotation.stopOnAggregateException());
@@ -76,7 +77,7 @@ public final class DefaultAnnotationBasedProcessorFactory implements AnnotationB
}
@Override
- public Processor createRoutingSlip(CamelContext camelContext, RoutingSlip annotation) {
+ public AsyncProcessor createRoutingSlip(CamelContext camelContext, RoutingSlip annotation) {
org.apache.camel.processor.RoutingSlip routingSlip = new org.apache.camel.processor.RoutingSlip(camelContext);
routingSlip.setDelimiter(annotation.delimiter());
routingSlip.setIgnoreInvalidEndpoints(annotation.ignoreInvalidEndpoints());
diff --git a/core/camel-core/src/main/java/org/apache/camel/impl/SubscribeMethodProcessor.java b/core/camel-core/src/main/java/org/apache/camel/impl/SubscribeMethodProcessor.java
index 00b98eb..a9cf35e 100644
--- a/core/camel-core/src/main/java/org/apache/camel/impl/SubscribeMethodProcessor.java
+++ b/core/camel-core/src/main/java/org/apache/camel/impl/SubscribeMethodProcessor.java
@@ -43,6 +43,8 @@ import org.apache.camel.util.ObjectHelper;
*/
public final class SubscribeMethodProcessor extends AsyncProcessorSupport implements Navigate<Processor> {
+ // TODO: requires camel-bean
+
private final Endpoint endpoint;
private final Map<AsyncProcessor, Predicate> methods = new LinkedHashMap<>();
diff --git a/core/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java b/core/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
index 7e1c343..c786656 100644
--- a/core/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
+++ b/core/camel-core/src/main/java/org/apache/camel/processor/RoutingSlip.java
@@ -63,7 +63,6 @@ public class RoutingSlip extends AsyncProcessorSupport implements Traceable, IdA
protected String uriDelimiter;
protected final CamelContext camelContext;
protected AsyncProcessor errorHandler;
- protected SendDynamicProcessor sendDynamicProcessor;
/**
* The iterator to be used for retrieving the next routing slip(s) to be used.
@@ -163,15 +162,17 @@ public class RoutingSlip extends AsyncProcessorSupport implements Traceable, IdA
return true;
}
- return doRoutingSlipWithExpression(exchange, this.expression, callback);
- }
-
- public boolean doRoutingSlip(Exchange exchange, Object routingSlip, AsyncCallback callback) {
- if (routingSlip instanceof Expression) {
- return doRoutingSlipWithExpression(exchange, (Expression) routingSlip, callback);
- } else {
- return doRoutingSlipWithExpression(exchange, ExpressionBuilder.constantExpression(routingSlip), callback);
+ Expression exp = expression;
+ Object slip = exchange.removeProperty(Exchange.EVALUATE_EXPRESSION_RESULT);
+ if (slip != null) {
+ if (slip instanceof Expression) {
+ exp = (Expression) slip;
+ } else {
+ exp = ExpressionBuilder.constantExpression(slip);
+ }
}
+
+ return doRoutingSlipWithExpression(exchange, exp, callback);
}
/**
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveExpressionTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveExpressionTest.java
index 5fed08e..90fe358 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveExpressionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerMoveExpressionTest.java
@@ -23,7 +23,6 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.language.bean.BeanExpression;
-import org.apache.camel.language.bean.BeanLanguage;
import org.junit.Before;
import org.junit.Test;
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTest.java b/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTest.java
index 4e3183b..3226011 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTest.java
@@ -20,6 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.language.bean.Bean;
import org.junit.Test;
/**
diff --git a/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTwoTest.java b/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTwoTest.java
index 4d21b76..089e3aa 100644
--- a/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTwoTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/language/BeanAnnotationParameterTwoTest.java
@@ -20,6 +20,7 @@ import org.apache.camel.ContextTestSupport;
import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.language.bean.Bean;
import org.junit.Test;
/**
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentAutoConfiguration.java
new file mode 100644
index 0000000..e078424
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentAutoConfiguration.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.bean.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.bean.BeanComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+ BeanComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+ BeanComponentConfiguration.class})
+public class BeanComponentAutoConfiguration {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(BeanComponentAutoConfiguration.class);
+ @Autowired
+ private ApplicationContext applicationContext;
+ @Autowired
+ private CamelContext camelContext;
+ @Autowired
+ private BeanComponentConfiguration configuration;
+ @Autowired(required = false)
+ private List<ComponentCustomizer<BeanComponent>> customizers;
+
+ static class GroupConditions extends GroupCondition {
+ public GroupConditions() {
+ super("camel.component", "camel.component.bean");
+ }
+ }
+
+ @Lazy
+ @Bean(name = "bean-component")
+ @ConditionalOnMissingBean(BeanComponent.class)
+ public BeanComponent configureBeanComponent() throws Exception {
+ BeanComponent component = new BeanComponent();
+ component.setCamelContext(camelContext);
+ Map<String, Object> parameters = new HashMap<>();
+ IntrospectionSupport.getProperties(configuration, parameters, null,
+ false);
+ for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+ Object value = entry.getValue();
+ Class<?> paramClass = value.getClass();
+ if (paramClass.getName().endsWith("NestedConfiguration")) {
+ Class nestedClass = null;
+ try {
+ nestedClass = (Class) paramClass.getDeclaredField(
+ "CAMEL_NESTED_CLASS").get(null);
+ HashMap<String, Object> nestedParameters = new HashMap<>();
+ IntrospectionSupport.getProperties(value, nestedParameters,
+ null, false);
+ Object nestedProperty = nestedClass.newInstance();
+ CamelPropertiesHelper.setCamelProperties(camelContext,
+ nestedProperty, nestedParameters, false);
+ entry.setValue(nestedProperty);
+ } catch (NoSuchFieldException e) {
+ }
+ }
+ }
+ CamelPropertiesHelper.setCamelProperties(camelContext, component,
+ parameters, false);
+ if (ObjectHelper.isNotEmpty(customizers)) {
+ for (ComponentCustomizer<BeanComponent> customizer : customizers) {
+ boolean useCustomizer = (customizer instanceof HasId)
+ ? HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext.getEnvironment(),
+ "camel.component.customizer",
+ "camel.component.bean.customizer",
+ ((HasId) customizer).getId())
+ : HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext.getEnvironment(),
+ "camel.component.customizer",
+ "camel.component.bean.customizer");
+ if (useCustomizer) {
+ LOGGER.debug("Configure component {}, with customizer {}",
+ component, customizer);
+ customizer.customize(component);
+ }
+ }
+ }
+ return component;
+ }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
new file mode 100644
index 0000000..3d802bc
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/bean/springboot/BeanComponentConfiguration.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.bean.springboot;
+
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * The bean component is for invoking Java beans from Camel.
+ *
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.bean")
+public class BeanComponentConfiguration
+ extends
+ ComponentConfigurationPropertiesCommon {
+
+ /**
+ * Whether to enable auto configuration of the bean component. This is
+ * enabled by default.
+ */
+ private Boolean enabled;
+ /**
+ * If enabled, Camel will cache the result of the first Registry look-up.
+ * Cache can be enabled if the bean in the Registry is defined as a
+ * singleton scope.
+ */
+ private Boolean cache;
+ /**
+ * Whether the component should resolve property placeholders on itself when
+ * starting. Only properties which are of String type can use property
+ * placeholders.
+ */
+ private Boolean resolvePropertyPlaceholders = true;
+
+ public Boolean getCache() {
+ return cache;
+ }
+
+ public void setCache(Boolean cache) {
+ this.cache = cache;
+ }
+
+ public Boolean getResolvePropertyPlaceholders() {
+ return resolvePropertyPlaceholders;
+ }
+
+ public void setResolvePropertyPlaceholders(
+ Boolean resolvePropertyPlaceholders) {
+ this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+ }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
new file mode 100644
index 0000000..aeb6a59
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentAutoConfiguration.java
@@ -0,0 +1,128 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.beanclass.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.beanclass.ClassComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+ ClassComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+ ClassComponentConfiguration.class})
+public class ClassComponentAutoConfiguration {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(ClassComponentAutoConfiguration.class);
+ @Autowired
+ private ApplicationContext applicationContext;
+ @Autowired
+ private CamelContext camelContext;
+ @Autowired
+ private ClassComponentConfiguration configuration;
+ @Autowired(required = false)
+ private List<ComponentCustomizer<ClassComponent>> customizers;
+
+ static class GroupConditions extends GroupCondition {
+ public GroupConditions() {
+ super("camel.component", "camel.component.class");
+ }
+ }
+
+ @Lazy
+ @Bean(name = "class-component")
+ @ConditionalOnMissingBean(ClassComponent.class)
+ public ClassComponent configureClassComponent() throws Exception {
+ ClassComponent component = new ClassComponent();
+ component.setCamelContext(camelContext);
+ Map<String, Object> parameters = new HashMap<>();
+ IntrospectionSupport.getProperties(configuration, parameters, null,
+ false);
+ for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+ Object value = entry.getValue();
+ Class<?> paramClass = value.getClass();
+ if (paramClass.getName().endsWith("NestedConfiguration")) {
+ Class nestedClass = null;
+ try {
+ nestedClass = (Class) paramClass.getDeclaredField(
+ "CAMEL_NESTED_CLASS").get(null);
+ HashMap<String, Object> nestedParameters = new HashMap<>();
+ IntrospectionSupport.getProperties(value, nestedParameters,
+ null, false);
+ Object nestedProperty = nestedClass.newInstance();
+ CamelPropertiesHelper.setCamelProperties(camelContext,
+ nestedProperty, nestedParameters, false);
+ entry.setValue(nestedProperty);
+ } catch (NoSuchFieldException e) {
+ }
+ }
+ }
+ CamelPropertiesHelper.setCamelProperties(camelContext, component,
+ parameters, false);
+ if (ObjectHelper.isNotEmpty(customizers)) {
+ for (ComponentCustomizer<ClassComponent> customizer : customizers) {
+ boolean useCustomizer = (customizer instanceof HasId)
+ ? HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext.getEnvironment(),
+ "camel.component.customizer",
+ "camel.component.class.customizer",
+ ((HasId) customizer).getId())
+ : HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext.getEnvironment(),
+ "camel.component.customizer",
+ "camel.component.class.customizer");
+ if (useCustomizer) {
+ LOGGER.debug("Configure component {}, with customizer {}",
+ component, customizer);
+ customizer.customize(component);
+ }
+ }
+ }
+ return component;
+ }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
new file mode 100644
index 0000000..cb083c8
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/component/beanclass/springboot/ClassComponentConfiguration.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.beanclass.springboot;
+
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * The Class Component is for invoking Java Classes (Java beans) from Camel.
+ *
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.class")
+public class ClassComponentConfiguration
+ extends
+ ComponentConfigurationPropertiesCommon {
+
+ /**
+ * Whether to enable auto configuration of the class component. This is
+ * enabled by default.
+ */
+ private Boolean enabled;
+ /**
+ * If enabled, Camel will cache the result of the first Registry look-up.
+ * Cache can be enabled if the bean in the Registry is defined as a
+ * singleton scope.
+ */
+ private Boolean cache;
+ /**
+ * Whether the component should resolve property placeholders on itself when
+ * starting. Only properties which are of String type can use property
+ * placeholders.
+ */
+ private Boolean resolvePropertyPlaceholders = true;
+
+ public Boolean getCache() {
+ return cache;
+ }
+
+ public void setCache(Boolean cache) {
+ this.cache = cache;
+ }
+
+ public Boolean getResolvePropertyPlaceholders() {
+ return resolvePropertyPlaceholders;
+ }
+
+ public void setResolvePropertyPlaceholders(
+ Boolean resolvePropertyPlaceholders) {
+ this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+ }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java
new file mode 100644
index 0000000..c3b0db8
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageAutoConfiguration.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.language.bean.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
+import org.apache.camel.language.bean.BeanLanguage;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spi.LanguageCustomizer;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.LanguageConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.support.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.config.ConfigurableBeanFactory;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+ BeanLanguageAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,
+ BeanLanguageConfiguration.class})
+public class BeanLanguageAutoConfiguration {
+
+ private static final Logger LOGGER = LoggerFactory
+ .getLogger(BeanLanguageAutoConfiguration.class);
+ @Autowired
+ private ApplicationContext applicationContext;
+ @Autowired
+ private CamelContext camelContext;
+ @Autowired
+ private BeanLanguageConfiguration configuration;
+ @Autowired(required = false)
+ private List<LanguageCustomizer<BeanLanguage>> customizers;
+
+ static class GroupConditions extends GroupCondition {
+ public GroupConditions() {
+ super("camel.component", "camel.component.bean");
+ }
+ }
+
+ @Bean(name = "bean-language")
+ @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
+ @ConditionalOnMissingBean(BeanLanguage.class)
+ public BeanLanguage configureBeanLanguage() throws Exception {
+ BeanLanguage language = new BeanLanguage();
+ if (CamelContextAware.class.isAssignableFrom(BeanLanguage.class)) {
+ CamelContextAware contextAware = CamelContextAware.class
+ .cast(language);
+ if (contextAware != null) {
+ contextAware.setCamelContext(camelContext);
+ }
+ }
+ Map<String, Object> parameters = new HashMap<>();
+ IntrospectionSupport.getProperties(configuration, parameters, null,
+ false);
+ CamelPropertiesHelper.setCamelProperties(camelContext, language,
+ parameters, false);
+ if (ObjectHelper.isNotEmpty(customizers)) {
+ for (LanguageCustomizer<BeanLanguage> customizer : customizers) {
+ boolean useCustomizer = (customizer instanceof HasId)
+ ? HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext.getEnvironment(),
+ "camel.language.customizer",
+ "camel.language.bean.customizer",
+ ((HasId) customizer).getId())
+ : HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext.getEnvironment(),
+ "camel.language.customizer",
+ "camel.language.bean.customizer");
+ if (useCustomizer) {
+ LOGGER.debug("Configure language {}, with customizer {}",
+ language, customizer);
+ customizer.customize(language);
+ }
+ }
+ }
+ return language;
+ }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java
new file mode 100644
index 0000000..8e28050
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/java/org/apache/camel/language/bean/springboot/BeanLanguageConfiguration.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.language.bean.springboot;
+
+import javax.annotation.Generated;
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * To use a Java bean (aka method call) in Camel expressions or predicates.
+ *
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.language.bean")
+public class BeanLanguageConfiguration
+ extends
+ LanguageConfigurationPropertiesCommon {
+
+ /**
+ * Whether to enable auto configuration of the bean language. This is
+ * enabled by default.
+ */
+ private Boolean enabled;
+ /**
+ * Whether to trim the value to remove leading and trailing whitespaces and
+ * line breaks
+ */
+ private Boolean trim = true;
+
+ public Boolean getTrim() {
+ return trim;
+ }
+
+ public void setTrim(Boolean trim) {
+ this.trim = trim;
+ }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-bean-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/resources/META-INF/spring.factories
new file mode 100644
index 0000000..36b4c94
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-bean-starter/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,23 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+
+org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
+org.apache.camel.component.beanclass.springboot.ClassComponentAutoConfiguration,\
+org.apache.camel.component.bean.springboot.BeanComponentAutoConfiguration,\
+org.apache.camel.language.bean.springboot.BeanLanguageAutoConfiguration
+
+