diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolver.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolver.java index 099fa1ae6f4..d14a4878e86 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolver.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolver.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. @@ -106,17 +106,22 @@ public class PayloadArgumentResolver implements HandlerMethodArgumentResolver { } Class targetClass = parameter.getParameterType(); - if (ClassUtils.isAssignable(targetClass, payload.getClass())) { + Class payloadClass = payload.getClass(); + if (ClassUtils.isAssignable(targetClass, payloadClass)) { validate(message, parameter, payload); return payload; } else { - payload = (this.converter instanceof SmartMessageConverter ? - ((SmartMessageConverter) this.converter).fromMessage(message, targetClass, parameter) : - this.converter.fromMessage(message, targetClass)); + if (this.converter instanceof SmartMessageConverter) { + SmartMessageConverter smartConverter = (SmartMessageConverter) this.converter; + payload = smartConverter.fromMessage(message, targetClass, parameter); + } + else { + payload = this.converter.fromMessage(message, targetClass); + } if (payload == null) { - throw new MessageConversionException(message, - "No converter found to convert to " + targetClass + ", message=" + message); + throw new MessageConversionException(message, "Cannot convert from [" + + payloadClass.getName() + "] to [" + targetClass.getName() + "] for " + message); } validate(message, parameter, payload); return payload; diff --git a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolverTests.java b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolverTests.java index ffc09541095..33a098221e9 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolverTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/handler/annotation/support/PayloadArgumentResolverTests.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. @@ -132,7 +132,7 @@ public class PayloadArgumentResolverTests { Message notEmptyMessage = MessageBuilder.withPayload(123).build(); thrown.expect(MessageConversionException.class); - thrown.expectMessage("No converter found"); + thrown.expectMessage("Cannot convert"); this.resolver.resolveArgument(this.paramAnnotatedRequired, notEmptyMessage); }