[[websocket-component]]
= Jetty Websocket Component
:page-source: components/camel-websocket/src/main/docs/websocket-component.adoc

*Available as of Camel version 2.10*

The WebSocket component provides websocket
endpoints for communicating with clients using
websocket. The component uses Eclipse Jetty Server which implements the
http://tools.ietf.org/html/rfc6455[IETF] specification (drafts and RFC
6455). It supports the protocols ws:// and wss://. To use wss://
protocol, the SSLContextParameters must be defined.

== URI format

[source,java]
---------------------------------------------------
websocket://hostname[:port][/resourceUri][?options]
---------------------------------------------------

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

== Websocket Options






// component options: START
The Jetty Websocket component supports 14 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *staticResources* (consumer) | Set a resource path for static resources (such as .html files etc). The resources can be loaded from classpath, if you prefix with classpath:, otherwise the resources is loaded from file system or from JAR files. For example to load from root classpath use classpath:., or classpath:WEB-INF/static If not configured (eg null) then no static resource is in use. |  | String
| *host* (common) | The hostname. The default value is 0.0.0.0 | 0.0.0.0 | String
| *port* (common) | The port number. The default value is 9292 | 9292 | Integer
| *sslKeyPassword* (security) | The password for the keystore when using SSL. |  | String
| *sslPassword* (security) | The password when using SSL. |  | String
| *sslKeystore* (security) | The path to the keystore. |  | String
| *enableJmx* (advanced) | If this option is true, Jetty JMX support will be enabled for this endpoint. See Jetty JMX support for more details. | false | boolean
| *minThreads* (advanced) | To set a value for minimum number of threads in server thread pool. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9. The default values for minThreads is 1. |  | Integer
| *maxThreads* (advanced) | To set a value for maximum number of threads in server thread pool. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9. The default values for maxThreads is 1 2 noCores. |  | Integer
| *threadPool* (advanced) | To use a custom thread pool for the server. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9. |  | ThreadPool
| *sslContextParameters* (security) | To configure security using SSLContextParameters |  | SSLContextParameters
| *useGlobalSslContext Parameters* (security) | Enable usage of global SSL context parameters. | false | boolean
| *socketFactory* (common) | To configure a map which contains custom WebSocketFactory for sub protocols. The key in the map is the sub protocol. The default key is reserved for the default implementation. |  | Map
| *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 Jetty Websocket endpoint is configured using URI syntax:

----
websocket:host:port/resourceUri
----

with the following path and query parameters:

