Skip to content

Commit 35f1457

Browse files
committed
feat: SnsInboundChannelAdapterParser implementation
1 parent 62320d5 commit 35f1457

File tree

7 files changed

+52
-13
lines changed

7 files changed

+52
-13
lines changed

int-aws-support/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ dependencies {
1010
implementation "org.springframework:spring-beans"
1111
implementation "org.springframework.integration:spring-integration-aws"
1212

13-
compileOnly "io.awspring.cloud:spring-cloud-aws-sqs"
1413
compileOnly "io.awspring.cloud:spring-cloud-aws-s3"
14+
compileOnly "io.awspring.cloud:spring-cloud-aws-sns"
15+
compileOnly "io.awspring.cloud:spring-cloud-aws-sqs"
1516
compileOnly "org.springframework.integration:spring-integration-file"
17+
compileOnly "org.springframework.integration:spring-integration-http"
1618
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package org.springframework.integration.aws.config.xml;
2+
3+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
4+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
5+
import org.springframework.integration.config.ExpressionFactoryBean;
6+
7+
public class ExpressionBeanDefinitionFactory {
8+
9+
public AbstractBeanDefinition createBeanDefinition(String value) {
10+
return BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
11+
.addConstructorArgValue(value)
12+
.applyCustomizers(def -> def.setAutowireCandidate(false))
13+
.getBeanDefinition();
14+
}
15+
}
Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package org.springframework.integration.aws.config.xml;
22

33
import org.springframework.beans.factory.config.TypedStringValue;
4-
import org.springframework.beans.factory.support.AbstractBeanDefinition;
5-
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
64
import org.springframework.beans.factory.xml.ParserContext;
75
import org.springframework.integration.aws.outbound.S3MessageHandler;
8-
import org.springframework.integration.config.ExpressionFactoryBean;
96
import org.w3c.dom.Element;
107

118
public class S3MessageHandlerParser {
@@ -19,7 +16,7 @@ public S3MessageHandlerParser(boolean produceReply) {
1916
public XmlBeanDefinitionBuilder parse(Element element, ParserContext parserContext) {
2017
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, S3MessageHandler.class)
2118
.addExclusiveConstructorArgReference("s3", "transfer-manager")
22-
.addExclusiveConstructorArgValue("bucket", "bucket-expression", TypedStringValue::new, this::expression)
19+
.addExclusiveConstructorArgValue("bucket", "bucket-expression", TypedStringValue::new, new ExpressionBeanDefinitionFactory()::createBeanDefinition)
2320
.configure(def -> def.addConstructorArgValue(produceReply))
2421
.setPropertyValueIfAttributeDefined("key-expression")
2522
.setPropertyValueIfAttributeDefined("destination-bucket-expression")
@@ -28,11 +25,4 @@ public XmlBeanDefinitionBuilder parse(Element element, ParserContext parserConte
2825
.setPropertyReferenceIfAttributeDefined("upload-metadata-provider")
2926
;
3027
}
31-
32-
private AbstractBeanDefinition expression(String value) {
33-
return BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
34-
.addConstructorArgValue(value)
35-
.applyCustomizers(def -> def.setAutowireCandidate(false))
36-
.getBeanDefinition();
37-
}
3828
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.springframework.integration.aws.config.xml;
2+
3+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
4+
import org.springframework.beans.factory.xml.ParserContext;
5+
import org.springframework.integration.aws.inbound.SnsInboundChannelAdapter;
6+
import org.springframework.integration.config.xml.AbstractChannelAdapterParser;
7+
import org.w3c.dom.Element;
8+
9+
public class SnsInboundChannelAdapterParser extends AbstractChannelAdapterParser {
10+
11+
@Override
12+
protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) {
13+
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, SnsInboundChannelAdapter.class)
14+
.addConstructorArgReference("sns")
15+
.addConstructorArgValue("path")
16+
.setPropertyValue("handle-notification-status")
17+
.setPropertyValueIfAttributeDefined("requestTimeout", "send-timeout")
18+
.setPropertyValueIfAttributeDefined("errorChannelName", "error-channel")
19+
.setPropertyValueIfAttributeDefined("payloadExpression", "payload-expression", new ExpressionBeanDefinitionFactory()::createBeanDefinition)
20+
.build();
21+
}
22+
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,14 @@ public XmlBeanDefinitionBuilder setPropertyValueIfAttributeDefined(String proper
113113
return this;
114114
}
115115

116+
public XmlBeanDefinitionBuilder setPropertyValueIfAttributeDefined(String propertyName, String attributeName, Function<String, ?> attributeValueMapper) {
117+
var value = element.getAttribute(attributeName);
118+
if (StringUtils.hasText(value)) {
119+
builder.addPropertyValue(propertyName, attributeValueMapper.apply(value));
120+
}
121+
return this;
122+
}
123+
116124
public XmlBeanDefinitionBuilder setExpressionValueIfAttributeDefined(String attribute) {
117125
return setPropertyValueIfExclusiveAttributeDefined(attribute, attribute + "-expression", attributeNameToPropertyName(attribute), attributeNameToPropertyName(attribute + "-expression-string"));
118126
}

int-aws-support/src/main/resources/org/springframework/integration/aws/config/xml/element-parser.mapping

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ s3-inbound-streaming-channel-adapter: org.springframework.integration.aws.config
33
s3-outbound-channel-adapter: org.springframework.integration.aws.config.xml.S3OutboundChannelAdapterParser
44
s3-outbound-gateway: org.springframework.integration.aws.config.xml.S3OutboundGatewayParser
55
sqs-outbound-channel-adapter: org.springframework.integration.aws.config.xml.SqsOutboundChannelAdapterParser
6-
sqs-message-driven-channel-adapter: org.springframework.integration.aws.config.xml.SqsMessageDrivenChannelAdapterParser
6+
sqs-message-driven-channel-adapter: org.springframework.integration.aws.config.xml.SqsMessageDrivenChannelAdapterParser
7+
sns-inbound-channel-adapter: org.springframework.integration.aws.config.xml.SnsInboundChannelAdapterParser

int-aws-support/src/test/java/org/springframework/integration/aws/config/xml/SpringIntegrationAwsNamespaceHandlerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ void test() {
2121
.hasEntrySatisfying("s3-inbound-streaming-channel-adapter", instanceOf(S3InboundStreamingChannelAdapterParser.class))
2222
.hasEntrySatisfying("s3-outbound-channel-adapter", instanceOf(S3OutboundChannelAdapterParser.class))
2323
.hasEntrySatisfying("s3-outbound-gateway", instanceOf(S3OutboundGatewayParser.class))
24+
.hasEntrySatisfying("sns-inbound-channel-adapter", instanceOf(SnsInboundChannelAdapterParser.class))
2425
;
2526
}
2627

0 commit comments

Comments
 (0)