/** * Factory method that creates a target for stderr (System.err) with the * specified charset encoding. * * @param charsetName The charset name. * @return A stderr handler. */ public static CharacterStreamWritingMessageHandler stderr(String charsetName) { return createTargetForStream(System.err, charsetName); }
/** * Factory method that creates a target for stderr (System.err) with the * default charset encoding. * * @return A stderr handler with the default charset. */ public static CharacterStreamWritingMessageHandler stderr() { return stderr(null); }
/** * Factory method that creates a target for stdout (System.out) with the * default charset encoding. * * @return A stdout handler with the default charset. */ public static CharacterStreamWritingMessageHandler stdout() { return stdout(null); }
/** * Create a source that reads from {@link System#in}. EOF will not be detected. * @return the stream. */ public static final CharacterStreamReadingMessageSource stdin() { return new CharacterStreamReadingMessageSource(new InputStreamReader(System.in)); }
@Test public void testEndOfStream() { StringReader reader = new StringReader("test"); CharacterStreamReadingMessageSource source = new CharacterStreamReadingMessageSource(reader); Message<?> message1 = source.receive(); assertEquals("test", message1.getPayload()); Message<?> message2 = source.receive(); assertNull(message2); }
@Before public void initialize() { writer = new StringWriter(); handler = new CharacterStreamWritingMessageHandler(writer); this.channel = new QueueChannel(10); trigger.reset(); this.endpoint = new PollingConsumer(channel, handler); scheduler = new ThreadPoolTaskScheduler(); this.endpoint.setTaskScheduler(scheduler); scheduler.afterPropertiesSet(); trigger.reset(); endpoint.setTrigger(trigger); endpoint.setBeanFactory(mock(BeanFactory.class)); }
private static CharacterStreamWritingMessageHandler createTargetForStream(OutputStream stream, String charsetName) { if (charsetName == null) { return new CharacterStreamWritingMessageHandler(new OutputStreamWriter(stream)); } try { return new CharacterStreamWritingMessageHandler(new OutputStreamWriter(stream, charsetName)); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("unsupported encoding: " + charsetName, e); } }
@Test public void testByteArrayIsTruncated() { byte[] bytes = new byte[] {0, 1, 2, 3, 4, 5}; ByteArrayInputStream stream = new ByteArrayInputStream(bytes); ByteStreamReadingMessageSource source = new ByteStreamReadingMessageSource(stream); source.setBytesPerMessage(4); Message<?> message1 = source.receive(); assertEquals(4, ((byte[]) message1.getPayload()).length); Message<?> message2 = source.receive(); assertEquals(2, ((byte[]) message2.getPayload()).length); Message<?> message3 = source.receive(); assertNull(message3); }
@Test public void twoNonStringObjectWithNewLines() { handler.setShouldAppendNewLine(true); endpoint.setReceiveTimeout(0); endpoint.setMaxMessagesPerPoll(2); endpoint.setTrigger(trigger); TestObject testObject1 = new TestObject("foo"); TestObject testObject2 = new TestObject("bar"); channel.send(new GenericMessage<TestObject>(testObject1), 0); channel.send(new GenericMessage<TestObject>(testObject2), 0); endpoint.start(); trigger.await(); endpoint.stop(); String newLine = System.getProperty("line.separator"); assertEquals("foo" + newLine + "bar" + newLine, writer.toString()); }
@Test public void singleNonStringObject() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(1); TestObject testObject = new TestObject("foo"); channel.send(new GenericMessage<TestObject>(testObject)); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foo", writer.toString()); }
@Test public void testEndOfStream() { byte[] bytes = new byte[] {1, 2, 3}; ByteArrayInputStream stream = new ByteArrayInputStream(bytes); ByteStreamReadingMessageSource source = new ByteStreamReadingMessageSource(stream); Message<?> message1 = source.receive(); byte[] payload = (byte[]) message1.getPayload(); assertEquals(3, payload.length); assertEquals(1, payload[0]); assertEquals(2, payload[1]); assertEquals(3, payload[2]); Message<?> message2 = source.receive(); assertNull(message2); }
@Before public void initialize() { stream = new ByteArrayOutputStream(); handler = new ByteStreamWritingMessageHandler(stream); this.channel = new QueueChannel(10); this.endpoint = new PollingConsumer(channel, handler); scheduler = new ThreadPoolTaskScheduler(); this.endpoint.setTaskScheduler(scheduler); scheduler.afterPropertiesSet(); trigger.reset(); endpoint.setTrigger(trigger); endpoint.setBeanFactory(mock(BeanFactory.class)); }
@Test public void maxMessagesPerTaskExceedsMessageCountWithAppendedNewLines() { endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(10); endpoint.setReceiveTimeout(0); handler.setShouldAppendNewLine(true); channel.send(new GenericMessage<String>("foo"), 0); channel.send(new GenericMessage<String>("bar"), 0); endpoint.start(); trigger.await(); endpoint.stop(); String newLine = System.getProperty("line.separator"); assertEquals("foo" + newLine + "bar" + newLine, writer.toString()); }
@Test public void singleString() { handler.handleMessage(new GenericMessage<String>("foo")); assertEquals("foo", writer.toString()); }
@Test public void singleByteArray() { handler.handleMessage(new GenericMessage<byte[]>(new byte[] {1, 2, 3})); byte[] result = stream.toByteArray(); assertEquals(3, result.length); assertEquals(1, result[0]); assertEquals(2, result[1]); assertEquals(3, result[2]); }
/** * Create a source that reads from {@link System#in}. EOF will be detected and the application * context closed. * @return the stream. * @see CharacterStreamReadingMessageSource#CharacterStreamReadingMessageSource(Reader, int, boolean) * @since 5.0 */ public static final CharacterStreamReadingMessageSource stdinPipe() { return new CharacterStreamReadingMessageSource(new InputStreamReader(System.in), -1, true); }
/** * Factory method that creates a target for stdout (System.out) with the * specified charset encoding. * * @param charsetName The charset name. * @return A stdout handler. */ public static CharacterStreamWritingMessageHandler stdout(String charsetName) { return createTargetForStream(System.out, charsetName); }
@Test public void twoNonStringObjectWithOutNewLines() { endpoint.setReceiveTimeout(0); endpoint.setTrigger(trigger); endpoint.setMaxMessagesPerPoll(2); TestObject testObject1 = new TestObject("foo"); TestObject testObject2 = new TestObject("bar"); channel.send(new GenericMessage<TestObject>(testObject1), 0); channel.send(new GenericMessage<TestObject>(testObject2), 0); endpoint.start(); trigger.await(); endpoint.stop(); assertEquals("foobar", writer.toString()); }
/** * Create a source that reads from {@link System#in}. EOF will not be detected. * @param charsetName the charset to use when converting bytes to String. * @return the stream. */ public static final CharacterStreamReadingMessageSource stdin(String charsetName) { try { return new CharacterStreamReadingMessageSource(new InputStreamReader(System.in, charsetName)); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("unsupported encoding: " + charsetName, e); } }
/** * Create a source that reads from {@link System#in}. EOF will be detected and the application * context closed. * @param charsetName the charset to use when converting bytes to String. * @return the stream. * @see CharacterStreamReadingMessageSource#CharacterStreamReadingMessageSource(Reader, int, boolean) * @since 5.0 */ public static final CharacterStreamReadingMessageSource stdinPipe(String charsetName) { try { return new CharacterStreamReadingMessageSource(new InputStreamReader(System.in, charsetName), -1, true); } catch (UnsupportedEncodingException e) { throw new IllegalArgumentException("unsupported encoding: " + charsetName, e); } }