[[stream-component]]
= Stream Component
:page-source: components/camel-stream/src/main/docs/stream-component.adoc

*Available as of Camel version 1.3*

The Stream component provides access to the `System.in`, `System.out`
and `System.err` streams as well as allowing streaming of file and URL.

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
------------------------------------------------------------
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-stream</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
------------------------------------------------------------

== URI format

[source,java]
-----------------------
stream:in[?options]
stream:out[?options]
stream:err[?options]
stream:header[?options]
-----------------------

In addition, the `file` and `url` endpoint URIs are supported:

[source,java]
---------------------------------
stream:file?fileName=/foo/bar.txt
stream:url[?options]
---------------------------------

If the `stream:header` URI is specified, the `stream` header is used to
find the stream to write to. This option is available only for stream
producers (that is, it cannot appear in `from()`).

You can append query options to the URI in the following format,
`?option=value&option=value&...`

== Options


// component options: START
The Stream component supports 1 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
|===
// component options: END



// endpoint options: START
The Stream endpoint is configured using URI syntax:

----
stream:kind
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *kind* | *Required* Kind of stream to use such as System.in or System.out. |  | String
|===


=== Query Parameters (24 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *encoding* (common) | You can configure the encoding (is a charset name) to use text-based streams (for example, message body is a String object). If not provided, Camel uses the JVM default Charset. |  | String
| *fileName* (common) | When using the stream:file URI format, this option specifies the filename to stream to/from. |  | String
| *url* (common) | When using the stream:url URI format, this option specifies the URL to stream to/from. The input/output stream will be opened using the JDK URLConnection facility. |  | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *fileWatcher* (consumer) | To use JVM file watcher to listen for file change events to support re-loading files that may be overwritten, somewhat like tail --retry | false | boolean
| *groupLines* (consumer) | To group X number of lines in the consumer. For example to group 10 lines and therefore only spit out an Exchange with 10 lines, instead of 1 Exchange per line. |  | int
| *groupStrategy* (consumer) | Allows to use a custom GroupStrategy to control how to group lines. |  | GroupStrategy
| *initialPromptDelay* (consumer) | Initial delay in milliseconds before showing the message prompt. This delay occurs only once. Can be used during system startup to avoid message prompts being written while other logging is done to the system out. | 2000 | long
| *promptDelay* (consumer) | Optional delay in milliseconds before showing the message prompt. |  | long
| *promptMessage* (consumer) | Message prompt to use when reading from stream:in; for example, you could set this to Enter a command: |  | String
| *retry* (consumer) | Will retry opening the stream if it's overwritten, somewhat like tail --retry If reading from files then you should also enable the fileWatcher option, to make it work reliable. | false | boolean
| *scanStream* (consumer) | To be used for continuously reading a stream such as the unix tail command. | false | boolean
| *scanStreamDelay* (consumer) | Delay in milliseconds between read attempts when using scanStream. |  | long
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. |  | ExchangePattern
| *autoCloseCount* (producer) | Number of messages to process before closing stream on Producer side. Never close stream by default (only when Producer is stopped). If more messages are sent, the stream is reopened for another autoCloseCount batch. |  | int
| *closeOnDone* (producer) | This option is used in combination with Splitter and streaming to the same file. The idea is to keep the stream open and only close when the Splitter is done, to improve performance. Mind this requires that you only stream to the same file, and not 2 or more files. | false | boolean
| *delay* (producer) | Initial delay in milliseconds before producing the stream. |  | long
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *connectTimeout* (advanced) | Sets a specified timeout value, in milliseconds, to be used when opening a communications link to the resource referenced by this URLConnection. If the timeout expires before the connection can be established, a java.net.SocketTimeoutException is raised. A timeout of zero is interpreted as an infinite timeout. |  | int
| *httpHeaders* (advanced) | Optional http headers to use in request when using HTTP URL. |  | Map
| *readTimeout* (advanced) | Sets the read timeout to a specified timeout, in milliseconds. A non-zero value specifies the timeout when reading from Input stream when a connection is established to a resource. If the timeout expires before there is data available for read, a java.net.SocketTimeoutException is raised. A timeout of zero is interpreted as an infinite timeout. |  | int
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
|===
// endpoint options: END
// spring-boot-auto-configure options: START
== Spring Boot Auto-Configuration

When using Spring Boot make sure to use the following Maven dependency to have support for auto configuration:

[source,xml]
----
<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-stream-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 2 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.stream.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
| *camel.component.stream.enabled* | Enable stream component | true | Boolean
|===
// spring-boot-auto-configure options: END



== Message content

The Stream component supports either `String` or `byte[]` for writing
to streams. Just add either `String` or `byte[]` content to the
`message.in.body`. Messages sent to the *stream:* producer in binary
mode are not followed by the newline character (as opposed to the
`String` messages). Message with `null` body will not be appended to the
output stream. +
 The special `stream:header` URI is used for custom output streams. Just
add a `java.io.OutputStream` object to `message.in.header` in the key
`header`. +
 See samples for an example.

== Samples

In the following sample we route messages from the `direct:in` endpoint
to the `System.out` stream:

[source,java]
----
// Route messages to the standard output.
from("direct:in").to("stream:out");

// Send String payload to the standard output.
// Message will be followed by the newline.
template.sendBody("direct:in", "Hello Text World");

// Send byte[] payload to the standard output.
// No newline will be added after the message.
template.sendBody("direct:in", "Hello Bytes World".getBytes());
----

The following 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`.

The following sample demonstrates how to continuously read a file stream
(analogous to the UNIX `tail` command):

[source,java]
----
from("stream:file?fileName=/server/logs/server.log&scanStream=true&scanStreamDelay=1000")
  .to("bean:logService?method=parseLogLine");
----

If you want to re-load the file if it rollover/rewritten then you should also turn on the `fileWatcher` and `retry` options.

[source,java]
----
from("stream:file?fileName=/server/logs/server.log&scanStream=true&scanStreamDelay=1000&retry=true&fileWatcher=true")
  .to("bean:logService?method=parseLogLine");
----
