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 2023/11/21 12:24:26 UTC
(camel-spring-boot) 01/01: CAMEL-20137: camel-joor - Use java as the language name (it is java code) as joor is confusing.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch java-joor
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git
commit 6992edc2db4ad5229d5b5d6d64d45211168411fe
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Nov 21 13:23:50 2023 +0100
CAMEL-20137: camel-joor - Use java as the language name (it is java code) as joor is confusing.
---
.../springboot/catalog/components/controlbus.json | 2 +-
.../camel/springboot/catalog/components/kafka.json | 4 +-
.../springboot/catalog/components/language.json | 2 +-
.../camel/springboot/catalog/languages.properties | 1 +
.../catalog/languages/{joor.json => java.json} | 16 ++---
.../camel/springboot/catalog/languages/joor.json | 2 +-
.../camel-joor-starter/src/main/docs/joor.json | 43 ++++++++++++
.../springboot/JavaLanguageAutoConfiguration.java | 78 ++++++++++++++++++++++
.../joor/springboot/JavaLanguageConfiguration.java | 77 +++++++++++++++++++++
...rk.boot.autoconfigure.AutoConfiguration.imports | 3 +-
.../camel-kafka-starter/src/main/docs/kafka.json | 2 +-
.../springboot/KafkaComponentConfiguration.java | 14 ++--
12 files changed, 224 insertions(+), 20 deletions(-)
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/controlbus.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/controlbus.json
index efe2f894cc1..804791d4ad6 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/controlbus.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/controlbus.json
@@ -27,7 +27,7 @@
},
"properties": {
"command": { "index": 0, "kind": "path", "displayName": "Command", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "enum": [ "route", "language" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Command can be either route or language" },
- "language": { "index": 1, "kind": "path", "displayName": "Language", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.spi.Language", "enum": [ "bean", "constant", "csimple", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "joor", "jq", "jsonpath", "mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false, "descr [...]
+ "language": { "index": 1, "kind": "path", "displayName": "Language", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.spi.Language", "enum": [ "bean", "constant", "csimple", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "java", "joor", "jq", "jsonpath", "mvel", "ognl", "python", "ref", "simple", "spel", "tokenize", "xpath", "xquery", "xtokenize" ], "deprecated": false, "autowired": false, "secret": false [...]
"action": { "index": 2, "kind": "parameter", "displayName": "Action", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "start", "stop", "fail", "suspend", "resume", "restart", "status", "stats" ], "deprecated": false, "autowired": false, "secret": false, "description": "To denote an action that can be either: start, stop, or status. To either start or stop a route, or to get the status of the route as output in the messa [...]
"async": { "index": 3, "kind": "parameter", "displayName": "Async", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to execute the control bus task asynchronously. Important: If this option is enabled, then any result from the task is not set on the Exchange. This is only possible if executing tasks synchronously." },
"loggingLevel": { "index": 4, "kind": "parameter", "displayName": "Logging Level", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "INFO", "description": "Logging level used for logging when task is done, or if any exceptions occurred during processing the task." },
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/kafka.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/kafka.json
index e5780543b3e..22b7a338f07 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/kafka.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/kafka.json
@@ -33,7 +33,7 @@
"autoCommitEnable": { "index": 8, "kind": "property", "displayName": "Auto Commit Enable", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "If true, periodically commit to ZooKeeper the offset of messages already fetched b [...]
"autoCommitIntervalMs": { "index": 9, "kind": "property", "displayName": "Auto Commit Interval Ms", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "The frequency in ms that the consumer offsets are committed t [...]
"autoOffsetReset": { "index": 10, "kind": "property", "displayName": "Auto Offset Reset", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "latest", "earliest", "none" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "latest", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "What to do when there is no i [...]
- "breakOnFirstError": { "index": 11, "kind": "property", "displayName": "Break On First Error", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "This options controls what happens when a consumer is processing an exchange [...]
+ "breakOnFirstError": { "index": 11, "kind": "property", "displayName": "Break On First Error", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "This options controls what happens when a consumer is processing an exchange [...]
"bridgeErrorHandler": { "index": 12, "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the lik [...]
"checkCrcs": { "index": 13, "kind": "property", "displayName": "Check Crcs", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "Automatically check the CRC32 of the records consumed. This ensures no on-the-wire o [...]
"commitTimeoutMs": { "index": 14, "kind": "property", "displayName": "Commit Timeout Ms", "group": "consumer", "label": "consumer", "required": false, "type": "duration", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "The maximum time, in milliseconds, that the code will wait for a synchron [...]
@@ -163,7 +163,7 @@
"autoCommitEnable": { "index": 8, "kind": "parameter", "displayName": "Auto Commit Enable", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "If true, periodically commit to ZooKeeper the offset of messages already fetched [...]
"autoCommitIntervalMs": { "index": 9, "kind": "parameter", "displayName": "Auto Commit Interval Ms", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "The frequency in ms that the consumer offsets are committed [...]
"autoOffsetReset": { "index": 10, "kind": "parameter", "displayName": "Auto Offset Reset", "group": "consumer", "label": "consumer", "required": false, "type": "string", "javaType": "java.lang.String", "enum": [ "latest", "earliest", "none" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "latest", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "What to do when there is no [...]
- "breakOnFirstError": { "index": 11, "kind": "parameter", "displayName": "Break On First Error", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "This options controls what happens when a consumer is processing an exchange [...]
+ "breakOnFirstError": { "index": 11, "kind": "parameter", "displayName": "Break On First Error", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "This options controls what happens when a consumer is processing an exchange [...]
"checkCrcs": { "index": 12, "kind": "parameter", "displayName": "Check Crcs", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "true", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "Automatically check the CRC32 of the records consumed. This ensures no on-the-wire [...]
"commitTimeoutMs": { "index": 13, "kind": "parameter", "displayName": "Commit Timeout Ms", "group": "consumer", "label": "consumer", "required": false, "type": "duration", "javaType": "java.lang.Long", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5000", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "The maximum time, in milliseconds, that the code will wait for a synchro [...]
"consumerRequestTimeoutMs": { "index": 14, "kind": "parameter", "displayName": "Consumer Request Timeout Ms", "group": "consumer", "label": "consumer", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "30000", "configurationClass": "org.apache.camel.component.kafka.KafkaConfiguration", "configurationField": "configuration", "description": "The configuration controls the maximum amount of t [...]
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/language.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/language.json
index f4f81564a10..902befa5c1a 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/language.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/components/language.json
@@ -29,7 +29,7 @@
"CamelLanguageScript": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String or Expression", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The script to execute provided in the header. Takes precedence over script configured on the endpoint.", "constantName": "org.apache.camel.component.language.LanguageConstants#LANGUAGE_SCRIPT" }
},
"properties": {
- "languageName": { "index": 0, "kind": "path", "displayName": "Language Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "enum": [ "bean", "constant", "csimple", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "joor", "jq", "jsonpath", "mvel", "ognl", "ref", "simple", "spel", "sql", "tokenize", "xpath", "xquery", "xtokenize" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret" [...]
+ "languageName": { "index": 0, "kind": "path", "displayName": "Language Name", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "enum": [ "bean", "constant", "csimple", "datasonnet", "exchangeProperty", "file", "groovy", "header", "hl7terser", "java", "joor", "jq", "jsonpath", "mvel", "ognl", "ref", "simple", "spel", "sql", "tokenize", "xpath", "xquery", "xtokenize" ], "deprecated": false, "deprecationNote": "", "autowired": false, [...]
"resourceUri": { "index": 1, "kind": "path", "displayName": "Resource Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "supportFileReference": true, "description": "Path to the resource, or a reference to lookup a bean in the Registry to use as the resource" },
"allowContextMapAll": { "index": 2, "kind": "parameter", "displayName": "Allow Context Map All", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and C [...]
"binary": { "index": 3, "kind": "parameter", "displayName": "Binary", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String)" },
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages.properties b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages.properties
index cb390b03f92..679c08369d7 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages.properties
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages.properties
@@ -2,6 +2,7 @@ bean
datasonnet
groovy
hl7terser
+java
joor
jq
js
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/java.json
similarity index 87%
copy from catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json
copy to catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/java.json
index 16d53c5d896..10e430904c0 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/java.json
@@ -1,19 +1,19 @@
{
"language": {
"kind": "language",
- "name": "joor",
- "title": "jOOR",
- "description": "Evaluates a jOOR (Java compiled once at runtime) expression.",
+ "name": "java",
+ "title": "Java",
+ "description": "Evaluates a Java (Java compiled once at runtime) expression.",
"deprecated": false,
- "firstVersion": "3.7.0",
+ "firstVersion": "4.3.0",
"label": "language",
- "javaType": "org.apache.camel.language.joor.JoorLanguage",
- "supportLevel": "Stable",
+ "javaType": "org.apache.camel.language.joor.JavaLanguage",
+ "supportLevel": "Preview",
"groupId": "org.apache.camel.springboot",
"artifactId": "camel-joor-starter",
"version": "4.3.0-SNAPSHOT",
- "modelName": "joor",
- "modelJavaType": "org.apache.camel.model.language.JoorExpression"
+ "modelName": "java",
+ "modelJavaType": "org.apache.camel.model.language.JavaExpression"
},
"properties": {
"expression": { "index": 0, "kind": "value", "displayName": "Expression", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The expression value in your chosen language syntax" },
diff --git a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json
index 16d53c5d896..adcc595709e 100644
--- a/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json
+++ b/catalog/camel-catalog-provider-springboot/src/main/resources/org/apache/camel/springboot/catalog/languages/joor.json
@@ -4,7 +4,7 @@
"name": "joor",
"title": "jOOR",
"description": "Evaluates a jOOR (Java compiled once at runtime) expression.",
- "deprecated": false,
+ "deprecated": true,
"firstVersion": "3.7.0",
"label": "language",
"javaType": "org.apache.camel.language.joor.JoorLanguage",
diff --git a/components-starter/camel-joor-starter/src/main/docs/joor.json b/components-starter/camel-joor-starter/src/main/docs/joor.json
index 3b7e884169f..0f55d581682 100644
--- a/components-starter/camel-joor-starter/src/main/docs/joor.json
+++ b/components-starter/camel-joor-starter/src/main/docs/joor.json
@@ -1,5 +1,16 @@
{
"groups": [
+ {
+ "name": "camel.language.java",
+ "type": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration",
+ "sourceType": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration"
+ },
+ {
+ "name": "camel.language.java.customizer",
+ "type": "org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon$CustomizerProperties",
+ "sourceType": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration",
+ "sourceMethod": "getCustomizer()"
+ },
{
"name": "camel.language.joor",
"type": "org.apache.camel.language.joor.springboot.JoorLanguageConfiguration",
@@ -13,6 +24,38 @@
}
],
"properties": [
+ {
+ "name": "camel.language.java.customizer.enabled",
+ "type": "java.lang.Boolean",
+ "sourceType": "org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon$CustomizerProperties"
+ },
+ {
+ "name": "camel.language.java.enabled",
+ "type": "java.lang.Boolean",
+ "description": "Whether to enable auto configuration of the java language. This is enabled by default.",
+ "sourceType": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration"
+ },
+ {
+ "name": "camel.language.java.pre-compile",
+ "type": "java.lang.Boolean",
+ "description": "Whether the expression should be pre compiled once during initialization phase. If this is turned off, then the expression is reloaded and compiled on each evaluation.",
+ "sourceType": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration",
+ "defaultValue": true
+ },
+ {
+ "name": "camel.language.java.single-quotes",
+ "type": "java.lang.Boolean",
+ "description": "Whether single quotes can be used as replacement for double quotes. This is convenient when you need to work with strings inside strings.",
+ "sourceType": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration",
+ "defaultValue": true
+ },
+ {
+ "name": "camel.language.java.trim",
+ "type": "java.lang.Boolean",
+ "description": "Whether to trim the value to remove leading and trailing whitespaces and line breaks",
+ "sourceType": "org.apache.camel.language.joor.springboot.JavaLanguageConfiguration",
+ "defaultValue": true
+ },
{
"name": "camel.language.joor.customizer.enabled",
"type": "java.lang.Boolean",
diff --git a/components-starter/camel-joor-starter/src/main/java/org/apache/camel/language/joor/springboot/JavaLanguageAutoConfiguration.java b/components-starter/camel-joor-starter/src/main/java/org/apache/camel/language/joor/springboot/JavaLanguageAutoConfiguration.java
new file mode 100644
index 00000000000..7b09425643c
--- /dev/null
+++ b/components-starter/camel-joor-starter/src/main/java/org/apache/camel/language/joor/springboot/JavaLanguageAutoConfiguration.java
@@ -0,0 +1,78 @@
+/*
+ * 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.joor.springboot;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.language.joor.JavaLanguage;
+import org.apache.camel.spi.Language;
+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.ConditionalOnHierarchicalProperties;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.convert.ApplicationConversionService;
+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!
+ */
+@Configuration(proxyBeanMethods = false)
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@Conditional(ConditionalOnCamelContextAndAutoConfigurationBeans.class)
+@EnableConfigurationProperties({LanguageConfigurationProperties.class,JavaLanguageConfiguration.class})
+@ConditionalOnHierarchicalProperties({"camel.language", "camel.language.java"})
+public class JavaLanguageAutoConfiguration {
+
+ @Autowired
+ private ApplicationContext applicationContext;
+ private final CamelContext camelContext;
+ @Autowired
+ private JavaLanguageConfiguration configuration;
+
+ public JavaLanguageAutoConfiguration(
+ org.apache.camel.CamelContext camelContext) {
+ this.camelContext = camelContext;
+ }
+
+ @Lazy
+ @Bean
+ public org.apache.camel.spi.LanguageCustomizer configureJavaLanguage() {
+ return new LanguageCustomizer() {
+ @Override
+ public void configure(String name, Language target) {
+ CamelPropertiesHelper.copyProperties(camelContext, configuration, target);
+ }
+ @Override
+ public boolean isEnabled(String name, Language target) {
+ return HierarchicalPropertiesEvaluator.evaluate(
+ applicationContext,
+ "camel.language.customizer",
+ "camel.language.java.customizer")
+ && target instanceof JavaLanguage;
+ }
+ };
+ }
+}
\ No newline at end of file
diff --git a/components-starter/camel-joor-starter/src/main/java/org/apache/camel/language/joor/springboot/JavaLanguageConfiguration.java b/components-starter/camel-joor-starter/src/main/java/org/apache/camel/language/joor/springboot/JavaLanguageConfiguration.java
new file mode 100644
index 00000000000..64ca2d38fff
--- /dev/null
+++ b/components-starter/camel-joor-starter/src/main/java/org/apache/camel/language/joor/springboot/JavaLanguageConfiguration.java
@@ -0,0 +1,77 @@
+/*
+ * 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.joor.springboot;
+
+import org.apache.camel.spring.boot.LanguageConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * Evaluates a Java (Java compiled once at runtime) expression.
+ *
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@ConfigurationProperties(prefix = "camel.language.java")
+public class JavaLanguageConfiguration
+ extends
+ LanguageConfigurationPropertiesCommon {
+
+ /**
+ * Whether to enable auto configuration of the java language. This is
+ * enabled by default.
+ */
+ private Boolean enabled;
+ /**
+ * Whether the expression should be pre compiled once during initialization
+ * phase. If this is turned off, then the expression is reloaded and
+ * compiled on each evaluation.
+ */
+ private Boolean preCompile = true;
+ /**
+ * Whether single quotes can be used as replacement for double quotes. This
+ * is convenient when you need to work with strings inside strings.
+ */
+ private Boolean singleQuotes = true;
+ /**
+ * Whether to trim the value to remove leading and trailing whitespaces and
+ * line breaks
+ */
+ private Boolean trim = true;
+
+ public Boolean getPreCompile() {
+ return preCompile;
+ }
+
+ public void setPreCompile(Boolean preCompile) {
+ this.preCompile = preCompile;
+ }
+
+ public Boolean getSingleQuotes() {
+ return singleQuotes;
+ }
+
+ public void setSingleQuotes(Boolean singleQuotes) {
+ this.singleQuotes = singleQuotes;
+ }
+
+ public Boolean getTrim() {
+ return trim;
+ }
+
+ public void setTrim(Boolean trim) {
+ this.trim = trim;
+ }
+}
\ No newline at end of file
diff --git a/components-starter/camel-joor-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/components-starter/camel-joor-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
index c392d1f6f52..47d41fcf2e4 100644
--- a/components-starter/camel-joor-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
+++ b/components-starter/camel-joor-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -15,4 +15,5 @@
## limitations under the License.
## ---------------------------------------------------------------------------
-org.apache.camel.language.joor.springboot.JoorLanguageAutoConfiguration
\ No newline at end of file
+org.apache.camel.language.joor.springboot.JoorLanguageAutoConfiguration
+org.apache.camel.language.joor.springboot.JavaLanguageAutoConfiguration
diff --git a/components-starter/camel-kafka-starter/src/main/docs/kafka.json b/components-starter/camel-kafka-starter/src/main/docs/kafka.json
index 013f190745e..03ef3739b5a 100644
--- a/components-starter/camel-kafka-starter/src/main/docs/kafka.json
+++ b/components-starter/camel-kafka-starter/src/main/docs/kafka.json
@@ -64,7 +64,7 @@
{
"name": "camel.component.kafka.break-on-first-error",
"type": "java.lang.Boolean",
- "description": "This options controls what happens when a consumer is processing an exchange and it fails. If the option is false then the consumer continues to the next message and processes it. If the option is true then the consumer breaks out, and will seek back to offset of the message that caused a failure, and then re-attempt to process this message. However this can lead to endless processing of the same message if its bound to fail every time, eg a poison message. Therefor [...]
+ "description": "This options controls what happens when a consumer is processing an exchange and it fails. If the option is false then the consumer continues to the next message and processes it. If the option is true then the consumer breaks out. Using the default NoopCommitManager will cause the consumer to not commit the offset so that the message is re-attempted. The consumer should use the KafkaManualCommit to determine the best way to handle the message. Using either the Sync [...]
"sourceType": "org.apache.camel.component.kafka.springboot.KafkaComponentConfiguration",
"defaultValue": false
},
diff --git a/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentConfiguration.java b/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentConfiguration.java
index 778834201be..2847e3907de 100644
--- a/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentConfiguration.java
+++ b/components-starter/camel-kafka-starter/src/main/java/org/apache/camel/component/kafka/springboot/KafkaComponentConfiguration.java
@@ -121,11 +121,15 @@ public class KafkaComponentConfiguration
* This options controls what happens when a consumer is processing an
* exchange and it fails. If the option is false then the consumer continues
* to the next message and processes it. If the option is true then the
- * consumer breaks out, and will seek back to offset of the message that
- * caused a failure, and then re-attempt to process this message. However
- * this can lead to endless processing of the same message if its bound to
- * fail every time, eg a poison message. Therefore it is recommended to deal
- * with that for example by using Camel's error handler.
+ * consumer breaks out. Using the default NoopCommitManager will cause the
+ * consumer to not commit the offset so that the message is re-attempted.
+ * The consumer should use the KafkaManualCommit to determine the best way
+ * to handle the message. Using either the SynchCommitManager or the
+ * AsynchCommitManager the consumer will seek back to the offset of the
+ * message that caused a failure, and then re-attempt to process this
+ * message. However this can lead to endless processing of the same message
+ * if its bound to fail every time, eg a poison message. Therefore its
+ * recommended to deal with that for example by using Camel's error handler.
*/
private Boolean breakOnFirstError = false;
/**