private MessageSourceNode sourceNode(String name, SourcePollingChannelAdapter adapter) { String errorChannel = adapter.getDefaultErrorChannel() != null ? adapter.getDefaultErrorChannel().toString() : null; String outputChannel = adapter.getOutputChannel() != null ? adapter.getOutputChannel().toString() : null; return new MessageSourceNode(this.nodeId.incrementAndGet(), name, adapter.getMessageSource(), outputChannel, errorChannel); }
private void postProcessAbstractEndpoint(Object bean) { if (bean instanceof IntegrationConsumer) { IntegrationConsumer integrationConsumer = (IntegrationConsumer) bean; MessageHandler handler = integrationConsumer.getHandler(); if (handler instanceof MessageHandlerMetrics) { MessageHandlerMetrics messageHandlerMetrics = (MessageHandlerMetrics) extractTarget(handler); registerHandler(messageHandlerMetrics); this.handlers.add(messageHandlerMetrics); this.runtimeBeans.add(messageHandlerMetrics); return; } } else if (bean instanceof SourcePollingChannelAdapter) { SourcePollingChannelAdapter pollingChannelAdapter = (SourcePollingChannelAdapter) bean; MessageSource<?> messageSource = pollingChannelAdapter.getMessageSource(); if (messageSource instanceof MessageSourceMetrics) { MessageSourceMetrics messageSourceMetrics = (MessageSourceMetrics) extractTarget(messageSource); registerSource(messageSourceMetrics); this.sources.add(messageSourceMetrics); this.runtimeBeans.add(messageSourceMetrics); return; } } registerEndpoint((AbstractEndpoint) bean); this.runtimeBeans.add(bean); }
@Test public void testCompoundAdviceXML() throws Exception { ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("compound-trigger-context.xml", getClass()); SourcePollingChannelAdapter adapter = ctx.getBean(SourcePollingChannelAdapter.class); Source source = ctx.getBean(Source.class); adapter.start(); assertTrue(source.latch.await(10, TimeUnit.SECONDS)); assertNotNull(TestUtils.getPropertyValue(adapter, "trigger.override")); adapter.stop(); OtherAdvice sourceAdvice = ctx.getBean(OtherAdvice.class); int count = sourceAdvice.calls; assertThat(count, greaterThan(0)); ((Foo) adapter.getMessageSource()).otherMethod(); assertEquals(count, sourceAdvice.calls); ctx.close(); }
@Test public void testNoTx() throws Exception { Object scanner = TestUtils.getPropertyValue(pseudoTx.getMessageSource(), "scanner"); assertThat(scanner.getClass().getName(), containsString("FileReadingMessageSource$WatchServiceDirectoryScanner"));
SourcePollingChannelAdapter adapter = context.getBean("adapterWithProvidedCharset.adapter", SourcePollingChannelAdapter.class); MessageSource<?> source = adapter.getMessageSource(); DirectFieldAccessor sourceAccessor = new DirectFieldAccessor(source); Reader bufferedReader = (Reader) sourceAccessor.getPropertyValue("reader"); assertEquals("foo", message.getPayload()); adapter = context.getBean("pipedAdapterWithCharset.adapter", SourcePollingChannelAdapter.class); source = adapter.getMessageSource(); assertTrue(TestUtils.getPropertyValue(source, "blockToDetectEOF", Boolean.class)); bufferedReader = (Reader) sourceAccessor.getPropertyValue("reader");
adapter.stop(); assertEquals(2, count.get()); Advisor[] advisors = ((Advised) adapter.getMessageSource()).getAdvisors(); assertEquals(2, advisors.length); // make sure we didn't remove the original one
@Test public void adapterWithDefaultCharset() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "consoleInboundChannelAdapterParserTests.xml", ConsoleInboundChannelAdapterParserTests.class); SourcePollingChannelAdapter adapter = context.getBean("adapterWithDefaultCharset.adapter", SourcePollingChannelAdapter.class); MessageSource<?> source = (MessageSource<?>) new DirectFieldAccessor(adapter).getPropertyValue("source"); assertTrue(source instanceof NamedComponent); assertEquals("adapterWithDefaultCharset.adapter", adapter.getComponentName()); assertEquals("stream:stdin-channel-adapter(character)", adapter.getComponentType()); assertEquals("stream:stdin-channel-adapter(character)", ((NamedComponent) source).getComponentType()); DirectFieldAccessor sourceAccessor = new DirectFieldAccessor(source); Reader bufferedReader = (Reader) sourceAccessor.getPropertyValue("reader"); assertEquals(BufferedReader.class, bufferedReader.getClass()); DirectFieldAccessor bufferedReaderAccessor = new DirectFieldAccessor(bufferedReader); Reader reader = (Reader) bufferedReaderAccessor.getPropertyValue("in"); assertEquals(InputStreamReader.class, reader.getClass()); Charset readerCharset = Charset.forName(((InputStreamReader) reader).getEncoding()); assertEquals(Charset.defaultCharset(), readerCharset); Message<?> message = source.receive(); assertNotNull(message); assertEquals("foo", message.getPayload()); adapter = context.getBean("pipedAdapterNoCharset.adapter", SourcePollingChannelAdapter.class); source = adapter.getMessageSource(); assertTrue(TestUtils.getPropertyValue(source, "blockToDetectEOF", Boolean.class)); context.close(); }
private MessageSourceNode sourceNode(String name, SourcePollingChannelAdapter adapter) { String errorChannel = adapter.getDefaultErrorChannel() != null ? adapter.getDefaultErrorChannel().toString() : null; String outputChannel = adapter.getOutputChannel() != null ? adapter.getOutputChannel().toString() : null; return new MessageSourceNode(this.nodeId.incrementAndGet(), name, adapter.getMessageSource(), outputChannel, errorChannel); }