diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java index 92558e7b1d..1d55191f1f 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/HandlerMethodArgumentResolverComposite.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2014 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,6 +32,7 @@ import org.springframework.util.Assert; * for faster lookups. * * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 4.0 */ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgumentResolver { @@ -42,6 +43,39 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu new ConcurrentHashMap(256); + /** + * Add the given {@link HandlerMethodArgumentResolver}. + */ + public HandlerMethodArgumentResolverComposite addResolver(HandlerMethodArgumentResolver argumentResolver) { + this.argumentResolvers.add(argumentResolver); + return this; + } + + /** + * Add the given {@link HandlerMethodArgumentResolver}s. + * @since 4.3 + */ + public HandlerMethodArgumentResolverComposite addResolvers(HandlerMethodArgumentResolver... resolvers) { + if (resolvers != null) { + for (HandlerMethodArgumentResolver resolver : resolvers) { + this.argumentResolvers.add(resolver); + } + } + return this; + } + + /** + * Add the given {@link HandlerMethodArgumentResolver}s. + */ + public HandlerMethodArgumentResolverComposite addResolvers(List argumentResolvers) { + if (argumentResolvers != null) { + for (HandlerMethodArgumentResolver resolver : argumentResolvers) { + this.argumentResolvers.add(resolver); + } + } + return this; + } + /** * Return a read-only list with the contained resolvers, or an empty list. */ @@ -56,6 +90,7 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu this.argumentResolvers.clear(); } + /** * Whether the given {@linkplain MethodParameter method parameter} is supported by any registered * {@link HandlerMethodArgumentResolver}. @@ -94,24 +129,4 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu return result; } - /** - * Add the given {@link HandlerMethodArgumentResolver}. - */ - public HandlerMethodArgumentResolverComposite addResolver(HandlerMethodArgumentResolver argumentResolver) { - this.argumentResolvers.add(argumentResolver); - return this; - } - - /** - * Add the given {@link HandlerMethodArgumentResolver}s. - */ - public HandlerMethodArgumentResolverComposite addResolvers(List argumentResolvers) { - if (argumentResolvers != null) { - for (HandlerMethodArgumentResolver resolver : argumentResolvers) { - this.argumentResolvers.add(resolver); - } - } - return this; - } - } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java index 83c96c3aed..03e6fbeab7 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java @@ -34,8 +34,7 @@ import org.springframework.util.ReflectionUtils; * Provides a method for invoking the handler method for a given message after resolving its * method argument values through registered {@link HandlerMethodArgumentResolver}s. * - *

Use {@link #setMessageMethodArgumentResolvers(HandlerMethodArgumentResolver)} - * to customize the list of argument resolvers. + *

Use {@link #setMessageMethodArgumentResolvers} to customize the list of argument resolvers. * * @author Rossen Stoyanchev * @author Juergen Hoeller @@ -43,7 +42,7 @@ import org.springframework.util.ReflectionUtils; */ public class InvocableHandlerMethod extends HandlerMethod { - private HandlerMethodArgumentResolver argumentResolvers = new HandlerMethodArgumentResolverComposite(); + private HandlerMethodArgumentResolverComposite argumentResolvers = new HandlerMethodArgumentResolverComposite(); private ParameterNameDiscoverer parameterNameDiscoverer = new DefaultParameterNameDiscoverer(); @@ -79,7 +78,7 @@ public class InvocableHandlerMethod extends HandlerMethod { /** * Set {@link HandlerMethodArgumentResolver}s to use to use for resolving method argument values. */ - public void setMessageMethodArgumentResolvers(HandlerMethodArgumentResolver argumentResolvers) { + public void setMessageMethodArgumentResolvers(HandlerMethodArgumentResolverComposite argumentResolvers) { this.argumentResolvers = argumentResolvers; } @@ -199,7 +198,8 @@ public class InvocableHandlerMethod extends HandlerMethod { } catch (IllegalArgumentException ex) { assertTargetBean(getBridgedMethod(), getBean(), args); - throw new IllegalStateException(getInvocationErrorMessage(ex.getMessage(), args), ex); + String message = (ex.getMessage() != null ? ex.getMessage() : "Illegal argument"); + throw new IllegalStateException(getInvocationErrorMessage(message, args), ex); } catch (InvocationTargetException ex) { // Unwrap for HandlerExceptionResolvers ... diff --git a/spring-web/src/main/java/org/springframework/web/method/support/HandlerMethodArgumentResolverComposite.java b/spring-web/src/main/java/org/springframework/web/method/support/HandlerMethodArgumentResolverComposite.java index 904af697a3..e80655a9b0 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/HandlerMethodArgumentResolverComposite.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/HandlerMethodArgumentResolverComposite.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,6 +34,7 @@ import org.springframework.web.context.request.NativeWebRequest; * Previously resolved method parameters are cached for faster lookups. * * @author Rossen Stoyanchev + * @author Juergen Hoeller * @since 3.1 */ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgumentResolver { @@ -47,6 +48,39 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu new ConcurrentHashMap(256); + /** + * Add the given {@link HandlerMethodArgumentResolver}. + */ + public HandlerMethodArgumentResolverComposite addResolver(HandlerMethodArgumentResolver resolver) { + this.argumentResolvers.add(resolver); + return this; + } + + /** + * Add the given {@link HandlerMethodArgumentResolver}s. + * @since 4.3 + */ + public HandlerMethodArgumentResolverComposite addResolvers(HandlerMethodArgumentResolver... resolvers) { + if (resolvers != null) { + for (HandlerMethodArgumentResolver resolver : resolvers) { + this.argumentResolvers.add(resolver); + } + } + return this; + } + + /** + * Add the given {@link HandlerMethodArgumentResolver}s. + */ + public HandlerMethodArgumentResolverComposite addResolvers(List resolvers) { + if (resolvers != null) { + for (HandlerMethodArgumentResolver resolver : resolvers) { + this.argumentResolvers.add(resolver); + } + } + return this; + } + /** * Return a read-only list with the contained resolvers, or an empty list. */ @@ -54,6 +88,15 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu return Collections.unmodifiableList(this.argumentResolvers); } + /** + * Clear the list of configured resolvers. + * @since 4.3 + */ + public void clear() { + this.argumentResolvers.clear(); + } + + /** * Whether the given {@linkplain MethodParameter method parameter} is supported by any registered * {@link HandlerMethodArgumentResolver}. @@ -99,24 +142,4 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu return result; } - /** - * Add the given {@link HandlerMethodArgumentResolver}. - */ - public HandlerMethodArgumentResolverComposite addResolver(HandlerMethodArgumentResolver resolver) { - this.argumentResolvers.add(resolver); - return this; - } - - /** - * Add the given {@link HandlerMethodArgumentResolver}s. - */ - public HandlerMethodArgumentResolverComposite addResolvers(List resolvers) { - if (resolvers != null) { - for (HandlerMethodArgumentResolver resolver : resolvers) { - this.argumentResolvers.add(resolver); - } - } - return this; - } - } diff --git a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java index 6758c6b122..3a296369e8 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -39,8 +39,7 @@ import org.springframework.web.method.HandlerMethod; * conversion. Use the {@link #setDataBinderFactory(WebDataBinderFactory)} property to supply * a binder factory to pass to argument resolvers. * - *

Use {@link #setHandlerMethodArgumentResolvers(HandlerMethodArgumentResolverComposite)} - * to customize the list of argument resolvers. + *

Use {@link #setHandlerMethodArgumentResolvers} to customize the list of argument resolvers. * * @author Rossen Stoyanchev * @author Juergen Hoeller