CAMEL-10417: camel-properties: Support adding location using child nodes of propertyPlaceholder element
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/610c5db0 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/610c5db0 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/610c5db0 Branch: refs/heads/master Commit: 610c5db0a02804f64ced39581ab7cbf0b2b786dc Parents: a4e94f0 Author: lburgazzoli <lburgazz...@gmail.com> Authored: Fri Oct 28 19:12:11 2016 +0200 Committer: lburgazzoli <lburgazz...@gmail.com> Committed: Fri Nov 4 16:44:44 2016 +0100 ---------------------------------------------------------------------- .../src/main/docs/properties-component.adoc | 2 +- .../properties/PropertiesComponent.java | 13 +++- .../PropertiesComponentConfiguration.java | 5 +- .../blueprint/BlueprintPropertiesResolver.java | 3 +- .../blueprint/CamelContextFactoryBean.java | 11 ++-- .../xml/AbstractCamelContextFactoryBean.java | 15 ++++- .../xml/CamelPropertyPlaceholderDefinition.java | 15 ++++- ...elPropertyPlaceholderFunctionDefinition.java | 1 - ...elPropertyPlaceholderLocationDefinition.java | 62 +++++++++++++++++++ ...ntPropertiesLocationElementImplicitTest.java | 49 +++++++++++++++ .../BlueprintPropertiesLocationElementTest.java | 48 +++++++++++++++ .../properties-location-element-1.properties | 17 +++++ .../properties-location-element-2.properties | 17 +++++ ...roperties-location-element-implicit-test.xml | 55 +++++++++++++++++ .../properties-location-element-test.xml | 55 +++++++++++++++++ ...amelSpringPropertiesLocationElementTest.java | 65 ++++++++++++++++++++ ...ingPropertiesLocationElementTest-context.xml | 46 ++++++++++++++ .../properties-location-element-1.properties | 17 +++++ .../properties-location-element-2.properties | 17 +++++ .../properties-location-element-3.properties | 17 +++++ 20 files changed, 515 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/camel-core/src/main/docs/properties-component.adoc ---------------------------------------------------------------------- diff --git a/camel-core/src/main/docs/properties-component.adoc b/camel-core/src/main/docs/properties-component.adoc index b68d26d..8ba8bf4 100644 --- a/camel-core/src/main/docs/properties-component.adoc +++ b/camel-core/src/main/docs/properties-component.adoc @@ -28,7 +28,7 @@ The Properties component supports 16 options which are listed below. [width="100%",cols="2,1m,7",options="header"] |======================================================================= | Name | Java Type | Description -| locations | String[] | A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option. +| locations | String[] | A list of locations to load properties. This option will override any default locations and only use the locations from this option. | location | String | A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option. | encoding | String | Encoding to use when loading properties file from the file system or classpath. If no encoding has been set then the properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by link java.util.Propertiesload(java.io.InputStream) | propertiesResolver | PropertiesResolver | To use a custom PropertiesResolver http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/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 82020f6..3ad3067 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 @@ -19,6 +19,7 @@ package org.apache.camel.component.properties; import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -229,7 +230,7 @@ public class PropertiesComponent extends UriEndpointComponent { } /** - * A list of locations to load properties. You can use comma to separate multiple locations. + * A list of locations to load properties. * This option will override any default locations and only use the locations from this option. */ public void setLocations(String[] locations) { @@ -246,6 +247,16 @@ public class PropertiesComponent extends UriEndpointComponent { } /** + * A list of locations to load properties. + * This option will override any default locations and only use the locations from this option. + */ + public void setLocations(Collection<String> locations) { + if (locations != null && !locations.isEmpty()) { + setLocations(locations.toArray(new String[locations.size()])); + } + } + + /** * A list of locations to load properties. You can use comma to separate multiple locations. * This option will override any default locations and only use the locations from this option. */ http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java ---------------------------------------------------------------------- diff --git a/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java b/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java index 9a360bc..8eab06c 100644 --- a/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java +++ b/components-starter/camel-core-starter/src/main/java/org/apache/camel/component/properties/springboot/PropertiesComponentConfiguration.java @@ -32,9 +32,8 @@ import org.springframework.boot.context.properties.NestedConfigurationProperty; public class PropertiesComponentConfiguration { /** - * A list of locations to load properties. You can use comma to separate - * multiple locations. This option will override any default locations and - * only use the locations from this option. + * A list of locations to load properties. This option will override any + * default locations and only use the locations from this option. */ private String[] locations; /** http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintPropertiesResolver.java ---------------------------------------------------------------------- diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintPropertiesResolver.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintPropertiesResolver.java index dc2bd8d..aa36d1f 100644 --- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintPropertiesResolver.java +++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/BlueprintPropertiesResolver.java @@ -60,8 +60,7 @@ public class BlueprintPropertiesResolver implements PropertiesResolver { if (!explicit) { // auto lookup blueprint property placeholders to use if none explicit was configured // this is convention over configuration - String[] ids = blueprint.lookupPropertyPlaceholderIds(); - for (String id : ids) { + for (String id : blueprint.lookupPropertyPlaceholderIds()) { blueprint.addPropertyPlaceholder(id); } } http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java index 4961bee..6802312 100644 --- a/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java +++ b/components/camel-blueprint/src/main/java/org/apache/camel/blueprint/CamelContextFactoryBean.java @@ -270,14 +270,15 @@ public class CamelContextFactoryBean extends AbstractCamelContextFactoryBean<Blu // no locations has been set, so its a default component if (pc.getLocations() == null) { - StringBuilder sb = new StringBuilder(); String[] ids = parser.lookupPropertyPlaceholderIds(); - for (String id : ids) { - sb.append("blueprint:").append(id).append(","); + for (int i = 0; i < ids.length; i++) { + if (!ids[i].startsWith( "blueprint:")) { + ids[i] = "blueprint:" + ids[i]; + } } - if (sb.length() > 0) { + if (ids.length > 0) { // location supports multiple separated by comma - pc.setLocation(sb.toString()); + pc.setLocations(ids); } } http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java index d26449b..a2b5e3f 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java @@ -567,8 +567,21 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex if (getCamelPropertyPlaceholder() != null) { CamelPropertyPlaceholderDefinition def = getCamelPropertyPlaceholder(); + List<String> locations = new ArrayList<>(); + + if (def.getLocation() != null) { + ObjectHelper.createIterable(def.getLocation()).forEach( + location -> locations.add((String) location) + ); + } + if (def.getLocations() != null) { + def.getLocations().forEach( + definition -> locations.add(definition.getPath()) + ); + } + PropertiesComponent pc = new PropertiesComponent(); - pc.setLocation(def.getLocation()); + pc.setLocations(locations); pc.setEncoding(def.getEncoding()); if (def.isCache() != null) { http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java index 6e3d638..c626836 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java @@ -36,7 +36,7 @@ import org.apache.camel.spi.Metadata; @XmlAccessorType(XmlAccessType.FIELD) public class CamelPropertyPlaceholderDefinition extends IdentifiedType { - @XmlAttribute(required = true) + @XmlAttribute private String location; @XmlAttribute private String encoding; @@ -62,6 +62,8 @@ public class CamelPropertyPlaceholderDefinition extends IdentifiedType { private String suffixToken; @XmlElement(name = "propertiesFunction") private List<CamelPropertyPlaceholderFunctionDefinition> functions; + @XmlElement(name = "propertiesLocation") + private List<CamelPropertyPlaceholderLocationDefinition> locations; public String getLocation() { return location; @@ -212,4 +214,15 @@ public class CamelPropertyPlaceholderDefinition extends IdentifiedType { public void setFunctions(List<CamelPropertyPlaceholderFunctionDefinition> functions) { this.functions = functions; } + + public List<CamelPropertyPlaceholderLocationDefinition> getLocations() { + return locations; + } + + /** + * List of property locations to use. + */ + public void setLocations(List<CamelPropertyPlaceholderLocationDefinition> locations) { + this.locations = locations; + } } http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderFunctionDefinition.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderFunctionDefinition.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderFunctionDefinition.java index 6256798..0dbebef 100644 --- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderFunctionDefinition.java +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderFunctionDefinition.java @@ -28,7 +28,6 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "spring,configuration") @XmlRootElement(name = "propertiesFunction") public class CamelPropertyPlaceholderFunctionDefinition extends IdentifiedType { - @XmlAttribute(required = true) private String ref; http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderLocationDefinition.java ---------------------------------------------------------------------- diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderLocationDefinition.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderLocationDefinition.java new file mode 100644 index 0000000..4923684 --- /dev/null +++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderLocationDefinition.java @@ -0,0 +1,62 @@ +/** + * 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.core.xml; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlRootElement; + +import org.apache.camel.model.IdentifiedType; +import org.apache.camel.spi.Metadata; +import org.apache.camel.util.ObjectHelper; + +/** + * Properties to use with properties placeholder + */ +@Metadata(label = "spring,configuration") +@XmlRootElement(name = "propertiesLocation") +public class CamelPropertyPlaceholderLocationDefinition extends IdentifiedType { + @XmlAttribute(required = true) + public String path; + @XmlAttribute + public String resolver; + + public String getPath() { + return path; + } + + /** + * Property locations to use. + */ + public void setPath(String path) { + this.path = path; + } + + public String getResolver() { + return resolver; + } + + /** + * The resolver to use to locate the location + */ + public void setResolver(String resolver) { + this.resolver = resolver; + } + + public String getLocation() { + return ObjectHelper.isEmpty(resolver) ? path : resolver + path; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementImplicitTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementImplicitTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementImplicitTest.java new file mode 100644 index 0000000..89a7451 --- /dev/null +++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementImplicitTest.java @@ -0,0 +1,49 @@ +/** + * 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.test.blueprint; + +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.component.properties.PropertiesComponent; +import org.junit.Test; + +public class BlueprintPropertiesLocationElementImplicitTest extends CamelBlueprintTestSupport { + @Override + protected String getBlueprintDescriptor() { + return "org/apache/camel/test/blueprint/properties-location-element-implicit-test.xml"; + } + + @Test + public void testPropertiesLocationElement() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedHeaderReceived("property-1", "property-value-1"); + mock.expectedHeaderReceived("property-2", "property-value-2"); + mock.expectedHeaderReceived("cm", "cm-value"); + + PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class); + assertNotNull("Properties component not defined", pc); + + String[] locations = pc.getLocations(); + + assertNotNull(locations); + assertEquals("Properties locations", 2, locations.length); + + template.sendBody("direct:start", null); + + mock.assertIsSatisfied(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementTest.java b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementTest.java new file mode 100644 index 0000000..d05ce78 --- /dev/null +++ b/components/camel-test-blueprint/src/test/java/org/apache/camel/test/blueprint/BlueprintPropertiesLocationElementTest.java @@ -0,0 +1,48 @@ +/** + * 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.test.blueprint; + +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.component.properties.PropertiesComponent; +import org.junit.Test; + +public class BlueprintPropertiesLocationElementTest extends CamelBlueprintTestSupport { + @Override + protected String getBlueprintDescriptor() { + return "org/apache/camel/test/blueprint/properties-location-element-test.xml"; + } + + @Test + public void testPropertiesLocationElement() throws Exception { + MockEndpoint mock = getMockEndpoint("mock:result"); + mock.expectedHeaderReceived("property-1", "property-value-1"); + mock.expectedHeaderReceived("property-2", "property-value-2"); + mock.expectedHeaderReceived("cm", "cm-value"); + + PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class); + assertNotNull("Properties component not defined", pc); + + String[] locations = pc.getLocations(); + + assertNotNull(locations); + assertEquals("Properties locations", 3, locations.length); + + template.sendBody("direct:start", null); + + mock.assertIsSatisfied(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-1.properties ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-1.properties b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-1.properties new file mode 100644 index 0000000..23b2f2f --- /dev/null +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-1.properties @@ -0,0 +1,17 @@ +# +# 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. +# +property-key-1 = property-value-1 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-2.properties ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-2.properties b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-2.properties new file mode 100644 index 0000000..0732a17 --- /dev/null +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-2.properties @@ -0,0 +1,17 @@ +# +# 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. +# +property-key-2 = property-value-2 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-implicit-test.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-implicit-test.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-implicit-test.xml new file mode 100644 index 0000000..ffe6986 --- /dev/null +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-implicit-test.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> +<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0" + xsi:schemaLocation=" + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 + http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd + http://www.osgi.org/xmlns/blueprint/v1.0.0 + http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> + + <cm:property-placeholder id="properties-element" persistent-id="properties.element"> + <cm:default-properties> + <cm:property name="cm-key" value="cm-value" /> + </cm:default-properties> + </cm:property-placeholder> + + <camelContext xmlns="http://camel.apache.org/schema/blueprint"> + <propertyPlaceholder id="property-placeholder-camel"> + <propertiesLocation path="classpath:org/apache/camel/test/blueprint/properties-location-element-1.properties"/> + <propertiesLocation resolver="classpath" path="org/apache/camel/test/blueprint/properties-location-element-2.properties"/> + </propertyPlaceholder> + + <route> + <from uri="direct:start"/> + <setHeader headerName="property-1"> + <constant>{{property-key-1}}</constant> + </setHeader> + <setHeader headerName="property-2"> + <constant>{{property-key-2}}</constant> + </setHeader> + <setHeader headerName="cm"> + <constant>{{cm-key}}</constant> + </setHeader> + <to uri="mock:result"/> + </route> + + </camelContext> + +</blueprint> http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-test.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-test.xml b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-test.xml new file mode 100644 index 0000000..9c81873 --- /dev/null +++ b/components/camel-test-blueprint/src/test/resources/org/apache/camel/test/blueprint/properties-location-element-test.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> +<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0" + xsi:schemaLocation=" + http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0 + http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd + http://www.osgi.org/xmlns/blueprint/v1.0.0 + http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> + + <cm:property-placeholder id="properties-element" persistent-id="properties.element"> + <cm:default-properties> + <cm:property name="cm-key" value="cm-value" /> + </cm:default-properties> + </cm:property-placeholder> + + <camelContext xmlns="http://camel.apache.org/schema/blueprint"> + <propertyPlaceholder id="property-placeholder-camel" location="blueprint:properties-element"> + <propertiesLocation path="classpath:org/apache/camel/test/blueprint/properties-location-element-1.properties"/> + <propertiesLocation resolver="classpath" path="org/apache/camel/test/blueprint/properties-location-element-2.properties"/> + </propertyPlaceholder> + + <route> + <from uri="direct:start"/> + <setHeader headerName="property-1"> + <constant>{{property-key-1}}</constant> + </setHeader> + <setHeader headerName="property-2"> + <constant>{{property-key-2}}</constant> + </setHeader> + <setHeader headerName="cm"> + <constant>{{cm-key}}</constant> + </setHeader> + <to uri="mock:result"/> + </route> + + </camelContext> + +</blueprint> http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest.java ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest.java new file mode 100644 index 0000000..89a5186 --- /dev/null +++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest.java @@ -0,0 +1,65 @@ +/** + * 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.test.spring; + +import org.apache.camel.CamelContext; +import org.apache.camel.EndpointInject; +import org.apache.camel.Produce; +import org.apache.camel.ProducerTemplate; +import org.apache.camel.component.mock.MockEndpoint; +import org.apache.camel.component.properties.PropertiesComponent; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.BootstrapWith; +import org.springframework.test.context.ContextConfiguration; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(CamelSpringRunner.class) +@BootstrapWith(CamelTestContextBootstrapper.class) +@ContextConfiguration() +@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD) +public class CamelSpringPropertiesLocationElementTest { + @Autowired + protected CamelContext context; + @Produce + private ProducerTemplate producer; + @EndpointInject(uri = "mock:result") + private MockEndpoint mock; + + @Test + public void testPropertiesLocationElement() throws Exception { + mock.expectedHeaderReceived("property-1", "property-value-1"); + mock.expectedHeaderReceived("property-2", "property-value-2"); + mock.expectedHeaderReceived("property-3", "property-value-3"); + + PropertiesComponent pc = context.getComponent("properties", PropertiesComponent.class); + assertNotNull("Properties component not defined", pc); + + String[] locations = pc.getLocations(); + + assertNotNull(locations); + assertEquals("Properties locations", 3, locations.length); + + producer.sendBody("direct:start", null); + + mock.assertIsSatisfied(); + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest-context.xml ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest-context.xml b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest-context.xml new file mode 100644 index 0000000..247b551 --- /dev/null +++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/CamelSpringPropertiesLocationElementTest-context.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + ~ 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. + --> +<beans xmlns="http://www.springframework.org/schema/beans" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation=" + http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd + http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> + + <camelContext xmlns="http://camel.apache.org/schema/spring"> + <propertyPlaceholder id="property-placeholder-camel" location="classpath:org/apache/camel/test/spring/properties-location-element-3.properties"> + <propertiesLocation path="classpath:org/apache/camel/test/spring/properties-location-element-1.properties"/> + <propertiesLocation resolver="classpath" path="org/apache/camel/test/spring/properties-location-element-2.properties"/> + </propertyPlaceholder> + + <route> + <from uri="direct:start"/> + <setHeader headerName="property-1"> + <constant>{{property-key-1}}</constant> + </setHeader> + <setHeader headerName="property-2"> + <constant>{{property-key-2}}</constant> + </setHeader> + <setHeader headerName="property-3"> + <constant>{{property-key-3}}</constant> + </setHeader> + <to uri="mock:result"/> + </route> + + </camelContext> + +</beans> http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-1.properties ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-1.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-1.properties new file mode 100644 index 0000000..23b2f2f --- /dev/null +++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-1.properties @@ -0,0 +1,17 @@ +# +# 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. +# +property-key-1 = property-value-1 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-2.properties ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-2.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-2.properties new file mode 100644 index 0000000..0732a17 --- /dev/null +++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-2.properties @@ -0,0 +1,17 @@ +# +# 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. +# +property-key-2 = property-value-2 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/camel/blob/610c5db0/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-3.properties ---------------------------------------------------------------------- diff --git a/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-3.properties b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-3.properties new file mode 100644 index 0000000..aac5c21 --- /dev/null +++ b/components/camel-test-spring/src/test/resources/org/apache/camel/test/spring/properties-location-element-3.properties @@ -0,0 +1,17 @@ +# +# 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. +# +property-key-3 = property-value-3 \ No newline at end of file