Repository: camel Updated Branches: refs/heads/master 07783c38d -> 7cbba4646
CAMEL-10280 Don't require create privileges to publish to named SNS topic Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/983e53b1 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/983e53b1 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/983e53b1 Branch: refs/heads/master Commit: 983e53b14f90ad3130f262789524fc4f1a75ac7c Parents: 07783c3 Author: Andrea Cosentino <anco...@gmail.com> Authored: Mon Sep 5 10:34:52 2016 +0200 Committer: Andrea Cosentino <anco...@gmail.com> Committed: Mon Sep 5 10:34:52 2016 +0200 ---------------------------------------------------------------------- .../camel/component/aws/sns/SnsEndpoint.java | 26 ++++++++++++++++++++ .../component/aws/sns/AmazonSNSClientMock.java | 15 +++++++++++ 2 files changed, 41 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/983e53b1/components/camel-aws/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java index 5ffc83e..2cb24f6 100644 --- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java +++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/sns/SnsEndpoint.java @@ -16,14 +16,18 @@ */ package org.apache.camel.component.aws.sns; +import com.amazonaws.AmazonServiceException; import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.sns.AmazonSNS; import com.amazonaws.services.sns.AmazonSNSClient; +import com.amazonaws.services.sns.model.AuthorizationErrorException; import com.amazonaws.services.sns.model.CreateTopicRequest; import com.amazonaws.services.sns.model.CreateTopicResult; +import com.amazonaws.services.sns.model.ListTopicsResult; import com.amazonaws.services.sns.model.SetTopicAttributesRequest; +import com.amazonaws.services.sns.model.Topic; import org.apache.camel.CamelContext; import org.apache.camel.Component; @@ -88,6 +92,28 @@ public class SnsEndpoint extends DefaultEndpoint { LOG.trace("Updating the SNS region with : {} " + configuration.getAmazonSNSEndpoint()); snsClient.setEndpoint(configuration.getAmazonSNSEndpoint()); } + + if (configuration.getTopicArn() == null) { + try { + String nextToken = null; + final String arnSuffix = ":" + configuration.getTopicName(); + do { + final ListTopicsResult response = snsClient.listTopics(nextToken); + nextToken = response.getNextToken(); + + for (final Topic topic : response.getTopics()) { + if (topic.getTopicArn().endsWith(arnSuffix)) { + configuration.setTopicArn(topic.getTopicArn()); + break; + } + } + + } while (nextToken != null); + } catch (final AmazonServiceException ase) { + LOG.trace("The list topics operation return the following error code {}", ase.getErrorCode()); + throw ase; + } + } if (configuration.getTopicArn() == null) { // creates a new topic, or returns the URL of an existing one http://git-wip-us.apache.org/repos/asf/camel/blob/983e53b1/components/camel-aws/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java ---------------------------------------------------------------------- diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java index 3908060..08fe892 100644 --- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java +++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/sns/AmazonSNSClientMock.java @@ -46,9 +46,13 @@ import com.amazonaws.services.sns.model.SetTopicAttributesRequest; import com.amazonaws.services.sns.model.SetTopicAttributesResult; import com.amazonaws.services.sns.model.SubscribeRequest; import com.amazonaws.services.sns.model.SubscribeResult; +import com.amazonaws.services.sns.model.Topic; import com.amazonaws.services.sns.model.UnsubscribeRequest; import com.amazonaws.services.sns.model.UnsubscribeResult; +import java.util.ArrayList; +import java.util.List; + import org.junit.Assert; public class AmazonSNSClientMock extends AmazonSNSClient { @@ -150,6 +154,17 @@ public class AmazonSNSClientMock extends AmazonSNSClient { public ListTopicsResult listTopics() throws AmazonServiceException, AmazonClientException { throw new UnsupportedOperationException(); } + + @Override + public ListTopicsResult listTopics(String nextToken) { + ListTopicsResult res = new ListTopicsResult(); + Topic topic = new Topic(); + topic.setTopicArn(DEFAULT_TOPIC_ARN); + List<Topic> list = new ArrayList<Topic>(); + list.add(topic); + res.setTopics(list); + return res; + } @Override public ResponseMetadata getCachedResponseMetadata(AmazonWebServiceRequest request) {