1
16
17 package org.springframework.cloud.aws.messaging.listener.support;
18
19 import org.springframework.cloud.aws.messaging.listener.Visibility;
20 import org.springframework.core.MethodParameter;
21 import org.springframework.messaging.Message;
22 import org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver;
23 import org.springframework.util.ClassUtils;
24
25
29 public class VisibilityHandlerMethodArgumentResolver
30 implements HandlerMethodArgumentResolver {
31
32 private final String visibilityHeaderName;
33
34 public VisibilityHandlerMethodArgumentResolver(String visibilityHeaderName) {
35 this.visibilityHeaderName = visibilityHeaderName;
36 }
37
38 @Override
39 public boolean supportsParameter(MethodParameter parameter) {
40 return ClassUtils.isAssignable(Visibility.class, parameter.getParameterType());
41 }
42
43 @Override
44 public Object resolveArgument(MethodParameter parameter, Message<?> message)
45 throws Exception {
46 if (!message.getHeaders().containsKey(this.visibilityHeaderName)
47 || message.getHeaders().get(this.visibilityHeaderName) == null) {
48 throw new IllegalArgumentException(
49 "No visibility object found for message header: '"
50 + this.visibilityHeaderName + "'");
51 }
52 return message.getHeaders().get(this.visibilityHeaderName);
53 }
54
55 }
56