protected final MessageChannel resolveReplyChannelFromMessage(Message<?> message) { Object replyChannel = message.getHeaders().getReplyChannel(); if (replyChannel != null) { if (replyChannel instanceof MessageChannel) { return (MessageChannel) replyChannel; } if (logger.isWarnEnabled()) { logger.warn("Aggregator can only reply to a 'replyChannel' of type MessageChannel."); } } return null; }
@Override protected void handleRequestMessage(Message<?> requestMessage, ReplyMessageHolder replyMessageHolder) { if (requestMessage.getHeaders().getReplyChannel() == null) { this.verifyOutputChannel(); } replyMessageHolder.set(requestMessage); }
private MessageChannel resolveReplyChannel(Message<?> requestMessage) { MessageChannel replyChannel = this.getOutputChannel(); if (replyChannel == null) { Object replyChannelHeader= requestMessage.getHeaders().getReplyChannel(); if (replyChannelHeader != null) { if (replyChannelHeader instanceof MessageChannel) { replyChannel = (MessageChannel) replyChannelHeader; } else if (replyChannelHeader instanceof String) { Assert.state(this.channelResolver != null, "ChannelResolver is required for resolving a reply channel by name"); replyChannel = this.channelResolver.resolveChannelName((String) replyChannelHeader); } else { throw new ChannelResolutionException("expected a MessageChannel or String for 'replyChannel', but type is [" + replyChannelHeader.getClass() + "]"); } } } if (replyChannel == null) { throw new ChannelResolutionException( "unable to resolve reply channel for message: " + requestMessage); } return replyChannel; }
public boolean send(Message<?> message, long timeout) { Object replyChannelHeader = message.getHeaders().getReplyChannel(); if (replyChannelHeader == null) { throw new MessageHandlingException(message, "no replyChannel header available"); } MessageChannel replyChannel = null; if (replyChannelHeader instanceof MessageChannel) { replyChannel = (MessageChannel) replyChannelHeader; } else if (replyChannelHeader instanceof String) { Assert.notNull(getChannelResolver(), "ChannelResolver is required"); replyChannel = getChannelResolver().resolveChannelName((String) replyChannelHeader); } else { throw new MessageHandlingException(message, "invalid replyChannel type [" + replyChannelHeader.getClass() + "]"); } return (timeout >= 0) ? replyChannel.send(message, timeout) : replyChannel.send(message); } }
private Message<?> doSendAndReceive(Message<?> request, MessageChannel channel) { Object originalReplyChannelHeader = request.getHeaders().getReplyChannel(); Object originalErrorChannelHeader = request.getHeaders().getErrorChannel(); TemporaryReplyChannel replyChannel = new TemporaryReplyChannel(this.receiveTimeout); request = MessageBuilder.fromMessage(request) .setReplyChannel(replyChannel) .setErrorChannel(replyChannel) .build(); if (!this.doSend(request, channel)) { throw new MessageDeliveryException(request, "failed to send message to channel"); } Message<?> reply = this.doReceive(replyChannel); if (reply != null) { reply = MessageBuilder.fromMessage(reply) .setHeader(MessageHeaders.REPLY_CHANNEL, originalReplyChannelHeader) .setHeader(MessageHeaders.ERROR_CHANNEL, originalErrorChannelHeader) .build(); } return reply; }