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 2a95b89c08b1e3a9e6b596df86067e1ff7eaf46d Author: Andrea Cosentino <anco...@gmail.com> AuthorDate: Wed Apr 22 12:01:18 2020 +0200 CAMEL-14868 - Camel-AWS2-*: Where possible, give the possiblity to the end user to pass an AWS Request pojo as body, aws2-iam operations --- .../component/aws2/iam/IAM2Configuration.java | 13 ++++++++ .../camel/component/aws2/iam/IAM2Producer.java | 36 ++++++++++++++++++++-- .../component/aws2/iam/IAMProducerSpringTest.java | 19 ++++++++++++ .../camel/component/aws2/iam/IAMProducerTest.java | 20 ++++++++++++ .../aws2/iam/IAMComponentSpringTest-context.xml | 5 +++ 5 files changed, 91 insertions(+), 2 deletions(-) diff --git a/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Configuration.java b/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Configuration.java index d7dd0a4..12e99bf 100644 --- a/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Configuration.java +++ b/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Configuration.java @@ -47,6 +47,8 @@ public class IAM2Configuration implements Cloneable { private Integer proxyPort; @UriParam private String region; + @UriParam(defaultValue = "false") + private boolean pojoRequest; public IamClient getIamClient() { return iamClient; @@ -138,6 +140,17 @@ public class IAM2Configuration implements Cloneable { public void setRegion(String region) { this.region = region; } + + public boolean isPojoRequest() { + return pojoRequest; + } + + /** + * If we want to use a POJO request as body or not + */ + public void setPojoRequest(boolean pojoRequest) { + this.pojoRequest = pojoRequest; + } // ************************************************* // diff --git a/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java b/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java index 13560e6..3368886 100644 --- a/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java +++ b/components/camel-aws2-iam/src/main/java/org/apache/camel/component/aws2/iam/IAM2Producer.java @@ -18,6 +18,7 @@ package org.apache.camel.component.aws2.iam; import org.apache.camel.Endpoint; import org.apache.camel.Exchange; +import org.apache.camel.InvalidPayloadException; import org.apache.camel.Message; import org.apache.camel.support.DefaultProducer; import org.apache.camel.util.ObjectHelper; @@ -42,6 +43,7 @@ import software.amazon.awssdk.services.iam.model.DeleteUserRequest; import software.amazon.awssdk.services.iam.model.DeleteUserResponse; import software.amazon.awssdk.services.iam.model.GetUserRequest; import software.amazon.awssdk.services.iam.model.GetUserResponse; +import software.amazon.awssdk.services.iam.model.ListAccessKeysRequest; import software.amazon.awssdk.services.iam.model.ListAccessKeysResponse; import software.amazon.awssdk.services.iam.model.ListGroupsResponse; import software.amazon.awssdk.services.iam.model.ListUsersResponse; @@ -136,7 +138,21 @@ public class IAM2Producer extends DefaultProducer { return (IAM2Endpoint)super.getEndpoint(); } - private void listAccessKeys(IamClient iamClient, Exchange exchange) { + private void listAccessKeys(IamClient iamClient, Exchange exchange) throws InvalidPayloadException { + if (getConfiguration().isPojoRequest()) { + Object payload = exchange.getIn().getMandatoryBody(); + if (payload instanceof ListAccessKeysRequest) { + ListAccessKeysResponse response; + try { + response = iamClient.listAccessKeys((ListAccessKeysRequest) payload); + } catch (AwsServiceException ase) { + LOG.trace("List Access Keys command returned the error code {}", ase.getMessage()); + throw ase; + } + Message message = getMessageForResponse(exchange); + message.setBody(response); + } + } else { ListAccessKeysResponse response; try { response = iamClient.listAccessKeys(); @@ -146,9 +162,24 @@ public class IAM2Producer extends DefaultProducer { } Message message = getMessageForResponse(exchange); message.setBody(response); + } } - private void createUser(IamClient iamClient, Exchange exchange) { + private void createUser(IamClient iamClient, Exchange exchange) throws InvalidPayloadException { + if (getConfiguration().isPojoRequest()) { + Object payload = exchange.getIn().getMandatoryBody(); + if (payload instanceof CreateUserRequest) { + CreateUserResponse result; + try { + result = iamClient.createUser((CreateUserRequest) payload); + } catch (AwsServiceException ase) { + LOG.trace("Create user command returned the error code {}", ase.awsErrorDetails().errorCode()); + throw ase; + } + Message message = getMessageForResponse(exchange); + message.setBody(result); + } + } else { CreateUserRequest.Builder builder = CreateUserRequest.builder(); if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(IAM2Constants.USERNAME))) { String userName = exchange.getIn().getHeader(IAM2Constants.USERNAME, String.class); @@ -165,6 +196,7 @@ public class IAM2Producer extends DefaultProducer { } Message message = getMessageForResponse(exchange); message.setBody(result); + } } private void deleteUser(IamClient iamClient, Exchange exchange) { diff --git a/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerSpringTest.java b/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerSpringTest.java index 82f4aaa..f52df85 100644 --- a/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerSpringTest.java +++ b/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerSpringTest.java @@ -26,6 +26,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; import software.amazon.awssdk.services.iam.model.AddUserToGroupResponse; import software.amazon.awssdk.services.iam.model.CreateAccessKeyResponse; import software.amazon.awssdk.services.iam.model.CreateGroupResponse; +import software.amazon.awssdk.services.iam.model.CreateUserRequest; import software.amazon.awssdk.services.iam.model.CreateUserResponse; import software.amazon.awssdk.services.iam.model.DeleteAccessKeyResponse; import software.amazon.awssdk.services.iam.model.DeleteGroupResponse; @@ -83,6 +84,24 @@ public class IAMProducerSpringTest extends CamelSpringTestSupport { } @Test + public void iamCreateUserPojoTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:createUserPojo", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(IAM2Constants.OPERATION, IAM2Operations.createUser); + exchange.getIn().setBody(CreateUserRequest.builder().userName("test").build()); + } + }); + + assertMockEndpointsSatisfied(); + + CreateUserResponse resultGet = (CreateUserResponse)exchange.getIn().getBody(); + assertEquals("test", resultGet.user().userName()); + } + + @Test public void iamDeleteUserTest() throws Exception { mock.expectedMessageCount(1); diff --git a/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java b/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java index c0f6e25..5f640f4 100644 --- a/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java +++ b/components/camel-aws2-iam/src/test/java/org/apache/camel/component/aws2/iam/IAMProducerTest.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; import software.amazon.awssdk.services.iam.model.AddUserToGroupResponse; import software.amazon.awssdk.services.iam.model.CreateAccessKeyResponse; import software.amazon.awssdk.services.iam.model.CreateGroupResponse; +import software.amazon.awssdk.services.iam.model.CreateUserRequest; import software.amazon.awssdk.services.iam.model.CreateUserResponse; import software.amazon.awssdk.services.iam.model.DeleteAccessKeyResponse; import software.amazon.awssdk.services.iam.model.DeleteGroupResponse; @@ -85,6 +86,24 @@ public class IAMProducerTest extends CamelTestSupport { CreateUserResponse resultGet = (CreateUserResponse)exchange.getIn().getBody(); assertEquals("test", resultGet.user().userName()); } + + @Test + public void iamCreateUserPojoTest() throws Exception { + + mock.expectedMessageCount(1); + Exchange exchange = template.request("direct:createUserPojo", new Processor() { + @Override + public void process(Exchange exchange) throws Exception { + exchange.getIn().setHeader(IAM2Constants.OPERATION, IAM2Operations.createUser); + exchange.getIn().setBody(CreateUserRequest.builder().userName("test").build()); + } + }); + + assertMockEndpointsSatisfied(); + + CreateUserResponse resultGet = (CreateUserResponse)exchange.getIn().getBody(); + assertEquals("test", resultGet.user().userName()); + } @Test public void iamDeleteUserTest() throws Exception { @@ -296,6 +315,7 @@ public class IAMProducerTest extends CamelTestSupport { public void configure() throws Exception { from("direct:listKeys").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listAccessKeys").to("mock:result"); from("direct:createUser").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createUser").to("mock:result"); + from("direct:createUserPojo").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=createUser&pojoRequest=true").to("mock:result"); from("direct:deleteUser").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=deleteUser").to("mock:result"); from("direct:listUsers").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=listUsers").to("mock:result"); from("direct:getUser").to("aws2-iam://test?iamClient=#amazonIAMClient&operation=getUser").to("mock:result"); diff --git a/components/camel-aws2-iam/src/test/resources/org/apache/camel/component/aws2/iam/IAMComponentSpringTest-context.xml b/components/camel-aws2-iam/src/test/resources/org/apache/camel/component/aws2/iam/IAMComponentSpringTest-context.xml index de8d757..e6251c4 100644 --- a/components/camel-aws2-iam/src/test/resources/org/apache/camel/component/aws2/iam/IAMComponentSpringTest-context.xml +++ b/components/camel-aws2-iam/src/test/resources/org/apache/camel/component/aws2/iam/IAMComponentSpringTest-context.xml @@ -35,6 +35,11 @@ <to uri="mock:result"/> </route> <route> + <from uri="direct:createUserPojo"/> + <to uri="aws2-iam://Test?iamClient=#amazonIAMClient&operation=createUser&pojoRequest=true"/> + <to uri="mock:result"/> + </route> + <route> <from uri="direct:deleteUser"/> <to uri="aws2-iam://Test?iamClient=#amazonIAMClient&operation=deleteUser"/> <to uri="mock:result"/>