You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2018/01/16 12:52:18 UTC
[camel] branch master updated: CAMEL-12147 - Camel-AWS MQ: Add the
ability to specify credentials and region at component level
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new d05ee46 CAMEL-12147 - Camel-AWS MQ: Add the ability to specify credentials and region at component level
d05ee46 is described below
commit d05ee46910859037bc9c1c6aa3935a997909d9f9
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jan 16 13:50:52 2018 +0100
CAMEL-12147 - Camel-AWS MQ: Add the ability to specify credentials and region at component level
---
.../camel-aws/src/main/docs/aws-mq-component.adoc | 14 ++-
.../apache/camel/component/aws/mq/MQComponent.java | 67 ++++++++++-
.../camel/component/aws/mq/MQConfiguration.java | 15 ++-
.../aws/mq/MQComponentConfigurationTest.java | 51 ++++++++
.../mq/springboot/MQComponentConfiguration.java | 131 +++++++++++++++++++++
5 files changed, 275 insertions(+), 3 deletions(-)
diff --git a/components/camel-aws/src/main/docs/aws-mq-component.adoc b/components/camel-aws/src/main/docs/aws-mq-component.adoc
index 5dd5160..2333a5b 100644
--- a/components/camel-aws/src/main/docs/aws-mq-component.adoc
+++ b/components/camel-aws/src/main/docs/aws-mq-component.adoc
@@ -25,7 +25,19 @@ You can append query options to the URI in the following format,
// component options: START
-The AWS MQ component has no options.
+The AWS MQ component supports 5 options which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *configuration* (advanced) | The AWS MQ default configuration | | MQConfiguration
+| *accessKey* (producer) | Amazon AWS Access Key | | String
+| *secretKey* (producer) | Amazon AWS Secret Key | | String
+| *region* (producer) | The region in which MQ client needs to work | | String
+| *resolveProperty Placeholders* (advanced) | Whether the component should resolve property placeholders on itself when starting. Only properties which are of String type can use property placeholders. | true | boolean
+|===
// component options: END
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java
index 1ababf1..aefe870 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQComponent.java
@@ -21,12 +21,23 @@ import java.util.Map;
import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.impl.DefaultComponent;
+import org.apache.camel.spi.Metadata;
+import org.apache.camel.util.ObjectHelper;
/**
* For working with Amazon MQ.
*/
public class MQComponent extends DefaultComponent {
+ @Metadata
+ private String accessKey;
+ @Metadata
+ private String secretKey;
+ @Metadata
+ private String region;
+ @Metadata(label = "advanced")
+ private MQConfiguration configuration;
+
public MQComponent() {
this(null);
}
@@ -34,14 +45,24 @@ public class MQComponent extends DefaultComponent {
public MQComponent(CamelContext context) {
super(context);
+ this.configuration = new MQConfiguration();
registerExtension(new MQComponentVerifierExtension());
}
@Override
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
- MQConfiguration configuration = new MQConfiguration();
+ MQConfiguration configuration = this.configuration.copy();
setProperties(configuration, parameters);
+ if (ObjectHelper.isEmpty(configuration.getAccessKey())) {
+ setAccessKey(accessKey);
+ }
+ if (ObjectHelper.isEmpty(configuration.getSecretKey())) {
+ setSecretKey(secretKey);
+ }
+ if (ObjectHelper.isEmpty(configuration.getRegion())) {
+ setRegion(region);
+ }
if (configuration.getAmazonMqClient() == null && (configuration.getAccessKey() == null || configuration.getSecretKey() == null)) {
throw new IllegalArgumentException("amazonMQClient or accessKey and secretKey must be specified");
}
@@ -49,5 +70,49 @@ public class MQComponent extends DefaultComponent {
MQEndpoint endpoint = new MQEndpoint(uri, this, configuration);
return endpoint;
}
+
+ public MQConfiguration getConfiguration() {
+ return configuration;
+ }
+
+ /**
+ * The AWS MQ default configuration
+ */
+ public void setConfiguration(MQConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ public String getAccessKey() {
+ return configuration.getAccessKey();
+ }
+
+ /**
+ * Amazon AWS Access Key
+ */
+ public void setAccessKey(String accessKey) {
+ configuration.setAccessKey(accessKey);
+ }
+
+ public String getSecretKey() {
+ return configuration.getSecretKey();
+ }
+
+ /**
+ * Amazon AWS Secret Key
+ */
+ public void setSecretKey(String secretKey) {
+ configuration.setSecretKey(secretKey);
+ }
+
+ public String getRegion() {
+ return configuration.getRegion();
+ }
+
+ /**
+ * The region in which MQ client needs to work
+ */
+ public void setRegion(String region) {
+ configuration.setRegion(region);
+ }
}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java
index 93b9168..2fabf9c 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/mq/MQConfiguration.java
@@ -18,13 +18,14 @@ package org.apache.camel.component.aws.mq;
import com.amazonaws.services.mq.AmazonMQ;
+import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.Metadata;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.spi.UriPath;
@UriParams
-public class MQConfiguration {
+public class MQConfiguration implements Cloneable {
@UriPath(description = "Logical name")
@Metadata(required = "true")
@@ -121,4 +122,16 @@ public class MQConfiguration {
public void setRegion(String region) {
this.region = region;
}
+
+ // *************************************************
+ //
+ // *************************************************
+
+ public MQConfiguration copy() {
+ try {
+ return (MQConfiguration)super.clone();
+ } catch (CloneNotSupportedException e) {
+ throw new RuntimeCamelException(e);
+ }
+ }
}
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java
new file mode 100644
index 0000000..f3198ab
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/mq/MQComponentConfigurationTest.java
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.aws.mq;
+
+import com.amazonaws.regions.Regions;
+
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class MQComponentConfigurationTest extends CamelTestSupport {
+
+
+ @Test
+ public void createEndpointWithComponentElements() throws Exception {
+ MQComponent component = new MQComponent(context);
+ component.setAccessKey("XXX");
+ component.setSecretKey("YYY");
+ MQEndpoint endpoint = (MQEndpoint)component.createEndpoint("aws-mq://MyQueue");
+
+ assertEquals("XXX", endpoint.getConfiguration().getAccessKey());
+ assertEquals("YYY", endpoint.getConfiguration().getSecretKey());
+ }
+
+ @Test
+ public void createEndpointWithComponentAndEndpointElements() throws Exception {
+ MQComponent component = new MQComponent(context);
+ component.setAccessKey("XXX");
+ component.setSecretKey("YYY");
+ component.setRegion(Regions.US_WEST_1.toString());
+ MQEndpoint endpoint = (MQEndpoint)component.createEndpoint("aws-mq://MyQueue?accessKey=xxxxxx&secretKey=yyyyy®ion=US_EAST_1");
+
+ assertEquals("xxxxxx", endpoint.getConfiguration().getAccessKey());
+ assertEquals("yyyyy", endpoint.getConfiguration().getSecretKey());
+ assertEquals("US_EAST_1", endpoint.getConfiguration().getRegion());
+ }
+
+}
diff --git a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/mq/springboot/MQComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/mq/springboot/MQComponentConfiguration.java
index 1bc7d42..6df874f 100644
--- a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/mq/springboot/MQComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/mq/springboot/MQComponentConfiguration.java
@@ -17,6 +17,8 @@
package org.apache.camel.component.aws.mq.springboot;
import javax.annotation.Generated;
+import com.amazonaws.services.mq.AmazonMQ;
+import org.apache.camel.component.aws.mq.MQOperations;
import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -32,12 +34,61 @@ public class MQComponentConfiguration
ComponentConfigurationPropertiesCommon {
/**
+ * The AWS MQ default configuration
+ */
+ private MQConfigurationNestedConfiguration configuration;
+ /**
+ * Amazon AWS Access Key
+ */
+ private String accessKey;
+ /**
+ * Amazon AWS Secret Key
+ */
+ private String secretKey;
+ /**
+ * The region in which MQ client needs to work
+ */
+ private String region;
+ /**
* Whether the component should resolve property placeholders on itself when
* starting. Only properties which are of String type can use property
* placeholders.
*/
private Boolean resolvePropertyPlaceholders = true;
+ public MQConfigurationNestedConfiguration getConfiguration() {
+ return configuration;
+ }
+
+ public void setConfiguration(
+ MQConfigurationNestedConfiguration configuration) {
+ this.configuration = configuration;
+ }
+
+ public String getAccessKey() {
+ return accessKey;
+ }
+
+ public void setAccessKey(String accessKey) {
+ this.accessKey = accessKey;
+ }
+
+ public String getSecretKey() {
+ return secretKey;
+ }
+
+ public void setSecretKey(String secretKey) {
+ this.secretKey = secretKey;
+ }
+
+ public String getRegion() {
+ return region;
+ }
+
+ public void setRegion(String region) {
+ this.region = region;
+ }
+
public Boolean getResolvePropertyPlaceholders() {
return resolvePropertyPlaceholders;
}
@@ -46,4 +97,84 @@ public class MQComponentConfiguration
Boolean resolvePropertyPlaceholders) {
this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
}
+
+ public static class MQConfigurationNestedConfiguration {
+ public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.aws.mq.MQConfiguration.class;
+ /**
+ * To use a existing configured AmazonMQClient as client
+ */
+ private AmazonMQ amazonMqClient;
+ /**
+ * Amazon AWS Access Key
+ */
+ private String accessKey;
+ /**
+ * Amazon AWS Secret Key
+ */
+ private String secretKey;
+ /**
+ * The operation to perform. It can be
+ * listBrokers,createBroker,deleteBroker
+ */
+ private MQOperations operation;
+ private String proxyHost;
+ private Integer proxyPort;
+ private String region;
+
+ public AmazonMQ getAmazonMqClient() {
+ return amazonMqClient;
+ }
+
+ public void setAmazonMqClient(AmazonMQ amazonMqClient) {
+ this.amazonMqClient = amazonMqClient;
+ }
+
+ public String getAccessKey() {
+ return accessKey;
+ }
+
+ public void setAccessKey(String accessKey) {
+ this.accessKey = accessKey;
+ }
+
+ public String getSecretKey() {
+ return secretKey;
+ }
+
+ public void setSecretKey(String secretKey) {
+ this.secretKey = secretKey;
+ }
+
+ public MQOperations getOperation() {
+ return operation;
+ }
+
+ public void setOperation(MQOperations operation) {
+ this.operation = operation;
+ }
+
+ public String getProxyHost() {
+ return proxyHost;
+ }
+
+ public void setProxyHost(String proxyHost) {
+ this.proxyHost = proxyHost;
+ }
+
+ public Integer getProxyPort() {
+ return proxyPort;
+ }
+
+ public void setProxyPort(Integer proxyPort) {
+ this.proxyPort = proxyPort;
+ }
+
+ public String getRegion() {
+ return region;
+ }
+
+ public void setRegion(String region) {
+ this.region = region;
+ }
+ }
}
\ No newline at end of file
--
To stop receiving notification emails like this one, please contact
['"commits@camel.apache.org" <co...@camel.apache.org>'].