@Nullable public Message<?> applyPostReceive(Message<?> message, MessageChannel channel) { Message<?> messageToUse = message; for (ChannelInterceptor interceptor : interceptors) { messageToUse = interceptor.postReceive(messageToUse, channel); if (messageToUse == null) { return null; } } return messageToUse; }
public boolean applyPreReceive(MessageChannel channel) { for (ChannelInterceptor interceptor : interceptors) { if (!interceptor.preReceive(channel)) { triggerAfterReceiveCompletion(null, channel, null); return false; } this.receiveInterceptorIndex++; } return true; }
public void triggerAfterReceiveCompletion( @Nullable Message<?> message, MessageChannel channel, @Nullable Exception ex) { for (int i = this.receiveInterceptorIndex; i >= 0; i--) { ChannelInterceptor interceptor = interceptors.get(i); try { interceptor.afterReceiveCompletion(message, channel, ex); } catch (Throwable ex2) { if (logger.isErrorEnabled()) { logger.error("Exception from afterReceiveCompletion in " + interceptor, ex2); } } } } }
@Test public void queueNameWithTruePreReceiveInterceptors() throws Exception { JmsChannelFactoryBean factoryBean = new JmsChannelFactoryBean(false); CachingConnectionFactory ccf = new CachingConnectionFactory(this.connectionFactory); ccf.setCacheConsumers(false); factoryBean.setConnectionFactory(ccf); factoryBean.setDestinationName("someDynamicQueue"); factoryBean.setPubSubDomain(false); List<ChannelInterceptor> interceptorList = new ArrayList<ChannelInterceptor>(); ChannelInterceptor interceptor = spy(new SampleInterceptor(true)); interceptorList.add(interceptor); factoryBean.setInterceptors(interceptorList); factoryBean.setBeanFactory(mock(BeanFactory.class)); factoryBean.afterPropertiesSet(); PollableJmsChannel channel = (PollableJmsChannel) factoryBean.getObject(); boolean sent1 = channel.send(new GenericMessage<String>("foo")); assertTrue(sent1); Message<?> result1 = channel.receive(10000); assertNotNull(result1); verify(interceptor, times(1)).preReceive(Mockito.any(MessageChannel.class)); verify(interceptor, times(1)).postReceive(Mockito.any(Message.class), Mockito.any(MessageChannel.class)); }
public void triggerAfterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, @Nullable Exception ex) { for (int i = this.sendInterceptorIndex; i >= 0; i--) { ChannelInterceptor interceptor = interceptors.get(i); try { interceptor.afterSendCompletion(message, channel, sent, ex); } catch (Throwable ex2) { logger.error("Exception from afterSendCompletion in " + interceptor, ex2); } } }
public void applyPostSend(Message<?> message, MessageChannel channel, boolean sent) { for (ChannelInterceptor interceptor : interceptors) { interceptor.postSend(message, channel, sent); } }
@Nullable public Message<?> applyPreSend(Message<?> message, MessageChannel channel) { Message<?> messageToUse = message; for (ChannelInterceptor interceptor : interceptors) { Message<?> resolvedMessage = interceptor.preSend(messageToUse, channel); if (resolvedMessage == null) { String name = interceptor.getClass().getSimpleName(); if (logger.isDebugEnabled()) { logger.debug(name + " returned null from preSend, i.e. precluding the send."); } triggerAfterSendCompletion(messageToUse, channel, false, null); return null; } messageToUse = resolvedMessage; this.sendInterceptorIndex++; } return messageToUse; }
@Test public void queueNameWithFalsePreReceiveInterceptors() throws Exception { JmsChannelFactoryBean factoryBean = new JmsChannelFactoryBean(false); CachingConnectionFactory ccf = new CachingConnectionFactory(this.connectionFactory); ccf.setCacheConsumers(false); factoryBean.setConnectionFactory(ccf); factoryBean.setDestinationName("someDynamicQueue"); factoryBean.setPubSubDomain(false); List<ChannelInterceptor> interceptorList = new ArrayList<ChannelInterceptor>(); ChannelInterceptor interceptor = spy(new SampleInterceptor(false)); interceptorList.add(interceptor); factoryBean.setInterceptors(interceptorList); factoryBean.setBeanFactory(mock(BeanFactory.class)); factoryBean.afterPropertiesSet(); PollableJmsChannel channel = (PollableJmsChannel) factoryBean.getObject(); boolean sent1 = channel.send(new GenericMessage<String>("foo")); assertTrue(sent1); Message<?> result1 = channel.receive(10000); assertNull(result1); verify(interceptor, times(1)).preReceive(Mockito.any(MessageChannel.class)); verify(interceptor, times(0)).postReceive(Mockito.any(Message.class), Mockito.any(MessageChannel.class)); }
public void afterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, @Nullable Exception ex, Deque<ChannelInterceptor> interceptorStack) { for (Iterator<ChannelInterceptor> iterator = interceptorStack.descendingIterator(); iterator.hasNext(); ) { ChannelInterceptor interceptor = iterator.next(); try { interceptor.afterSendCompletion(message, channel, sent, ex); } catch (Exception ex2) { this.logger.error("Exception from afterSendCompletion in " + interceptor, ex2); } } }
public void postSend(Message<?> message, MessageChannel channel, boolean sent) { if (this.size > 0) { for (ChannelInterceptor interceptor : this.interceptors) { interceptor.postSend(message, channel, sent); } } }
@Nullable public Message<?> preSend(Message<?> messageArg, MessageChannel channel, Deque<ChannelInterceptor> interceptorStack) { Message<?> message = messageArg; if (this.size > 0) { for (ChannelInterceptor interceptor : this.interceptors) { Message<?> previous = message; message = interceptor.preSend(message, channel); if (message == null) { if (this.logger.isDebugEnabled()) { this.logger.debug(interceptor.getClass().getSimpleName() + " returned null from preSend, i.e. precluding the send."); } afterSendCompletion(previous, channel, false, null, interceptorStack); return null; } interceptorStack.add(interceptor); } } return message; }
@Nullable public Message<?> applyPostReceive(Message<?> message, MessageChannel channel) { Message<?> messageToUse = message; for (ChannelInterceptor interceptor : interceptors) { messageToUse = interceptor.postReceive(messageToUse, channel); if (messageToUse == null) { return null; } } return messageToUse; }
public boolean applyPreReceive(MessageChannel channel) { for (ChannelInterceptor interceptor : interceptors) { if (!interceptor.preReceive(channel)) { triggerAfterReceiveCompletion(null, channel, null); return false; } this.receiveInterceptorIndex++; } return true; }
public void triggerAfterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, @Nullable Exception ex) { for (int i = this.sendInterceptorIndex; i >= 0; i--) { ChannelInterceptor interceptor = interceptors.get(i); try { interceptor.afterSendCompletion(message, channel, sent, ex); } catch (Throwable ex2) { logger.error("Exception from afterSendCompletion in " + interceptor, ex2); } } }
public void applyPostSend(Message<?> message, MessageChannel channel, boolean sent) { for (ChannelInterceptor interceptor : interceptors) { interceptor.postSend(message, channel, sent); } }
public void afterReceiveCompletion(@Nullable Message<?> message, MessageChannel channel, @Nullable Exception ex, Deque<ChannelInterceptor> interceptorStack) { for (Iterator<ChannelInterceptor> iterator = interceptorStack.descendingIterator(); iterator.hasNext(); ) { ChannelInterceptor interceptor = iterator.next(); try { interceptor.afterReceiveCompletion(message, channel, ex); } catch (Exception ex2) { this.logger.error("Exception from afterReceiveCompletion in " + interceptor, ex2); } } }
@Nullable public Message<?> applyPreSend(Message<?> message, MessageChannel channel) { Message<?> messageToUse = message; for (ChannelInterceptor interceptor : interceptors) { Message<?> resolvedMessage = interceptor.preSend(messageToUse, channel); if (resolvedMessage == null) { String name = interceptor.getClass().getSimpleName(); if (logger.isDebugEnabled()) { logger.debug(name + " returned null from preSend, i.e. precluding the send."); } triggerAfterSendCompletion(messageToUse, channel, false, null); return null; } messageToUse = resolvedMessage; this.sendInterceptorIndex++; } return messageToUse; }
@Nullable public Message<?> postReceive(Message<?> messageArg, MessageChannel channel) { Message<?> message = messageArg; if (this.size > 0) { for (ChannelInterceptor interceptor : this.interceptors) { message = interceptor.postReceive(message, channel); if (message == null) { return null; } } } return message; }
public boolean preReceive(MessageChannel channel, Deque<ChannelInterceptor> interceptorStack) { if (this.size > 0) { for (ChannelInterceptor interceptor : this.interceptors) { if (!interceptor.preReceive(channel)) { afterReceiveCompletion(null, channel, null, interceptorStack); return false; } interceptorStack.add(interceptor); } } return true; }
public void triggerAfterSendCompletion(Message<?> message, MessageChannel channel, boolean sent, @Nullable Exception ex) { for (int i = this.sendInterceptorIndex; i >= 0; i--) { ChannelInterceptor interceptor = interceptors.get(i); try { interceptor.afterSendCompletion(message, channel, sent, ex); } catch (Throwable ex2) { logger.error("Exception from afterSendCompletion in " + interceptor, ex2); } } }