Skip to content

Commit 2d83a20

Browse files
authored
Carry the notification subject on SNS batch entries (#1704)
1 parent 3e11470 commit 2d83a20

3 files changed

Lines changed: 18 additions & 1 deletion

File tree

‎spring-cloud-aws-sns/src/main/java/io/awspring/cloud/sns/core/batch/converter/DefaultSnsMessageConverter.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static io.awspring.cloud.sns.core.SnsHeaders.MESSAGE_DEDUPLICATION_ID_HEADER;
1919
import static io.awspring.cloud.sns.core.SnsHeaders.MESSAGE_GROUP_ID_HEADER;
2020
import static io.awspring.cloud.sns.core.SnsHeaders.MESSAGE_ID_HEADER;
21+
import static io.awspring.cloud.sns.core.SnsHeaders.NOTIFICATION_SUBJECT_HEADER;
2122

2223
import io.awspring.cloud.sns.core.SnsHeaderConverterUtil;
2324
import java.util.ArrayList;
@@ -96,6 +97,9 @@ private <T> void populateHeader(PublishBatchRequestEntry.Builder publishBatchReq
9697
.filter(StringUtils::hasText).orElseGet(() -> UUID.randomUUID().toString());
9798
publishBatchRequestEntry.id(id);
9899

100+
Optional.ofNullable(message.getHeaders().get(NOTIFICATION_SUBJECT_HEADER, String.class))
101+
.ifPresent(publishBatchRequestEntry::subject);
102+
99103
Optional.ofNullable(message.getHeaders().get(MESSAGE_GROUP_ID_HEADER, String.class))
100104
.ifPresent(publishBatchRequestEntry::messageGroupId);
101105
Optional.ofNullable(message.getHeaders().get(MESSAGE_DEDUPLICATION_ID_HEADER, String.class))

‎spring-cloud-aws-sns/src/main/java/io/awspring/cloud/sns/core/batch/executor/SequentialBatchExecutionStrategy.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public SequentialBatchExecutionStrategy(SnsClient snsClient) {
5555
@Override
5656
public BatchResult send(Arn topicArn, Collection<PublishBatchRequestEntry> entries) {
5757
Assert.notNull(topicArn, "topicArn is required");
58-
Assert.notNull(topicArn, "entries are required");
58+
Assert.notNull(entries, "entries are required");
5959

6060
List<BatchResult.SnsResult> allResults = new ArrayList<>();
6161
List<BatchResult.SnsError> allErrors = new ArrayList<>();

‎spring-cloud-aws-sns/src/test/java/io/awspring/cloud/sns/core/batch/converter/DefaultSnsMessageConverterTest.java‎

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,25 @@ void setsAllFifoHeaders() {
9595
.isEqualTo(MessageAttributeValue.builder().stringValue("val").dataType("String").build());
9696
}
9797

98+
@Test
99+
void setsNotificationSubject() {
100+
Message<String> message = MessageBuilder.withPayload("test")
101+
.setHeader(SnsHeaders.NOTIFICATION_SUBJECT_HEADER, "a subject").build();
102+
103+
PublishBatchRequestEntry entry = converter.convertMessage(message);
104+
105+
assertThat(entry.subject()).isEqualTo("a subject");
106+
// the subject travels on the entry, not as a message attribute
107+
assertThat(entry.messageAttributes()).doesNotContainKey(SnsHeaders.NOTIFICATION_SUBJECT_HEADER);
108+
}
109+
98110
@Test
99111
void leavesOptionalHeadersNullWhenAbsent() {
100112
Message<String> message = MessageBuilder.withPayload("plain").build();
101113

102114
PublishBatchRequestEntry entry = converter.convertMessage(message);
103115

116+
assertThat(entry.subject()).isNull();
104117
assertThat(entry.messageGroupId()).isNull();
105118
assertThat(entry.messageDeduplicationId()).isNull();
106119
}

0 commit comments

Comments
 (0)