Do you think it's worth doing something like the following, to avoid a nasty `ClassCastException` if the converter returns the wrong type?

					Object receive = receiveMessage;
					final AtomicReference<Class<?>> argType = new AtomicReference<Class<?>>();
					if (!(ReceiveAndReplyMessageCallback.class.isAssignableFrom(callback.getClass()))) {
						receive = RabbitTemplate.this.getRequiredMessageConverter().fromMessage(receiveMessage);
						ReflectionUtils.doWithMethods(callback.getClass(), new MethodCallback() {

							@Override
							public void doWith(Method method) throws IllegalArgumentException, IllegalAccessException {
								if (argType.get() == null || argType.get() == Object.class) {
									argType.set(method.getParameterTypes()[0]);
								}
							}
						}, new MethodFilter() {

							@Override
							public boolean matches(Method method) {
								return "handle".equals(method.getName()) && method.getParameterTypes().length == 1;
							}
						});
						Assert.notNull(argType.get());
						Assert.isInstanceOf(argType.get(), receive);
					}

					@SuppressWarnings("unchecked")
					S reply = callback.handle((R) receive);