Stream has been edited by Claus Ibsen (Jun 20, 2008).

(View changes)

Content:

Stream Component

The stream: component provides access to the System.in, System.out and System.err streams together with allowing streaming of output to a file.
Notice that some of the stream types has been @deprecated (file and url). These types are supported by their respective components.

URI format

stream:in
stream:out
stream:err
stream:file?file=/foo/bar.txt  (@deprecated)
stream:url (@deprecated) 
stream:header

If the stream:header option is specified then the stream header is used to find the stream to read/write to.

Options

Name Default Value Description
file null When using the stream:file notation this specifies the file name to stream to/from. @deprecated.
delay 0 Initial delay in millis before consuming or producing the stream.
encoding JVM Default As of Camel 1.4 the Charset encoding can be set for the text based streams. i.e. content is String object.

Message content

The stream: component supports either String or byte[] for writing to streams. Just add to the message.in.body either a Stirng or byte[] content.
The special stream:header URI is used for custom output streams. Just add a java.io.OutputStream to message.in.header in the key header.
See samples for an example.

Samples

In this sample we output to System.out the content from the message when its put on the direct:in queue.

public void testStringContent() throws Exception {
    template.sendBody("direct:in", "Hello Text World\n");
}

public void testBinaryContent() {
    template.sendBody("direct:in", "Hello Bytes World\n".getBytes());
}

protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        public void configure() {
            from("direct:in").to("stream:out");
        }
    };
}

This sample demonstrates how the header type can be used to determine which stream to use. In the sample we use our own output stream (MyOutputStream).

private OutputStream mystream = new MyOutputStream();
private StringBuffer sb = new StringBuffer();

public void testStringContent() {
    template.sendBody("direct:in", "Hello");
    // StreamProducer appends \n in text mode
    assertEquals("Hello\n", sb.toString());
}

public void testBinaryContent() {
    template.sendBody("direct:in", "Hello".getBytes());
    // StreamProducer is in binary mode so no \n is appended
    assertEquals("Hello", sb.toString());
}

protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        public void configure() {
            from("direct:in").setHeader("stream", constant(mystream)).
                to("stream:header");
        }
    };
}

private class MyOutputStream extends OutputStream {

    public void write(int b) throws IOException {
        char c = (char)b;
        sb.append((char)b);
    }
}

See Also

Reply via email to