88import org .springframework .integration .config .xml .AbstractOutboundChannelAdapterParser ;
99import org .w3c .dom .Element ;
1010
11+ import java .util .List ;
12+
1113import static org .springframework .integration .config .xml .IntegrationNamespaceUtils .*;
1214
1315public class SqsOutboundChannelAdapterParser extends AbstractOutboundChannelAdapterParser {
@@ -17,15 +19,37 @@ protected AbstractBeanDefinition parseConsumer(Element element, ParserContext pa
1719 var builder = BeanDefinitionBuilder .genericBeanDefinition (SqsMessageHandler .class )
1820 .addConstructorArgReference (element .getAttribute ("sqs" ));
1921
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" );
22+ setExpressionValueIfAttributeDefined (builder , element , parserContext , "queue" );
23+ setExpressionValueIfAttributeDefined (builder , element , parserContext , "delay" );
24+ setExpressionValueIfAttributeDefined (builder , element , parserContext , "message-group-id" );
25+ setExpressionValueIfAttributeDefined (builder , element , parserContext , "message-deduplication-id" );
26+ setExpressionValueIfAttributeDefined (builder , element , parserContext , "send-timeout" );
27+
28+ setReferenceIfAttributeDefined (builder , element , "success-channel" , "outputChannelName" );
29+
30+ if (element .hasAttribute ("sync" )) {
31+ var sync = element .getAttribute ("sync" );
32+ if ("true" .equalsIgnoreCase (sync )) {
33+ builder .addPropertyValue ("async" , "false" );
34+ } else if ("false" .equalsIgnoreCase (sync )) {
35+ builder .addPropertyValue ("async" , "true" );
36+ } else {
37+ parserContext .getReaderContext ()
38+ .error ("expected boolean for sync attribute" , element );
39+ }
40+ }
41+
42+ for (var attribute : List .of ("failure-channel" , "resource-id-resolver" , "error-message-strategy" , "async-handler" )) {
43+ if (element .hasAttribute (attribute )) {
44+ parserContext .getReaderContext ()
45+ .warning ("Attribute" + attribute + " not supported" , element );
46+ }
47+ }
2448
2549 return builder .getBeanDefinition ();
2650 }
27-
28- private void setIfAttributeDefined ( Element element , ParserContext parserContext , BeanDefinitionBuilder builder , String attribute ) {
51+
52+ private void setExpressionValueIfAttributeDefined ( BeanDefinitionBuilder builder , Element element , ParserContext parserContext , String attribute ) {
2953 if (element .hasAttribute (attribute ) && element .hasAttribute (attribute + "-expression" )) {
3054 parserContext .getReaderContext ()
3155 .error (attribute + " and " + attribute + "-expression attributes are mutually exclusive" , element );
0 commit comments