This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.8.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.8.x by this push:
new a5ed07a7554 [BACKPORT-4.8.x] CAMEL-21276, CAMEL-21336 (#15927)
a5ed07a7554 is described below
commit a5ed07a7554ab36d8197f7876fbfbe6e2f903362
Author: Christoph Deppisch <[email protected]>
AuthorDate: Fri Oct 11 16:12:13 2024 +0200
[BACKPORT-4.8.x] CAMEL-21276, CAMEL-21336 (#15927)
* CAMEL-21276: camel-core: Lookup ENV variable should use IOHelper to be
consistent, and also support camelCase style to have more human readable keys
and still match ENV variables that are UPPER_CASE with underscores only.
(#15744)
(cherry picked from commit 171a84be7173eb053c06529793732523978e2f87)
* CAMEL-21336: Allow Kamelets configured by EnvVars only
- Consider environment variables when validating Kamelet parameter
configuration
- Avoids errors due to missing required Kamelet parameter validation when
parameter is configured via environment variables
(cherry picked from commit d30f8862c6ab7444177cf63762c32725cf76dca4)
---------
Co-authored-by: Claus Ibsen <[email protected]>
---
.../apache/camel/component/kamelet/Kamelet.java | 50 ++++++++++++++++++++++
.../camel/component/kamelet/KameletComponent.java | 9 ++++
.../org/apache/camel/RouteTemplateContext.java | 22 ++++++++++
.../impl/debugger/DefaultBacklogDebugger.java | 3 +-
.../properties/EnvPropertiesFunction.java | 11 +----
.../properties/ServiceHostPropertiesFunction.java | 9 +---
.../properties/ServicePortPropertiesFunction.java | 9 +---
.../properties/ServicePropertiesFunction.java | 5 ++-
.../java/org/apache/camel/impl/DefaultModel.java | 17 ++++----
.../camel/model/DefaultRouteTemplateContext.java | 27 ++++++++++++
.../java/org/apache/camel/main/MainHelper.java | 2 +-
.../org/apache/camel/support/LanguageHelper.java | 14 +-----
core/camel-util/pom.xml | 1 +
.../org/apache/camel/util/FilePathResolver.java | 4 +-
.../main/java/org/apache/camel/util/IOHelper.java | 37 ++++++++++++----
.../java/org/apache/camel/util/IOHelperTest.java | 4 ++
16 files changed, 167 insertions(+), 57 deletions(-)
diff --git
a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
index 94d94e229cc..da2cdc792b0 100644
---
a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
+++
b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.kamelet;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.function.Predicate;
@@ -30,6 +31,7 @@ import org.apache.camel.spi.PropertiesComponent;
import org.apache.camel.spi.UuidGenerator;
import org.apache.camel.support.CamelContextHelper;
import org.apache.camel.support.SimpleUuidGenerator;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.ObjectHelper;
import org.apache.camel.util.StringHelper;
@@ -37,6 +39,7 @@ import static
org.apache.camel.model.ProcessorDefinitionHelper.filterTypeInOutpu
public final class Kamelet {
public static final String PROPERTIES_PREFIX = "camel.kamelet.";
+ public static final String ENV_VAR_PREFIX = "CAMEL_KAMELET_";
public static final String SCHEME = "kamelet";
public static final String SOURCE_ID = "source";
public static final String SINK_ID = "sink";
@@ -128,6 +131,53 @@ public final class Kamelet {
}
}
+ /**
+ * Looking for OS environment variables that match the properties of the
given Kamelet. At first lookup attempt is
+ * made without considering camelCase keys in the elements. The second
lookup is converting camelCase to
+ * underscores.
+ *
+ * For example given an ENV variable in either format: -
CAMEL_KAMELET_AWSS3SOURCE_BUCKETNAMEORARN=myArn -
+ * CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN=myArn
+ */
+ public static void extractKameletEnvironmentVariables(Map<String, Object>
properties, String... elements) {
+ StringBuilder prefixBuffer = new StringBuilder(Kamelet.ENV_VAR_PREFIX);
+
+ // Map contains parameter name as key and full environment variable as
value
+ Map<String, String> propertyMappings = new HashMap<>();
+ for (String element : elements) {
+ if (element == null) {
+ continue;
+ }
+
prefixBuffer.append(IOHelper.normalizeEnvironmentVariable(element)).append('_');
+
+ String prefix = prefixBuffer.toString();
+ System.getenv().keySet().stream()
+ .filter(Kamelet.startsWith(prefix))
+ .forEach(name ->
propertyMappings.put(name.substring(prefix.length()), name));
+ }
+
+ prefixBuffer = new StringBuilder(Kamelet.ENV_VAR_PREFIX);
+
+ for (String element : elements) {
+ if (element == null) {
+ continue;
+ }
+
prefixBuffer.append(IOHelper.normalizeEnvironmentVariable(StringHelper.camelCaseToDash(element))).append('_');
+
+ String prefix = prefixBuffer.toString();
+ System.getenv().keySet().stream()
+ .filter(Kamelet.startsWith(prefix))
+ .forEach(name ->
propertyMappings.put(name.substring(prefix.length()), name));
+ }
+
+ for (Map.Entry<String, String> mapping : propertyMappings.entrySet()) {
+ String value = System.getenv(mapping.getValue());
+ if (value != null) {
+ properties.put(mapping.getKey(), value);
+ }
+ }
+ }
+
public static RouteDefinition templateToRoute(RouteTemplateDefinition in,
Map<String, Object> parameters) {
final String rid = (String) parameters.get(PARAM_ROUTE_ID);
final boolean noErrorHandler = (boolean)
parameters.get(NO_ERROR_HANDLER);
diff --git
a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java
b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java
index ace60eda2fe..5e3eb6cc9da 100644
---
a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java
+++
b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/KameletComponent.java
@@ -218,6 +218,15 @@ public class KameletComponent extends DefaultComponent {
Kamelet.extractKameletProperties(getCamelContext(),
kameletProperties, templateId, routeId);
}
+ //
+ // Look for OS environment variables that match the Kamelet
properties
+ // Environment variables are loaded in the following order:
+ //
+ // CAMEL_KAMELET_" + templateId
+ // CAMEL_KAMELET_" + templateId + "_" routeId
+ //
+ Kamelet.extractKameletEnvironmentVariables(kameletProperties,
templateId, routeId);
+
//
// Uri params have the highest precedence
//
diff --git
a/core/camel-api/src/main/java/org/apache/camel/RouteTemplateContext.java
b/core/camel-api/src/main/java/org/apache/camel/RouteTemplateContext.java
index 35cba9e23c8..75d3c46ac28 100644
--- a/core/camel-api/src/main/java/org/apache/camel/RouteTemplateContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/RouteTemplateContext.java
@@ -108,6 +108,17 @@ public interface RouteTemplateContext extends
HasCamelContext {
*/
Object getProperty(String name);
+ /**
+ * Gets the environment variable parameter that matches the given property
name. The match is performed by
+ * normalizing the given property name as an OS environment variable name.
The environment variable name may use
+ * pure uppercase or camelCase converted to underscore property names. As
an example bucketNameOrArn property
+ * matches BUCKETNAMEORARN and BUCKET_NAME_OR_ARN environment variables.
+ *
+ * @param name name of property
+ * @return the property value or <tt>null</tt> if no property exists
+ */
+ Object getEnvironmentVariable(String name);
+
/**
* Gets the property with the given name
*
@@ -139,6 +150,17 @@ public interface RouteTemplateContext extends
HasCamelContext {
*/
boolean hasParameter(String name);
+ /**
+ * Whether the route template has an environment variable parameter that
matches the given parameter name. The match
+ * is performed by normalizing the given name as an OS environment
variable name. The environment variable name may
+ * use pure uppercase or camelCase converted to underscore property names.
As an example bucketNameOrArn property
+ * matches BUCKETNAMEORARN and BUCKET_NAME_OR_ARN environment variables.
+ *
+ * @param name the parameter name
+ * @return true if exists
+ */
+ boolean hasEnvironmentVariable(String name);
+
/**
* Gets the local bean repository for the route template when creating the
new route
*/
diff --git
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
index be0c939544e..57bad2b4e6b 100644
---
a/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
+++
b/core/camel-base-engine/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogDebugger.java
@@ -52,6 +52,7 @@ import org.apache.camel.support.LoggerHelper;
import org.apache.camel.support.MessageHelper;
import org.apache.camel.support.service.ServiceHelper;
import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StopWatch;
import org.apache.camel.util.json.JsonObject;
import org.slf4j.Logger;
@@ -258,7 +259,7 @@ public final class DefaultBacklogDebugger extends
ServiceSupport implements Back
* the value of the system property {@link
#SUSPEND_MODE_SYSTEM_PROP_NAME}, {@code false} by default.
*/
private static boolean resolveSuspendMode() {
- final String value = System.getenv(SUSPEND_MODE_ENV_VAR_NAME);
+ final String value =
IOHelper.lookupEnvironmentVariable(SUSPEND_MODE_ENV_VAR_NAME);
return value == null ?
Boolean.getBoolean(SUSPEND_MODE_SYSTEM_PROP_NAME) : Boolean.parseBoolean(value);
}
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
index 1d94cbd26b4..8bf0ff9f122 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/EnvPropertiesFunction.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.properties;
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -39,15 +40,7 @@ public class EnvPropertiesFunction implements
PropertiesFunction {
defaultValue = StringHelper.after(remainder, ":");
}
- // lookup OS environment variable using upper case key
- key = key.toUpperCase();
-
- String value = System.getenv(key);
- // some OS do not support dashes in keys, so replace with underscore
- if (value == null) {
- String noDashKey = key.replace('-', '_');
- value = System.getenv(noDashKey);
- }
+ String value = IOHelper.lookupEnvironmentVariable(key);
return value != null ? value : defaultValue;
}
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
index 45336fd60d3..4c10798a671 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServiceHostPropertiesFunction.java
@@ -16,9 +16,8 @@
*/
package org.apache.camel.component.properties;
-import java.util.Locale;
-
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -57,12 +56,8 @@ public class ServiceHostPropertiesFunction implements
PropertiesFunction {
// make sure to use upper case
if (key != null) {
- // make sure to use underscore as dash is not supported as ENV
variables
- key = key.toUpperCase(Locale.ENGLISH).replace('-', '_');
-
// a service should have both the host and port defined
- String host = System.getenv(key + HOST_PREFIX);
-
+ String host = IOHelper.lookupEnvironmentVariable(key +
HOST_PREFIX);
if (host != null) {
return host;
} else {
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
index 70d300c3776..6a9a12bed9b 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePortPropertiesFunction.java
@@ -16,9 +16,8 @@
*/
package org.apache.camel.component.properties;
-import java.util.Locale;
-
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -57,12 +56,8 @@ public class ServicePortPropertiesFunction implements
PropertiesFunction {
// make sure to use upper case
if (key != null) {
- // make sure to use underscore as dash is not supported as ENV
variables
- key = key.toUpperCase(Locale.ENGLISH).replace('-', '_');
-
// a service should have both the host and port defined
- String port = System.getenv(key + PORT_PREFIX);
-
+ String port = IOHelper.lookupEnvironmentVariable(key +
PORT_PREFIX);
if (port != null) {
return port;
} else {
diff --git
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
index fb2f3d137c9..4c59acbdc11 100644
---
a/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
+++
b/core/camel-base/src/main/java/org/apache/camel/component/properties/ServicePropertiesFunction.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.properties;
import java.util.Locale;
import org.apache.camel.spi.PropertiesFunction;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -57,8 +58,8 @@ public class ServicePropertiesFunction implements
PropertiesFunction {
key = key.toUpperCase(Locale.ENGLISH).replace('-', '_');
// a service should have both the host and port defined
- String host = System.getenv(key + HOST_PREFIX);
- String port = System.getenv(key + PORT_PREFIX);
+ String host = IOHelper.lookupEnvironmentVariable(key +
HOST_PREFIX);
+ String port = IOHelper.lookupEnvironmentVariable(key +
PORT_PREFIX);
if (host != null && port != null) {
return host + ":" + port;
diff --git
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index 8651458a9d3..f167ce5b73a 100644
---
a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++
b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -460,23 +460,24 @@ public class DefaultModel implements Model {
final Map<String, Object> propDefaultValues = new HashMap<>();
// include default values first from the template (and validate that
we have inputs for all required parameters)
if (target.getTemplateParameters() != null) {
- StringJoiner templatesBuilder = new StringJoiner(", ");
+ StringJoiner missingParameters = new StringJoiner(", ");
for (RouteTemplateParameterDefinition temp :
target.getTemplateParameters()) {
if (temp.getDefaultValue() != null) {
addProperty(prop, temp.getName(), temp.getDefaultValue());
addProperty(propDefaultValues, temp.getName(),
temp.getDefaultValue());
- } else {
- if (temp.isRequired() &&
!routeTemplateContext.hasParameter(temp.getName())) {
- // this is a required parameter which is missing
- templatesBuilder.add(temp.getName());
- }
+ } else if
(routeTemplateContext.hasEnvironmentVariable(temp.getName())) {
+ // property is configured via environment variables
+ addProperty(prop, temp.getName(),
routeTemplateContext.getEnvironmentVariable(temp.getName()));
+ } else if (temp.isRequired() &&
!routeTemplateContext.hasParameter(temp.getName())) {
+ // this is a required parameter which is missing
+ missingParameters.add(temp.getName());
}
}
- if (templatesBuilder.length() > 0) {
+ if (missingParameters.length() > 0) {
throw new IllegalArgumentException(
"Route template " + routeTemplateId + " the following
mandatory parameters must be provided: "
- + templatesBuilder);
+ + missingParameters);
}
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/DefaultRouteTemplateContext.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/DefaultRouteTemplateContext.java
index 68f85c0395c..e03c4fe54c5 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/DefaultRouteTemplateContext.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/DefaultRouteTemplateContext.java
@@ -27,6 +27,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.RouteTemplateContext;
import org.apache.camel.spi.BeanRepository;
import org.apache.camel.support.LocalBeanRegistry;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.StringHelper;
/**
@@ -129,6 +130,32 @@ public final class DefaultRouteTemplateContext implements
RouteTemplateContext {
return false;
}
+ @Override
+ public boolean hasEnvironmentVariable(String name) {
+ String normalizedKey = IOHelper.normalizeEnvironmentVariable(name);
+ if (parameters.containsKey(normalizedKey)) {
+ return true;
+ }
+ normalizedKey =
IOHelper.normalizeEnvironmentVariable(StringHelper.camelCaseToDash(name));
+ if (parameters.containsKey(normalizedKey)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public Object getEnvironmentVariable(String name) {
+ String normalizedKey = IOHelper.normalizeEnvironmentVariable(name);
+ if (parameters.containsKey(normalizedKey)) {
+ return parameters.get(normalizedKey);
+ }
+ normalizedKey =
IOHelper.normalizeEnvironmentVariable(StringHelper.camelCaseToDash(name));
+ if (parameters.containsKey(normalizedKey)) {
+ return parameters.get(normalizedKey);
+ }
+ return null;
+ }
+
@Override
public BeanRepository getLocalBeanRepository() {
return registry;
diff --git
a/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
b/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
index c5551bed229..61f994e899c 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
@@ -111,7 +111,7 @@ public final class MainHelper {
public static Optional<String> lookupPropertyFromSysOrEnv(String name) {
String answer = System.getProperty(name);
if (answer == null) {
- answer = System.getenv(toEnvVar(name));
+ answer = IOHelper.lookupEnvironmentVariable(name);
}
return Optional.ofNullable(answer);
diff --git
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
index 03fd5350720..f9cc5123e57 100644
---
a/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
+++
b/core/camel-support/src/main/java/org/apache/camel/support/LanguageHelper.java
@@ -32,6 +32,7 @@ import org.apache.camel.ExchangePropertyKey;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.ExchangeFormatter;
import org.apache.camel.support.processor.DefaultExchangeFormatter;
+import org.apache.camel.util.IOHelper;
import org.apache.camel.util.TimeUtils;
public final class LanguageHelper {
@@ -169,18 +170,7 @@ public final class LanguageHelper {
* @return the environment variable value
*/
public static String sysenv(String name) {
- String answer = null;
- if (name != null) {
- // lookup OS env with upper case key
- name = name.toUpperCase();
- answer = System.getenv(name);
- // some OS do not support dashes in keys, so replace with
underscore
- if (answer == null) {
- String noDashKey = name.replace('-', '_');
- answer = System.getenv(noDashKey);
- }
- }
- return answer;
+ return IOHelper.lookupEnvironmentVariable(name);
}
public static String escapeQuotes(String text) {
diff --git a/core/camel-util/pom.xml b/core/camel-util/pom.xml
index 2a90f57e52e..117c2889436 100644
--- a/core/camel-util/pom.xml
+++ b/core/camel-util/pom.xml
@@ -266,6 +266,7 @@
<environmentVariables>
<FOO_SERVICE_HOST>myserver</FOO_SERVICE_HOST>
<FOO_SERVICE_PORT>8081</FOO_SERVICE_PORT>
+
<CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN>mys3arn</CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN>
</environmentVariables>
</configuration>
</plugin>
diff --git
a/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
b/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
index 04672fdc9ec..bfc8d156f70 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/FilePathResolver.java
@@ -49,7 +49,7 @@ public final class FilePathResolver {
int pos = fun.indexOf("${env:");
if (pos != -1) {
String key = fun.substring(pos + 6);
- String value = System.getenv(key);
+ String value = IOHelper.lookupEnvironmentVariable(key);
if (value != null) {
path = path.replace("${env:" + key + "}", value);
}
@@ -57,7 +57,7 @@ public final class FilePathResolver {
pos = fun.indexOf("${env.");
if (pos != -1) {
String key = fun.substring(pos + 6);
- String value = System.getenv(key);
+ String value = IOHelper.lookupEnvironmentVariable(key);
if (value != null) {
path = path.replace("${env." + key + "}", value);
}
diff --git a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
index e31ecfdf909..de347a45612 100644
--- a/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
+++ b/core/camel-util/src/main/java/org/apache/camel/util/IOHelper.java
@@ -667,6 +667,15 @@ public final class IOHelper {
/**
* Lookup the OS environment variable in a safe manner by using upper case
keys and underscore instead of dash.
+ *
+ * At first lookup attempt is made without considering camelCase keys. The
second lookup is converting camelCase to
+ * underscores.
+ *
+ * For example given an ENV variable in either format: -
CAMEL_KAMELET_AWS_S3_SOURCE_BUCKETNAMEORARN=myArn -
+ * CAMEL_KAMELET_AWS_S3_SOURCE_BUCKET_NAME_OR_ARN=myArn
+ *
+ * Then the following keys can look up both ENV formats above: -
camel.kamelet.awsS3Source.bucketNameOrArn -
+ * camel.kamelet.aws-s3-source.bucketNameOrArn -
camel.kamelet.aws-s3-source.bucket-name-or-arn
*/
public static String lookupEnvironmentVariable(String key) {
// lookup OS env with upper case key
@@ -674,18 +683,30 @@ public final class IOHelper {
String value = System.getenv(upperKey);
if (value == null) {
- // some OS do not support dashes in keys, so replace with
underscore
- String normalizedKey = upperKey.replace('-', '_');
-
- // and replace dots with underscores so keys like my.key are
- // translated to MY_KEY
- normalizedKey = normalizedKey.replace('.', '_');
-
- value = System.getenv(normalizedKey);
+ value = System.getenv(normalizeEnvironmentVariable(upperKey));
+ }
+ if (value == null) {
+ // camelCase keys should use underscore as separator
+ String caseKey = StringHelper.camelCaseToDash(key);
+ value = System.getenv(normalizeEnvironmentVariable(caseKey));
}
return value;
}
+ /**
+ * Convert given key into an OS environment variable. Uses uppercase keys
and converts dashes and dots to
+ * underscores.
+ */
+ public static String normalizeEnvironmentVariable(String key) {
+ String upperKey = key.toUpperCase();
+ // some OS do not support dashes in keys, so replace with underscore
+ String normalizedKey = upperKey.replace('-', '_');
+
+ // and replace dots with underscores so keys like my.key are
+ // translated to MY_KEY
+ return normalizedKey.replace('.', '_');
+ }
+
/**
* Encoding-aware input stream.
*/
diff --git
a/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
b/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
index 997907a978c..c7c820ef041 100644
--- a/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
+++ b/core/camel-util/src/test/java/org/apache/camel/util/IOHelperTest.java
@@ -28,6 +28,10 @@ public class IOHelperTest {
assertEquals("8081",
IOHelper.lookupEnvironmentVariable("foo-service.port"));
assertEquals("8081",
IOHelper.lookupEnvironmentVariable("foo-service-port"));
assertEquals("8081",
IOHelper.lookupEnvironmentVariable("foo.service.port"));
+
+ assertEquals("mys3arn",
IOHelper.lookupEnvironmentVariable("camel.kamelet.aws-s3-source.bucketNameOrArn"));
+ assertEquals("mys3arn",
IOHelper.lookupEnvironmentVariable("camel.kamelet.aws-s3-source.bucket-name-or-arn"));
+ assertEquals("mys3arn",
IOHelper.lookupEnvironmentVariable("camel.kamelet.awsS3Source.bucketNameOrArn"));
}
@Test