@SuppressWarnings(UNCHECKED) private <R, S> boolean sendReply(final ReceiveAndReplyCallback<R, S> callback, final ReplyToAddressCallback<S> replyToAddressCallback, Channel channel, Message receiveMessage) throws Exception { // NOSONAR TODO change to IOException in 2.2. Object receive = receiveMessage; if (!(ReceiveAndReplyMessageCallback.class.isAssignableFrom(callback.getClass()))) { receive = getRequiredMessageConverter().fromMessage(receiveMessage); } S reply; try { reply = callback.handle((R) receive); } catch (ClassCastException e) { StackTraceElement[] trace = e.getStackTrace(); if (trace[0].getMethodName().equals("handle") && trace[1].getFileName().equals("RabbitTemplate.java")) { throw new IllegalArgumentException("ReceiveAndReplyCallback '" + callback + "' can't handle received object '" + receive + "'", e); } else { throw e; } } if (reply != null) { doSendReply(replyToAddressCallback, channel, receiveMessage, reply); } else if (isChannelLocallyTransacted(channel)) { channel.txCommit(); } return true; }
@SuppressWarnings(UNCHECKED) private <R, S> boolean sendReply(final ReceiveAndReplyCallback<R, S> callback, final ReplyToAddressCallback<S> replyToAddressCallback, Channel channel, Message receiveMessage) throws Exception { // NOSONAR TODO change to IOException in 2.2. Object receive = receiveMessage; if (!(ReceiveAndReplyMessageCallback.class.isAssignableFrom(callback.getClass()))) { receive = getRequiredMessageConverter().fromMessage(receiveMessage); } S reply; try { reply = callback.handle((R) receive); } catch (ClassCastException e) { StackTraceElement[] trace = e.getStackTrace(); if (trace[0].getMethodName().equals("handle") && trace[1].getFileName().equals("RabbitTemplate.java")) { throw new IllegalArgumentException("ReceiveAndReplyCallback '" + callback + "' can't handle received object '" + receive + "'", e); } else { throw e; } } if (reply != null) { doSendReply(replyToAddressCallback, channel, receiveMessage, reply); } else if (isChannelLocallyTransacted(channel)) { channel.txCommit(); } return true; }