1
16
17 package org.springframework.cloud.aws.messaging.config;
18
19 import java.util.Arrays;
20 import java.util.List;
21
22 import com.amazonaws.services.sqs.AmazonSQS;
23 import com.amazonaws.services.sqs.AmazonSQSAsync;
24
25 import org.springframework.beans.factory.BeanFactory;
26 import org.springframework.cloud.aws.core.env.ResourceIdResolver;
27 import org.springframework.cloud.aws.messaging.core.QueueMessagingTemplate;
28 import org.springframework.cloud.aws.messaging.listener.QueueMessageHandler;
29 import org.springframework.cloud.aws.messaging.listener.SendToHandlerMethodReturnValueHandler;
30 import org.springframework.messaging.converter.MappingJackson2MessageConverter;
31 import org.springframework.messaging.converter.MessageConverter;
32 import org.springframework.messaging.core.DestinationResolvingMessageSendingOperations;
33 import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver;
34 import org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler;
35 import org.springframework.util.CollectionUtils;
36
37
42 public class QueueMessageHandlerFactory {
43
44 private List<HandlerMethodArgumentResolver> argumentResolvers;
45
46 private List<HandlerMethodReturnValueHandler> returnValueHandlers;
47
48 private DestinationResolvingMessageSendingOperations<?> sendToMessagingTemplate;
49
50 private AmazonSQSAsync amazonSqs;
51
52 private ResourceIdResolver resourceIdResolver;
53
54 private BeanFactory beanFactory;
55
56 private List<MessageConverter> messageConverters;
57
58 public void setArgumentResolvers(
59 List<HandlerMethodArgumentResolver> argumentResolvers) {
60 this.argumentResolvers = argumentResolvers;
61 }
62
63 public void setReturnValueHandlers(
64 List<HandlerMethodReturnValueHandler> returnValueHandlers) {
65 this.returnValueHandlers = returnValueHandlers;
66 }
67
68
76 public void setSendToMessagingTemplate(
77 DestinationResolvingMessageSendingOperations<?> sendToMessagingTemplate) {
78 this.sendToMessagingTemplate = sendToMessagingTemplate;
79 }
80
81 public AmazonSQS getAmazonSqs() {
82 return this.amazonSqs;
83 }
84
85
100 public void setAmazonSqs(AmazonSQSAsync amazonSqs) {
101 this.amazonSqs = amazonSqs;
102 }
103
104
111 public void setResourceIdResolver(ResourceIdResolver resourceIdResolver) {
112 this.resourceIdResolver = resourceIdResolver;
113 }
114
115
122 public void setBeanFactory(BeanFactory beanFactory) {
123 this.beanFactory = beanFactory;
124 }
125
126 public QueueMessageHandler createQueueMessageHandler() {
127 QueueMessageHandler queueMessageHandler = new QueueMessageHandler(
128 CollectionUtils.isEmpty(this.messageConverters)
129 ? Arrays.asList(getDefaultMappingJackson2MessageConverter())
130 : this.messageConverters);
131
132 if (!CollectionUtils.isEmpty(this.argumentResolvers)) {
133 queueMessageHandler.getCustomArgumentResolvers()
134 .addAll(this.argumentResolvers);
135 }
136 if (!CollectionUtils.isEmpty(this.returnValueHandlers)) {
137 queueMessageHandler.getCustomReturnValueHandlers()
138 .addAll(this.returnValueHandlers);
139 }
140
141 SendToHandlerMethodReturnValueHandler sendToHandlerMethodReturnValueHandler;
142 if (this.sendToMessagingTemplate != null) {
143 sendToHandlerMethodReturnValueHandler = new SendToHandlerMethodReturnValueHandler(
144 this.sendToMessagingTemplate);
145 }
146 else {
147 sendToHandlerMethodReturnValueHandler = new SendToHandlerMethodReturnValueHandler(
148 getDefaultSendToQueueMessagingTemplate(this.amazonSqs,
149 this.resourceIdResolver));
150
151 }
152 sendToHandlerMethodReturnValueHandler.setBeanFactory(this.beanFactory);
153 queueMessageHandler.getCustomReturnValueHandlers()
154 .add(sendToHandlerMethodReturnValueHandler);
155
156 return queueMessageHandler;
157 }
158
159 private QueueMessagingTemplate getDefaultSendToQueueMessagingTemplate(
160 AmazonSQSAsync amazonSqs, ResourceIdResolver resourceIdResolver) {
161 return new QueueMessagingTemplate(amazonSqs, resourceIdResolver,
162 getDefaultMappingJackson2MessageConverter());
163 }
164
165 public List<MessageConverter> getMessageConverters() {
166 return this.messageConverters;
167 }
168
169
175 public void setMessageConverters(List<MessageConverter> messageConverters) {
176 this.messageConverters = messageConverters;
177 }
178
179 private MappingJackson2MessageConverter getDefaultMappingJackson2MessageConverter() {
180 MappingJackson2MessageConverter jacksonMessageConverter = new MappingJackson2MessageConverter();
181 jacksonMessageConverter.setSerializedPayloadClass(String.class);
182 jacksonMessageConverter.setStrictContentTypeMatch(true);
183 return jacksonMessageConverter;
184 }
185
186 }
187