@Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { setDestinationResolver(new BeanFactoryMessageChannelDestinationResolver(beanFactory)); }
@Override @Nullable protected final Message<?> doSendAndReceive(MessageChannel channel, Message<?> requestMessage) { Assert.notNull(channel, "'channel' is required"); Object originalReplyChannelHeader = requestMessage.getHeaders().getReplyChannel(); Object originalErrorChannelHeader = requestMessage.getHeaders().getErrorChannel(); long sendTimeout = sendTimeout(requestMessage); long receiveTimeout = receiveTimeout(requestMessage); TemporaryReplyChannel tempReplyChannel = new TemporaryReplyChannel(this.throwExceptionOnLateReply); requestMessage = MessageBuilder.fromMessage(requestMessage).setReplyChannel(tempReplyChannel) .setHeader(this.sendTimeoutHeader, null) .setHeader(this.receiveTimeoutHeader, null) .setErrorChannel(tempReplyChannel).build(); try { doSend(channel, requestMessage, sendTimeout); } catch (RuntimeException ex) { tempReplyChannel.setSendFailed(true); throw ex; } Message<?> replyMessage = this.doReceive(tempReplyChannel, receiveTimeout); if (replyMessage != null) { replyMessage = MessageBuilder.fromMessage(replyMessage) .setHeader(MessageHeaders.REPLY_CHANNEL, originalReplyChannelHeader) .setHeader(MessageHeaders.ERROR_CHANNEL, originalErrorChannelHeader) .build(); } return replyMessage; }
private long sendTimeout(Message<?> requestMessage) { Long sendTimeout = headerToLong(requestMessage.getHeaders().get(this.sendTimeoutHeader)); return (sendTimeout != null ? sendTimeout : this.sendTimeout); }
@Override protected final void doSend(MessageChannel channel, Message<?> message) { doSend(channel, message, sendTimeout(message)); }
@Before public void setup() { this.messageChannel = new StubMessageChannel(); this.template = new GenericMessagingTemplate(); this.template.setDefaultDestination(this.messageChannel); this.template.setDestinationResolver(new TestDestinationResolver()); this.executor = new ThreadPoolTaskExecutor(); this.executor.afterPropertiesSet(); }
@Override @Nullable protected final Message<?> doReceive(MessageChannel channel) { return doReceive(channel, this.receiveTimeout); }
/** * Create a MessagingTemplate with the given default channel. * @param defaultChannel the default {@link MessageChannel} for {@code send} operations */ public MessagingTemplate(MessageChannel defaultChannel) { super.setDefaultDestination(defaultChannel); }
@Override public Message<?> sendAndReceive(MessageChannel destination, Message<?> requestMessage) { if (!this.throwExceptionOnLateReplySet) { synchronized (this) { if (!this.throwExceptionOnLateReplySet) { Properties integrationProperties = IntegrationContextUtils.getIntegrationProperties(this.beanFactory); Boolean throwExceptionOnLateReply = Boolean.valueOf(integrationProperties .getProperty(IntegrationProperties.THROW_EXCEPTION_ON_LATE_REPLY)); super.setThrowExceptionOnLateReply(throwExceptionOnLateReply); this.throwExceptionOnLateReplySet = true; } } } return super.sendAndReceive(destination, requestMessage); }
@Override public void setThrowExceptionOnLateReply(boolean throwExceptionOnLateReply) { super.setThrowExceptionOnLateReply(throwExceptionOnLateReply); this.throwExceptionOnLateReplySet = true; }
@Override protected final void doSend(MessageChannel channel, Message<?> message) { doSend(channel, message, sendTimeout(message)); }
@Override @Nullable protected final Message<?> doReceive(MessageChannel channel) { return doReceive(channel, this.receiveTimeout); }
/** * Invokes {@code setDefaultDestination(MessageChannel)} - provided for * backward compatibility. * @param channel the channel to set. */ public void setDefaultChannel(MessageChannel channel) { super.setDefaultDestination(channel); }
@Override public Message<?> sendAndReceive(MessageChannel destination, Message<?> requestMessage) { if (!this.throwExceptionOnLateReplySet) { synchronized (this) { if (!this.throwExceptionOnLateReplySet) { Properties integrationProperties = IntegrationContextUtils.getIntegrationProperties(this.beanFactory); Boolean throwExceptionOnLateReply = Boolean.valueOf(integrationProperties .getProperty(IntegrationProperties.THROW_EXCEPTION_ON_LATE_REPLY)); super.setThrowExceptionOnLateReply(throwExceptionOnLateReply); this.throwExceptionOnLateReplySet = true; } } } return super.sendAndReceive(destination, requestMessage); }
@Override public void setThrowExceptionOnLateReply(boolean throwExceptionOnLateReply) { super.setThrowExceptionOnLateReply(throwExceptionOnLateReply); this.throwExceptionOnLateReplySet = true; }
@Override @Nullable protected final Message<?> doSendAndReceive(MessageChannel channel, Message<?> requestMessage) { Assert.notNull(channel, "'channel' is required"); Object originalReplyChannelHeader = requestMessage.getHeaders().getReplyChannel(); Object originalErrorChannelHeader = requestMessage.getHeaders().getErrorChannel(); long sendTimeout = sendTimeout(requestMessage); long receiveTimeout = receiveTimeout(requestMessage); TemporaryReplyChannel tempReplyChannel = new TemporaryReplyChannel(this.throwExceptionOnLateReply); requestMessage = MessageBuilder.fromMessage(requestMessage).setReplyChannel(tempReplyChannel) .setHeader(this.sendTimeoutHeader, null) .setHeader(this.receiveTimeoutHeader, null) .setErrorChannel(tempReplyChannel).build(); try { doSend(channel, requestMessage, sendTimeout); } catch (RuntimeException ex) { tempReplyChannel.setSendFailed(true); throw ex; } Message<?> replyMessage = this.doReceive(tempReplyChannel, receiveTimeout); if (replyMessage != null) { replyMessage = MessageBuilder.fromMessage(replyMessage) .setHeader(MessageHeaders.REPLY_CHANNEL, originalReplyChannelHeader) .setHeader(MessageHeaders.ERROR_CHANNEL, originalErrorChannelHeader) .build(); } return replyMessage; }
/** * Overridden to set the destination resolver to a {@link BeanFactoryChannelResolver}. */ @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; //NOSONAR - non-sync is ok here super.setDestinationResolver(new BeanFactoryChannelResolver(beanFactory)); }
@Override protected final void doSend(MessageChannel channel, Message<?> message) { doSend(channel, message, sendTimeout(message)); }
private long receiveTimeout(Message<?> requestMessage) { Long receiveTimeout = headerToLong(requestMessage.getHeaders().get(this.receiveTimeoutHeader)); return (receiveTimeout != null ? receiveTimeout : this.receiveTimeout); }
@Override @Nullable protected final Message<?> doReceive(MessageChannel channel) { return doReceive(channel, this.receiveTimeout); }
/** * Create a MessagingTemplate with the given default channel. * @param defaultChannel the default {@link MessageChannel} for {@code send} operations */ public MessagingTemplate(MessageChannel defaultChannel) { super.setDefaultDestination(defaultChannel); }