Skip to content

Commit c08b31e

Browse files
committed
feat: SqsMessageDrivenChannelAdapterParser expression properties
1 parent 1d81364 commit c08b31e

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,37 @@
11
package org.springframework.integration.aws.config.xml;
22

3-
import org.springframework.beans.factory.config.BeanDefinition;
4-
import org.springframework.beans.factory.xml.BeanDefinitionParser;
3+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
4+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
55
import org.springframework.beans.factory.xml.ParserContext;
6+
import org.springframework.core.Conventions;
7+
import org.springframework.integration.aws.outbound.SqsMessageHandler;
8+
import org.springframework.integration.config.xml.AbstractOutboundChannelAdapterParser;
69
import org.w3c.dom.Element;
710

8-
public class SqsOutboundChannelAdapterParser implements BeanDefinitionParser {
11+
import static org.springframework.integration.config.xml.IntegrationNamespaceUtils.*;
12+
13+
public class SqsOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser {
914

1015
@Override
11-
public BeanDefinition parse(Element element, ParserContext parserContext) {
12-
return null;
16+
protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) {
17+
var builder = BeanDefinitionBuilder.genericBeanDefinition(SqsMessageHandler.class)
18+
.addConstructorArgReference(element.getAttribute("sqs"));
19+
20+
setIfAttributeDefined(element, parserContext, builder, "queue");
21+
setIfAttributeDefined(element, parserContext, builder, "delay");
22+
setIfAttributeDefined(element, parserContext, builder, "message-group-id");
23+
setIfAttributeDefined(element, parserContext, builder, "message-deduplication-id");
24+
25+
return builder.getBeanDefinition();
26+
}
27+
28+
private void setIfAttributeDefined(Element element, ParserContext parserContext, BeanDefinitionBuilder builder, String attribute) {
29+
if (element.hasAttribute(attribute) && element.hasAttribute(attribute + "-expression")) {
30+
parserContext.getReaderContext()
31+
.error(attribute + " and " + attribute + "-expression attributes are mutually exclusive", element);
32+
} else {
33+
setValueIfAttributeDefined(builder, element, attribute);
34+
setValueIfAttributeDefined(builder, element, attribute + "-expression", Conventions.attributeNameToPropertyName(attribute + "-expression-string"));
35+
}
1336
}
1437
}

0 commit comments

Comments
 (0)