=== Path Parameters (3 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *host* | The hostname. The default value is 0.0.0.0. Setting this option on the component will use the component configured value as default. | 0.0.0.0 | String
| *port* | The port number. The default value is 9292. Setting this option on the component will use the component configured value as default. | 9292 | Integer
| *resourceUri* | *Required* Name of the websocket channel to use |  | String
|===


=== Query Parameters (20 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *maxBinaryMessageSize* (common) | Can be used to set the size in bytes that the websocket created by the websocketServlet may be accept before closing. (Default is -1 - or unlimited) | -1 | Integer
| *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
| *sessionSupport* (consumer) | Whether to enable session support which enables HttpSession for each http request. | false | boolean
| *staticResources* (consumer) | Set a resource path for static resources (such as .html files etc). The resources can be loaded from classpath, if you prefix with classpath:, otherwise the resources is loaded from file system or from JAR files. For example to load from root classpath use classpath:., or classpath:WEB-INF/static If not configured (eg null) then no static resource is in use. |  | String
| *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
| *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
| *sendTimeout* (producer) | Timeout in millis when sending to a websocket channel. The default timeout is 30000 (30 seconds). | 30000 | Integer
| *sendToAll* (producer) | To send to all websocket subscribers. Can be used to configure on endpoint level, instead of having to use the WebsocketConstants.SEND_TO_ALL header on the message. |  | Boolean
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *bufferSize* (advanced) | Set the buffer size of the websocketServlet, which is also the max frame byte size (default 8192) | 8192 | Integer
| *maxIdleTime* (advanced) | Set the time in ms that the websocket created by the websocketServlet may be idle before closing. (default is 300000) | 300000 | Integer
| *maxTextMessageSize* (advanced) | Can be used to set the size in characters that the websocket created by the websocketServlet may be accept before closing. |  | Integer
| *minVersion* (advanced) | Can be used to set the minimum protocol version accepted for the websocketServlet. (Default 13 - the RFC6455 version) | 13 | Integer
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *allowedOrigins* (cors) | The CORS allowed origins. Use to allow all. |  | String
| *crossOriginFilterOn* (cors) | Whether to enable CORS | false | boolean
| *filterPath* (cors) | Context path for filtering CORS |  | String
| *enableJmx* (monitoring) | If this option is true, Jetty JMX support will be enabled for this endpoint. See Jetty JMX support for more details. | false | boolean
| *sslContextParameters* (security) | To configure security using SSLContextParameters |  | SSLContextParameters
|===
// 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-websocket-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>
----


The component supports 15 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *camel.component.websocket.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.websocket.enable-jmx* | If this option is true, Jetty JMX support will be enabled for this endpoint. See Jetty JMX support for more details. | false | Boolean
| *camel.component.websocket.enabled* | Enable websocket component | true | Boolean
| *camel.component.websocket.host* | The hostname. The default value is 0.0.0.0 | 0.0.0.0 | String
| *camel.component.websocket.max-threads* | To set a value for maximum number of threads in server thread pool. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9. The default values for maxThreads is 1 2 noCores. |  | Integer
| *camel.component.websocket.min-threads* | To set a value for minimum number of threads in server thread pool. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9. The default values for minThreads is 1. |  | Integer
| *camel.component.websocket.port* | The port number. The default value is 9292 | 9292 | Integer
| *camel.component.websocket.socket-factory* | To configure a map which contains custom WebSocketFactory for sub protocols. The key in the map is the sub protocol. The default key is reserved for the default implementation. |  | Map
| *camel.component.websocket.ssl-context-parameters* | To configure security using SSLContextParameters. The option is a org.apache.camel.support.jsse.SSLContextParameters type. |  | String
| *camel.component.websocket.ssl-key-password* | The password for the keystore when using SSL. |  | String
| *camel.component.websocket.ssl-keystore* | The path to the keystore. |  | String
| *camel.component.websocket.ssl-password* | The password when using SSL. |  | String
| *camel.component.websocket.static-resources* | Set a resource path for static resources (such as .html files etc). The resources can be loaded from classpath, if you prefix with classpath:, otherwise the resources is loaded from file system or from JAR files. For example to load from root classpath use classpath:., or classpath:WEB-INF/static If not configured (eg null) then no static resource is in use. |  | String
| *camel.component.websocket.thread-pool* | To use a custom thread pool for the server. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9. The option is a org.eclipse.jetty.util.thread.ThreadPool type. |  | String
| *camel.component.websocket.use-global-ssl-context-parameters* | Enable usage of global SSL context parameters. | false | Boolean
|===
// spring-boot-auto-configure options: END




 

== Message Headers

The WebSocket component uses 2 headers to indicate to either send
messages back to a single/current client, or to all clients.

[width="100%",cols="10%,90%",options="header",]
|=======================================================================

|`WebsocketConstants.SEND_TO_ALL` |Sends the message to all clients which are currently connected. You can
use the `sendToAll` option on the endpoint instead of using this header.

|`WebsocketConstants.CONNECTION_KEY` |Sends the message to the client with the given connection key.

|`WebsocketConstants.REMOTE_ADDRESS` |Remote address of the websocket session.
|=======================================================================

== Usage

In this example we let Camel exposes a websocket server which clients
can communicate with. The websocket server uses the default host and
port, which would be `0.0.0.0:9292`. +
 The example will send back an echo of the input. To send back a
message, we need to send the transformed message to the same endpoint
`"websocket://echo"`. This is needed +
 because by default the messaging is InOnly.

This example is part of an unit test, which you can find
https://svn.apache.org/repos/asf/camel/trunk/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketRouteExampleTest.java[here].
As a client we use the xref:ahc-component.adoc[AHC] library which offers support
for web socket as well.

Here is another example where webapp resources location have been
defined to allow the Jetty Application Server to not only register the
WebSocket servlet but also to expose web resources for the browser.
Resources should be defined under the webapp directory.

[source,java]
-----------------------------------------------------------------------------------------------
from("activemq:topic:newsTopic")
   .routeId("fromJMStoWebSocket")
   .to("websocket://localhost:8443/newsTopic?sendToAll=true&staticResources=classpath:webapp");
-----------------------------------------------------------------------------------------------

== Setting up SSL for WebSocket Component

=== Using the JSSE Configuration Utility

The WebSocket component supports SSL/TLS configuration
through the xref:manual::camel-configuration-utilities.adoc[Camel JSSE
Configuration Utility].  This utility greatly decreases the amount of
component specific code you need to write and is configurable at the
endpoint and component levels.  The following examples demonstrate how
to use the utility with the Cometd component.

[[Websocket-Programmaticconfigurationofthecomponent]]
Programmatic configuration of the component

[source,java]
-----------------------------------------------------------------------------------------------
KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

TrustManagersParameters tmp = new TrustManagersParameters();
tmp.setKeyStore(ksp);

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);
scp.setTrustManagers(tmp);

CometdComponent commetdComponent = getContext().getComponent("cometds", CometdComponent.class);
commetdComponent.setSslContextParameters(scp);
-----------------------------------------------------------------------------------------------

[[Websocket-SpringDSLbasedconfigurationofendpoint]]
Spring DSL based configuration of endpoint

[source,xml]
-------------------------------------------------------------------------------------------
...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
    <camel:trustManagers>
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:trustManagers>
  </camel:sslContextParameters>...
...
  <to uri="websocket://127.0.0.1:8443/test?sslContextParameters=#sslContextParameters"/>...
-------------------------------------------------------------------------------------------

[[Websocket-JavaDSLbasedconfigurationofendpoint]]
Java DSL based configuration of endpoint

[source,java]
----------------------------------------------------------------------------------------------------------
...
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() {
                
                String uri = "websocket://127.0.0.1:8443/test?sslContextParameters=#sslContextParameters";
                
                from(uri)
                     .log(">>> Message received from WebSocket Client : ${body}")
                     .to("mock:client")
                     .loop(10)
                         .setBody().constant(">> Welcome on board!")
                         .to(uri);
...
----------------------------------------------------------------------------------------------------------

