@Override protected Tuple2<ConsumerEndpointFactoryBean, H> doGet() { this.endpointFactoryBean.setAdviceChain(this.adviceChain); if (this.handler instanceof AbstractReplyProducingMessageHandler && !this.adviceChain.isEmpty()) { ((AbstractReplyProducingMessageHandler) this.handler).setAdviceChain(this.adviceChain); } this.endpointFactoryBean.setHandler(this.handler); return super.doGet(); }
@Test public void testINT2858RetryAdviceAsFirstInAdviceChain() { final AtomicInteger counter = new AtomicInteger(3); AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() { @Override protected Object handleRequestMessage(Message<?> requestMessage) { return "foo"; } }; List<Advice> adviceChain = new ArrayList<>(); adviceChain.add(new RequestHandlerRetryAdvice()); adviceChain.add((MethodInterceptor) invocation -> { counter.getAndDecrement(); throw new RuntimeException("intentional"); }); handler.setBeanFactory(mock(BeanFactory.class)); handler.setAdviceChain(adviceChain); handler.afterPropertiesSet(); try { handler.handleMessage(new GenericMessage<>("test")); } catch (Exception e) { Throwable cause = e.getCause(); assertEquals(RuntimeException.class, cause.getClass()); assertEquals("intentional", cause.getMessage()); } assertTrue(counter.get() == 0); }
private void defaultStatefulRetryRecoverAfterThirdTryGuts(final AtomicInteger counter, AbstractReplyProducingMessageHandler handler, QueueChannel replies, RequestHandlerRetryAdvice advice) { advice.setRecoveryCallback(context -> "baz"); List<Advice> adviceChain = new ArrayList<>(); adviceChain.add(advice); handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); Message<String> message = new GenericMessage<>("Hello, world!"); for (int i = 0; i < 4; i++) { try { handler.handleMessage(message); } catch (Exception e) { } } assertTrue(counter.get() == 0); Message<?> reply = replies.receive(10000); assertNotNull(reply); assertEquals("baz", reply.getPayload()); }
@Test public void errorMessageSendingRecovererTests() { AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() { @Override protected Object handleRequestMessage(Message<?> requestMessage) { throw new RuntimeException("fooException"); } }; QueueChannel errors = new QueueChannel(); RequestHandlerRetryAdvice advice = new RequestHandlerRetryAdvice(); ErrorMessageSendingRecoverer recoverer = new ErrorMessageSendingRecoverer(errors); advice.setRecoveryCallback(recoverer); List<Advice> adviceChain = new ArrayList<>(); adviceChain.add(advice); handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); Message<String> message = new GenericMessage<>("Hello, world!"); handler.handleMessage(message); Message<?> error = errors.receive(10000); assertNotNull(error); assertEquals("fooException", ((Exception) error.getPayload()).getCause().getMessage()); }
}); handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
@Test public void defaultRetrySucceedOnThirdTry() { final AtomicInteger counter = new AtomicInteger(2); AbstractReplyProducingMessageHandler handler = new AbstractReplyProducingMessageHandler() { @Override protected Object handleRequestMessage(Message<?> requestMessage) { if (counter.getAndDecrement() > 0) { throw new RuntimeException("foo"); } return "bar"; } }; QueueChannel replies = new QueueChannel(); handler.setOutputChannel(replies); RequestHandlerRetryAdvice advice = new RequestHandlerRetryAdvice(); List<Advice> adviceChain = new ArrayList<Advice>(); adviceChain.add(advice); handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet(); Message<String> message = new GenericMessage<>("Hello, world!"); handler.handleMessage(message); assertTrue(counter.get() == -1); Message<?> reply = replies.receive(10000); assertNotNull(reply); assertEquals("bar", reply.getPayload()); }
((AbstractReplyProducingMessageHandler) actualHandler).setAdviceChain(this.adviceChain);
}); handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
((AbstractReplyProducingMessageHandler) handler).setAdviceChain(adviceChain);
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
handler.setAdviceChain(adviceChain); handler.setBeanFactory(mock(BeanFactory.class)); handler.afterPropertiesSet();
protected ConsumerEndpointSpec(H messageHandler) { super(messageHandler); if (messageHandler != null) { this.endpointFactoryBean.setHandler(messageHandler); } this.endpointFactoryBean.setAdviceChain(this.adviceChain); if (messageHandler instanceof AbstractReplyProducingMessageHandler) { ((AbstractReplyProducingMessageHandler) messageHandler).setAdviceChain(this.adviceChain); } }
protected ConsumerEndpointSpec(H messageHandler) { super(messageHandler); if (messageHandler != null) { this.endpointFactoryBean.setHandler(messageHandler); } this.endpointFactoryBean.setAdviceChain(this.adviceChain); if (messageHandler instanceof AbstractReplyProducingMessageHandler) { ((AbstractReplyProducingMessageHandler) messageHandler).setAdviceChain(this.adviceChain); } }
@Override protected Tuple2<ConsumerEndpointFactoryBean, H> doGet() { this.endpointFactoryBean.setAdviceChain(this.adviceChain); if (this.handler instanceof AbstractReplyProducingMessageHandler && !this.adviceChain.isEmpty()) { ((AbstractReplyProducingMessageHandler) this.handler).setAdviceChain(this.adviceChain); } this.endpointFactoryBean.setHandler(this.handler); return super.doGet(); }
((AbstractReplyProducingMessageHandler) actualHandler).setAdviceChain(this.adviceChain);