Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1E397180A6 for ; Thu, 16 Jul 2015 19:55:05 +0000 (UTC) Received: (qmail 47220 invoked by uid 500); 16 Jul 2015 19:55:05 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 47130 invoked by uid 500); 16 Jul 2015 19:55:05 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 46869 invoked by uid 99); 16 Jul 2015 19:55:04 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 16 Jul 2015 19:55:04 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id B9C6DDFF9A; Thu, 16 Jul 2015 19:55:04 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: davsclaus@apache.org To: commits@camel.apache.org Date: Thu, 16 Jul 2015 19:55:07 -0000 Message-Id: <09dc59649b9d434b8a08f0b41c1b0243@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [4/4] camel git commit: CAMEL-8974: Properties component support systemPropertiesMode to control whether JVM system properties are in use. When in Spring bridge mode it uses the spring configured value. CAMEL-8974: Properties component support systemPropertiesMode to control whether JVM system properties are in use. When in Spring bridge mode it uses the spring configured value. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9f26e12a Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9f26e12a Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9f26e12a Branch: refs/heads/camel-2.15.x Commit: 9f26e12a6b6518460fad3333839e5851e0f9455f Parents: 0a6dc86 Author: Claus Ibsen Authored: Thu Jul 16 21:16:35 2015 +0200 Committer: Claus Ibsen Committed: Thu Jul 16 22:01:40 2015 +0200 ---------------------------------------------------------------------- .../properties/DefaultPropertiesParser.java | 29 ++++++-- .../properties/PropertiesComponent.java | 40 +++++++++++ .../properties/PropertiesComponentTest.java | 74 ++++++++++++++++++++ .../properties/myproperties.properties | 1 + .../camel/spring/CamelContextFactoryBean.java | 2 + .../BridgePropertyPlaceholderConfigurer.java | 6 +- 6 files changed, 145 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/9f26e12a/camel-core/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java b/camel-core/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java index 5b83983..127b988 100644 --- a/camel-core/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java +++ b/camel-core/src/main/java/org/apache/camel/component/properties/DefaultPropertiesParser.java @@ -20,12 +20,12 @@ import java.util.HashSet; import java.util.Properties; import java.util.Set; -import static java.lang.String.format; - import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import static java.lang.String.format; + /** * A parser to parse a string which contains property placeholders. */ @@ -297,12 +297,29 @@ public class DefaultPropertiesParser implements AugmentedPropertyNameAwareProper * @return Value of the property or {@code null} if not found */ private String doGetPropertyValue(String key) { - String value = System.getProperty(key); - if (value != null) { - log.debug("Found a JVM system property: {} with value: {} to be used.", key, value); - } else if (properties != null) { + String value = null; + + if (propertiesComponent.getSystemPropertiesMode() == PropertiesComponent.SYSTEM_PROPERTIES_MODE_OVERRIDE) { + value = System.getProperty(key); + if (value != null) { + log.debug("Found a JVM system property: {} with value: {} to be used.", key, value); + } + } + + if (value == null && properties != null) { value = properties.getProperty(key); + if (value != null) { + log.debug("Found property: {} with value: {} to be used.", key, value); + } + } + + if (value == null && propertiesComponent.getSystemPropertiesMode() == PropertiesComponent.SYSTEM_PROPERTIES_MODE_FALLBACK) { + value = System.getProperty(key); + if (value != null) { + log.debug("Found a JVM system property: {} with value: {} to be used.", key, value); + } } + return parseProperty(key, value, properties); } } http://git-wip-us.apache.org/repos/asf/camel/blob/9f26e12a/camel-core/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java b/camel-core/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java index e9de896..3eee968 100644 --- a/camel-core/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java +++ b/camel-core/src/main/java/org/apache/camel/component/properties/PropertiesComponent.java @@ -64,6 +64,24 @@ public class PropertiesComponent extends DefaultComponent { public static final String SUFFIX_TOKEN = DEFAULT_SUFFIX_TOKEN; /** + * Never check system properties. + */ + public static final int SYSTEM_PROPERTIES_MODE_NEVER = 0; + + /** + * Check system properties if not resolvable in the specified properties. + */ + public static final int SYSTEM_PROPERTIES_MODE_FALLBACK = 1; + + /** + * Check system properties first, before trying the specified properties. + * This allows system properties to override any other property source. + *

