Skip to content

Commit 62320d5

Browse files
committed
feat: S3OutboundGatewayParser
1 parent fb216dc commit 62320d5

File tree

5 files changed

+66
-21
lines changed

5 files changed

+66
-21
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.springframework.integration.aws.config.xml;
2+
3+
import org.springframework.beans.factory.config.TypedStringValue;
4+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
5+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
6+
import org.springframework.beans.factory.xml.ParserContext;
7+
import org.springframework.integration.aws.outbound.S3MessageHandler;
8+
import org.springframework.integration.config.ExpressionFactoryBean;
9+
import org.w3c.dom.Element;
10+
11+
public class S3MessageHandlerParser {
12+
13+
private final boolean produceReply;
14+
15+
public S3MessageHandlerParser(boolean produceReply) {
16+
this.produceReply = produceReply;
17+
}
18+
19+
public XmlBeanDefinitionBuilder parse(Element element, ParserContext parserContext) {
20+
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, S3MessageHandler.class)
21+
.addExclusiveConstructorArgReference("s3", "transfer-manager")
22+
.addExclusiveConstructorArgValue("bucket", "bucket-expression", TypedStringValue::new, this::expression)
23+
.configure(def -> def.addConstructorArgValue(produceReply))
24+
.setPropertyValueIfAttributeDefined("key-expression")
25+
.setPropertyValueIfAttributeDefined("destination-bucket-expression")
26+
.setPropertyValueIfAttributeDefined("destination-key-expression")
27+
.setPropertyValueIfExclusiveAttributeDefined("command", "command-expression")
28+
.setPropertyReferenceIfAttributeDefined("upload-metadata-provider")
29+
;
30+
}
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+
}
38+
}
Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,14 @@
11
package org.springframework.integration.aws.config.xml;
22

3-
import org.springframework.beans.factory.config.TypedStringValue;
43
import org.springframework.beans.factory.support.AbstractBeanDefinition;
5-
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
64
import org.springframework.beans.factory.xml.ParserContext;
7-
import org.springframework.integration.aws.outbound.S3MessageHandler;
8-
import org.springframework.integration.config.ExpressionFactoryBean;
95
import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser;
106
import org.w3c.dom.Element;
117

128
public class S3OutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser {
139

1410
@Override
1511
protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) {
16-
return XmlBeanDefinitionBuilder.newInstance(element, parserContext, S3MessageHandler.class)
17-
.addExclusiveConstructorArgReference("s3", "transfer-manager")
18-
.addExclusiveConstructorArgValue("bucket", "bucket-expression", TypedStringValue::new, this::expression)
19-
.setPropertyValueIfAttributeDefined("key-expression")
20-
.setPropertyValueIfAttributeDefined("destination-bucket-expression")
21-
.setPropertyValueIfAttributeDefined("destination-key-expression")
22-
.setPropertyValueIfExclusiveAttributeDefined("command", "command-expression")
23-
.setPropertyReferenceIfAttributeDefined("upload-metadata-provider")
24-
.build();
12+
return new S3MessageHandlerParser(false).parse(element, parserContext).build();
2513
}
26-
27-
private AbstractBeanDefinition expression(String value) {
28-
return BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class)
29-
.addConstructorArgValue(value)
30-
.applyCustomizers(def -> def.setAutowireCandidate(false))
31-
.getBeanDefinition();
32-
}
33-
}
14+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package org.springframework.integration.aws.config.xml;
2+
3+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
4+
import org.springframework.beans.factory.xml.ParserContext;
5+
import org.springframework.integration.config.xml.AbstractConsumerEndpointParser;
6+
import org.w3c.dom.Element;
7+
8+
public class S3OutboundGatewayParser extends AbstractConsumerEndpointParser {
9+
10+
@Override
11+
protected String getInputChannelAttributeName() {
12+
return "request-channel";
13+
}
14+
15+
@Override
16+
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
17+
return new S3MessageHandlerParser(true)
18+
.parse(element, parserContext)
19+
.setPropertyValue("outputChannelName", "reply-channel")
20+
.setPropertyValue("sendTimeout", "reply-timeout")
21+
.getBeanDefinitionBuilder()
22+
;
23+
}
24+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
s3-inbound-channel-adapter: org.springframework.integration.aws.config.xml.S3InboundChannelAdapterParser
22
s3-inbound-streaming-channel-adapter: org.springframework.integration.aws.config.xml.S3InboundStreamingChannelAdapterParser
33
s3-outbound-channel-adapter: org.springframework.integration.aws.config.xml.S3OutboundChannelAdapterParser
4+
s3-outbound-gateway: org.springframework.integration.aws.config.xml.S3OutboundGatewayParser
45
sqs-outbound-channel-adapter: org.springframework.integration.aws.config.xml.SqsOutboundChannelAdapterParser
56
sqs-message-driven-channel-adapter: org.springframework.integration.aws.config.xml.SqsMessageDrivenChannelAdapterParser

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
@@ -20,6 +20,7 @@ void test() {
2020
.hasEntrySatisfying("s3-inbound-channel-adapter", instanceOf(S3InboundChannelAdapterParser.class))
2121
.hasEntrySatisfying("s3-inbound-streaming-channel-adapter", instanceOf(S3InboundStreamingChannelAdapterParser.class))
2222
.hasEntrySatisfying("s3-outbound-channel-adapter", instanceOf(S3OutboundChannelAdapterParser.class))
23+
.hasEntrySatisfying("s3-outbound-gateway", instanceOf(S3OutboundGatewayParser.class))
2324
;
2425
}
2526

0 commit comments

Comments
 (0)