Skip to content

Commit e6adb9f

Browse files
committed
fix(int-aws-support): SnsOutboundChannelAdapterParser sync attribute
1 parent 93b45fe commit e6adb9f

File tree

3 files changed

+87
-1
lines changed

3 files changed

+87
-1
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.springframework.integration.aws.support.config.xml;
2+
3+
import org.springframework.beans.factory.FactoryBean;
4+
5+
public class InvertedBooleanFactoryBean implements FactoryBean<Boolean> {
6+
7+
private final boolean value;
8+
9+
public InvertedBooleanFactoryBean(boolean value) {
10+
this.value = value;
11+
}
12+
13+
@Override
14+
public Class<?> getObjectType() {
15+
return Boolean.class;
16+
}
17+
18+
@Override
19+
public Boolean getObject() {
20+
return !value;
21+
}
22+
}

int-aws-support/src/main/java/org/springframework/integration/aws/support/config/xml/parsers/SnsOutboundChannelAdapterParser.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
import org.springframework.beans.factory.support.AbstractBeanDefinition;
44
import org.springframework.beans.factory.xml.ParserContext;
5+
import org.springframework.integration.aws.config.xml.ValueFactory;
56
import org.springframework.integration.aws.config.xml.XmlBeanDefinitionBuilder;
67
import org.springframework.integration.aws.outbound.SnsMessageHandler;
8+
import org.springframework.integration.aws.support.config.xml.InvertedBooleanFactoryBean;
79
import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser;
810
import org.w3c.dom.Element;
911

@@ -14,7 +16,7 @@ protected AbstractBeanDefinition parseConsumer(Element element, ParserContext pa
1416
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, SnsMessageHandler.class)
1517
.unsupportedAttributeWarning("failure-channel", "resource-id-resolver", "error-message-strategy", "async-handler")
1618
.addConstructorArgReference("sns")
17-
.setPropertyIfAttributeDefined("async")
19+
.setPropertyIfAttributeDefined("sync", "async", ValueFactory.bean(InvertedBooleanFactoryBean.class))
1820
.setPropertyOrExpressionIfAttributeDefined("topic-arn")
1921
.setPropertyOrExpressionIfAttributeDefined("subject")
2022
.setPropertyOrExpressionIfAttributeDefined("message-group-id")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package org.springframework.integration.aws.support.config.xml.parsers;
2+
3+
import org.bool.junit.mockito.inline.ConstructionMock;
4+
5+
import org.assertj.core.api.InstanceOfAssertFactories;
6+
import org.junit.jupiter.api.Test;
7+
import org.mockito.Mock;
8+
import org.mockito.MockedConstruction.Context;
9+
import org.springframework.integration.aws.outbound.SnsMessageHandler;
10+
import software.amazon.awssdk.services.sns.SnsAsyncClient;
11+
12+
import static org.assertj.core.api.Assertions.assertThat;
13+
14+
@ConstructionMock(SnsMessageHandler.class)
15+
class SnsOutboundChannelAdapterParserTest extends ParserTestBase {
16+
17+
@Mock
18+
private SnsAsyncClient sns;
19+
20+
@Test
21+
void testHandler() {
22+
registerBean("sns", sns);
23+
24+
parse("""
25+
<int-aws:sns-outbound-channel-adapter
26+
id="snsoca"
27+
channel="c"
28+
sns="sns"
29+
topic-arn-expression="topic.exp"
30+
subject-expression="subj.exp"
31+
body-expression="body.exp"
32+
message-group-id-expression="mgi.exp"
33+
message-deduplication-id-expression="mdi.exp"
34+
order="#{5}"
35+
send-timeout="#{50}"
36+
success-channel="sc"
37+
sync="#{false}"
38+
failure-channel="unknownChannel"
39+
error-message-strategy="unknownStrategy"
40+
resource-id-resolver="unknownResolver"
41+
async-handler="unknownHandler"
42+
/>
43+
""");
44+
45+
var handler = beanFactory.getBean(SnsMessageHandler.class);
46+
47+
verify(handler).setTopicArnExpression(assertArg(e -> assertThat(e.getExpressionString()).isEqualTo("topic.exp")));
48+
verify(handler).setSubjectExpression(assertArg(e -> assertThat(e.getExpressionString()).isEqualTo("subj.exp")));
49+
verify(handler).setBodyExpression(assertArg(e -> assertThat(e.getExpressionString()).isEqualTo("body.exp")));
50+
verify(handler).setMessageGroupIdExpression(assertArg(e -> assertThat(e.getExpressionString()).isEqualTo("mgi.exp")));
51+
verify(handler).setMessageDeduplicationIdExpression(assertArg(e -> assertThat(e.getExpressionString()).isEqualTo("mdi.exp")));
52+
verify(handler).setOrder(5);
53+
verify(handler).setOutputChannelName("sc");
54+
verify(handler).setSendTimeout(50L);
55+
verify(handler).setAsync(true);
56+
}
57+
58+
void testHandler(SnsMessageHandler mock, Context context) {
59+
assertThat(context.arguments()).asInstanceOf(InstanceOfAssertFactories.LIST)
60+
.contains(sns);
61+
}
62+
}

0 commit comments

Comments
 (0)