+ * This is the default. + */ + public static final int SYSTEM_PROPERTIES_MODE_OVERRIDE = 2; + + /** * Key for stores special override properties that containers such as OSGi can store * in the OSGi service registry */ @@ -87,6 +105,7 @@ public class PropertiesComponent extends DefaultComponent { private String suffixToken = DEFAULT_SUFFIX_TOKEN; private Properties initialProperties; private Properties overrideProperties; + private int systemPropertiesMode = SYSTEM_PROPERTIES_MODE_OVERRIDE; public PropertiesComponent() { // include out of the box functions @@ -368,10 +387,31 @@ public class PropertiesComponent extends DefaultComponent { return functions.containsKey(name); } + public int getSystemPropertiesMode() { + return systemPropertiesMode; + } + + /** + * Sets the system property mode. + * + * @see #SYSTEM_PROPERTIES_MODE_NEVER + * @see #SYSTEM_PROPERTIES_MODE_FALLBACK + * @see #SYSTEM_PROPERTIES_MODE_OVERRIDE + */ + public void setSystemPropertiesMode(int systemPropertiesMode) { + this.systemPropertiesMode = systemPropertiesMode; + } + @Override protected void doStart() throws Exception { super.doStart(); + if (systemPropertiesMode != SYSTEM_PROPERTIES_MODE_NEVER + && systemPropertiesMode != SYSTEM_PROPERTIES_MODE_FALLBACK + && systemPropertiesMode != SYSTEM_PROPERTIES_MODE_OVERRIDE) { + throw new IllegalArgumentException("Option systemPropertiesMode has invalid value: " + systemPropertiesMode); + } + // inject the component to the parser if (propertiesParser instanceof DefaultPropertiesParser) { ((DefaultPropertiesParser) propertiesParser).setPropertiesComponent(this); http://git-wip-us.apache.org/repos/asf/camel/blob/9f26e12a/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentTest.java b/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentTest.java index b8a6a3b..94bf5bb 100644 --- a/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentTest.java +++ b/camel-core/src/test/java/org/apache/camel/component/properties/PropertiesComponentTest.java @@ -311,6 +311,8 @@ public class PropertiesComponentTest extends ContextTestSupport { template.sendBody("direct:foo", "Hello Foo"); assertMockEndpointsSatisfied(); + + System.clearProperty("myPrefix"); } public void testPropertiesComponentPropertyPrefixFallbackDefault() throws Exception { @@ -498,6 +500,78 @@ public class PropertiesComponentTest extends ContextTestSupport { assertEquals("\"mock", context.resolvePropertyPlaceholders("\"{{cool.mock}}")); } + public void testPropertiesComponentOverride() throws Exception { + System.setProperty("cool.result", "bar"); + PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class); + pc.setSystemPropertiesMode(PropertiesComponent.SYSTEM_PROPERTIES_MODE_OVERRIDE); + + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:foo").to("mock:{{cool.result}}"); + } + }); + context.start(); + + getMockEndpoint("mock:result").expectedMessageCount(0); + getMockEndpoint("mock:bar").expectedMessageCount(1); + + template.sendBody("direct:foo", "Hello Foo"); + + assertMockEndpointsSatisfied(); + + System.clearProperty("cool.result"); + } + + public void testPropertiesComponentFallback() throws Exception { + System.setProperty("cool.result", "bar"); + System.setProperty("beer", "Carlsberg"); + PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class); + pc.setSystemPropertiesMode(PropertiesComponent.SYSTEM_PROPERTIES_MODE_FALLBACK); + + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:foo").to("mock:{{beer}}").to("mock:{{cool.result}}"); + } + }); + context.start(); + + getMockEndpoint("mock:result").expectedMessageCount(1); + getMockEndpoint("mock:bar").expectedMessageCount(0); + getMockEndpoint("mock:Carlsberg").expectedMessageCount(1); + + template.sendBody("direct:foo", "Hello Foo"); + + assertMockEndpointsSatisfied(); + + System.clearProperty("cool.result"); + System.clearProperty("beer"); + } + + public void testPropertiesComponentNever() throws Exception { + System.setProperty("cool.result", "bar"); + System.setProperty("beer", "Carlsberg"); + PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class); + pc.setSystemPropertiesMode(PropertiesComponent.SYSTEM_PROPERTIES_MODE_NEVER); + + context.addRoutes(new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:foo").to("mock:{{beer}}").to("mock:{{cool.result}}"); + } + }); + try { + context.start(); + fail("Should have thrown exception"); + } catch (FailedToCreateRouteException e) { + assertEquals("Property with key [beer] not found in properties from text: mock:{{beer}}", e.getCause().getMessage()); + } + + System.clearProperty("cool.result"); + System.clearProperty("beer"); + } + @Override protected CamelContext createCamelContext() throws Exception { CamelContext context = super.createCamelContext(); http://git-wip-us.apache.org/repos/asf/camel/blob/9f26e12a/camel-core/src/test/resources/org/apache/camel/component/properties/myproperties.properties ---------------------------------------------------------------------- diff --git a/camel-core/src/test/resources/org/apache/camel/component/properties/myproperties.properties b/camel-core/src/test/resources/org/apache/camel/component/properties/myproperties.properties index a89d393..64e6552 100644 --- a/camel-core/src/test/resources/org/apache/camel/component/properties/myproperties.properties +++ b/camel-core/src/test/resources/org/apache/camel/component/properties/myproperties.properties @@ -38,3 +38,4 @@ slipDelimiter=## stop=true + http://git-wip-us.apache.org/repos/asf/camel/blob/9f26e12a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java index 1c02e5f..9747b6b 100644 --- a/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java +++ b/components/camel-spring/src/main/java/org/apache/camel/spring/CamelContextFactoryBean.java @@ -288,6 +288,8 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean