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/07/24 10:14:26 UTC

[camel] branch master updated (fddedbc -> 0529681)

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git.


    from fddedbc  CAMEL-12654: RabbitMQ Headers - Headers with null value are skipped
     new 38a00fd  CAMEL-12238 - Camel-AWS: Create an IAM component, first commit
     new 2d57a7e  CAMEL-12238 - Camel-AWS: Create an IAM component, createUser operation
     new c5e311f  CAMEL-12238 - Added IAM component docs
     new ab3ea07  CAMEL-12238 - Added Karaf test
     new 743588c  CAMEL-12238 - Added Spring-boot test
     new 923fdc0  Add camel-ehcache blueprint example
     new 0529681  CAMEL-12677 Added missing sample output

The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../camel-aws/src/main/docs/aws-iam-component.adoc | 165 ++++
 .../camel/component/aws/iam/IAMComponent.java      | 118 +++
 .../aws/iam/IAMComponentVerifierExtension.java     |  87 +++
 .../camel/component/aws/iam/IAMConfiguration.java  | 139 ++++
 .../camel/component/aws/iam/IAMConstants.java      |  26 +
 .../camel/component/aws/iam/IAMEndpoint.java       | 122 +++
 .../camel/component/aws/iam/IAMOperations.java     |  23 +
 .../camel/component/aws/iam/IAMProducer.java       | 116 +++
 .../services/org/apache/camel/component/aws-iam    |  18 +
 .../component/aws/iam/AmazonIAMClientMock.java     | 837 +++++++++++++++++++++
 .../aws/iam/IAMComponentConfigurationTest.java     |  51 ++
 .../aws/iam/IAMComponentVerifierExtensionTest.java |  73 ++
 .../component/aws/iam/IAMProducerSpringTest.java   |  77 ++
 .../camel/component/aws/iam/IAMProducerTest.java   |  95 +++
 .../aws/iam/IAMComponentSpringTest-context.xml     |  40 +
 examples/camel-example-ehcache-blueprint/README.md |  61 ++
 examples/camel-example-ehcache-blueprint/pom.xml   |  86 +++
 .../apache/camel/example/ehcache/CacheData.java    |  58 ++
 .../apache/camel/example/ehcache/CachingRoute.java |  60 ++
 .../apache/camel/example/ehcache/DataService.java  |  44 ++
 .../src/main/resources/META-INF/LICENSE.txt        |   0
 .../src/main/resources/META-INF/NOTICE.txt         |   0
 .../resources/OSGI-INF/blueprint/camel-context.xml |  46 ++
 .../src/main/resources/ehcache.xml                 |  36 +
 .../src/main/resources/log4j2.properties           |   0
 .../camel-example-fhir-spring-boot/readme.adoc     |   4 +-
 examples/pom.xml                                   |   1 +
 .../springboot/IAMComponentAutoConfiguration.java  | 128 ++++
 .../iam/springboot/IAMComponentConfiguration.java  | 193 +++++
 .../src/main/resources/META-INF/spring.factories   |   4 +-
 .../org/apache/camel/itest/karaf/CamelAwsTest.java |   1 +
 .../camel/itest/springboot/CamelAwsTest.java       |   1 +
 32 files changed, 2708 insertions(+), 2 deletions(-)
 create mode 100644 components/camel-aws/src/main/docs/aws-iam-component.adoc
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java
 create mode 100644 components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
 create mode 100644 components/camel-aws/src/main/resources/META-INF/services/org/apache/camel/component/aws-iam
 create mode 100644 components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java
 create mode 100644 components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java
 create mode 100644 components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtensionTest.java
 create mode 100644 components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
 create mode 100644 components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
 create mode 100644 components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml
 create mode 100644 examples/camel-example-ehcache-blueprint/README.md
 create mode 100644 examples/camel-example-ehcache-blueprint/pom.xml
 create mode 100644 examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CacheData.java
 create mode 100644 examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CachingRoute.java
 create mode 100644 examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/DataService.java
 copy {tooling/maven/guice-maven-plugin => examples/camel-example-ehcache-blueprint}/src/main/resources/META-INF/LICENSE.txt (100%)
 copy {tooling/maven/guice-maven-plugin => examples/camel-example-ehcache-blueprint}/src/main/resources/META-INF/NOTICE.txt (100%)
 create mode 100644 examples/camel-example-ehcache-blueprint/src/main/resources/OSGI-INF/blueprint/camel-context.xml
 create mode 100644 examples/camel-example-ehcache-blueprint/src/main/resources/ehcache.xml
 copy examples/{camel-example-widget-gadget-xml => camel-example-ehcache-blueprint}/src/main/resources/log4j2.properties (100%)
 create mode 100644 platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentAutoConfiguration.java
 create mode 100644 platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentConfiguration.java


[camel] 07/07: CAMEL-12677 Added missing sample output

Posted by ac...@apache.org.
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

commit 05296812af404a064c8bcb08fe3939e4774a0e75
Author: Rafal Korytkowski <ra...@gmail.com>
AuthorDate: Tue Jul 24 11:54:38 2018 +0200

    CAMEL-12677 Added missing sample output
---
 examples/camel-example-fhir-spring-boot/readme.adoc | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/examples/camel-example-fhir-spring-boot/readme.adoc b/examples/camel-example-fhir-spring-boot/readme.adoc
index d682d9b..a1b33be 100644
--- a/examples/camel-example-fhir-spring-boot/readme.adoc
+++ b/examples/camel-example-fhir-spring-boot/readme.adoc
@@ -36,7 +36,9 @@ $ mvn spring-boot:run
 When the Camel application runs, you should see a folder created under `target/work/fhir/input`. Copy the file `hl7v2.patient`
 located in the `src/main/data` folder into it. You should see the following output:
 ```
-
+2018-07-24 11:52:51.615  INFO 30666 --- [work/fhir/input] fhir-example: Converting hl7v2.patient
+2018-07-24 11:52:52.700  INFO 30666 --- [work/fhir/input] fhir-example: Inserting Patient: {"resourceType":"Patient","id":"100005056","name":[{"family":"Freeman","given":["Vincent"]}]}
+2018-07-24 11:52:56.995  INFO 30666 --- [ #2 - CamelFhir] fhir-example: Patient created successfully: ca.uhn.fhir.rest.api.MethodOutcome@270f03f1
 ```
 
 The Camel application can be stopped pressing <kbd>ctrl</kbd>+<kbd>c</kbd> in the shell.


[camel] 02/07: CAMEL-12238 - Camel-AWS: Create an IAM component, createUser operation

Posted by ac...@apache.org.
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

commit 2d57a7e04f94ac3c4c37c424cb951db02c1336d1
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jul 24 12:01:17 2018 +0200

    CAMEL-12238 - Camel-AWS: Create an IAM component, createUser operation
---
 .../camel/component/aws/iam/IAMConstants.java      |  7 ++-----
 .../camel/component/aws/iam/IAMOperations.java     |  3 ++-
 .../camel/component/aws/iam/IAMProducer.java       | 23 ++++++++++++++++++++++
 .../component/aws/iam/AmazonIAMClientMock.java     |  6 +++++-
 .../component/aws/iam/IAMProducerSpringTest.java   | 20 +++++++++++++++++++
 .../camel/component/aws/iam/IAMProducerTest.java   | 21 ++++++++++++++++++++
 .../aws/iam/IAMComponentSpringTest-context.xml     |  5 +++++
 7 files changed, 78 insertions(+), 7 deletions(-)

diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java
index b8d9f5f..ba0db9a 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java
@@ -21,9 +21,6 @@ package org.apache.camel.component.aws.iam;
  * 
  */
 public interface IAMConstants {
-    String OPERATION                = "CamelAwsKMSOperation";
-    String LIMIT                    = "CamelAwsKMSLimit";
-    String DESCRIPTION              = "CamelAwsKMSDescription";
-    String KEY_ID                   = "CamelAwsKMSKeyId";
-    String PENDING_WINDOW_IN_DAYS   = "CamelAwsKMSPendingWindowInDays";
+    String OPERATION                = "CamelAwsIAMOperation";
+    String USERNAME                 = "CamelAwsIAMUsername";
 }
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java
index 5327d5b..031abdd 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java
@@ -18,5 +18,6 @@ package org.apache.camel.component.aws.iam;
 
 public enum IAMOperations {
 
-    listAccessKeys
+    listAccessKeys,
+    createUser
 }
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
index 04df46a..b4fabff 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
@@ -18,12 +18,15 @@ package org.apache.camel.component.aws.iam;
 
 import com.amazonaws.AmazonServiceException;
 import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
+import com.amazonaws.services.identitymanagement.model.CreateUserRequest;
+import com.amazonaws.services.identitymanagement.model.CreateUserResult;
 import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,6 +52,9 @@ public class IAMProducer extends DefaultProducer {
         case listAccessKeys:
             listAccessKeys(getEndpoint().getIamClient(), exchange);
             break;
+        case createUser:
+            createUser(getEndpoint().getIamClient(), exchange);
+            break;
         default:
             throw new IllegalArgumentException("Unsupported operation");
         }
@@ -90,4 +96,21 @@ public class IAMProducer extends DefaultProducer {
         Message message = getMessageForResponse(exchange);
         message.setBody(result);
     }
+    
+    private void createUser(AmazonIdentityManagement iamClient, Exchange exchange) {
+        CreateUserRequest request = new CreateUserRequest();
+        if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(IAMConstants.USERNAME))) {
+            String userName = exchange.getIn().getHeader(IAMConstants.USERNAME, String.class);
+            request.withUserName(userName);
+        }
+        CreateUserResult result;
+        try {
+            result = iamClient.createUser(request);
+        } catch (AmazonServiceException ase) {
+            LOG.trace("Create user command returned the error code {}", ase.getErrorCode());
+            throw ase;
+        }
+        Message message = getMessageForResponse(exchange);
+        message.setBody(result);
+    }
 }
