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) {

Reply via email to