\ No newline at end of file
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java
index 4354d5c..2916623 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java
@@ -146,7 +146,11 @@ public class AmazonIAMClientMock extends AmazonIdentityManagementClient {
 
 	@Override
 	public CreateUserResult createUser(CreateUserRequest createUserRequest) {
-        throw new UnsupportedOperationException();
+        CreateUserResult result = new CreateUserResult();
+        User user = new User();
+        user.setUserName("test");
+        result.setUser(user);
+        return result;
 	}
 
 	@Override
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
index f44dd88..5d66c321 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
@@ -24,6 +24,7 @@ import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
 
+import com.amazonaws.services.identitymanagement.model.CreateUserResult;
 import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
 
 public class IAMProducerSpringTest extends CamelSpringTestSupport {
@@ -48,6 +49,25 @@ public class IAMProducerSpringTest extends CamelSpringTestSupport {
 		assertEquals(1, resultGet.getAccessKeyMetadata().size());
 		assertEquals("1", resultGet.getAccessKeyMetadata().get(0).getAccessKeyId());
 	}
+	
+    @Test
+    public void iamCreateUserTest() throws Exception {
+
+        mock.expectedMessageCount(1);
+        Exchange exchange = template.request("direct:createUser", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(IAMConstants.OPERATION, IAMOperations.createUser);
+                exchange.getIn().setHeader(IAMConstants.USERNAME, "test");
+            }
+        });
+
+        assertMockEndpointsSatisfied();
+        
+        CreateUserResult resultGet = (CreateUserResult) exchange.getIn().getBody();
+        assertEquals("test", resultGet.getUser().getUserName());
+    }
+
 
 	@Override
 	protected ClassPathXmlApplicationContext createApplicationContext() {
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
index 63089a2..a0175cf 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
@@ -25,6 +25,7 @@ import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.junit.Test;
 
+import com.amazonaws.services.identitymanagement.model.CreateUserResult;
 import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
 
 public class IAMProducerTest extends CamelTestSupport {
@@ -49,6 +50,24 @@ public class IAMProducerTest extends CamelTestSupport {
 		assertEquals(1, resultGet.getAccessKeyMetadata().size());
 		assertEquals("1", resultGet.getAccessKeyMetadata().get(0).getAccessKeyId());
 	}
+	
+    @Test
+    public void iamCreateUserTest() throws Exception {
+
+        mock.expectedMessageCount(1);
+        Exchange exchange = template.request("direct:createUser", new Processor() {
+            @Override
+            public void process(Exchange exchange) throws Exception {
+                exchange.getIn().setHeader(IAMConstants.OPERATION, IAMOperations.createUser);
+                exchange.getIn().setHeader(IAMConstants.USERNAME, "test");
+            }
+        });
+
+        assertMockEndpointsSatisfied();
+        
+        CreateUserResult resultGet = (CreateUserResult) exchange.getIn().getBody();
+        assertEquals("test", resultGet.getUser().getUserName());
+    }
 
 	@Override
 	protected JndiRegistry createRegistry() throws Exception {
@@ -68,6 +87,8 @@ public class IAMProducerTest extends CamelTestSupport {
 			public void configure() throws Exception {
 				from("direct:listKeys").to("aws-iam://test?iamClient=#amazonIAMClient&operation=listAccessKeys")
 						.to("mock:result");
+				from("direct:createUser").to("aws-iam://test?iamClient=#amazonIAMClient&operation=createUser")
+				        .to("mock:result");
 			}
 		};
 	}
diff --git a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml
index 4c81bf9..39a2a8c 100644
--- a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml
+++ b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml
@@ -29,6 +29,11 @@
             <to uri="aws-iam://Test?iamClient=#amazonIAMClient&amp;operation=listAccessKeys"/>
             <to uri="mock:result"/>
         </route>
+        <route>
+            <from uri="direct:createUser"/>
+            <to uri="aws-iam://Test?iamClient=#amazonIAMClient&amp;operation=createUser"/>
+            <to uri="mock:result"/>
+        </route>
     </camelContext>
     
     <bean id="amazonIAMClient" class="org.apache.camel.component.aws.iam.AmazonIAMClientMock"/>


[camel] 01/07: CAMEL-12238 - Camel-AWS: Create an IAM component, first commit

Posted by ac...@apache.org.
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

commit 38a00fdfbf13b85a78318e52e8f910861fbd90db
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jul 24 11:22:45 2018 +0200

    CAMEL-12238 - Camel-AWS: Create an IAM component, first commit
---
 .../camel/component/aws/iam/IAMComponent.java      | 118 +++
 .../aws/iam/IAMComponentVerifierExtension.java     |  87 +++
 .../camel/component/aws/iam/IAMConfiguration.java  | 139 ++++
 .../camel/component/aws/iam/IAMConstants.java      |  29 +
 .../camel/component/aws/iam/IAMEndpoint.java       | 122 +++
 .../camel/component/aws/iam/IAMOperations.java     |  22 +
 .../camel/component/aws/iam/IAMProducer.java       |  93 +++
 .../services/org/apache/camel/component/aws-iam    |  18 +
 .../component/aws/iam/AmazonIAMClientMock.java     | 833 +++++++++++++++++++++
 .../aws/iam/IAMComponentConfigurationTest.java     |  51 ++
 .../aws/iam/IAMComponentVerifierExtensionTest.java |  73 ++
 .../component/aws/iam/IAMProducerSpringTest.java   |  57 ++
 .../camel/component/aws/iam/IAMProducerTest.java   |  74 ++
 .../aws/iam/IAMComponentSpringTest-context.xml     |  35 +
 .../springboot/IAMComponentAutoConfiguration.java  | 128 ++++
 .../iam/springboot/IAMComponentConfiguration.java  | 193 +++++
 .../src/main/resources/META-INF/spring.factories   |   4 +-
 17 files changed, 2075 insertions(+), 1 deletion(-)

diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java
new file mode 100644
index 0000000..85cb8f9
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponent.java
@@ -0,0 +1,118 @@
+/**
+ * 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.iam;
+
+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 KMS.
+ */
+public class IAMComponent extends DefaultComponent {
+
+    @Metadata
+    private String accessKey;
+    @Metadata
+    private String secretKey;
+    @Metadata
+    private String region;
+    @Metadata(label = "advanced")    
+    private IAMConfiguration configuration;
+    
+    public IAMComponent() {
+        this(null);
+    }
+    
+    public IAMComponent(CamelContext context) {
+        super(context);
+        
+        this.configuration = new IAMConfiguration();
+        registerExtension(new IAMComponentVerifierExtension());
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+        IAMConfiguration 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.getIamClient() == null && (configuration.getAccessKey() == null || configuration.getSecretKey() == null)) {
+            throw new IllegalArgumentException("Amazon IAM client or accessKey and secretKey must be specified");
+        }
+        
+        IAMEndpoint endpoint = new IAMEndpoint(uri, this, configuration);
+        return endpoint;
+    }
+    
+    public IAMConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    /**
+     * The AWS MQ default configuration
+     */
+    public void setConfiguration(IAMConfiguration 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/iam/IAMComponentVerifierExtension.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java
new file mode 100644
index 0000000..048217f
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtension.java
@@ -0,0 +1,87 @@
+/**
+ * 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.iam;
+
+import java.util.Map;
+
+import com.amazonaws.SdkClientException;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
+
+import org.apache.camel.component.extension.verifier.DefaultComponentVerifierExtension;
+import org.apache.camel.component.extension.verifier.ResultBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorBuilder;
+import org.apache.camel.component.extension.verifier.ResultErrorHelper;
+
+public class IAMComponentVerifierExtension extends DefaultComponentVerifierExtension {
+
+    public IAMComponentVerifierExtension() {
+        this("aws-iam");
+    }
+
+    public IAMComponentVerifierExtension(String scheme) {
+        super(scheme);
+    }
+
+    // *********************************
+    // Parameters validation
+    // *********************************
+
+    @Override
+    protected Result verifyParameters(Map<String, Object> parameters) {
+
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.PARAMETERS).error(ResultErrorHelper.requiresOption("accessKey", parameters))
+            .error(ResultErrorHelper.requiresOption("secretKey", parameters)).error(ResultErrorHelper.requiresOption("region", parameters));
+
+        // Validate using the catalog
+
+        super.verifyParametersAgainstCatalog(builder, parameters);
+
+        return builder.build();
+    }
+
+    // *********************************
+    // Connectivity validation
+    // *********************************
+
+    @Override
+    protected Result verifyConnectivity(Map<String, Object> parameters) {
+        ResultBuilder builder = ResultBuilder.withStatusAndScope(Result.Status.OK, Scope.CONNECTIVITY);
+
+        try {
+            IAMConfiguration configuration = setProperties(new IAMConfiguration(), parameters);
+            AWSCredentials credentials = new BasicAWSCredentials(configuration.getAccessKey(), configuration.getSecretKey());
+            AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
+            AmazonIdentityManagement client = AmazonIdentityManagementClientBuilder.standard().withCredentials(credentialsProvider).withRegion(Regions.valueOf(configuration.getRegion())).build();
+            client.listAccessKeys();
+        } catch (SdkClientException e) {
+            ResultErrorBuilder errorBuilder = ResultErrorBuilder.withCodeAndDescription(VerificationError.StandardCode.AUTHENTICATION, e.getMessage())
+                .detail("aws_iam_exception_message", e.getMessage()).detail(VerificationError.ExceptionAttribute.EXCEPTION_CLASS, e.getClass().getName())
+                .detail(VerificationError.ExceptionAttribute.EXCEPTION_INSTANCE, e);
+
+            builder.error(errorBuilder.build());
+        } catch (Exception e) {
+            builder.error(ResultErrorBuilder.withException(e).build());
+        }
+        return builder.build();
+    }
+}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java
new file mode 100644
index 0000000..82e97b7
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConfiguration.java
@@ -0,0 +1,139 @@
+/**
+ * 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.iam;
+
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient;
+import com.amazonaws.services.kms.AWSKMS;
+
+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 IAMConfiguration implements Cloneable {
+
+    @UriPath(description = "Logical name")
+    @Metadata(required = "true")
+    private String label;
+    @UriParam(label = "producer")
+    private AmazonIdentityManagementClient iamClient;
+    @UriParam(label = "producer", secret = true)
+    private String accessKey;
+    @UriParam(label = "producer", secret = true)
+    private String secretKey;
+    @UriParam(label = "producer")
+    @Metadata(required = "true")
+    private IAMOperations operation;
+    @UriParam(label = "producer")
+    private String proxyHost;
+    @UriParam(label = "producer")
+    private Integer proxyPort;
+    @UriParam
+    private String region;
+
+    public AmazonIdentityManagementClient getIamClient() {
+        return iamClient;
+    }
+
+    /**
+     * To use a existing configured AWS IAM as client
+     */
+    public void setIamClient(AmazonIdentityManagementClient iamClient) {
+        this.iamClient = iamClient;
+    }
+
+    public String getAccessKey() {
+        return accessKey;
+    }
+
+    /**
+     * Amazon AWS Access Key
+     */
+    public void setAccessKey(String accessKey) {
+        this.accessKey = accessKey;
+    }
+
+    public String getSecretKey() {
+        return secretKey;
+    }
+
+    /**
+     * Amazon AWS Secret Key
+     */
+    public void setSecretKey(String secretKey) {
+        this.secretKey = secretKey;
+    }
+
+    public IAMOperations getOperation() {
+        return operation;
+    }
+
+    /**
+     * The operation to perform
+     */
+    public void setOperation(IAMOperations operation) {
+        this.operation = operation;
+    }
+
+    public String getProxyHost() {
+        return proxyHost;
+    }
+
+    /**
+     * To define a proxy host when instantiating the KMS client
+     */
+    public void setProxyHost(String proxyHost) {
+        this.proxyHost = proxyHost;
+    }
+
+    public Integer getProxyPort() {
+        return proxyPort;
+    }
+
+    /**
+     * To define a proxy port when instantiating the KMS client
+     */
+    public void setProxyPort(Integer proxyPort) {
+        this.proxyPort = proxyPort;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    /**
+     * The region in which KMS client needs to work
+     */
+    public void setRegion(String region) {
+        this.region = region;
+    }
+    
+    // *************************************************
+    //
+    // *************************************************
+
+    public IAMConfiguration copy() {
+        try {
+            return (IAMConfiguration)super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new RuntimeCamelException(e);
+        }
+    }
+}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java
new file mode 100644
index 0000000..b8d9f5f
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMConstants.java
@@ -0,0 +1,29 @@
+/**
+ * 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.iam;
+
+/**
+ * Constants used in Camel AWS IAM module
+ * 
+ */
+public interface IAMConstants {
+    String OPERATION                = "CamelAwsKMSOperation";
+    String LIMIT                    = "CamelAwsKMSLimit";
+    String DESCRIPTION              = "CamelAwsKMSDescription";
+    String KEY_ID                   = "CamelAwsKMSKeyId";
+    String PENDING_WINDOW_IN_DAYS   = "CamelAwsKMSPendingWindowInDays";
+}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java
new file mode 100644
index 0000000..c528275
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMEndpoint.java
@@ -0,0 +1,122 @@
+/**
+ * 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.iam;
+
+import com.amazonaws.ClientConfiguration;
+import com.amazonaws.auth.AWSCredentials;
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.AWSStaticCredentialsProvider;
+import com.amazonaws.auth.BasicAWSCredentials;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClientBuilder;
+
+import org.apache.camel.Component;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.ScheduledPollEndpoint;
+import org.apache.camel.spi.UriEndpoint;
+import org.apache.camel.spi.UriParam;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * The aws-iam is used for managing Amazon IAM
+ */
+@UriEndpoint(firstVersion = "2.23.0", scheme = "aws-iam", title = "AWS IAM", syntax = "aws-iam:label", producerOnly = true, label = "cloud,management")
+public class IAMEndpoint extends ScheduledPollEndpoint {
+
+    private AmazonIdentityManagement iamClient;
+
+    @UriParam
+    private IAMConfiguration configuration;
+
+    public IAMEndpoint(String uri, Component component, IAMConfiguration configuration) {
+        super(uri, component);
+        this.configuration = configuration;
+    }
+
+    public Consumer createConsumer(Processor processor) throws Exception {
+        throw new UnsupportedOperationException("You cannot receive messages from this endpoint");
+    }
+
+    public Producer createProducer() throws Exception {
+        return new IAMProducer(this);
+    }
+
+    public boolean isSingleton() {
+        return true;
+    }
+
+    @Override
+    public void doStart() throws Exception {
+        super.doStart();
+
+        iamClient = configuration.getIamClient() != null ? configuration.getIamClient() : createKMSClient();
+    }
+    
+    @Override
+    public void doStop() throws Exception {
+        if (ObjectHelper.isEmpty(configuration.getIamClient())) {
+            if (iamClient != null) {
+            	iamClient.shutdown();
+            }
+        }
+        super.doStop();
+    }
+
+    public IAMConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public AmazonIdentityManagement getIamClient() {
+        return iamClient;
+    }
+
+    AmazonIdentityManagement createKMSClient() {
+    	AmazonIdentityManagement client = null;
+        ClientConfiguration clientConfiguration = null;
+        AmazonIdentityManagementClientBuilder clientBuilder = null;
+        boolean isClientConfigFound = false;
+        if (ObjectHelper.isNotEmpty(configuration.getProxyHost()) && ObjectHelper.isNotEmpty(configuration.getProxyPort())) {
+            clientConfiguration = new ClientConfiguration();
+            clientConfiguration.setProxyHost(configuration.getProxyHost());
+            clientConfiguration.setProxyPort(configuration.getProxyPort());
+            isClientConfigFound = true;
+        }
+        if (configuration.getAccessKey() != null && configuration.getSecretKey() != null) {
+            AWSCredentials credentials = new BasicAWSCredentials(configuration.getAccessKey(), configuration.getSecretKey());
+            AWSCredentialsProvider credentialsProvider = new AWSStaticCredentialsProvider(credentials);
+            if (isClientConfigFound) {
+                clientBuilder = AmazonIdentityManagementClientBuilder.standard().withClientConfiguration(clientConfiguration).withCredentials(credentialsProvider);
+            } else {
+                clientBuilder = AmazonIdentityManagementClientBuilder.standard().withCredentials(credentialsProvider);
+            }
+        } else {
+            if (isClientConfigFound) {
+                clientBuilder = AmazonIdentityManagementClientBuilder.standard();
+            } else {
+                clientBuilder = AmazonIdentityManagementClientBuilder.standard().withClientConfiguration(clientConfiguration);
+            }
+        }
+        if (ObjectHelper.isNotEmpty(configuration.getRegion())) {
+            clientBuilder = clientBuilder.withRegion(configuration.getRegion());
+        }
+        client = clientBuilder.build();
+        return client;
+    }
+}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java
new file mode 100644
index 0000000..5327d5b
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMOperations.java
@@ -0,0 +1,22 @@
+/**
+ * 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.iam;
+
+public enum IAMOperations {
+
+    listAccessKeys
+}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
new file mode 100644
index 0000000..04df46a
--- /dev/null
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/iam/IAMProducer.java
@@ -0,0 +1,93 @@
+/**
+ * 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.iam;
+
+import com.amazonaws.AmazonServiceException;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagement;
+import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.URISupport;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static org.apache.camel.component.aws.common.AwsExchangeUtil.getMessageForResponse;
+
+/**
+ * A Producer which sends messages to the Amazon IAM Service
+ * <a href="http://aws.amazon.com/iam/">AWS IAM</a>
+ */
+public class IAMProducer extends DefaultProducer {
+
+    private static final Logger LOG = LoggerFactory.getLogger(IAMProducer.class);
+
+    private transient String iamProducerToString;
+
+    public IAMProducer(Endpoint endpoint) {
+        super(endpoint);
+    }
+
+    public void process(Exchange exchange) throws Exception {
+        switch (determineOperation(exchange)) {
+        case listAccessKeys:
+            listAccessKeys(getEndpoint().getIamClient(), exchange);
+            break;
+        default:
+            throw new IllegalArgumentException("Unsupported operation");
+        }
+    }
+
+    private IAMOperations determineOperation(Exchange exchange) {
+        IAMOperations operation = exchange.getIn().getHeader(IAMConstants.OPERATION, IAMOperations.class);
+        if (operation == null) {
+            operation = getConfiguration().getOperation();
+        }
+        return operation;
+    }
+
+    protected IAMConfiguration getConfiguration() {
+        return getEndpoint().getConfiguration();
+    }
+
+    @Override
+    public String toString() {
+        if (iamProducerToString == null) {
+        	iamProducerToString = "IAMProducer[" + URISupport.sanitizeUri(getEndpoint().getEndpointUri()) + "]";
+        }
+        return iamProducerToString;
+    }
+
+    @Override
+    public IAMEndpoint getEndpoint() {
+        return (IAMEndpoint)super.getEndpoint();
+    }
+
+    private void listAccessKeys(AmazonIdentityManagement iamClient, Exchange exchange) {
+        ListAccessKeysResult result;
+        try {
+            result = iamClient.listAccessKeys();
+        } catch (AmazonServiceException ase) {
+            LOG.trace("List Access Keys command returned the error code {}", ase.getErrorCode());
+            throw ase;
+        }
+        Message message = getMessageForResponse(exchange);
+        message.setBody(result);
+    }
+}
\ No newline at end of file
diff --git a/components/camel-aws/src/main/resources/META-INF/services/org/apache/camel/component/aws-iam b/components/camel-aws/src/main/resources/META-INF/services/org/apache/camel/component/aws-iam
new file mode 100644
index 0000000..ab88eb6
--- /dev/null
+++ b/components/camel-aws/src/main/resources/META-INF/services/org/apache/camel/component/aws-iam
@@ -0,0 +1,18 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+class=org.apache.camel.component.aws.iam.IAMComponent
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java
new file mode 100644
index 0000000..4354d5c
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/AmazonIAMClientMock.java
@@ -0,0 +1,833 @@
+/**
+ * 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.iam;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+
+import com.amazonaws.AmazonWebServiceRequest;
+import com.amazonaws.ResponseMetadata;
+import com.amazonaws.regions.Region;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient;
+import com.amazonaws.services.identitymanagement.model.*;
+import com.amazonaws.services.identitymanagement.waiters.AmazonIdentityManagementWaiters;
+
+
+public class AmazonIAMClientMock extends AmazonIdentityManagementClient {
+
+	@Override
+	public void setEndpoint(String endpoint) {
+	}
+
+	@Override
+	public void setRegion(Region region) {	
+	}
+
+	@Override
+	public AddClientIDToOpenIDConnectProviderResult addClientIDToOpenIDConnectProvider(
+			AddClientIDToOpenIDConnectProviderRequest addClientIDToOpenIDConnectProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public AddRoleToInstanceProfileResult addRoleToInstanceProfile(
+			AddRoleToInstanceProfileRequest addRoleToInstanceProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public AddUserToGroupResult addUserToGroup(AddUserToGroupRequest addUserToGroupRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public AttachGroupPolicyResult attachGroupPolicy(AttachGroupPolicyRequest attachGroupPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public AttachRolePolicyResult attachRolePolicy(AttachRolePolicyRequest attachRolePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public AttachUserPolicyResult attachUserPolicy(AttachUserPolicyRequest attachUserPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ChangePasswordResult changePassword(ChangePasswordRequest changePasswordRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateAccessKeyResult createAccessKey(CreateAccessKeyRequest createAccessKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateAccessKeyResult createAccessKey() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateAccountAliasResult createAccountAlias(CreateAccountAliasRequest createAccountAliasRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateGroupResult createGroup(CreateGroupRequest createGroupRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateInstanceProfileResult createInstanceProfile(
+			CreateInstanceProfileRequest createInstanceProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateLoginProfileResult createLoginProfile(CreateLoginProfileRequest createLoginProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateOpenIDConnectProviderResult createOpenIDConnectProvider(
+			CreateOpenIDConnectProviderRequest createOpenIDConnectProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreatePolicyResult createPolicy(CreatePolicyRequest createPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreatePolicyVersionResult createPolicyVersion(CreatePolicyVersionRequest createPolicyVersionRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateRoleResult createRole(CreateRoleRequest createRoleRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateSAMLProviderResult createSAMLProvider(CreateSAMLProviderRequest createSAMLProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateServiceLinkedRoleResult createServiceLinkedRole(
+			CreateServiceLinkedRoleRequest createServiceLinkedRoleRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateServiceSpecificCredentialResult createServiceSpecificCredential(
+			CreateServiceSpecificCredentialRequest createServiceSpecificCredentialRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateUserResult createUser(CreateUserRequest createUserRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public CreateVirtualMFADeviceResult createVirtualMFADevice(
+			CreateVirtualMFADeviceRequest createVirtualMFADeviceRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeactivateMFADeviceResult deactivateMFADevice(DeactivateMFADeviceRequest deactivateMFADeviceRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteAccessKeyResult deleteAccessKey(DeleteAccessKeyRequest deleteAccessKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteAccountAliasResult deleteAccountAlias(DeleteAccountAliasRequest deleteAccountAliasRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteAccountPasswordPolicyResult deleteAccountPasswordPolicy(
+			DeleteAccountPasswordPolicyRequest deleteAccountPasswordPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteAccountPasswordPolicyResult deleteAccountPasswordPolicy() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteGroupResult deleteGroup(DeleteGroupRequest deleteGroupRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteGroupPolicyResult deleteGroupPolicy(DeleteGroupPolicyRequest deleteGroupPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteInstanceProfileResult deleteInstanceProfile(
+			DeleteInstanceProfileRequest deleteInstanceProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteLoginProfileResult deleteLoginProfile(DeleteLoginProfileRequest deleteLoginProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteOpenIDConnectProviderResult deleteOpenIDConnectProvider(
+			DeleteOpenIDConnectProviderRequest deleteOpenIDConnectProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeletePolicyResult deletePolicy(DeletePolicyRequest deletePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeletePolicyVersionResult deletePolicyVersion(DeletePolicyVersionRequest deletePolicyVersionRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteRoleResult deleteRole(DeleteRoleRequest deleteRoleRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteRolePolicyResult deleteRolePolicy(DeleteRolePolicyRequest deleteRolePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteSAMLProviderResult deleteSAMLProvider(DeleteSAMLProviderRequest deleteSAMLProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteSSHPublicKeyResult deleteSSHPublicKey(DeleteSSHPublicKeyRequest deleteSSHPublicKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteServerCertificateResult deleteServerCertificate(
+			DeleteServerCertificateRequest deleteServerCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteServiceLinkedRoleResult deleteServiceLinkedRole(
+			DeleteServiceLinkedRoleRequest deleteServiceLinkedRoleRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteServiceSpecificCredentialResult deleteServiceSpecificCredential(
+			DeleteServiceSpecificCredentialRequest deleteServiceSpecificCredentialRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteSigningCertificateResult deleteSigningCertificate(
+			DeleteSigningCertificateRequest deleteSigningCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteUserResult deleteUser(DeleteUserRequest deleteUserRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteUserPolicyResult deleteUserPolicy(DeleteUserPolicyRequest deleteUserPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DeleteVirtualMFADeviceResult deleteVirtualMFADevice(
+			DeleteVirtualMFADeviceRequest deleteVirtualMFADeviceRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DetachGroupPolicyResult detachGroupPolicy(DetachGroupPolicyRequest detachGroupPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DetachRolePolicyResult detachRolePolicy(DetachRolePolicyRequest detachRolePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public DetachUserPolicyResult detachUserPolicy(DetachUserPolicyRequest detachUserPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public EnableMFADeviceResult enableMFADevice(EnableMFADeviceRequest enableMFADeviceRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GenerateCredentialReportResult generateCredentialReport(
+			GenerateCredentialReportRequest generateCredentialReportRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GenerateCredentialReportResult generateCredentialReport() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccessKeyLastUsedResult getAccessKeyLastUsed(GetAccessKeyLastUsedRequest getAccessKeyLastUsedRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccountAuthorizationDetailsResult getAccountAuthorizationDetails(
+			GetAccountAuthorizationDetailsRequest getAccountAuthorizationDetailsRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccountAuthorizationDetailsResult getAccountAuthorizationDetails() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccountPasswordPolicyResult getAccountPasswordPolicy(
+			GetAccountPasswordPolicyRequest getAccountPasswordPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccountPasswordPolicyResult getAccountPasswordPolicy() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccountSummaryResult getAccountSummary(GetAccountSummaryRequest getAccountSummaryRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetAccountSummaryResult getAccountSummary() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetContextKeysForCustomPolicyResult getContextKeysForCustomPolicy(
+			GetContextKeysForCustomPolicyRequest getContextKeysForCustomPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetContextKeysForPrincipalPolicyResult getContextKeysForPrincipalPolicy(
+			GetContextKeysForPrincipalPolicyRequest getContextKeysForPrincipalPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetCredentialReportResult getCredentialReport(GetCredentialReportRequest getCredentialReportRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetCredentialReportResult getCredentialReport() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetGroupResult getGroup(GetGroupRequest getGroupRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetGroupPolicyResult getGroupPolicy(GetGroupPolicyRequest getGroupPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetInstanceProfileResult getInstanceProfile(GetInstanceProfileRequest getInstanceProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetLoginProfileResult getLoginProfile(GetLoginProfileRequest getLoginProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetOpenIDConnectProviderResult getOpenIDConnectProvider(
+			GetOpenIDConnectProviderRequest getOpenIDConnectProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetPolicyResult getPolicy(GetPolicyRequest getPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetPolicyVersionResult getPolicyVersion(GetPolicyVersionRequest getPolicyVersionRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetRoleResult getRole(GetRoleRequest getRoleRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetRolePolicyResult getRolePolicy(GetRolePolicyRequest getRolePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetSAMLProviderResult getSAMLProvider(GetSAMLProviderRequest getSAMLProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetSSHPublicKeyResult getSSHPublicKey(GetSSHPublicKeyRequest getSSHPublicKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetServerCertificateResult getServerCertificate(GetServerCertificateRequest getServerCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetServiceLinkedRoleDeletionStatusResult getServiceLinkedRoleDeletionStatus(
+			GetServiceLinkedRoleDeletionStatusRequest getServiceLinkedRoleDeletionStatusRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetUserResult getUser(GetUserRequest getUserRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetUserResult getUser() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public GetUserPolicyResult getUserPolicy(GetUserPolicyRequest getUserPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListAccessKeysResult listAccessKeys(ListAccessKeysRequest listAccessKeysRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListAccessKeysResult listAccessKeys() {
+       ListAccessKeysResult result = new ListAccessKeysResult();
+       Collection<AccessKeyMetadata> accessKeyMetadata = new ArrayList<AccessKeyMetadata>();
+       AccessKeyMetadata meta = new AccessKeyMetadata();
+       meta.setAccessKeyId("1");
+       meta.setCreateDate(new Date());
+       meta.setStatus(StatusType.Active);
+       meta.setUserName("test");
+       accessKeyMetadata.add(meta);
+	   result.setAccessKeyMetadata(accessKeyMetadata);
+	   return result;
+	}
+
+	@Override
+	public ListAccountAliasesResult listAccountAliases(ListAccountAliasesRequest listAccountAliasesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListAccountAliasesResult listAccountAliases() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListAttachedGroupPoliciesResult listAttachedGroupPolicies(
+			ListAttachedGroupPoliciesRequest listAttachedGroupPoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListAttachedRolePoliciesResult listAttachedRolePolicies(
+			ListAttachedRolePoliciesRequest listAttachedRolePoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListAttachedUserPoliciesResult listAttachedUserPolicies(
+			ListAttachedUserPoliciesRequest listAttachedUserPoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListEntitiesForPolicyResult listEntitiesForPolicy(
+			ListEntitiesForPolicyRequest listEntitiesForPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListGroupPoliciesResult listGroupPolicies(ListGroupPoliciesRequest listGroupPoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListGroupsResult listGroups(ListGroupsRequest listGroupsRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListGroupsResult listGroups() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListGroupsForUserResult listGroupsForUser(ListGroupsForUserRequest listGroupsForUserRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListInstanceProfilesResult listInstanceProfiles(ListInstanceProfilesRequest listInstanceProfilesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListInstanceProfilesResult listInstanceProfiles() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListInstanceProfilesForRoleResult listInstanceProfilesForRole(
+			ListInstanceProfilesForRoleRequest listInstanceProfilesForRoleRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListMFADevicesResult listMFADevices(ListMFADevicesRequest listMFADevicesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListMFADevicesResult listMFADevices() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListOpenIDConnectProvidersResult listOpenIDConnectProviders(
+			ListOpenIDConnectProvidersRequest listOpenIDConnectProvidersRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListOpenIDConnectProvidersResult listOpenIDConnectProviders() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListPoliciesResult listPolicies(ListPoliciesRequest listPoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListPoliciesResult listPolicies() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListPolicyVersionsResult listPolicyVersions(ListPolicyVersionsRequest listPolicyVersionsRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListRolePoliciesResult listRolePolicies(ListRolePoliciesRequest listRolePoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListRolesResult listRoles(ListRolesRequest listRolesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListRolesResult listRoles() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListSAMLProvidersResult listSAMLProviders(ListSAMLProvidersRequest listSAMLProvidersRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListSAMLProvidersResult listSAMLProviders() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListSSHPublicKeysResult listSSHPublicKeys(ListSSHPublicKeysRequest listSSHPublicKeysRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListSSHPublicKeysResult listSSHPublicKeys() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListServerCertificatesResult listServerCertificates(
+			ListServerCertificatesRequest listServerCertificatesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListServerCertificatesResult listServerCertificates() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListServiceSpecificCredentialsResult listServiceSpecificCredentials(
+			ListServiceSpecificCredentialsRequest listServiceSpecificCredentialsRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListSigningCertificatesResult listSigningCertificates(
+			ListSigningCertificatesRequest listSigningCertificatesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListSigningCertificatesResult listSigningCertificates() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListUserPoliciesResult listUserPolicies(ListUserPoliciesRequest listUserPoliciesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListUsersResult listUsers(ListUsersRequest listUsersRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListUsersResult listUsers() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListVirtualMFADevicesResult listVirtualMFADevices(
+			ListVirtualMFADevicesRequest listVirtualMFADevicesRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ListVirtualMFADevicesResult listVirtualMFADevices() {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public PutGroupPolicyResult putGroupPolicy(PutGroupPolicyRequest putGroupPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public PutRolePolicyResult putRolePolicy(PutRolePolicyRequest putRolePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public PutUserPolicyResult putUserPolicy(PutUserPolicyRequest putUserPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public RemoveClientIDFromOpenIDConnectProviderResult removeClientIDFromOpenIDConnectProvider(
+			RemoveClientIDFromOpenIDConnectProviderRequest removeClientIDFromOpenIDConnectProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public RemoveRoleFromInstanceProfileResult removeRoleFromInstanceProfile(
+			RemoveRoleFromInstanceProfileRequest removeRoleFromInstanceProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public RemoveUserFromGroupResult removeUserFromGroup(RemoveUserFromGroupRequest removeUserFromGroupRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ResetServiceSpecificCredentialResult resetServiceSpecificCredential(
+			ResetServiceSpecificCredentialRequest resetServiceSpecificCredentialRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public ResyncMFADeviceResult resyncMFADevice(ResyncMFADeviceRequest resyncMFADeviceRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public SetDefaultPolicyVersionResult setDefaultPolicyVersion(
+			SetDefaultPolicyVersionRequest setDefaultPolicyVersionRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public SimulateCustomPolicyResult simulateCustomPolicy(SimulateCustomPolicyRequest simulateCustomPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public SimulatePrincipalPolicyResult simulatePrincipalPolicy(
+			SimulatePrincipalPolicyRequest simulatePrincipalPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateAccessKeyResult updateAccessKey(UpdateAccessKeyRequest updateAccessKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateAccountPasswordPolicyResult updateAccountPasswordPolicy(
+			UpdateAccountPasswordPolicyRequest updateAccountPasswordPolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateAssumeRolePolicyResult updateAssumeRolePolicy(
+			UpdateAssumeRolePolicyRequest updateAssumeRolePolicyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateGroupResult updateGroup(UpdateGroupRequest updateGroupRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateLoginProfileResult updateLoginProfile(UpdateLoginProfileRequest updateLoginProfileRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateOpenIDConnectProviderThumbprintResult updateOpenIDConnectProviderThumbprint(
+			UpdateOpenIDConnectProviderThumbprintRequest updateOpenIDConnectProviderThumbprintRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateRoleDescriptionResult updateRoleDescription(
+			UpdateRoleDescriptionRequest updateRoleDescriptionRequest) {
+        throw new UnsupportedOperationException();
+	}
+	
+
+
+	@Override
+	public UpdateSAMLProviderResult updateSAMLProvider(UpdateSAMLProviderRequest updateSAMLProviderRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateSSHPublicKeyResult updateSSHPublicKey(UpdateSSHPublicKeyRequest updateSSHPublicKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateServerCertificateResult updateServerCertificate(
+			UpdateServerCertificateRequest updateServerCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateServiceSpecificCredentialResult updateServiceSpecificCredential(
+			UpdateServiceSpecificCredentialRequest updateServiceSpecificCredentialRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateSigningCertificateResult updateSigningCertificate(
+			UpdateSigningCertificateRequest updateSigningCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UpdateUserResult updateUser(UpdateUserRequest updateUserRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UploadSSHPublicKeyResult uploadSSHPublicKey(UploadSSHPublicKeyRequest uploadSSHPublicKeyRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UploadServerCertificateResult uploadServerCertificate(
+			UploadServerCertificateRequest uploadServerCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public UploadSigningCertificateResult uploadSigningCertificate(
+			UploadSigningCertificateRequest uploadSigningCertificateRequest) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void shutdown() {
+        throw new UnsupportedOperationException();
+		
+	}
+
+	@Override
+	public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {
+        throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public AmazonIdentityManagementWaiters waiters() {
+        throw new UnsupportedOperationException();
+	}
+}
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.java
new file mode 100644
index 0000000..1c7e791
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentConfigurationTest.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.iam;
+
+import com.amazonaws.regions.Regions;
+
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+public class IAMComponentConfigurationTest extends CamelTestSupport {
+
+    
+    @Test
+    public void createEndpointWithComponentElements() throws Exception {
+        IAMComponent component = new IAMComponent(context);
+        component.setAccessKey("XXX");
+        component.setSecretKey("YYY");
+        IAMEndpoint endpoint = (IAMEndpoint)component.createEndpoint("aws-iam://label");
+        
+        assertEquals("XXX", endpoint.getConfiguration().getAccessKey());
+        assertEquals("YYY", endpoint.getConfiguration().getSecretKey());
+    }
+    
+    @Test
+    public void createEndpointWithComponentAndEndpointElements() throws Exception {
+    	IAMComponent component = new IAMComponent(context);
+        component.setAccessKey("XXX");
+        component.setSecretKey("YYY");
+        component.setRegion(Regions.US_WEST_1.toString());
+        IAMEndpoint endpoint = (IAMEndpoint)component.createEndpoint("aws-iam://label?accessKey=xxxxxx&secretKey=yyyyy&region=US_EAST_1");
+        
+        assertEquals("xxxxxx", endpoint.getConfiguration().getAccessKey());
+        assertEquals("yyyyy", endpoint.getConfiguration().getSecretKey());
+        assertEquals("US_EAST_1", endpoint.getConfiguration().getRegion());
+    }
+    
+}
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtensionTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtensionTest.java
new file mode 100644
index 0000000..4681483
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMComponentVerifierExtensionTest.java
@@ -0,0 +1,73 @@
+/**
+ * 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.iam;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.camel.Component;
+import org.apache.camel.component.extension.ComponentVerifierExtension;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class IAMComponentVerifierExtensionTest extends CamelTestSupport {
+
+    // *************************************************
+    // Tests (parameters)
+    // *************************************************
+    @Override
+    public boolean isUseRouteBuilder() {
+        return false;
+    }
+
+    @Test
+    public void testParameters() throws Exception {
+        Component component = context().getComponent("aws-iam");
+
+        ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("secretKey", "l");
+        parameters.put("accessKey", "k");
+        parameters.put("region", "l");
+        parameters.put("label", "test");
+        parameters.put("operation", IAMOperations.listAccessKeys);
+
+        ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.PARAMETERS, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.OK, result.getStatus());
+    }
+
+    @Test
+    public void testConnectivity() throws Exception {
+        Component component = context().getComponent("aws-iam");
+        ComponentVerifierExtension verifier = component.getExtension(ComponentVerifierExtension.class).orElseThrow(IllegalStateException::new);
+
+        Map<String, Object> parameters = new HashMap<>();
+        parameters.put("secretKey", "l");
+        parameters.put("accessKey", "k");
+        parameters.put("region", "US_EAST_1");
+        parameters.put("label", "test");
+        parameters.put("operation", IAMOperations.listAccessKeys);
+
+        ComponentVerifierExtension.Result result = verifier.verify(ComponentVerifierExtension.Scope.CONNECTIVITY, parameters);
+
+        Assert.assertEquals(ComponentVerifierExtension.Result.Status.ERROR, result.getStatus());
+    }
+
+}
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
new file mode 100644
index 0000000..f44dd88
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerSpringTest.java
@@ -0,0 +1,57 @@
+/**
+ * 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.iam;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.spring.CamelSpringTestSupport;
+import org.junit.Test;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+
+import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
+
+public class IAMProducerSpringTest extends CamelSpringTestSupport {
+
+	@EndpointInject(uri = "mock:result")
+	private MockEndpoint mock;
+
+	@Test
+	public void mqListBrokersTest() throws Exception {
+
+		mock.expectedMessageCount(1);
+		Exchange exchange = template.request("direct:listKeys", new Processor() {
+			@Override
+			public void process(Exchange exchange) throws Exception {
+				exchange.getIn().setHeader(IAMConstants.OPERATION, IAMOperations.listAccessKeys);
+			}
+		});
+
+		assertMockEndpointsSatisfied();
+
+		ListAccessKeysResult resultGet = (ListAccessKeysResult) exchange.getIn().getBody();
+		assertEquals(1, resultGet.getAccessKeyMetadata().size());
+		assertEquals("1", resultGet.getAccessKeyMetadata().get(0).getAccessKeyId());
+	}
+
+	@Override
+	protected ClassPathXmlApplicationContext createApplicationContext() {
+		return new ClassPathXmlApplicationContext(
+				"org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml");
+	}
+}
\ No newline at end of file
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
new file mode 100644
index 0000000..63089a2
--- /dev/null
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/iam/IAMProducerTest.java
@@ -0,0 +1,74 @@
+/**
+ * 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.iam;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.impl.JndiRegistry;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.junit.Test;
+
+import com.amazonaws.services.identitymanagement.model.ListAccessKeysResult;
+
+public class IAMProducerTest extends CamelTestSupport {
+
+	@EndpointInject(uri = "mock:result")
+	private MockEndpoint mock;
+
+	@Test
+	public void iamListKeysTest() throws Exception {
+
+		mock.expectedMessageCount(1);
+		Exchange exchange = template.request("direct:listKeys", new Processor() {
+			@Override
+			public void process(Exchange exchange) throws Exception {
+				exchange.getIn().setHeader(IAMConstants.OPERATION, IAMOperations.listAccessKeys);
+			}
+		});
+
+		assertMockEndpointsSatisfied();
+
+		ListAccessKeysResult resultGet = (ListAccessKeysResult) exchange.getIn().getBody();
+		assertEquals(1, resultGet.getAccessKeyMetadata().size());
+		assertEquals("1", resultGet.getAccessKeyMetadata().get(0).getAccessKeyId());
+	}
+
+	@Override
+	protected JndiRegistry createRegistry() throws Exception {
+		JndiRegistry registry = super.createRegistry();
+
+		AmazonIAMClientMock clientMock = new AmazonIAMClientMock();
+
+		registry.bind("amazonIAMClient", clientMock);
+
+		return registry;
+	}
+
+	@Override
+	protected RouteBuilder createRouteBuilder() throws Exception {
+		return new RouteBuilder() {
+			@Override
+			public void configure() throws Exception {
+				from("direct:listKeys").to("aws-iam://test?iamClient=#amazonIAMClient&operation=listAccessKeys")
+						.to("mock:result");
+			}
+		};
+	}
+}
\ No newline at end of file
diff --git a/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml
new file mode 100644
index 0000000..4c81bf9
--- /dev/null
+++ b/components/camel-aws/src/test/resources/org/apache/camel/component/aws/iam/IAMComponentSpringTest-context.xml
@@ -0,0 +1,35 @@
+<?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://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">
+
+    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
+        <route>
+            <from uri="direct:listKeys"/>
+            <to uri="aws-iam://Test?iamClient=#amazonIAMClient&amp;operation=listAccessKeys"/>
+            <to uri="mock:result"/>
+        </route>
+    </camelContext>
+    
+    <bean id="amazonIAMClient" class="org.apache.camel.component.aws.iam.AmazonIAMClientMock"/>
+</beans>
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentAutoConfiguration.java b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentAutoConfiguration.java
new file mode 100644
index 0000000..5c40a2e
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentAutoConfiguration.java
@@ -0,0 +1,128 @@
+/**
+ * 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.iam.springboot;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.annotation.Generated;
+import org.apache.camel.CamelContext;
+import org.apache.camel.component.aws.iam.IAMComponent;
+import org.apache.camel.spi.ComponentCustomizer;
+import org.apache.camel.spi.HasId;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.spring.boot.ComponentConfigurationProperties;
+import org.apache.camel.spring.boot.util.CamelPropertiesHelper;
+import org.apache.camel.spring.boot.util.ConditionalOnCamelContextAndAutoConfigurationBeans;
+import org.apache.camel.spring.boot.util.GroupCondition;
+import org.apache.camel.spring.boot.util.HierarchicalPropertiesEvaluator;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.camel.util.ObjectHelper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.AutoConfigureAfter;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Conditional;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Lazy;
+
+/**
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@Configuration
+@Conditional({ConditionalOnCamelContextAndAutoConfigurationBeans.class,
+        IAMComponentAutoConfiguration.GroupConditions.class})
+@AutoConfigureAfter(CamelAutoConfiguration.class)
+@EnableConfigurationProperties({ComponentConfigurationProperties.class,
+        IAMComponentConfiguration.class})
+public class IAMComponentAutoConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(IAMComponentAutoConfiguration.class);
+    @Autowired
+    private ApplicationContext applicationContext;
+    @Autowired
+    private CamelContext camelContext;
+    @Autowired
+    private IAMComponentConfiguration configuration;
+    @Autowired(required = false)
+    private List<ComponentCustomizer<IAMComponent>> customizers;
+
+    static class GroupConditions extends GroupCondition {
+        public GroupConditions() {
+            super("camel.component", "camel.component.aws-iam");
+        }
+    }
+
+    @Lazy
+    @Bean(name = "aws-iam-component")
+    @ConditionalOnMissingBean(IAMComponent.class)
+    public IAMComponent configureIAMComponent() throws Exception {
+        IAMComponent component = new IAMComponent();
+        component.setCamelContext(camelContext);
+        Map<String, Object> parameters = new HashMap<>();
+        IntrospectionSupport.getProperties(configuration, parameters, null,
+                false);
+        for (Map.Entry<String, Object> entry : parameters.entrySet()) {
+            Object value = entry.getValue();
+            Class<?> paramClass = value.getClass();
+            if (paramClass.getName().endsWith("NestedConfiguration")) {
+                Class nestedClass = null;
+                try {
+                    nestedClass = (Class) paramClass.getDeclaredField(
+                            "CAMEL_NESTED_CLASS").get(null);
+                    HashMap<String, Object> nestedParameters = new HashMap<>();
+                    IntrospectionSupport.getProperties(value, nestedParameters,
+                            null, false);
+                    Object nestedProperty = nestedClass.newInstance();
+                    CamelPropertiesHelper.setCamelProperties(camelContext,
+                            nestedProperty, nestedParameters, false);
+                    entry.setValue(nestedProperty);
+                } catch (NoSuchFieldException e) {
+                }
+            }
+        }
+        CamelPropertiesHelper.setCamelProperties(camelContext, component,
+                parameters, false);
+        if (ObjectHelper.isNotEmpty(customizers)) {
+            for (ComponentCustomizer<IAMComponent> customizer : customizers) {
+                boolean useCustomizer = (customizer instanceof HasId)
+                        ? HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.aws-iam.customizer",
+                                ((HasId) customizer).getId())
+                        : HierarchicalPropertiesEvaluator.evaluate(
+                                applicationContext.getEnvironment(),
+                                "camel.component.customizer",
+                                "camel.component.aws-iam.customizer");
+                if (useCustomizer) {
+                    LOGGER.debug("Configure component {}, with customizer {}",
+                            component, customizer);
+                    customizer.customize(component);
+                }
+            }
+        }
+        return component;
+    }
+}
\ No newline at end of file
diff --git a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentConfiguration.java
new file mode 100644
index 0000000..6e2eea6
--- /dev/null
+++ b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/java/org/apache/camel/component/aws/iam/springboot/IAMComponentConfiguration.java
@@ -0,0 +1,193 @@
+/**
+ * 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.iam.springboot;
+
+import javax.annotation.Generated;
+import com.amazonaws.services.identitymanagement.AmazonIdentityManagementClient;
+import org.apache.camel.component.aws.iam.IAMOperations;
+import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * The aws-iam is used for managing Amazon IAM
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.SpringBootAutoConfigurationMojo")
+@ConfigurationProperties(prefix = "camel.component.aws-iam")
+public class IAMComponentConfiguration
+        extends
+            ComponentConfigurationPropertiesCommon {
+
+    /**
+     * Whether to enable auto configuration of the aws-iam component. This is
+     * enabled by default.
+     */
+    private Boolean enabled;
+    /**
+     * The AWS MQ default configuration
+     */
+    private IAMConfigurationNestedConfiguration 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 IAMConfigurationNestedConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(
+            IAMConfigurationNestedConfiguration 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;
+    }
+
+    public void setResolvePropertyPlaceholders(
+            Boolean resolvePropertyPlaceholders) {
+        this.resolvePropertyPlaceholders = resolvePropertyPlaceholders;
+    }
+
+    public static class IAMConfigurationNestedConfiguration {
+        public static final Class CAMEL_NESTED_CLASS = org.apache.camel.component.aws.iam.IAMConfiguration.class;
+        /**
+         * To use a existing configured AWS IAM as client
+         */
+        private AmazonIdentityManagementClient iamClient;
+        /**
+         * Amazon AWS Access Key
+         */
+        private String accessKey;
+        /**
+         * Amazon AWS Secret Key
+         */
+        private String secretKey;
+        /**
+         * The operation to perform
+         */
+        private IAMOperations operation;
+        /**
+         * To define a proxy host when instantiating the KMS client
+         */
+        private String proxyHost;
+        /**
+         * To define a proxy port when instantiating the KMS client
+         */
+        private Integer proxyPort;
+        /**
+         * The region in which KMS client needs to work
+         */
+        private String region;
+
+        public AmazonIdentityManagementClient getIamClient() {
+            return iamClient;
+        }
+
+        public void setIamClient(AmazonIdentityManagementClient iamClient) {
+            this.iamClient = iamClient;
+        }
+
+        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 IAMOperations getOperation() {
+            return operation;
+        }
+
+        public void setOperation(IAMOperations 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
diff --git a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/resources/META-INF/spring.factories b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/resources/META-INF/spring.factories
index aaa12f1..e2d56a1 100644
--- a/platforms/spring-boot/components-starter/camel-aws-starter/src/main/resources/META-INF/spring.factories
+++ b/platforms/spring-boot/components-starter/camel-aws-starter/src/main/resources/META-INF/spring.factories
@@ -29,7 +29,9 @@ org.apache.camel.component.aws.ddb.springboot.DdbComponentAutoConfiguration,\
 org.apache.camel.component.aws.firehose.springboot.KinesisFirehoseComponentAutoConfiguration,\
 org.apache.camel.component.aws.lambda.springboot.LambdaComponentAutoConfiguration,\
 org.apache.camel.component.aws.mq.springboot.MQComponentAutoConfiguration,\
-org.apache.camel.component.aws.kms.springboot.KMSComponentAutoConfiguration
+org.apache.camel.component.aws.kms.springboot.KMSComponentAutoConfiguration,\
+org.apache.camel.component.aws.iam.springboot.IAMComponentAutoConfiguration
+
 
 
 


[camel] 06/07: Add camel-ehcache blueprint example

Posted by ac...@apache.org.
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

commit 923fdc04e4295bfbfc524c45e00f0e073fafeeae
Author: Tadayoshi Sato <sa...@gmail.com>
AuthorDate: Tue Jul 24 18:37:13 2018 +0900

    Add camel-ehcache blueprint example
---
 examples/camel-example-ehcache-blueprint/README.md |  61 +++++++
 examples/camel-example-ehcache-blueprint/pom.xml   |  86 +++++++++
 .../apache/camel/example/ehcache/CacheData.java    |  58 ++++++
 .../apache/camel/example/ehcache/CachingRoute.java |  60 ++++++
 .../apache/camel/example/ehcache/DataService.java  |  44 +++++
 .../src/main/resources/META-INF/LICENSE.txt        | 203 +++++++++++++++++++++
 .../src/main/resources/META-INF/NOTICE.txt         |  11 ++
 .../resources/OSGI-INF/blueprint/camel-context.xml |  46 +++++
 .../src/main/resources/ehcache.xml                 |  36 ++++
 .../src/main/resources/log4j2.properties           |  23 +++
 examples/pom.xml                                   |   1 +
 11 files changed, 629 insertions(+)

diff --git a/examples/camel-example-ehcache-blueprint/README.md b/examples/camel-example-ehcache-blueprint/README.md
new file mode 100644
index 0000000..9791610
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/README.md
@@ -0,0 +1,61 @@
+# Camel Ehcache Blueprint example
+
+### Introduction
+This example shows how to use `camel-ehcache` to cache messages in a Camel route.
+
+### Build
+You will need to compile this example first:
+
+    mvn install
+
+
+### Run with Karaf
+To install Apache Camel in Karaf you type in the shell (we use version ${project.version}):
+
+    feature:repo-add camel ${project.version}
+    feature:install camel
+
+First you need to install the following features in Karaf with:
+
+    feature:install camel-ehcache
+    feature:install camel-servlet
+    feature:install camel-jackson
+
+
+Then you can install the example:
+
+    install -s mvn:org.apache.camel.example/camel-example-ehcache-blueprint/${project.version}
+
+And you can see the application running by tailing the logs:
+
+    log:tail
+
+And you can use <kbd>ctrl</kbd>+<kbd>c</kbd> to stop tailing the log.
+
+There is a data REST service that supports the following operation(s):
+
+- GET /data/{id} - to get data with the given id from an external service
+
+From a web browser you can access the service using the following link(s):
+
+    http://localhost:8181/camel-example-ehcache-blueprint/data/123    - to get the data with id 123
+
+From the command shell you can use `curl` to access the service as shown below:
+
+    curl -X GET -H "Accept: application/json" http://localhost:8181/camel-example-ehcache-blueprint/data/123
+
+The first time you try to get the data it will take 3 seconds as the example (pretends to) access an external data service.
+But then the data will be cached, so it will be quick afterward.
+
+
+### Configuration
+This example is implemented in XML DSL in the `src/main/resources/OSGI-INF/bluepring/camel-context.xml` file.
+
+
+### Forum, Help, etc
+
+If you hit an problems please let us know on the Camel Forums
+	<http://camel.apache.org/discussion-forums.html>
+
+Please help us make Apache Camel better - we appreciate any feedback you may
+have.  Enjoy!
diff --git a/examples/camel-example-ehcache-blueprint/pom.xml b/examples/camel-example-ehcache-blueprint/pom.xml
new file mode 100644
index 0000000..996d0c2
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/pom.xml
@@ -0,0 +1,86 @@
+<?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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache.camel.example</groupId>
+    <artifactId>examples</artifactId>
+    <version>2.23.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>camel-example-ehcache-blueprint</artifactId>
+  <name>Camel :: Example :: Ehcache :: Blueprint</name>
+  <description>An example using Ehcache with OSGi Blueprint</description>
+  <packaging>jar</packaging>
+
+  <properties>
+    <category>OSGi</category>
+    <title>Ehcache Blueprint</title>
+
+    <camel.osgi.import.pkg>
+      *
+    </camel.osgi.import.pkg>
+    <camel.osgi.export.pkg>
+      *
+    </camel.osgi.export.pkg>
+  </properties>
+
+  <dependencies>
+
+    <!-- camel -->
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-blueprint</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-ehcache</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-servlet</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-jackson</artifactId>
+    </dependency>
+
+    <!-- logging -->
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+  </dependencies>
+
+</project>
diff --git a/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CacheData.java b/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CacheData.java
new file mode 100644
index 0000000..c06485a
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CacheData.java
@@ -0,0 +1,58 @@
+/**
+ * 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.example.ehcache;
+
+import java.io.Serializable;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+public class CacheData implements Serializable {
+
+    private static final long serialVersionUID = 996437822624011472L;
+
+    private Long id;
+
+    private String value;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date created;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+}
diff --git a/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CachingRoute.java b/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CachingRoute.java
new file mode 100644
index 0000000..9e8e431
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/CachingRoute.java
@@ -0,0 +1,60 @@
+/**
+ * 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.example.ehcache;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.ehcache.EhcacheConstants;
+import org.apache.camel.model.rest.RestBindingMode;
+
+public class CachingRoute extends RouteBuilder {
+
+    private static final String EHCACHE_ENDPOINT = "ehcache://dataServiceCache"
+        + "?configurationUri=/ehcache.xml"
+        + "&keyType=java.lang.Long"
+        + "&valueType=java.io.Serializable";
+
+    @Override
+    public void configure() {
+        restConfiguration()
+            .component("servlet")
+            .bindingMode(RestBindingMode.json)
+            .contextPath("/camel-example-ehcache-blueprint")
+            .port(8181)
+            .dataFormatProperty("prettyPrint", "true");
+
+        rest("/data").consumes("application/json").produces("application/json")
+            .get("/{id}").to("direct:getData");
+
+        // @formatter:off
+        from("direct:getData").routeId("ehcache-example-get")
+            .log("ID = ${header.id}")
+            .setHeader(EhcacheConstants.ACTION, constant(EhcacheConstants.ACTION_GET))
+            .setHeader(EhcacheConstants.KEY, header("id").convertTo(Long.class))
+            .to(EHCACHE_ENDPOINT)
+            .choice()
+                .when(header(EhcacheConstants.ACTION_HAS_RESULT).isNotEqualTo("true"))
+                    .log("No cache hit. Fetching data from external service")
+                    .to("bean:dataService?method=getData(${header.id})")
+                    .setHeader(EhcacheConstants.ACTION, constant(EhcacheConstants.ACTION_PUT))
+                    .setHeader(EhcacheConstants.KEY, header("id").convertTo(Long.class))
+                    .to(EHCACHE_ENDPOINT)
+                .otherwise()
+                    .log("Cache hit. Returning")
+            .endChoice();
+        // @formatter:on
+    }
+}
diff --git a/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/DataService.java b/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/DataService.java
new file mode 100644
index 0000000..48c899a
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/java/org/apache/camel/example/ehcache/DataService.java
@@ -0,0 +1,44 @@
+/**
+ * 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.example.ehcache;
+
+import java.util.Date;
+import java.util.UUID;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DataService {
+
+    private static final Logger LOG = LoggerFactory.getLogger(DataService.class);
+
+    public CacheData getData(Long id) {
+        LOG.info("Creating data with ID = {}", id);
+
+        // simulating time-consuming calculation
+        try {
+            Thread.sleep(3000);
+        } catch (Exception e) {
+        }
+
+        CacheData data = new CacheData();
+        data.setId(id);
+        data.setValue(UUID.randomUUID().toString());
+        data.setCreated(new Date());
+        return data;
+    }
+}
diff --git a/examples/camel-example-ehcache-blueprint/src/main/resources/META-INF/LICENSE.txt b/examples/camel-example-ehcache-blueprint/src/main/resources/META-INF/LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/resources/META-INF/LICENSE.txt
@@ -0,0 +1,203 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed 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.
+
diff --git a/examples/camel-example-ehcache-blueprint/src/main/resources/META-INF/NOTICE.txt b/examples/camel-example-ehcache-blueprint/src/main/resources/META-INF/NOTICE.txt
new file mode 100644
index 0000000..2e215bf
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/resources/META-INF/NOTICE.txt
@@ -0,0 +1,11 @@
+   =========================================================================
+   ==  NOTICE file corresponding to the section 4 d of                    ==
+   ==  the Apache License, Version 2.0,                                   ==
+   ==  in this case for the Apache Camel distribution.                    ==
+   =========================================================================
+
+   This product includes software developed by
+   The Apache Software Foundation (http://www.apache.org/).
+
+   Please read the different LICENSE files present in the licenses directory of
+   this distribution.
diff --git a/examples/camel-example-ehcache-blueprint/src/main/resources/OSGI-INF/blueprint/camel-context.xml b/examples/camel-example-ehcache-blueprint/src/main/resources/OSGI-INF/blueprint/camel-context.xml
new file mode 100644
index 0000000..4e2ad04
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/resources/OSGI-INF/blueprint/camel-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.
+
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+           xsi:schemaLocation="
+           http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">
+
+  <!-- to setup camel servlet with OSGi HttpService -->
+  <reference id="httpService" interface="org.osgi.service.http.HttpService" />
+
+  <bean class="org.apache.camel.component.servlet.osgi.OsgiServletRegisterer"
+    init-method="register"
+    destroy-method="unregister">
+    <property name="alias" value="/camel-example-ehcache-blueprint" />
+    <property name="httpService" ref="httpService" />
+    <property name="servlet" ref="camelServlet" />
+  </bean>
+
+  <bean id="camelServlet" class="org.apache.camel.component.servlet.CamelHttpTransportServlet" />
+
+  <bean id="dataService" class="org.apache.camel.example.ehcache.DataService" />
+
+  <bean id="cachingRoute" class="org.apache.camel.example.ehcache.CachingRoute" />
+
+  <camelContext xmlns="http://camel.apache.org/schema/blueprint">
+    <routeBuilder ref="cachingRoute" />
+  </camelContext>
+
+</blueprint>
diff --git a/examples/camel-example-ehcache-blueprint/src/main/resources/ehcache.xml b/examples/camel-example-ehcache-blueprint/src/main/resources/ehcache.xml
new file mode 100644
index 0000000..b1f87dc
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/resources/ehcache.xml
@@ -0,0 +1,36 @@
+<?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.
+
+-->
+<ehcache:config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xmlns:ehcache="http://www.ehcache.org/v3"
+  xsi:schemaLocation="
+        http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.5.xsd">
+
+  <ehcache:persistence directory="${java.io.tmpdir}" />
+
+  <ehcache:cache alias="dataServiceCache">
+    <ehcache:key-type>java.lang.Long</ehcache:key-type>
+    <ehcache:value-type>java.io.Serializable</ehcache:value-type>
+    <ehcache:resources>
+      <ehcache:heap unit="entries">100</ehcache:heap>
+      <ehcache:disk persistent="false" unit="MB">10</ehcache:disk>
+    </ehcache:resources>
+  </ehcache:cache>
+
+</ehcache:config>
diff --git a/examples/camel-example-ehcache-blueprint/src/main/resources/log4j2.properties b/examples/camel-example-ehcache-blueprint/src/main/resources/log4j2.properties
new file mode 100644
index 0000000..9deb51c
--- /dev/null
+++ b/examples/camel-example-ehcache-blueprint/src/main/resources/log4j2.properties
@@ -0,0 +1,23 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = %d [%-15.15t] %-5p %-30.30c{1} - %m%n
+rootLogger.level = INFO
+rootLogger.appenderRef.console.ref = console
diff --git a/examples/pom.xml b/examples/pom.xml
index c888bcb..033f274 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -60,6 +60,7 @@
     <module>camel-example-cxf-proxy</module>
     <module>camel-example-cxf-tomcat</module>
     <module>camel-example-console</module>
+    <module>camel-example-ehcache-blueprint</module>
     <module>camel-example-ftp</module>
     <module>camel-example-google-pubsub</module>
     <module>camel-example-guice-jms</module>


[camel] 04/07: CAMEL-12238 - Added Karaf test

Posted by ac...@apache.org.
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

commit ab3ea07c44f08b7ef266928aa039ae7e926b145d
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jul 24 12:06:23 2018 +0200

    CAMEL-12238 - Added Karaf test
---
 .../src/test/java/org/apache/camel/itest/karaf/CamelAwsTest.java         | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAwsTest.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAwsTest.java
index 9e71d7b..209d377 100644
--- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAwsTest.java
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/CamelAwsTest.java
@@ -31,6 +31,7 @@ public class CamelAwsTest extends BaseKarafTest {
         testComponent(COMPONENT, "aws-ddb");
         testComponent(COMPONENT, "aws-ddbstream");
         testComponent(COMPONENT, "aws-ec2");
+        testComponent(COMPONENT, "aws-iam");
         testComponent(COMPONENT, "aws-kinesis");
         testComponent(COMPONENT, "aws-kinesis-firehose");
         testComponent(COMPONENT, "aws-kms");


[camel] 05/07: CAMEL-12238 - Added Spring-boot test

Posted by ac...@apache.org.
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

commit 743588c319748cd8350fe20c24e225bff53663a3
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jul 24 12:07:03 2018 +0200

    CAMEL-12238 - Added Spring-boot test
---
 .../src/test/java/org/apache/camel/itest/springboot/CamelAwsTest.java    | 1 +
 1 file changed, 1 insertion(+)

diff --git a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAwsTest.java b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAwsTest.java
index 59a3519..d646027 100644
--- a/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAwsTest.java
+++ b/tests/camel-itest-spring-boot/src/test/java/org/apache/camel/itest/springboot/CamelAwsTest.java
@@ -44,6 +44,7 @@ public class CamelAwsTest extends AbstractSpringBootTestSupport {
         this.runComponentTest(createTestConfig(), "aws-ddb");
         this.runComponentTest(createTestConfig(), "aws-ddbstream");
         this.runComponentTest(createTestConfig(), "aws-ec2");
+        this.runComponentTest(createTestConfig(), "aws-iam");
         this.runComponentTest(createTestConfig(), "aws-kinesis");
         this.runComponentTest(createTestConfig(), "aws-kinesis-firehose");
         this.runComponentTest(createTestConfig(), "aws-lambda");


[camel] 03/07: CAMEL-12238 - Added IAM component docs

Posted by ac...@apache.org.
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

commit c5e311f08ad2c63d47c20460e38a4f56ef605969
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jul 24 12:05:40 2018 +0200

    CAMEL-12238 - Added IAM component docs
---
 .../camel-aws/src/main/docs/aws-iam-component.adoc | 165 +++++++++++++++++++++
 1 file changed, 165 insertions(+)

diff --git a/components/camel-aws/src/main/docs/aws-iam-component.adoc b/components/camel-aws/src/main/docs/aws-iam-component.adoc
new file mode 100644
index 0000000..f41ba27
--- /dev/null
+++ b/components/camel-aws/src/main/docs/aws-iam-component.adoc
@@ -0,0 +1,165 @@
+[[aws-iam-component]]
+== AWS IAM Component
+
+*Available as of Camel version 2.23*
+
+The KMS component supports create, run, start, stop and terminate
+https://aws.amazon.com/it/iam/[AWS IAM] instances.
+
+Prerequisites
+
+You must have a valid Amazon Web Services developer account, and be
+signed up to use Amazon IAM. More information are available at
+https://aws.amazon.com/it/iam/[Amazon IAM].
+
+### URI Format
+
+[source,java]
+-------------------------
+aws-kms://label[?options]
+-------------------------
+
+You can append query options to the URI in the following format,
+?options=value&option2=value&...
+
+### URI Options
+
+
+// component options: START
+The AWS IAM 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 |  | IAMConfiguration
+| *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
+
+
+
+
+// endpoint options: START
+The AWS IAM endpoint is configured using URI syntax:
+
+----
+aws-iam:label
+----
+
+with the following path and query parameters:
+
+==== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *label* | *Required* Logical name |  | String
+|===
+
+
+==== Query Parameters (8 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *accessKey* (producer) | Amazon AWS Access Key |  | String
+| *iamClient* (producer) | To use a existing configured AWS IAM as client |  | AmazonIdentity ManagementClient
+| *operation* (producer) | *Required* The operation to perform |  | IAMOperations
+| *proxyHost* (producer) | To define a proxy host when instantiating the KMS client |  | String
+| *proxyPort* (producer) | To define a proxy port when instantiating the KMS client |  | Integer
+| *region* (producer) | The region in which KMS client needs to work |  | String
+| *secretKey* (producer) | Amazon AWS Secret Key |  | String
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+|===
+// endpoint options: END
+// spring-boot-auto-configure options: START
+=== Spring Boot Auto-Configuration
+
+
+The component supports 12 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *camel.component.aws-kms.access-key* | Amazon AWS Access Key |  | String
+| *camel.component.aws-kms.configuration.access-key* | Amazon AWS Access Key |  | String
+| *camel.component.aws-kms.configuration.kms-client* | To use a existing configured AWS KMS as client |  | AWSKMS
+| *camel.component.aws-kms.configuration.operation* | The operation to perform |  | KMSOperations
+| *camel.component.aws-kms.configuration.proxy-host* | To define a proxy host when instantiating the KMS client |  | String
+| *camel.component.aws-kms.configuration.proxy-port* | To define a proxy port when instantiating the KMS client |  | Integer
+| *camel.component.aws-kms.configuration.region* | The region in which KMS client needs to work |  | String
+| *camel.component.aws-kms.configuration.secret-key* | Amazon AWS Secret Key |  | String
+| *camel.component.aws-kms.enabled* | Whether to enable auto configuration of the aws-kms component. This is
+ enabled by default. |  | Boolean
+| *camel.component.aws-kms.region* | The region in which MQ client needs to work |  | String
+| *camel.component.aws-kms.resolve-property-placeholders* | Whether the component should resolve property placeholders on itself when
+ starting. Only properties which are of String type can use property
+ placeholders. | true | Boolean
+| *camel.component.aws-kms.secret-key* | Amazon AWS Secret Key |  | String
+|===
+// spring-boot-auto-configure options: END
+
+
+
+
+Required IAM component options
+
+You have to provide the amazonKmsClient in the
+Registry or your accessKey and secretKey to access
+the https://aws.amazon.com/it/iam/[Amazon IAM] service.
+
+### Usage
+
+#### Message headers evaluated by the IAM producer
+
+[width="100%",cols="10%,10%,80%",options="header",]
+|=======================================================================
+|Header |Type |Description
+
+|`CamelAwsIAMOperation` |`String` |The operation we want to perform
+
+|`CamelAwsIAMUsername` |`String` |The username for the user you want to manage
+|=======================================================================
+
+#### IAM Producer operations
+
+Camel-AWS IAM component provides the following operation on the producer side:
+
+- listAccessKeys
+- createUser
+
+Dependencies
+
+Maven users will need to add the following dependency to their pom.xml.
+
+*pom.xml*
+
+[source,xml]
+---------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-aws</artifactId>
+    <version>${camel-version}</version>
+</dependency>
+---------------------------------------
+
+where `${camel-version`} must be replaced by the actual version of Camel
+(2.16 or higher).
+
+### See Also
+
+* Configuring Camel
+* Component
+* Endpoint
+* Getting Started
+
+* AWS Component