---
apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ahc
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ahc
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ahc
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ahc
          spec:
            containers:
            - image: fabric8/connector-ahc:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ahc
        syntax: ahc:httpUri
        title: AHC
        description: To call external HTTP services using Async Http Client.
        label: http
        deprecated: false
        async: true
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.ahc.AhcComponent
        groupId: org.apache.camel
        artifactId: camel-ahc
        version: 2.18.1
      componentProperties:
        client:
          kind: property
          type: object
          javaType: org.asynchttpclient.AsyncHttpClient
          deprecated: false
          secret: false
          description: To use a custom AsyncHttpClient
        binding:
          kind: property
          type: object
          javaType: org.apache.camel.component.ahc.AhcBinding
          deprecated: false
          secret: false
          description: To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
        clientConfig:
          kind: property
          type: object
          javaType: org.asynchttpclient.AsyncHttpClientConfig
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The URI to use such as http://hostname:port/path
        binding:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.ahc.AhcBinding
          deprecated: false
          secret: false
          description: To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
        bridgeEndpoint:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true then the Exchange.HTTP_URI header is ignored and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back.
        bufferSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: The initial in-memory buffer size used when transferring data between Camel and AHC Client.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default
        headerFilterStrategy:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        clientConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.asynchttpclient.AsyncHttpClientConfig
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
        clientConfigOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: asyncHttpClientConfig.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClientConfig using the key/values from the Map.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
    documentation.adoc: |+
      [[AHC-AsyncHttpClientComponent]]
      Async Http Client Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.8*

      The *ahc:* component provides HTTP based link:endpoint.html[endpoints]
      for consuming external HTTP resources (as a client to call external
      servers using HTTP). +
       The component uses the
      https://github.com/AsyncHttpClient/async-http-client[Async Http Client]
      library.

      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-ahc</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[AHC-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------------------
      ahc:http://hostname[:port][/resourceUri][?options]
      ahc:https://hostname[:port][/resourceUri][?options]
      ---------------------------------------------------

      Will by default use port 80 for HTTP and 443 for HTTPS.

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

      [[AHC-AhcEndpointOptions]]
      AhcEndpoint Options
      ^^^^^^^^^^^^^^^^^^^







      // endpoint options: START
      The AHC component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | producer |  | URI | *Required* The URI to use such as http://hostname:port/path
      | binding | producer |  | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
      | bridgeEndpoint | producer | false | boolean | If the option is true then the Exchange.HTTP_URI header is ignored and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back.
      | bufferSize | producer | 4096 | int | The initial in-memory buffer size used when transferring data between Camel and AHC Client.
      | connectionClose | producer | false | boolean | Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default
      | headerFilterStrategy | producer |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | producer | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | clientConfig | advanced |  | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
      | clientConfigOptions | advanced |  | Map | To configure the AsyncHttpClientConfig using the key/values from the Map.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | sslContextParameters | security |  | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
      |=======================================================================
      {% endraw %}
      // endpoint options: END








      [[AHC-AhcComponentOptions]]
      AhcComponent Options
      ^^^^^^^^^^^^^^^^^^^^









      // component options: START
      The AHC component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | client | AsyncHttpClient | To use a custom AsyncHttpClient
      | binding | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
      | clientConfig | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
      | sslContextParameters | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END









      Notice that setting any of the options on the `AhcComponent` will
      propagate those options to
      `AhcEndpoints` being created. However the `AhcEndpoint` can also
      configure/override a custom option. Options set on endpoints will always
      take precedence over options from the `AhcComponent`.

      [[AHC-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description
      |`Exchange.HTTP_URI` |`String` |URI to call. Will override existing URI set directly on the endpoint.

      |`Exchange.HTTP_PATH` |`String` |Request URI's path, the header will be used to build the request URI
      with the HTTP_URI. If the path is start with "/", http producer will try
      to find the relative path based on the Exchange.HTTP_BASE_URI header or
      the `exchange.getFromEndpoint().getEndpointUri();`

      |`Exchange.HTTP_QUERY` |`String` |*Camel 2.11 onwards:* URI parameters. Will override existing URI
      parameters set directly on the endpoint.

      |`Exchange.HTTP_RESPONSE_CODE` |`int` |The HTTP response code from the external server. Is 200 for OK.

      |`Exchange.HTTP_CHARACTER_ENCODING` |`String` |Character encoding.

      |`Exchange.CONTENT_TYPE` |`String` |The HTTP content type. Is set on both the IN and OUT message to provide
      a content type, such as `text/html`.

      |`Exchange.CONTENT_ENCODING` |`String` |The HTTP content encoding. Is set on both the IN and OUT message to
      provide a content encoding, such as `gzip`.
      |=======================================================================

      [[AHC-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      Camel will store the HTTP response from the external server on the OUT
      body. All headers from the IN message will be copied to the OUT message,
      so headers are preserved during routing. Additionally Camel will add the
      HTTP response headers as well to the OUT message headers.

      [[AHC-Responsecode]]
      Response code
      ^^^^^^^^^^^^^

      Camel will handle according to the HTTP response code:

      * Response code is in the range 100..299, Camel regards it as a success
      response.
      * Response code is in the range 300..399, Camel regards it as a
      redirection response and will throw a `AhcOperationFailedException` with
      the information.
      * Response code is 400+, Camel regards it as an external server failure
      and will throw a `AhcOperationFailedException` with the information.
      +
      throwExceptionOnFailure
      +
      The option, `throwExceptionOnFailure`, can be set to `false` to prevent
      the `AhcOperationFailedException` from being thrown for failed response
      codes. This allows you to get any response from the remote server.

      [[AHC-AhcOperationFailedException]]
      AhcOperationFailedException
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This exception contains the following information:

      * The HTTP status code
      * The HTTP status line (text of the status code)
      * Redirect location, if server returned a redirect
      * Response body as a `java.lang.String`, if server provided a body as
      response

      [[AHC-CallingusingGETorPOST]]
      Calling using GET or POST
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The following algorithm is used to determine if either `GET` or `POST`
      HTTP method should be used: +
       1. Use method provided in header. +
       2. `GET` if query string is provided in header. +
       3. `GET` if endpoint is configured with a query string. +
       4. `POST` if there is data to send (body is not null). +
       5. `GET` otherwise.

      [[AHC-ConfiguringURItocall]]
      Configuring URI to call
      ^^^^^^^^^^^^^^^^^^^^^^^

      You can set the HTTP producer's URI directly form the endpoint URI. In
      the route below, Camel will call out to the external server, `oldhost`,
      using HTTP.

      [source,java]
      ----------------------------------
      from("direct:start")
              .to("ahc:http://oldhost");
      ----------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ---------------------------------------------------------------------
      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
          <from uri="direct:start"/>
          <to uri="ahc:http://oldhost"/>
        </route>
      </camelContext>
      ---------------------------------------------------------------------

      You can override the HTTP endpoint URI by adding a header with the key,
      `Exchange.HTTP_URI`, on the message.

      [source,java]
      -------------------------------------------------------------
      from("direct:start")
          .setHeader(Exchange.HTTP_URI, constant("http://newhost"))
          .to("ahc:http://oldhost");
      -------------------------------------------------------------

      [[AHC-ConfiguringURIParameters]]
      Configuring URI Parameters
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The *ahc* producer supports URI parameters to be sent to the HTTP
      server. The URI parameters can either be set directly on the endpoint
      URI or as a header with the key `Exchange.HTTP_QUERY` on the message.

      [source,java]
      ---------------------------------------------------------
      from("direct:start")
              .to("ahc:http://oldhost?order=123&detail=short");
      ---------------------------------------------------------

      Or options provided in a header:

      [source,java]
      -------------------------------------------------------------------------------
      from("direct:start")
                  .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
              .to("ahc:http://oldhost");
      -------------------------------------------------------------------------------

      [[AHC-HowtosetthehttpmethodtotheHTTPproducer]]
      How to set the http method to the HTTP producer
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The HTTP component provides a way to set the HTTP request method by
      setting the message header. Here is an example;

      [source,java]
      --------------------------------------------------------------
      from("direct:start")
                  .setHeader(Exchange.HTTP_METHOD, constant("POST"))
              .to("ahc:http://www.google.com")
                  .to("mock:results");
      --------------------------------------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ---------------------------------------------------------------------
      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
          <from uri="direct:start"/>
          <setHeader headerName="CamelHttpMethod">
              <constant>POST</constant>
          </setHeader>
          <to uri="ahc:http://www.google.com"/>
          <to uri="mock:results"/>
        </route>
      </camelContext>
      ---------------------------------------------------------------------

      [[AHC-Configuringcharset]]
      Configuring charset
      ^^^^^^^^^^^^^^^^^^^

      If you are using `POST` to send data you can configure the `charset`
      using the `Exchange` property:

      [source,java]
      ----------------------------------------------------------
      exchange.setProperty(Exchange.CHARSET_NAME, "iso-8859-1");
      ----------------------------------------------------------

      [[AHC-URIParametersfromtheendpointURI]]
      URI Parameters from the endpoint URI
      ++++++++++++++++++++++++++++++++++++

      In this sample we have the complete URI endpoint that is just what you
      would have typed in a web browser. Multiple URI parameters can of course
      be set using the `&` character as separator, just as you would in the
      web browser. Camel does no tricks here.

      [source,java]
      --------------------------------------------------------------------
      // we query for Camel at the Google page
      template.sendBody("ahc:http://www.google.com/search?q=Camel", null);
      --------------------------------------------------------------------

      [[AHC-URIParametersfromtheMessage]]
      URI Parameters from the Message
      +++++++++++++++++++++++++++++++

      [source,java]
      ---------------------------------------------------------------------
      Map headers = new HashMap();
      headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en");
      // we query for Camel and English language at Google
      template.sendBody("ahc:http://www.google.com/search", null, headers);
      ---------------------------------------------------------------------

      In the header value above notice that it should *not* be prefixed with
      `?` and you can separate parameters as usual with the `&` char.

      [[AHC-GettingtheResponseCode]]
      Getting the Response Code
      +++++++++++++++++++++++++

      You can get the HTTP response code from the AHC component by getting the
      value from the Out message header with `Exchange.HTTP_RESPONSE_CODE`.

      [source,java]
      ----------------------------------------------------------------------------------------------
      Exchange exchange = template.send("ahc:http://www.google.com/search", new Processor() {
                  public void process(Exchange exchange) throws Exception {
                      exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
                  }
         });
         Message out = exchange.getOut();
         int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
      ----------------------------------------------------------------------------------------------

      [[AHC-ConfiguringAsyncHttpClient]]
      Configuring AsyncHttpClient
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The `AsyncHttpClient` client uses a `AsyncHttpClientConfig` to configure
      the client. See the documentation at +
       http://github.com/sonatype/async-http-client[Async Http Client] for
      more details.

      In Camel *2.8*, configuration is limited to using the builder pattern
      provided by `AsyncHttpClientConfig.Builder`. In Camel 2.8, the
      `AsyncHttpClientConfig` doesn't support getters/setters so its not easy
      to create/configure using a Spring bean style (eg the <bean> tag in the
      XML file).

      The example below shows how to use a builder to create the
      `AsyncHttpClientConfig` which we configure on the `AhcComponent`.

      In Camel *2.9*, the AHC component uses Async HTTP library 1.6.4. This
      newer version provides added support for plain bean style configuration.
      The `AsyncHttpClientConfigBean` class provides getters and setters for
      the configuration options available in `AsyncHttpClientConfig`. An
      instance of `AsyncHttpClientConfigBean` may be passed directly to the
      AHC component or referenced in an endpoint URI using the `clientConfig`
      URI parameter.

      Also available in Camel *2.9* is the ability to set configuration
      options directly in the URI. URI parameters starting with
      "clientConfig." can be used to set the various configurable properties
      of `AsyncHttpClientConfig`. The properties specified in the endpoint URI
      are merged with those specified in the configuration referenced by the
      "clientConfig" URI parameter with those being set using the
      "clientConfig." parameter taking priority. The `AsyncHttpClientConfig`
      instance referenced is always copied for each endpoint such that
      settings on one endpoint will remain independent of settings on any
      previously created endpoints. The example below shows how to configure
      the AHC component using the "clientConfig." type URI parameters.

      [source,java]
      ---------------------------------------------------------------------------------------------------------
      from("direct:start")
          .to("ahc:http://localhost:8080/foo?clientConfig.maxRequestRetry=3&clientConfig.followRedirects=true")
      ---------------------------------------------------------------------------------------------------------

      [[AHC-SSLSupport]]
      SSL Support (HTTPS)
      ^^^^^^^^^^^^^^^^^^^

      [[AHC-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility

      As of Camel 2.9, the AHC component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 AHC component.

      [[AHC-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");

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

      AhcComponent component = context.getComponent("ahc", AhcComponent.class);
      component.setSslContextParameters(scp));
      -------------------------------------------------------------------------

      [[AHC-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:sslContextParameters>...
      ...
        <to uri="ahc:https://localhost/foo?sslContextParameters=#sslContextParameters"/>
      ...
      ----------------------------------------------------------------------------------

      [[AHC-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:jetty.html[Jetty]
      * link:http.html[HTTP]
      * link:http4.html[HTTP4]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ahc-ws
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ahc-ws
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ahc-ws
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ahc-ws
          spec:
            containers:
            - image: fabric8/connector-ahc-ws:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ahc-ws
        extendsScheme: ahc
        alternativeSchemes: ahc-ws,ahc-wss
        syntax: ahc-ws:httpUri
        title: AHC Websocket
        description: To exchange data with external Websocket servers using Async Http Client.
        label: websocket
        deprecated: false
        async: true
        javaType: org.apache.camel.component.ahc.ws.WsComponent
        groupId: org.apache.camel
        artifactId: camel-ahc-ws
        version: 2.18.1
      componentProperties:
        client:
          kind: property
          type: object
          javaType: org.asynchttpclient.AsyncHttpClient
          deprecated: false
          secret: false
          description: To use a custom AsyncHttpClient
        binding:
          kind: property
          type: object
          javaType: org.apache.camel.component.ahc.AhcBinding
          deprecated: false
          secret: false
          description: To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
        clientConfig:
          kind: property
          type: object
          javaType: org.asynchttpclient.AsyncHttpClientConfig
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The URI to use such as http://hostname:port/path
        binding:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.ahc.AhcBinding
          deprecated: false
          secret: false
          description: To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
        bridgeEndpoint:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true then the Exchange.HTTP_URI header is ignored and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back.
        bufferSize:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: The initial in-memory buffer size used when transferring data between Camel and AHC Client.
        headerFilterStrategy:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        throwExceptionOnFailure:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendMessageOnError:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to send an message if the web-socket listener received an error.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default
        useStreaming:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To enable streaming to send data as multiple text fragments.
        clientConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.asynchttpclient.AsyncHttpClientConfig
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
        clientConfigOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: asyncHttpClientConfig.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClientConfig using the key/values from the Map.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
    documentation.adoc: |+
      [[AHC-WS-AsyncHttpClientWebsocketClientComponent]]
      Async Http Client (AHC) Websocket Client Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The??*ahc-ws*??component provides Websocket
      based??link:endpoint.html[endpoints]??for a client communicating with
      external servers over Websocket (as a client opening a websocket
      connection to an external server). +
      The component uses the link:ahc.html[AHC] component that in turn uses
      the??https://github.com/AsyncHttpClient/async-http-client[Async Http
      Client]??library.

      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-ahc-ws</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[AHC-WS-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------------------
      ahc-ws://hostname[:port][/resourceUri][?options]
      ahc-wss://hostname[:port][/resourceUri][?options]
      -------------------------------------------------

      Will by default use port 80 for ahc-ws and 443 for ahc-wss.

      [[AHC-WS-AHC-WSOptions]]
      AHC-WS Options
      ^^^^^^^^^^^^^^

      As the AHC-WS component is based on the AHC component, you can use the
      various configuration options of the AHC component.



      // component options: START
      The AHC Websocket component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | client | AsyncHttpClient | To use a custom AsyncHttpClient
      | binding | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
      | clientConfig | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
      | sslContextParameters | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The AHC Websocket component supports 17 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | common |  | URI | *Required* The URI to use such as http://hostname:port/path
      | binding | common |  | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
      | bridgeEndpoint | common | false | boolean | If the option is true then the Exchange.HTTP_URI header is ignored and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back.
      | bufferSize | common | 4096 | int | The initial in-memory buffer size used when transferring data between Camel and AHC Client.
      | headerFilterStrategy | common |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | throwExceptionOnFailure | common | true | boolean | Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | common | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendMessageOnError | consumer | false | boolean | Whether to send an message if the web-socket listener received an error.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | connectionClose | producer | false | boolean | Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default
      | useStreaming | producer | false | boolean | To enable streaming to send data as multiple text fragments.
      | clientConfig | advanced |  | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
      | clientConfigOptions | advanced |  | Map | To configure the AsyncHttpClientConfig using the key/values from the Map.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | sslContextParameters | security |  | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[AHC-WS-WritingandReadingDataoverWebsocket]]
      Writing and Reading Data over Websocket
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      An ahc-ws endpoint can either write data to the socket or read from the
      socket, depending on whether the endpoint is configured as the producer
      or the consumer, respectively.

      [[AHC-WS-ConfiguringURItoWriteorReadData]]
      Configuring URI to Write or Read Data
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In the route below, Camel will write to the specified websocket
      connection.

      [source,java]
      -----------------------------------
      from("direct:start")
              .to("ahc-ws://targethost");
      -----------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ------------------------------------------------------------
      <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="direct:start"/>
          <to uri="ahc-ws://targethost"/>
        </route>
      </camelContext>
      ------------------------------------------------------------

      In the route below, Camel will read from the specified websocket
      connection.

      [source,java]
      ---------------------------
      from("ahc-ws://targethost")
              .to("direct:next");
      ---------------------------

      And the equivalent Spring sample:

      [source,xml]
      ------------------------------------------------------------
      <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="ahc-ws://targethost"/>
          <to uri="direct:next"/>
        </route>
      </camelContext>
      ------------------------------------------------------------

      ??

      [[AHC-WS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:../../../../camel-ahc/src/main/docs/readme.html[AHC]
      * link:atmosphere-websocket.html[Atmosphere-Websocket]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ahc-wss
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ahc-wss
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ahc-wss
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ahc-wss
          spec:
            containers:
            - image: fabric8/connector-ahc-wss:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ahc-wss
        extendsScheme: ahc
        alternativeSchemes: ahc-ws,ahc-wss
        syntax: ahc-wss:httpUri
        title: AHC Secure Websocket
        description: To exchange data with external Websocket servers using Async Http Client.
        label: websocket
        deprecated: false
        async: true
        javaType: org.apache.camel.component.ahc.ws.WsComponent
        groupId: org.apache.camel
        artifactId: camel-ahc-ws
        version: 2.18.1
      componentProperties:
        client:
          kind: property
          type: object
          javaType: org.asynchttpclient.AsyncHttpClient
          deprecated: false
          secret: false
          description: To use a custom AsyncHttpClient
        binding:
          kind: property
          type: object
          javaType: org.apache.camel.component.ahc.AhcBinding
          deprecated: false
          secret: false
          description: To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
        clientConfig:
          kind: property
          type: object
          javaType: org.asynchttpclient.AsyncHttpClientConfig
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The URI to use such as http://hostname:port/path
        binding:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.ahc.AhcBinding
          deprecated: false
          secret: false
          description: To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
        bridgeEndpoint:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true then the Exchange.HTTP_URI header is ignored and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back.
        bufferSize:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: The initial in-memory buffer size used when transferring data between Camel and AHC Client.
        headerFilterStrategy:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        throwExceptionOnFailure:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendMessageOnError:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to send an message if the web-socket listener received an error.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default
        useStreaming:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To enable streaming to send data as multiple text fragments.
        clientConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.asynchttpclient.AsyncHttpClientConfig
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
        clientConfigOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: asyncHttpClientConfig.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the AsyncHttpClientConfig using the key/values from the Map.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
    documentation.adoc: |+
      [[AHC-WS-AsyncHttpClientWebsocketClientComponent]]
      Async Http Client (AHC) Websocket Client Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The??*ahc-ws*??component provides Websocket
      based??link:endpoint.html[endpoints]??for a client communicating with
      external servers over Websocket (as a client opening a websocket
      connection to an external server). +
      The component uses the link:ahc.html[AHC] component that in turn uses
      the??https://github.com/AsyncHttpClient/async-http-client[Async Http
      Client]??library.

      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-ahc-ws</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[AHC-WS-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------------------
      ahc-ws://hostname[:port][/resourceUri][?options]
      ahc-wss://hostname[:port][/resourceUri][?options]
      -------------------------------------------------

      Will by default use port 80 for ahc-ws and 443 for ahc-wss.

      [[AHC-WS-AHC-WSOptions]]
      AHC-WS Options
      ^^^^^^^^^^^^^^

      As the AHC-WS component is based on the AHC component, you can use the
      various configuration options of the AHC component.



      // component options: START
      The AHC Websocket component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | client | AsyncHttpClient | To use a custom AsyncHttpClient
      | binding | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
      | clientConfig | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
      | sslContextParameters | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The AHC Websocket component supports 17 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | common |  | URI | *Required* The URI to use such as http://hostname:port/path
      | binding | common |  | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel.
      | bridgeEndpoint | common | false | boolean | If the option is true then the Exchange.HTTP_URI header is ignored and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the AhcProducer send all the fault response back.
      | bufferSize | common | 4096 | int | The initial in-memory buffer size used when transferring data between Camel and AHC Client.
      | headerFilterStrategy | common |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | throwExceptionOnFailure | common | true | boolean | Option to disable throwing the AhcOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | common | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type (for example using Jetty or Servlet Camel components). On the producer side the exception will be deserialized and thrown as is instead of the AhcOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendMessageOnError | consumer | false | boolean | Whether to send an message if the web-socket listener received an error.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | connectionClose | producer | false | boolean | Define if the Connection Close header has to be added to HTTP Request. This parameter is false by default
      | useStreaming | producer | false | boolean | To enable streaming to send data as multiple text fragments.
      | clientConfig | advanced |  | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance.
      | clientConfigOptions | advanced |  | Map | To configure the AsyncHttpClientConfig using the key/values from the Map.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | sslContextParameters | security |  | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. See Using the JSSE Configuration Utility. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[AHC-WS-WritingandReadingDataoverWebsocket]]
      Writing and Reading Data over Websocket
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      An ahc-ws endpoint can either write data to the socket or read from the
      socket, depending on whether the endpoint is configured as the producer
      or the consumer, respectively.

      [[AHC-WS-ConfiguringURItoWriteorReadData]]
      Configuring URI to Write or Read Data
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In the route below, Camel will write to the specified websocket
      connection.

      [source,java]
      -----------------------------------
      from("direct:start")
              .to("ahc-ws://targethost");
      -----------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ------------------------------------------------------------
      <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="direct:start"/>
          <to uri="ahc-ws://targethost"/>
        </route>
      </camelContext>
      ------------------------------------------------------------

      In the route below, Camel will read from the specified websocket
      connection.

      [source,java]
      ---------------------------
      from("ahc-ws://targethost")
              .to("direct:next");
      ---------------------------

      And the equivalent Spring sample:

      [source,xml]
      ------------------------------------------------------------
      <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="ahc-ws://targethost"/>
          <to uri="direct:next"/>
        </route>
      </camelContext>
      ------------------------------------------------------------

      ??

      [[AHC-WS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:../../../../camel-ahc/src/main/docs/readme.html[AHC]
      * link:atmosphere-websocket.html[Atmosphere-Websocket]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-amqp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: amqp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: amqp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: amqp
          spec:
            containers:
            - image: fabric8/connector-amqp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: amqp
        extendsScheme: jms
        syntax: amqp:destinationType:destinationName
        title: AMQP
        description: Messaging with AMQP protocol using Apache QPid Client.
        label: messaging
        deprecated: false
        async: true
        javaType: org.apache.camel.component.amqp.AMQPComponent
        groupId: org.apache.camel
        artifactId: camel-amqp
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.JmsConfiguration
          deprecated: false
          secret: false
          description: To use a shared JMS configuration
        acceptMessagesWhileStopping:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether the consumer accept messages while it is stopping. You may consider enabling this option if you start and stop JMS routes at runtime while there are still messages enqued on the queue. If this option is false and you stop the JMS route then messages may be rejected and the JMS broker would have to attempt redeliveries which yet again may be rejected and eventually the message may be moved at a dead letter queue on the JMS broker. To avoid this its recommended to enable this option.
        allowReplyManagerQuickStop:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether the DefaultMessageListenerContainer used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed flag to quick stop in case JmsConfigurationisAcceptMessagesWhileStopping is enabled and org.apache.camel.CamelContext is currently being stopped. This quick stop ability is enabled by default in the regular JMS consumers but to enable for reply managers you must enable this flag.
        acknowledgementMode:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The JMS acknowledgement mode defined as an Integer. Allows you to set vendor-specific extensions to the acknowledgment mode. For the regular modes it is preferable to use the acknowledgementModeName instead.
        eagerLoadingOfProperties:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Enables eager loading of JMS properties as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties
        acknowledgementModeName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The JMS acknowledgement name which is one of: SESSION_TRANSACTED
            CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE'
        autoStartup:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether the consumer container should auto-startup.
        cacheLevel:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details.
        cacheLevelName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the cache level by name for the underlying JMS resources. Possible
            values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION.
            The default setting is CACHE_AUTO. See the Spring documentation and Transactions
            Cache Levels for more information.'
        replyToCacheLevelName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the cache level by name for the reply consumer when doing request/reply
            over JMS. This option only applies when using fixed reply queues (not temporary).
            Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName.
            And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers such
            as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE to
            work. Note: If using temporary queues then CACHE_NONE is not allowed and you
            must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.'
        clientId:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS client ID to use. Note that this value if specified must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead.
        concurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        replyToConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        connectionFactory:
          kind: property
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: Sets the default connection factory to be use
        username:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        password:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        deliveryPersistent:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether persistent delivery is used by default.
        deliveryMode:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Specifies the delivery mode to be used. Possible values are Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2.
        durableSubscriptionName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.
        exceptionListener:
          kind: property
          type: object
          javaType: javax.jms.ExceptionListener
          deprecated: false
          secret: false
          description: Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
        errorHandler:
          kind: property
          type: object
          javaType: org.springframework.util.ErrorHandler
          deprecated: false
          secret: false
          description: Specifies a org.springframework.util.ErrorHandler to be invoked in case of any uncaught exceptions thrown while processing a Message. By default these exceptions will be logged at the WARN level if no errorHandler has been configured. You can configure logging level and whether stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes it much easier to configure than having to code a custom errorHandler.
        errorHandlerLoggingLevel:
          kind: property
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          description: Allows to configure the default errorHandler logging level for logging uncaught exceptions.
        errorHandlerLogStackTrace:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Allows to control whether stacktraces should be logged or not by the default errorHandler.
        explicitQosEnabled:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Set if the deliveryMode priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option which operates at message granularity reading QoS properties exclusively from the Camel In message headers.
        exposeListenerSession:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether the listener session should be exposed when consuming messages.
        idleTaskExecutionLimit:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the limit for idle executions of a receive task not having received any message within its execution. If this limit is reached the task will shut down and leave receiving to other executing tasks (in the case of dynamic scheduling; see the maxConcurrentConsumers setting). There is additional doc available from Spring.
        idleConsumerLimit:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specify the limit for the number of consumers that are allowed to be idle at any given time.
        maxConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        replyToMaxConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when using request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        replyOnTimeoutToMaxConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS.
        maxMessagesPerTask:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The number of messages per task. -1 is unlimited. If you use a range for concurrent consumers (eg min max) then this option can be used to set a value to eg 100 to control how fast the consumers will shrink when less work is required.
        messageConverter:
          kind: property
          type: object
          javaType: org.springframework.jms.support.converter.MessageConverter
          deprecated: false
          secret: false
          description: To use a custom Spring org.springframework.jms.support.converter.MessageConverter so you can be in control how to map to/from a javax.jms.Message.
        mapJmsMessage:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
        messageIdEnabled:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: When sending specifies whether message IDs should be added.
        messageTimestampEnabled:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether timestamps should be enabled by default on sending messages.
        alwaysCopyMessage:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If true Camel will always make a JMS message copy of the message when it is passed to the producer for sending. Copying the message is needed in some situations such as when a replyToDestinationSelectorName is set (incidentally Camel will set the alwaysCopyMessage option to true if a replyToDestinationSelectorName is set)
        useMessageIDAsCorrelationID:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether JMSMessageID should always be used as JMSCorrelationID for InOut messages.
        priority:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect.
        pubSubNoLocal:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether to inhibit the delivery of messages published by its own connection.
        receiveTimeout:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The timeout for receiving messages (in milliseconds).
        recoveryInterval:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Specifies the interval between recovery attempts i.e. when a connection is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.
        subscriptionDurable:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          description: 'Deprecated: Enabled by default if you specify a durableSubscriptionName
            and a clientId.'
        taskExecutor:
          kind: property
          type: object
          javaType: org.springframework.core.task.TaskExecutor
          deprecated: false
          secret: false
          description: Allows you to specify a custom task executor for consuming messages.
        timeToLive:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: When sending messages specifies the time-to-live of the message (in milliseconds).
        transacted:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether to use transacted mode
        lazyCreateTransactionManager:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If true Camel will create a JmsTransactionManager if there is no transactionManager injected when option transacted=true.
        transactionManager:
          kind: property
          type: object
          javaType: org.springframework.transaction.PlatformTransactionManager
          deprecated: false
          secret: false
          description: The Spring transaction manager to use.
        transactionName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the transaction to use.
        transactionTimeout:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The timeout value of the transaction (in seconds) if using transacted mode.
        testConnectionOnStartup:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well.
        asyncStartListener:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to startup the JmsConsumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
        asyncStopListener:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to stop the JmsConsumer message listener asynchronously when stopping a route.
        forceSendOriginalMessage:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: When using mapJmsMessage=false Camel will create a new JMS message to send to a new JMS destination if you touch the headers (get or set) during the route. Set this option to true to force Camel to send the original JMS message that was received.
        requestTimeout:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option.
        requestTimeoutCheckerInterval:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs then you can lower this interval to check more frequently. The timeout is determined by the option requestTimeout.
        transferExchange:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: 'You can transfer the exchange over the wire instead of just the
            body and headers. The following fields are transferred: In body Out body Fault
            body In headers Out headers Fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level. You must enable this option on both the producer
            and consumer side so Camel knows the payloads is an Exchange and not a regular
            payload.'
        transferException:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled this option takes precedence. The caught exception is required to be serializable. The original Exception on the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException when returned to the producer.
        transferFault:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer side then the fault flag on link org.apache.camel.MessageisFault() will be send back in the response as a JMS header with the key link JmsConstantsJMS_TRANSFER_FAULT. If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean). You may want to enable this when using Camel components that support faults such as SOAP based such as cxf or spring-ws.
        jmsOperations:
          kind: property
          type: object
          javaType: org.springframework.jms.core.JmsOperations
          deprecated: false
          secret: false
          description: Allows you to use your own implementation of the org.springframework.jms.core.JmsOperations interface. Camel uses JmsTemplate as default. Can be used for testing purpose but not used much as stated in the spring API docs.
        destinationResolver:
          kind: property
          type: object
          javaType: org.springframework.jms.support.destination.DestinationResolver
          deprecated: false
          secret: false
          description: A pluggable org.springframework.jms.support.destination.DestinationResolver that allows you to use your own resolver (for example to lookup the real destination in a JNDI registry).
        replyToType:
          kind: property
          type: string
          javaType: org.apache.camel.component.jms.ReplyToType
          enum:
          - Temporary
          - Shared
          - Exclusive
          deprecated: false
          secret: false
          description: 'Allows for explicitly specifying which kind of strategy to use for
            replyTo queues when doing request/reply over JMS. Possible values are: Temporary
            Shared or Exclusive. By default Camel will use temporary queues. However if
            replyTo has been configured then Shared is used by default. This option allows
            you to use exclusive queues instead of shared ones. See Camel JMS documentation
            for more details and especially the notes about the implications if running
            in a clustered environment and the fact that Shared reply queues has lower performance
            than its alternatives Temporary and Exclusive.'
        preserveMessageQos:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Set to true if you want to send message using the QoS settings specified on the message instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only some of them. If not provided Camel will fall back to use the values from the endpoint instead. So when using this option the headers override the values from the endpoint. The explicitQosEnabled option by contrast will only use options set on the endpoint and not values from the message header.
        asyncConsumer:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100 strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transacted has been enabled then asyncConsumer=true does not run asynchronously as transaction must be executed synchronously (Camel 3.0 may support async transactions).
        allowNullBody:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
        includeSentJMSMessageID:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination.
        includeAllJMSXProperties:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: 'Whether to include all JMSXxxx properties when mapping from JMS
            to Camel Message. Setting this to true will include properties such as JMSXAppID
            and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then
            this option does not apply.'
        defaultTaskExecutorType:
          kind: property
          type: string
          javaType: org.apache.camel.component.jms.DefaultTaskExecutorType
          enum:
          - ThreadPool
          - SimpleAsync
          deprecated: false
          secret: false
          description: 'Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer
            for both consumer endpoints and the ReplyTo consumer of producer endpoints.
            Possible values: SimpleAsync (uses Spring''s SimpleAsyncTaskExecutor) or ThreadPool
            (uses Spring''s ThreadPoolTaskExecutor with optimal values - cached threadpool-like).
            If not set it defaults to the previous behaviour which uses a cached thread
            pool for consumer endpoints and SimpleAsync for reply consumers. The use of
            ThreadPool is recommended to reduce thread trash in elastic configurations with
            dynamically increasing and decreasing concurrent consumers.'
        jmsKeyFormatStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.JmsKeyFormatStrategy
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides two implementations
            out of the box: default and passthrough. The default strategy will safely marshal
            dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can
            be used for JMS brokers which do not care whether JMS header keys contain illegal
            characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy
            and refer to it using the notation.'
        applicationContext:
          kind: property
          type: object
          javaType: org.springframework.context.ApplicationContext
          deprecated: false
          secret: false
          description: Sets the Spring ApplicationContext to use
        queueBrowseStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.QueueBrowseStrategy
          deprecated: false
          secret: false
          description: To use a custom QueueBrowseStrategy when browsing queues
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        messageCreatedStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
        waitForProvisionCorrelationToBeUpdatedCounter:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Number of times to wait for provisional correlation id to be updated to the actual correlation id when doing request/reply over JMS and when the option useMessageIDAsCorrelationID is enabled.
        waitForProvisionCorrelationToBeUpdatedThreadSleepingTime:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Interval in millis to sleep each time while waiting for provisional correlation id to be updated.
      properties:
        destinationType:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - queue
          - topic
          - temp:queue
          - temp:topic
          deprecated: false
          secret: false
          defaultValue: queue
          description: The kind of destination to use
        destinationName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the queue or topic to use as destination
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS client ID to use. Note that this value if specified must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead.
        connectionFactory:
          kind: parameter
          group: common
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: The connection factory to be use. A connection factory must be configured either on the component or endpoint.
        disableReplyTo:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true a producer will behave like a InOnly exchange with the exception that JMSReplyTo header is sent out and not be suppressed like in the case of InOnly. Like InOnly the producer will not wait for a reply. A consumer with this flag will behave like InOnly. This feature can be used to bridge InOut requests to another queue so that a route on the other queue will send its response directly back to the original JMSReplyTo.
        durableSubscriptionName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.
        jmsMessageType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.jms.JmsMessageType
          enum:
          - Bytes
          - Map
          - Object
          - Stream
          - Text
          deprecated: false
          secret: false
          description: 'Allows you to force the use of a specific javax.jms.Message implementation
            for sending JMS messages. Possible values are: Bytes Map Object Stream Text.
            By default Camel would determine which JMS message type to use from the In body
            type. This option allows you to specify it.'
        testConnectionOnStartup:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well.
        acknowledgementModeName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - SESSION_TRANSACTED
          - CLIENT_ACKNOWLEDGE
          - AUTO_ACKNOWLEDGE
          - DUPS_OK_ACKNOWLEDGE
          deprecated: false
          secret: false
          defaultValue: AUTO_ACKNOWLEDGE
          description: 'The JMS acknowledgement name which is one of: SESSION_TRANSACTED
            CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE'
        asyncConsumer:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100 strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transacted has been enabled then asyncConsumer=true does not run asynchronously as transaction must be executed synchronously (Camel 3.0 may support async transactions).
        autoStartup:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether the consumer container should auto-startup.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        cacheLevelName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - CACHE_AUTO
          - CACHE_CONNECTION
          - CACHE_CONSUMER
          - CACHE_NONE
          - CACHE_SESSION
          deprecated: false
          secret: false
          defaultValue: CACHE_AUTO
          description: 'Sets the cache level by name for the underlying JMS resources. Possible
            values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION.
            The default setting is CACHE_AUTO. See the Spring documentation and Transactions
            Cache Levels for more information.'
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        maxConcurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        replyTo:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Provides an explicit ReplyTo destination which overrides any incoming value of Message.getJMSReplyTo().
        replyToDeliveryPersistent:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether to use persistent delivery by default for replies.
        selector:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS selector to use
        acceptMessagesWhileStopping:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether the consumer accept messages while it is stopping. You may consider enabling this option if you start and stop JMS routes at runtime while there are still messages enqued on the queue. If this option is false and you stop the JMS route then messages may be rejected and the JMS broker would have to attempt redeliveries which yet again may be rejected and eventually the message may be moved at a dead letter queue on the JMS broker. To avoid this its recommended to enable this option.
        allowReplyManagerQuickStop:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the DefaultMessageListenerContainer used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed flag to quick stop in case JmsConfigurationisAcceptMessagesWhileStopping is enabled and org.apache.camel.CamelContext is currently being stopped. This quick stop ability is enabled by default in the regular JMS consumers but to enable for reply managers you must enable this flag.
        consumerType:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.component.jms.ConsumerType
          enum:
          - Simple
          - Default
          - Custom
          deprecated: false
          secret: false
          defaultValue: Default
          description: 'The consumer type to use which can be one of: Simple Default or
            Custom. The consumer type determines which Spring JMS listener to use. Default
            will use org.springframework.jms.listener.DefaultMessageListenerContainer Simple
            will use org.springframework.jms.listener.SimpleMessageListenerContainer. When
            Custom is specified the MessageListenerContainerFactory defined by the messageListenerContainerFactory
            option will determine what org.springframework.jms.listener.AbstractMessageListenerContainer
            to use.'
        defaultTaskExecutorType:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.component.jms.DefaultTaskExecutorType
          enum:
          - ThreadPool
          - SimpleAsync
          deprecated: false
          secret: false
          description: 'Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer
            for both consumer endpoints and the ReplyTo consumer of producer endpoints.
            Possible values: SimpleAsync (uses Spring''s SimpleAsyncTaskExecutor) or ThreadPool
            (uses Spring''s ThreadPoolTaskExecutor with optimal values - cached threadpool-like).
            If not set it defaults to the previous behaviour which uses a cached thread
            pool for consumer endpoints and SimpleAsync for reply consumers. The use of
            ThreadPool is recommended to reduce thread trash in elastic configurations with
            dynamically increasing and decreasing concurrent consumers.'
        eagerLoadingOfProperties:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables eager loading of JMS properties as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        exposeListenerSession:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether the listener session should be exposed when consuming messages.
        replyToSameDestinationAllowed:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself.
        deliveryMode:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.Integer
          enum:
          - "1"
          - "2"
          deprecated: false
          secret: false
          description: Specifies the delivery mode to be used. Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2.
        deliveryPersistent:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether persistent delivery is used by default.
        explicitQosEnabled:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set if the deliveryMode priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option which operates at message granularity reading QoS properties exclusively from the Camel In message headers.
        preserveMessageQos:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set to true if you want to send message using the QoS settings specified on the message instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only some of them. If not provided Camel will fall back to use the values from the endpoint instead. So when using this option the headers override the values from the endpoint. The explicitQosEnabled option by contrast will only use options set on the endpoint and not values from the message header.
        priority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: int
          enum:
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          - "7"
          - "8"
          - "9"
          deprecated: false
          secret: false
          defaultValue: "4"
          description: Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect.
        replyToConcurrentConsumers:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        replyToMaxConcurrentConsumers:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when using request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        replyToOnTimeoutMaxConcurrentConsumers:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS.
        replyToOverride:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Provides an explicit ReplyTo destination in the JMS message which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination.
        replyToType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.jms.ReplyToType
          enum:
          - Temporary
          - Shared
          - Exclusive
          deprecated: false
          secret: false
          description: 'Allows for explicitly specifying which kind of strategy to use for
            replyTo queues when doing request/reply over JMS. Possible values are: Temporary
            Shared or Exclusive. By default Camel will use temporary queues. However if
            replyTo has been configured then Shared is used by default. This option allows
            you to use exclusive queues instead of shared ones. See Camel JMS documentation
            for more details and especially the notes about the implications if running
            in a clustered environment and the fact that Shared reply queues has lower performance
            than its alternatives Temporary and Exclusive.'
        requestTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "20000"
          description: The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option.
        timeToLive:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: -1
          description: When sending messages specifies the time-to-live of the message (in milliseconds).
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
        alwaysCopyMessage:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true Camel will always make a JMS message copy of the message when it is passed to the producer for sending. Copying the message is needed in some situations such as when a replyToDestinationSelectorName is set (incidentally Camel will set the alwaysCopyMessage option to true if a replyToDestinationSelectorName is set)
        disableTimeToLive:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Use this option to force disabling time to live. For example when you do request/reply over JMS then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message will not expire on the receiver system. See below in section About time to live for more details.
        forceSendOriginalMessage:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When using mapJmsMessage=false Camel will create a new JMS message to send to a new JMS destination if you touch the headers (get or set) during the route. Set this option to true to force Camel to send the original JMS message that was received.
        includeSentJMSMessageID:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination.
        replyToCacheLevelName:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the cache level by name for the reply consumer when doing request/reply
            over JMS. This option only applies when using fixed reply queues (not temporary).
            Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName.
            And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers such
            as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE to
            work. Note: If using temporary queues then CACHE_NONE is not allowed and you
            must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.'
        replyToDestinationSelectorName:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS Selector using the fixed name to be used so you can filter out your own replies from the others when using a shared queue (that is if you are not using a temporary reply queue).
        asyncStartListener:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to startup the JmsConsumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
        asyncStopListener:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to stop the JmsConsumer message listener asynchronously when stopping a route.
        destinationResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.springframework.jms.support.destination.DestinationResolver
          deprecated: false
          secret: false
          description: A pluggable org.springframework.jms.support.destination.DestinationResolver that allows you to use your own resolver (for example to lookup the real destination in a JNDI registry).
        errorHandler:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.springframework.util.ErrorHandler
          deprecated: false
          secret: false
          description: Specifies a org.springframework.util.ErrorHandler to be invoked in case of any uncaught exceptions thrown while processing a Message. By default these exceptions will be logged at the WARN level if no errorHandler has been configured. You can configure logging level and whether stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes it much easier to configure than having to code a custom errorHandler.
        errorHandlerLoggingLevel:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: Allows to configure the default errorHandler logging level for logging uncaught exceptions.
        errorHandlerLogStackTrace:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Allows to control whether stacktraces should be logged or not by the default errorHandler.
        exceptionListener:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.jms.ExceptionListener
          deprecated: false
          secret: false
          description: Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        idleConsumerLimit:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specify the limit for the number of consumers that are allowed to be idle at any given time.
        idleTaskExecutionLimit:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the limit for idle executions of a receive task not having received any message within its execution. If this limit is reached the task will shut down and leave receiving to other executing tasks (in the case of dynamic scheduling; see the maxConcurrentConsumers setting). There is additional doc available from Spring.
        includeAllJMSXProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to include all JMSXxxx properties when mapping from JMS
            to Camel Message. Setting this to true will include properties such as JMSXAppID
            and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then
            this option does not apply.'
        jmsKeyFormatStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          enum:
          - default
          - passthrough
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides two implementations
            out of the box: default and passthrough. The default strategy will safely marshal
            dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can
            be used for JMS brokers which do not care whether JMS header keys contain illegal
            characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy
            and refer to it using the notation.'
        mapJmsMessage:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc.
        maxMessagesPerTask:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: The number of messages per task. -1 is unlimited. If you use a range for concurrent consumers (eg min max) then this option can be used to set a value to eg 100 to control how fast the consumers will shrink when less work is required.
        messageConverter:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.springframework.jms.support.converter.MessageConverter
          deprecated: false
          secret: false
          description: To use a custom Spring org.springframework.jms.support.converter.MessageConverter so you can be in control how to map to/from a javax.jms.Message.
        messageCreatedStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
        messageIdEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When sending specifies whether message IDs should be added. This is just an hint to the JMS broker.If the JMS provider accepts this hint these messages must have the message ID set to null; if the provider ignores the hint the message ID must be set to its normal unique value
        messageListenerContainerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.jms.MessageListenerContainerFactory
          deprecated: false
          secret: false
          description: Registry ID of the MessageListenerContainerFactory used to determine what org.springframework.jms.listener.AbstractMessageListenerContainer to use to consume messages. Setting this will automatically set consumerType to Custom.
        messageTimestampEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether timestamps should be enabled by default on sending messages. This is just an hint to the JMS broker.If the JMS provider accepts this hint these messages must have the timestamp set to zero; if the provider ignores the hint the timestamp must be set to its normal value
        pubSubNoLocal:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to inhibit the delivery of messages published by its own connection.
        receiveTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout for receiving messages (in milliseconds).
        recoveryInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Specifies the interval between recovery attempts i.e. when a connection is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.
        requestTimeoutCheckerInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs then you can lower this interval to check more frequently. The timeout is determined by the option requestTimeout.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferException:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled this option takes precedence. The caught exception is required to be serializable. The original Exception on the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException when returned to the producer.
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'You can transfer the exchange over the wire instead of just the
            body and headers. The following fields are transferred: In body Out body Fault
            body In headers Out headers Fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level. You must enable this option on both the producer
            and consumer side so Camel knows the payloads is an Exchange and not a regular
            payload.'
        transferFault:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer side then the fault flag on MessageisFault() will be send back in the response as a JMS header with the key org.apache.camel.component.jms.JmsConstantsJMS_TRANSFER_FAULTJMS_TRANSFER_FAULT. If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean). You may want to enable this when using Camel components that support faults such as SOAP based such as cxf or spring-ws.
        useMessageIDAsCorrelationID:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether JMSMessageID should always be used as JMSCorrelationID for InOut messages.
        waitForProvisionCorrelationToBeUpdatedCounter:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "50"
          description: Number of times to wait for provisional correlation id to be updated to the actual correlation id when doing request/reply over JMS and when the option useMessageIDAsCorrelationID is enabled.
        waitForProvisionCorrelationToBeUpdatedThreadSleepingTime:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Interval in millis to sleep each time while waiting for provisional correlation id to be updated.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        transacted:
          kind: parameter
          group: transaction
          label: transaction
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to use transacted mode
        lazyCreateTransactionManager:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true Camel will create a JmsTransactionManager if there is no transactionManager injected when option transacted=true.
        transactionManager:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: object
          javaType: org.springframework.transaction.PlatformTransactionManager
          deprecated: false
          secret: false
          description: The Spring transaction manager to use.
        transactionName:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the transaction to use.
        transactionTimeout:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: The timeout value of the transaction (in seconds) if using transacted mode.
    documentation.adoc: "[[AMQP-AMQP]]\nAMQP\n~~~~\n\nThe *amqp:* component supports\
      \ the http://www.amqp.org/[AMQP 1.0\nprotocol] using the JMS Client API of the\
      \ http://qpid.apache.org/[Qpid]\nproject. In case you want to use AMQP 0.9 (in\
      \ particular RabbitMQ) you\nmight also be interested in the link:rabbitmq.html[Camel\
      \ RabbitMQ]\ncomponent. Please keep in mind that prior to the Camel 2.17.0 AMQP\n\
      component supported AMQP 0.9 and above, however since Camel 2.17.0 it\nsupports\
      \ only AMQP 1.0.\n\nMaven users will need to add the following dependency to\
      \ their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-amqp</artifactId>\n\
      \    <version>${camel.version}</version> <!-- use the same version as your Camel\
      \ core version -->\n</dependency>\n------------------------------------------------------------------------------------------------\n\
      \n[[AMQP-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n---------------------------------------------\n\
      amqp:[queue:|topic:]destinationName[?options]\n---------------------------------------------\n\
      \n[[AMQP-AMQPOptions]]\nAMQP Options\n^^^^^^^^^^^^\n\nYou can specify all of\
      \ the various configuration options of the\nlink:../../../../camel-jms/src/main/docs/readme.html[JMS]\
      \ component after the destination name.\n\n\n\n\n// component options: START\n\
      The AMQP component supports 74 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | JmsConfiguration | To use\
      \ a shared JMS configuration\n| acceptMessagesWhileStopping | boolean | Specifies\
      \ whether the consumer accept messages while it is stopping. You may consider\
      \ enabling this option if you start and stop JMS routes at runtime while there\
      \ are still messages enqued on the queue. If this option is false and you stop\
      \ the JMS route then messages may be rejected and the JMS broker would have\
      \ to attempt redeliveries which yet again may be rejected and eventually the\
      \ message may be moved at a dead letter queue on the JMS broker. To avoid this\
      \ its recommended to enable this option.\n| allowReplyManagerQuickStop | boolean\
      \ | Whether the DefaultMessageListenerContainer used in the reply managers for\
      \ request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed\
      \ flag to quick stop in case JmsConfigurationisAcceptMessagesWhileStopping is\
      \ enabled and org.apache.camel.CamelContext is currently being stopped. This\
      \ quick stop ability is enabled by default in the regular JMS consumers but\
      \ to enable for reply managers you must enable this flag.\n| acknowledgementMode\
      \ | int | The JMS acknowledgement mode defined as an Integer. Allows you to\
      \ set vendor-specific extensions to the acknowledgment mode. For the regular\
      \ modes it is preferable to use the acknowledgementModeName instead.\n| eagerLoadingOfProperties\
      \ | boolean | Enables eager loading of JMS properties as soon as a message is\
      \ loaded which generally is inefficient as the JMS properties may not be required\
      \ but sometimes can catch early any issues with the underlying JMS provider\
      \ and the use of JMS properties\n| acknowledgementModeName | String | The JMS\
      \ acknowledgement name which is one of: SESSION_TRANSACTED CLIENT_ACKNOWLEDGE\
      \ AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE\n| autoStartup | boolean | Specifies\
      \ whether the consumer container should auto-startup.\n| cacheLevel | int |\
      \ Sets the cache level by ID for the underlying JMS resources. See cacheLevelName\
      \ option for more details.\n| cacheLevelName | String | Sets the cache level\
      \ by name for the underlying JMS resources. Possible values are: CACHE_AUTO\
      \ CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION. The default\
      \ setting is CACHE_AUTO. See the Spring documentation and Transactions Cache\
      \ Levels for more information.\n| replyToCacheLevelName | String | Sets the\
      \ cache level by name for the reply consumer when doing request/reply over JMS.\
      \ This option only applies when using fixed reply queues (not temporary). Camel\
      \ will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName.\
      \ And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers\
      \ such as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE\
      \ to work. Note: If using temporary queues then CACHE_NONE is not allowed and\
      \ you must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.\n| clientId\
      \ | String | Sets the JMS client ID to use. Note that this value if specified\
      \ must be unique and can only be used by a single JMS connection instance. It\
      \ is typically only required for durable topic subscriptions. If using Apache\
      \ ActiveMQ you may prefer to use Virtual Topics instead.\n| concurrentConsumers\
      \ | int | Specifies the default number of concurrent consumers when consuming\
      \ from JMS (not for request/reply over JMS). See also the maxMessagesPerTask\
      \ option to control dynamic scaling up/down of threads. When doing request/reply\
      \ over JMS then the option replyToConcurrentConsumers is used to control number\
      \ of concurrent consumers on the reply message listener.\n| replyToConcurrentConsumers\
      \ | int | Specifies the default number of concurrent consumers when doing request/reply\
      \ over JMS. See also the maxMessagesPerTask option to control dynamic scaling\
      \ up/down of threads.\n| connectionFactory | ConnectionFactory | Sets the default\
      \ connection factory to be use\n| username | String | Username to use with the\
      \ ConnectionFactory. You can also configure username/password directly on the\
      \ ConnectionFactory.\n| password | String | Password to use with the ConnectionFactory.\
      \ You can also configure username/password directly on the ConnectionFactory.\n\
      | deliveryPersistent | boolean | Specifies whether persistent delivery is used\
      \ by default.\n| deliveryMode | Integer | Specifies the delivery mode to be\
      \ used. Possible values are Possibles values are those defined by javax.jms.DeliveryMode.\
      \ NON_PERSISTENT = 1 and PERSISTENT = 2.\n| durableSubscriptionName | String\
      \ | The durable subscriber name for specifying durable topic subscriptions.\
      \ The clientId option must be configured as well.\n| exceptionListener | ExceptionListener\
      \ | Specifies the JMS Exception Listener that is to be notified of any underlying\
      \ JMS exceptions.\n| errorHandler | ErrorHandler | Specifies a org.springframework.util.ErrorHandler\
      \ to be invoked in case of any uncaught exceptions thrown while processing a\
      \ Message. By default these exceptions will be logged at the WARN level if no\
      \ errorHandler has been configured. You can configure logging level and whether\
      \ stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace\
      \ options. This makes it much easier to configure than having to code a custom\
      \ errorHandler.\n| errorHandlerLoggingLevel | LoggingLevel | Allows to configure\
      \ the default errorHandler logging level for logging uncaught exceptions.\n\
      | errorHandlerLogStackTrace | boolean | Allows to control whether stacktraces\
      \ should be logged or not by the default errorHandler.\n| explicitQosEnabled\
      \ | boolean | Set if the deliveryMode priority or timeToLive qualities of service\
      \ should be used when sending messages. This option is based on Spring's JmsTemplate.\
      \ The deliveryMode priority and timeToLive options are applied to the current\
      \ endpoint. This contrasts with the preserveMessageQos option which operates\
      \ at message granularity reading QoS properties exclusively from the Camel In\
      \ message headers.\n| exposeListenerSession | boolean | Specifies whether the\
      \ listener session should be exposed when consuming messages.\n| idleTaskExecutionLimit\
      \ | int | Specifies the limit for idle executions of a receive task not having\
      \ received any message within its execution. If this limit is reached the task\
      \ will shut down and leave receiving to other executing tasks (in the case of\
      \ dynamic scheduling; see the maxConcurrentConsumers setting). There is additional\
      \ doc available from Spring.\n| idleConsumerLimit | int | Specify the limit\
      \ for the number of consumers that are allowed to be idle at any given time.\n\
      | maxConcurrentConsumers | int | Specifies the maximum number of concurrent\
      \ consumers when consuming from JMS (not for request/reply over JMS). See also\
      \ the maxMessagesPerTask option to control dynamic scaling up/down of threads.\
      \ When doing request/reply over JMS then the option replyToMaxConcurrentConsumers\
      \ is used to control number of concurrent consumers on the reply message listener.\n\
      | replyToMaxConcurrentConsumers | int | Specifies the maximum number of concurrent\
      \ consumers when using request/reply over JMS. See also the maxMessagesPerTask\
      \ option to control dynamic scaling up/down of threads.\n| replyOnTimeoutToMaxConcurrentConsumers\
      \ | int | Specifies the maximum number of concurrent consumers for continue\
      \ routing when timeout occurred when using request/reply over JMS.\n| maxMessagesPerTask\
      \ | int | The number of messages per task. -1 is unlimited. If you use a range\
      \ for concurrent consumers (eg min max) then this option can be used to set\
      \ a value to eg 100 to control how fast the consumers will shrink when less\
      \ work is required.\n| messageConverter | MessageConverter | To use a custom\
      \ Spring org.springframework.jms.support.converter.MessageConverter so you can\
      \ be in control how to map to/from a javax.jms.Message.\n| mapJmsMessage | boolean\
      \ | Specifies whether Camel should auto map the received JMS message to a suited\
      \ payload type such as javax.jms.TextMessage to a String etc. See section about\
      \ how mapping works below for more details.\n| messageIdEnabled | boolean |\
      \ When sending specifies whether message IDs should be added.\n| messageTimestampEnabled\
      \ | boolean | Specifies whether timestamps should be enabled by default on sending\
      \ messages.\n| alwaysCopyMessage | boolean | If true Camel will always make\
      \ a JMS message copy of the message when it is passed to the producer for sending.\
      \ Copying the message is needed in some situations such as when a replyToDestinationSelectorName\
      \ is set (incidentally Camel will set the alwaysCopyMessage option to true if\
      \ a replyToDestinationSelectorName is set)\n| useMessageIDAsCorrelationID |\
      \ boolean | Specifies whether JMSMessageID should always be used as JMSCorrelationID\
      \ for InOut messages.\n| priority | int | Values greater than 1 specify the\
      \ message priority when sending (where 0 is the lowest priority and 9 is the\
      \ highest). The explicitQosEnabled option must also be enabled in order for\
      \ this option to have any effect.\n| pubSubNoLocal | boolean | Specifies whether\
      \ to inhibit the delivery of messages published by its own connection.\n| receiveTimeout\
      \ | long | The timeout for receiving messages (in milliseconds).\n| recoveryInterval\
      \ | long | Specifies the interval between recovery attempts i.e. when a connection\
      \ is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.\n\
      | subscriptionDurable | boolean | Deprecated: Enabled by default if you specify\
      \ a durableSubscriptionName and a clientId.\n| taskExecutor | TaskExecutor |\
      \ Allows you to specify a custom task executor for consuming messages.\n| timeToLive\
      \ | long | When sending messages specifies the time-to-live of the message (in\
      \ milliseconds).\n| transacted | boolean | Specifies whether to use transacted\
      \ mode\n| lazyCreateTransactionManager | boolean | If true Camel will create\
      \ a JmsTransactionManager if there is no transactionManager injected when option\
      \ transacted=true.\n| transactionManager | PlatformTransactionManager | The\
      \ Spring transaction manager to use.\n| transactionName | String | The name\
      \ of the transaction to use.\n| transactionTimeout | int | The timeout value\
      \ of the transaction (in seconds) if using transacted mode.\n| testConnectionOnStartup\
      \ | boolean | Specifies whether to test the connection on startup. This ensures\
      \ that when Camel starts that all the JMS consumers have a valid connection\
      \ to the JMS broker. If a connection cannot be granted then Camel throws an\
      \ exception on startup. This ensures that Camel is not started with failed connections.\
      \ The JMS producers is tested as well.\n| asyncStartListener | boolean | Whether\
      \ to startup the JmsConsumer message listener asynchronously when starting a\
      \ route. For example if a JmsConsumer cannot get a connection to a remote JMS\
      \ broker then it may block while retrying and/or failover. This will cause Camel\
      \ to block while starting routes. By setting this option to true you will let\
      \ routes startup while the JmsConsumer connects to the JMS broker using a dedicated\
      \ thread in asynchronous mode. If this option is used then beware that if the\
      \ connection could not be established then an exception is logged at WARN level\
      \ and the consumer will not be able to receive messages; You can then restart\
      \ the route to retry.\n| asyncStopListener | boolean | Whether to stop the JmsConsumer\
      \ message listener asynchronously when stopping a route.\n| forceSendOriginalMessage\
      \ | boolean | When using mapJmsMessage=false Camel will create a new JMS message\
      \ to send to a new JMS destination if you touch the headers (get or set) during\
      \ the route. Set this option to true to force Camel to send the original JMS\
      \ message that was received.\n| requestTimeout | long | The timeout for waiting\
      \ for a reply when using the InOut Exchange Pattern (in milliseconds). The default\
      \ is 20 seconds. You can include the header CamelJmsRequestTimeout to override\
      \ this endpoint configured timeout value and thus have per message individual\
      \ timeout values. See also the requestTimeoutCheckerInterval option.\n| requestTimeoutCheckerInterval\
      \ | long | Configures how often Camel should check for timed out Exchanges when\
      \ doing request/reply over JMS. By default Camel checks once per second. But\
      \ if you must react faster when a timeout occurs then you can lower this interval\
      \ to check more frequently. The timeout is determined by the option requestTimeout.\n\
      | transferExchange | boolean | You can transfer the exchange over the wire instead\
      \ of just the body and headers. The following fields are transferred: In body\
      \ Out body Fault body In headers Out headers Fault headers exchange properties\
      \ exchange exception. This requires that the objects are serializable. Camel\
      \ will exclude any non-serializable objects and log it at WARN level. You must\
      \ enable this option on both the producer and consumer side so Camel knows the\
      \ payloads is an Exchange and not a regular payload.\n| transferException |\
      \ boolean | If enabled and you are using Request Reply messaging (InOut) and\
      \ an Exchange failed on the consumer side then the caused Exception will be\
      \ send back in response as a javax.jms.ObjectMessage. If the client is Camel\
      \ the returned Exception is rethrown. This allows you to use Camel JMS as a\
      \ bridge in your routing - for example using persistent queues to enable robust\
      \ routing. Notice that if you also have transferExchange enabled this option\
      \ takes precedence. The caught exception is required to be serializable. The\
      \ original Exception on the consumer side can be wrapped in an outer exception\
      \ such as org.apache.camel.RuntimeCamelException when returned to the producer.\n\
      | transferFault | boolean | If enabled and you are using Request Reply messaging\
      \ (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer\
      \ side then the fault flag on link org.apache.camel.MessageisFault() will be\
      \ send back in the response as a JMS header with the key link JmsConstantsJMS_TRANSFER_FAULT.\
      \ If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean).\
      \ You may want to enable this when using Camel components that support faults\
      \ such as SOAP based such as cxf or spring-ws.\n| jmsOperations | JmsOperations\
      \ | Allows you to use your own implementation of the org.springframework.jms.core.JmsOperations\
      \ interface. Camel uses JmsTemplate as default. Can be used for testing purpose\
      \ but not used much as stated in the spring API docs.\n| destinationResolver\
      \ | DestinationResolver | A pluggable org.springframework.jms.support.destination.DestinationResolver\
      \ that allows you to use your own resolver (for example to lookup the real destination\
      \ in a JNDI registry).\n| replyToType | ReplyToType | Allows for explicitly\
      \ specifying which kind of strategy to use for replyTo queues when doing request/reply\
      \ over JMS. Possible values are: Temporary Shared or Exclusive. By default Camel\
      \ will use temporary queues. However if replyTo has been configured then Shared\
      \ is used by default. This option allows you to use exclusive queues instead\
      \ of shared ones. See Camel JMS documentation for more details and especially\
      \ the notes about the implications if running in a clustered environment and\
      \ the fact that Shared reply queues has lower performance than its alternatives\
      \ Temporary and Exclusive.\n| preserveMessageQos | boolean | Set to true if\
      \ you want to send message using the QoS settings specified on the message instead\
      \ of the QoS settings on the JMS endpoint. The following three headers are considered\
      \ JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only\
      \ some of them. If not provided Camel will fall back to use the values from\
      \ the endpoint instead. So when using this option the headers override the values\
      \ from the endpoint. The explicitQosEnabled option by contrast will only use\
      \ options set on the endpoint and not values from the message header.\n| asyncConsumer\
      \ | boolean | Whether the JmsConsumer processes the Exchange asynchronously.\
      \ If enabled then the JmsConsumer may pickup the next message from the JMS queue\
      \ while the previous message is being processed asynchronously (by the Asynchronous\
      \ Routing Engine). This means that messages may be processed not 100 strictly\
      \ in order. If disabled (as default) then the Exchange is fully processed before\
      \ the JmsConsumer will pickup the next message from the JMS queue. Note if transacted\
      \ has been enabled then asyncConsumer=true does not run asynchronously as transaction\
      \ must be executed synchronously (Camel 3.0 may support async transactions).\n\
      | allowNullBody | boolean | Whether to allow sending messages with no body.\
      \ If this option is false and the message body is null then an JMSException\
      \ is thrown.\n| includeSentJMSMessageID | boolean | Only applicable when sending\
      \ to JMS destination using InOnly (eg fire and forget). Enabling this option\
      \ will enrich the Camel Exchange with the actual JMSMessageID that was used\
      \ by the JMS client when the message was sent to the JMS destination.\n| includeAllJMSXProperties\
      \ | boolean | Whether to include all JMSXxxx properties when mapping from JMS\
      \ to Camel Message. Setting this to true will include properties such as JMSXAppID\
      \ and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then\
      \ this option does not apply.\n| defaultTaskExecutorType | DefaultTaskExecutorType\
      \ | Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer\
      \ for both consumer endpoints and the ReplyTo consumer of producer endpoints.\
      \ Possible values: SimpleAsync (uses Spring's SimpleAsyncTaskExecutor) or ThreadPool\
      \ (uses Spring's ThreadPoolTaskExecutor with optimal values - cached threadpool-like).\
      \ If not set it defaults to the previous behaviour which uses a cached thread\
      \ pool for consumer endpoints and SimpleAsync for reply consumers. The use of\
      \ ThreadPool is recommended to reduce thread trash in elastic configurations\
      \ with dynamically increasing and decreasing concurrent consumers.\n| jmsKeyFormatStrategy\
      \ | JmsKeyFormatStrategy | Pluggable strategy for encoding and decoding JMS\
      \ keys so they can be compliant with the JMS specification. Camel provides two\
      \ implementations out of the box: default and passthrough. The default strategy\
      \ will safely marshal dots and hyphens (. and -). The passthrough strategy leaves\
      \ the key as is. Can be used for JMS brokers which do not care whether JMS header\
      \ keys contain illegal characters. You can provide your own implementation of\
      \ the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using\
      \ the notation.\n| applicationContext | ApplicationContext | Sets the Spring\
      \ ApplicationContext to use\n| queueBrowseStrategy | QueueBrowseStrategy | To\
      \ use a custom QueueBrowseStrategy when browsing queues\n| headerFilterStrategy\
      \ | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header\
      \ to and from Camel message.\n| messageCreatedStrategy | MessageCreatedStrategy\
      \ | To use the given MessageCreatedStrategy which are invoked when Camel creates\
      \ new instances of javax.jms.Message objects when Camel is sending a JMS message.\n\
      | waitForProvisionCorrelationToBeUpdatedCounter | int | Number of times to wait\
      \ for provisional correlation id to be updated to the actual correlation id\
      \ when doing request/reply over JMS and when the option useMessageIDAsCorrelationID\
      \ is enabled.\n| waitForProvisionCorrelationToBeUpdatedThreadSleepingTime |\
      \ long | Interval in millis to sleep each time while waiting for provisional\
      \ correlation id to be updated.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe AMQP component supports 83 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| destinationType | common\
      \ | queue | String | The kind of destination to use\n| destinationName | common\
      \ |  | String | *Required* Name of the queue or topic to use as destination\n\
      | clientId | common |  | String | Sets the JMS client ID to use. Note that this\
      \ value if specified must be unique and can only be used by a single JMS connection\
      \ instance. It is typically only required for durable topic subscriptions. If\
      \ using Apache ActiveMQ you may prefer to use Virtual Topics instead.\n| connectionFactory\
      \ | common |  | ConnectionFactory | The connection factory to be use. A connection\
      \ factory must be configured either on the component or endpoint.\n| disableReplyTo\
      \ | common | false | boolean | If true a producer will behave like a InOnly\
      \ exchange with the exception that JMSReplyTo header is sent out and not be\
      \ suppressed like in the case of InOnly. Like InOnly the producer will not wait\
      \ for a reply. A consumer with this flag will behave like InOnly. This feature\
      \ can be used to bridge InOut requests to another queue so that a route on the\
      \ other queue will send its response directly back to the original JMSReplyTo.\n\
      | durableSubscriptionName | common |  | String | The durable subscriber name\
      \ for specifying durable topic subscriptions. The clientId option must be configured\
      \ as well.\n| jmsMessageType | common |  | JmsMessageType | Allows you to force\
      \ the use of a specific javax.jms.Message implementation for sending JMS messages.\
      \ Possible values are: Bytes Map Object Stream Text. By default Camel would\
      \ determine which JMS message type to use from the In body type. This option\
      \ allows you to specify it.\n| testConnectionOnStartup | common | false | boolean\
      \ | Specifies whether to test the connection on startup. This ensures that when\
      \ Camel starts that all the JMS consumers have a valid connection to the JMS\
      \ broker. If a connection cannot be granted then Camel throws an exception on\
      \ startup. This ensures that Camel is not started with failed connections. The\
      \ JMS producers is tested as well.\n| acknowledgementModeName | consumer | AUTO_ACKNOWLEDGE\
      \ | String | The JMS acknowledgement name which is one of: SESSION_TRANSACTED\
      \ CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE\n| asyncConsumer |\
      \ consumer | false | boolean | Whether the JmsConsumer processes the Exchange\
      \ asynchronously. If enabled then the JmsConsumer may pickup the next message\
      \ from the JMS queue while the previous message is being processed asynchronously\
      \ (by the Asynchronous Routing Engine). This means that messages may be processed\
      \ not 100 strictly in order. If disabled (as default) then the Exchange is fully\
      \ processed before the JmsConsumer will pickup the next message from the JMS\
      \ queue. Note if transacted has been enabled then asyncConsumer=true does not\
      \ run asynchronously as transaction must be executed synchronously (Camel 3.0\
      \ may support async transactions).\n| autoStartup | consumer | true | boolean\
      \ | Specifies whether the consumer container should auto-startup.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| cacheLevelName | consumer\
      \ | CACHE_AUTO | String | Sets the cache level by name for the underlying JMS\
      \ resources. Possible values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER\
      \ CACHE_NONE and CACHE_SESSION. The default setting is CACHE_AUTO. See the Spring\
      \ documentation and Transactions Cache Levels for more information.\n| concurrentConsumers\
      \ | consumer | 1 | int | Specifies the default number of concurrent consumers\
      \ when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask\
      \ option to control dynamic scaling up/down of threads. When doing request/reply\
      \ over JMS then the option replyToConcurrentConsumers is used to control number\
      \ of concurrent consumers on the reply message listener.\n| maxConcurrentConsumers\
      \ | consumer |  | int | Specifies the maximum number of concurrent consumers\
      \ when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask\
      \ option to control dynamic scaling up/down of threads. When doing request/reply\
      \ over JMS then the option replyToMaxConcurrentConsumers is used to control\
      \ number of concurrent consumers on the reply message listener.\n| replyTo |\
      \ consumer |  | String | Provides an explicit ReplyTo destination which overrides\
      \ any incoming value of Message.getJMSReplyTo().\n| replyToDeliveryPersistent\
      \ | consumer | true | boolean | Specifies whether to use persistent delivery\
      \ by default for replies.\n| selector | consumer |  | String | Sets the JMS\
      \ selector to use\n| acceptMessagesWhileStopping | consumer (advanced) | false\
      \ | boolean | Specifies whether the consumer accept messages while it is stopping.\
      \ You may consider enabling this option if you start and stop JMS routes at\
      \ runtime while there are still messages enqued on the queue. If this option\
      \ is false and you stop the JMS route then messages may be rejected and the\
      \ JMS broker would have to attempt redeliveries which yet again may be rejected\
      \ and eventually the message may be moved at a dead letter queue on the JMS\
      \ broker. To avoid this its recommended to enable this option.\n| allowReplyManagerQuickStop\
      \ | consumer (advanced) | false | boolean | Whether the DefaultMessageListenerContainer\
      \ used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed\
      \ flag to quick stop in case JmsConfigurationisAcceptMessagesWhileStopping is\
      \ enabled and org.apache.camel.CamelContext is currently being stopped. This\
      \ quick stop ability is enabled by default in the regular JMS consumers but\
      \ to enable for reply managers you must enable this flag.\n| consumerType |\
      \ consumer (advanced) | Default | ConsumerType | The consumer type to use which\
      \ can be one of: Simple Default or Custom. The consumer type determines which\
      \ Spring JMS listener to use. Default will use org.springframework.jms.listener.DefaultMessageListenerContainer\
      \ Simple will use org.springframework.jms.listener.SimpleMessageListenerContainer.\
      \ When Custom is specified the MessageListenerContainerFactory defined by the\
      \ messageListenerContainerFactory option will determine what org.springframework.jms.listener.AbstractMessageListenerContainer\
      \ to use.\n| defaultTaskExecutorType | consumer (advanced) |  | DefaultTaskExecutorType\
      \ | Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer\
      \ for both consumer endpoints and the ReplyTo consumer of producer endpoints.\
      \ Possible values: SimpleAsync (uses Spring's SimpleAsyncTaskExecutor) or ThreadPool\
      \ (uses Spring's ThreadPoolTaskExecutor with optimal values - cached threadpool-like).\
      \ If not set it defaults to the previous behaviour which uses a cached thread\
      \ pool for consumer endpoints and SimpleAsync for reply consumers. The use of\
      \ ThreadPool is recommended to reduce thread trash in elastic configurations\
      \ with dynamically increasing and decreasing concurrent consumers.\n| eagerLoadingOfProperties\
      \ | consumer (advanced) | false | boolean | Enables eager loading of JMS properties\
      \ as soon as a message is loaded which generally is inefficient as the JMS properties\
      \ may not be required but sometimes can catch early any issues with the underlying\
      \ JMS provider and the use of JMS properties\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| exposeListenerSession | consumer (advanced) | false | boolean\
      \ | Specifies whether the listener session should be exposed when consuming\
      \ messages.\n| replyToSameDestinationAllowed | consumer (advanced) | false |\
      \ boolean | Whether a JMS consumer is allowed to send a reply message to the\
      \ same destination that the consumer is using to consume from. This prevents\
      \ an endless loop by consuming and sending back the same message to itself.\n\
      | deliveryMode | producer |  | Integer | Specifies the delivery mode to be used.\
      \ Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT\
      \ = 1 and PERSISTENT = 2.\n| deliveryPersistent | producer | true | boolean\
      \ | Specifies whether persistent delivery is used by default.\n| explicitQosEnabled\
      \ | producer | false | Boolean | Set if the deliveryMode priority or timeToLive\
      \ qualities of service should be used when sending messages. This option is\
      \ based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options\
      \ are applied to the current endpoint. This contrasts with the preserveMessageQos\
      \ option which operates at message granularity reading QoS properties exclusively\
      \ from the Camel In message headers.\n| preserveMessageQos | producer | false\
      \ | boolean | Set to true if you want to send message using the QoS settings\
      \ specified on the message instead of the QoS settings on the JMS endpoint.\
      \ The following three headers are considered JMSPriority JMSDeliveryMode and\
      \ JMSExpiration. You can provide all or only some of them. If not provided Camel\
      \ will fall back to use the values from the endpoint instead. So when using\
      \ this option the headers override the values from the endpoint. The explicitQosEnabled\
      \ option by contrast will only use options set on the endpoint and not values\
      \ from the message header.\n| priority | producer | 4 | int | Values greater\
      \ than 1 specify the message priority when sending (where 0 is the lowest priority\
      \ and 9 is the highest). The explicitQosEnabled option must also be enabled\
      \ in order for this option to have any effect.\n| replyToConcurrentConsumers\
      \ | producer | 1 | int | Specifies the default number of concurrent consumers\
      \ when doing request/reply over JMS. See also the maxMessagesPerTask option\
      \ to control dynamic scaling up/down of threads.\n| replyToMaxConcurrentConsumers\
      \ | producer |  | int | Specifies the maximum number of concurrent consumers\
      \ when using request/reply over JMS. See also the maxMessagesPerTask option\
      \ to control dynamic scaling up/down of threads.\n| replyToOnTimeoutMaxConcurrentConsumers\
      \ | producer | 1 | int | Specifies the maximum number of concurrent consumers\
      \ for continue routing when timeout occurred when using request/reply over JMS.\n\
      | replyToOverride | producer |  | String | Provides an explicit ReplyTo destination\
      \ in the JMS message which overrides the setting of replyTo. It is useful if\
      \ you want to forward the message to a remote Queue and receive the reply message\
      \ from the ReplyTo destination.\n| replyToType | producer |  | ReplyToType |\
      \ Allows for explicitly specifying which kind of strategy to use for replyTo\
      \ queues when doing request/reply over JMS. Possible values are: Temporary Shared\
      \ or Exclusive. By default Camel will use temporary queues. However if replyTo\
      \ has been configured then Shared is used by default. This option allows you\
      \ to use exclusive queues instead of shared ones. See Camel JMS documentation\
      \ for more details and especially the notes about the implications if running\
      \ in a clustered environment and the fact that Shared reply queues has lower\
      \ performance than its alternatives Temporary and Exclusive.\n| requestTimeout\
      \ | producer | 20000 | long | The timeout for waiting for a reply when using\
      \ the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You\
      \ can include the header CamelJmsRequestTimeout to override this endpoint configured\
      \ timeout value and thus have per message individual timeout values. See also\
      \ the requestTimeoutCheckerInterval option.\n| timeToLive | producer | -1 |\
      \ long | When sending messages specifies the time-to-live of the message (in\
      \ milliseconds).\n| allowNullBody | producer (advanced) | true | boolean | Whether\
      \ to allow sending messages with no body. If this option is false and the message\
      \ body is null then an JMSException is thrown.\n| alwaysCopyMessage | producer\
      \ (advanced) | false | boolean | If true Camel will always make a JMS message\
      \ copy of the message when it is passed to the producer for sending. Copying\
      \ the message is needed in some situations such as when a replyToDestinationSelectorName\
      \ is set (incidentally Camel will set the alwaysCopyMessage option to true if\
      \ a replyToDestinationSelectorName is set)\n| disableTimeToLive | producer (advanced)\
      \ | false | boolean | Use this option to force disabling time to live. For example\
      \ when you do request/reply over JMS then Camel will by default use the requestTimeout\
      \ value as time to live on the message being sent. The problem is that the sender\
      \ and receiver systems have to have their clocks synchronized so they are in\
      \ sync. This is not always so easy to archive. So you can use disableTimeToLive=true\
      \ to not set a time to live value on the sent message. Then the message will\
      \ not expire on the receiver system. See below in section About time to live\
      \ for more details.\n| forceSendOriginalMessage | producer (advanced) | false\
      \ | boolean | When using mapJmsMessage=false Camel will create a new JMS message\
      \ to send to a new JMS destination if you touch the headers (get or set) during\
      \ the route. Set this option to true to force Camel to send the original JMS\
      \ message that was received.\n| includeSentJMSMessageID | producer (advanced)\
      \ | false | boolean | Only applicable when sending to JMS destination using\
      \ InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange\
      \ with the actual JMSMessageID that was used by the JMS client when the message\
      \ was sent to the JMS destination.\n| replyToCacheLevelName | producer (advanced)\
      \ |  | String | Sets the cache level by name for the reply consumer when doing\
      \ request/reply over JMS. This option only applies when using fixed reply queues\
      \ (not temporary). Camel will by default use: CACHE_CONSUMER for exclusive or\
      \ shared w/ replyToSelectorName. And CACHE_SESSION for shared without replyToSelectorName.\
      \ Some JMS brokers such as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE\
      \ to work. Note: If using temporary queues then CACHE_NONE is not allowed and\
      \ you must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.\n| replyToDestinationSelectorName\
      \ | producer (advanced) |  | String | Sets the JMS Selector using the fixed\
      \ name to be used so you can filter out your own replies from the others when\
      \ using a shared queue (that is if you are not using a temporary reply queue).\n\
      | asyncStartListener | advanced | false | boolean | Whether to startup the JmsConsumer\
      \ message listener asynchronously when starting a route. For example if a JmsConsumer\
      \ cannot get a connection to a remote JMS broker then it may block while retrying\
      \ and/or failover. This will cause Camel to block while starting routes. By\
      \ setting this option to true you will let routes startup while the JmsConsumer\
      \ connects to the JMS broker using a dedicated thread in asynchronous mode.\
      \ If this option is used then beware that if the connection could not be established\
      \ then an exception is logged at WARN level and the consumer will not be able\
      \ to receive messages; You can then restart the route to retry.\n| asyncStopListener\
      \ | advanced | false | boolean | Whether to stop the JmsConsumer message listener\
      \ asynchronously when stopping a route.\n| destinationResolver | advanced |\
      \  | DestinationResolver | A pluggable org.springframework.jms.support.destination.DestinationResolver\
      \ that allows you to use your own resolver (for example to lookup the real destination\
      \ in a JNDI registry).\n| errorHandler | advanced |  | ErrorHandler | Specifies\
      \ a org.springframework.util.ErrorHandler to be invoked in case of any uncaught\
      \ exceptions thrown while processing a Message. By default these exceptions\
      \ will be logged at the WARN level if no errorHandler has been configured. You\
      \ can configure logging level and whether stack traces should be logged using\
      \ errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes\
      \ it much easier to configure than having to code a custom errorHandler.\n|\
      \ errorHandlerLoggingLevel | advanced | WARN | LoggingLevel | Allows to configure\
      \ the default errorHandler logging level for logging uncaught exceptions.\n\
      | errorHandlerLogStackTrace | advanced | true | boolean | Allows to control\
      \ whether stacktraces should be logged or not by the default errorHandler.\n\
      | exceptionListener | advanced |  | ExceptionListener | Specifies the JMS Exception\
      \ Listener that is to be notified of any underlying JMS exceptions.\n| headerFilterStrategy\
      \ | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy\
      \ to filter header to and from Camel message.\n| idleConsumerLimit | advanced\
      \ | 1 | int | Specify the limit for the number of consumers that are allowed\
      \ to be idle at any given time.\n| idleTaskExecutionLimit | advanced | 1 | int\
      \ | Specifies the limit for idle executions of a receive task not having received\
      \ any message within its execution. If this limit is reached the task will shut\
      \ down and leave receiving to other executing tasks (in the case of dynamic\
      \ scheduling; see the maxConcurrentConsumers setting). There is additional doc\
      \ available from Spring.\n| includeAllJMSXProperties | advanced | false | boolean\
      \ | Whether to include all JMSXxxx properties when mapping from JMS to Camel\
      \ Message. Setting this to true will include properties such as JMSXAppID and\
      \ JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then\
      \ this option does not apply.\n| jmsKeyFormatStrategy | advanced |  | String\
      \ | Pluggable strategy for encoding and decoding JMS keys so they can be compliant\
      \ with the JMS specification. Camel provides two implementations out of the\
      \ box: default and passthrough. The default strategy will safely marshal dots\
      \ and hyphens (. and -). The passthrough strategy leaves the key as is. Can\
      \ be used for JMS brokers which do not care whether JMS header keys contain\
      \ illegal characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy\
      \ and refer to it using the notation.\n| mapJmsMessage | advanced | true | boolean\
      \ | Specifies whether Camel should auto map the received JMS message to a suited\
      \ payload type such as javax.jms.TextMessage to a String etc.\n| maxMessagesPerTask\
      \ | advanced | -1 | int | The number of messages per task. -1 is unlimited.\
      \ If you use a range for concurrent consumers (eg min max) then this option\
      \ can be used to set a value to eg 100 to control how fast the consumers will\
      \ shrink when less work is required.\n| messageConverter | advanced |  | MessageConverter\
      \ | To use a custom Spring org.springframework.jms.support.converter.MessageConverter\
      \ so you can be in control how to map to/from a javax.jms.Message.\n| messageCreatedStrategy\
      \ | advanced |  | MessageCreatedStrategy | To use the given MessageCreatedStrategy\
      \ which are invoked when Camel creates new instances of javax.jms.Message objects\
      \ when Camel is sending a JMS message.\n| messageIdEnabled | advanced | true\
      \ | boolean | When sending specifies whether message IDs should be added. This\
      \ is just an hint to the JMS broker.If the JMS provider accepts this hint these\
      \ messages must have the message ID set to null; if the provider ignores the\
      \ hint the message ID must be set to its normal unique value\n| messageListenerContainerFactory\
      \ | advanced |  | MessageListenerContainerFactory | Registry ID of the MessageListenerContainerFactory\
      \ used to determine what org.springframework.jms.listener.AbstractMessageListenerContainer\
      \ to use to consume messages. Setting this will automatically set consumerType\
      \ to Custom.\n| messageTimestampEnabled | advanced | true | boolean | Specifies\
      \ whether timestamps should be enabled by default on sending messages. This\
      \ is just an hint to the JMS broker.If the JMS provider accepts this hint these\
      \ messages must have the timestamp set to zero; if the provider ignores the\
      \ hint the timestamp must be set to its normal value\n| pubSubNoLocal | advanced\
      \ | false | boolean | Specifies whether to inhibit the delivery of messages\
      \ published by its own connection.\n| receiveTimeout | advanced | 1000 | long\
      \ | The timeout for receiving messages (in milliseconds).\n| recoveryInterval\
      \ | advanced | 5000 | long | Specifies the interval between recovery attempts\
      \ i.e. when a connection is being refreshed in milliseconds. The default is\
      \ 5000 ms that is 5 seconds.\n| requestTimeoutCheckerInterval | advanced | 1000\
      \ | long | Configures how often Camel should check for timed out Exchanges when\
      \ doing request/reply over JMS. By default Camel checks once per second. But\
      \ if you must react faster when a timeout occurs then you can lower this interval\
      \ to check more frequently. The timeout is determined by the option requestTimeout.\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n| transferException | advanced | false | boolean | If enabled\
      \ and you are using Request Reply messaging (InOut) and an Exchange failed on\
      \ the consumer side then the caused Exception will be send back in response\
      \ as a javax.jms.ObjectMessage. If the client is Camel the returned Exception\
      \ is rethrown. This allows you to use Camel JMS as a bridge in your routing\
      \ - for example using persistent queues to enable robust routing. Notice that\
      \ if you also have transferExchange enabled this option takes precedence. The\
      \ caught exception is required to be serializable. The original Exception on\
      \ the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException\
      \ when returned to the producer.\n| transferExchange | advanced | false | boolean\
      \ | You can transfer the exchange over the wire instead of just the body and\
      \ headers. The following fields are transferred: In body Out body Fault body\
      \ In headers Out headers Fault headers exchange properties exchange exception.\
      \ This requires that the objects are serializable. Camel will exclude any non-serializable\
      \ objects and log it at WARN level. You must enable this option on both the\
      \ producer and consumer side so Camel knows the payloads is an Exchange and\
      \ not a regular payload.\n| transferFault | advanced | false | boolean | If\
      \ enabled and you are using Request Reply messaging (InOut) and an Exchange\
      \ failed with a SOAP fault (not exception) on the consumer side then the fault\
      \ flag on MessageisFault() will be send back in the response as a JMS header\
      \ with the key org.apache.camel.component.jms.JmsConstantsJMS_TRANSFER_FAULTJMS_TRANSFER_FAULT.\
      \ If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean).\
      \ You may want to enable this when using Camel components that support faults\
      \ such as SOAP based such as cxf or spring-ws.\n| useMessageIDAsCorrelationID\
      \ | advanced | false | boolean | Specifies whether JMSMessageID should always\
      \ be used as JMSCorrelationID for InOut messages.\n| waitForProvisionCorrelationToBeUpdatedCounter\
      \ | advanced | 50 | int | Number of times to wait for provisional correlation\
      \ id to be updated to the actual correlation id when doing request/reply over\
      \ JMS and when the option useMessageIDAsCorrelationID is enabled.\n| waitForProvisionCorrelationToBeUpdatedThreadSleepingTime\
      \ | advanced | 100 | long | Interval in millis to sleep each time while waiting\
      \ for provisional correlation id to be updated.\n| password | security |  |\
      \ String | Password to use with the ConnectionFactory. You can also configure\
      \ username/password directly on the ConnectionFactory.\n| username | security\
      \ |  | String | Username to use with the ConnectionFactory. You can also configure\
      \ username/password directly on the ConnectionFactory.\n| transacted | transaction\
      \ | false | boolean | Specifies whether to use transacted mode\n| lazyCreateTransactionManager\
      \ | transaction (advanced) | true | boolean | If true Camel will create a JmsTransactionManager\
      \ if there is no transactionManager injected when option transacted=true.\n\
      | transactionManager | transaction (advanced) |  | PlatformTransactionManager\
      \ | The Spring transaction manager to use.\n| transactionName | transaction\
      \ (advanced) |  | String | The name of the transaction to use.\n| transactionTimeout\
      \ | transaction (advanced) | -1 | int | The timeout value of the transaction\
      \ (in seconds) if using transacted mode.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n[[AMQP-Usage]]\nUsage\n^^^^^\n\
      \nAs AMQP component is inherited from JMS component, the usage of the\nformer\
      \ is almost identical to the latter:\n\n*Using AMQP component*\n\n[source,java]\n\
      ------------------------------------\n// Consuming from AMQP queue\nfrom(\"\
      amqp:queue:incoming\").\n  to(...);\n??\n// Sending message to the AMQP topic\n\
      from(...).\n  to(\"amqp:topic:notify\");\n------------------------------------\n\
      \n[[AMQP-ConfiguringAMQPcomponent]]\nConfiguring AMQP component\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nStarting from the Camel 2.16.1 you can also use the\n`AMQPComponent#amqp10Component(String\
      \ connectionURI)` factory method to\nreturn the AMQP 1.0 component with the\
      \ pre-configured??topic prefix:??\n\n*Creating AMQP 1.0 component*\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------\n\
      \ AMQPComponent amqp = AMQPComponent.amqp10Component(\"amqp://guest:guest@localhost:5672\"\
      );\n-----------------------------------------------------------------------------------------\n\
      \nKeep in mind that starting from the\nCamel??2.17??the??`AMQPComponent#amqp10Component(String\
      \ connectionURI)`??factory\nmethod has been deprecated on the behalf of the\n\
      `AMQPComponent#amqpComponent(String connectionURI)`:??\n\n*Creating AMQP 1.0\
      \ component*\n\n[source,java]\n--------------------------------------------------------------------------------------------------------\n\
      AMQPComponent amqp = AMQPComponent.amqpComponent(\"amqp://localhost:5672\");\n\
      ??\nAMQPComponent authorizedAmqp = AMQPComponent.amqpComponent(\"amqp://localhost:5672\"\
      , \"user\", \"password\");\n--------------------------------------------------------------------------------------------------------\n\
      \nStarting from Camel 2.17, in order to automatically configure the AMQP\ncomponent,\
      \ you can also add an instance\nof??`org.apache.camel.component.amqp.AMQPConnectionDetails`\
      \ to the\nregistry. For example for Spring Boot you just have to define??bean:\n\
      \n*AMQP connection details auto-configuration*\n\n[source,java]\n-------------------------------------------------------------------------------------\n\
      @Bean\nAMQPConnectionDetails amqpConnection() {\n  return new AMQPConnectionDetails(\"\
      amqp://localhost:5672\"); \n}\n??\n@Bean\nAMQPConnectionDetails securedAmqpConnection()\
      \ {\n  return new AMQPConnectionDetails(\"amqp://lcoalhost:5672\", \"username\"\
      , \"password\"); \n}\n-------------------------------------------------------------------------------------\n\
      \nLikewise, you can also use CDI producer methods when using Camel-CDI\n\n*AMQP\
      \ connection details auto-configuration for CDI*\n\n[source,java]\n-------------------------------------------------------------------------------------\n\
      @Produces\nAMQPConnectionDetails amqpConnection() {\n  return new AMQPConnectionDetails(\"\
      amqp://localhost:5672\");\n}\n-------------------------------------------------------------------------------------??\n\
      \nYou can also rely on the link:properties.html[Camel properties] to read\n\
      the AMQP connection details. Factory\nmethod??`AMQPConnectionDetails.discoverAMQP()`??attempts\
      \ to read Camel\nproperties in a Kubernetes-like convention, just as demonstrated\
      \ on the\nsnippet below:\n\n??\n\n*AMQP connection details auto-configuration*\n\
      \n[source,java]\n-----------------------------------------------\nexport AMQP_SERVICE_HOST\
      \ = \"mybroker.com\"\nexport AMQP_SERVICE_PORT = \"6666\"\nexport AMQP_SERVICE_USERNAME\
      \ = \"username\"\nexport AMQP_SERVICE_PASSWORD = \"password\"\n??\n...\n??\n\
      @Bean\nAMQPConnectionDetails amqpConnection() {\n  return AMQPConnectionDetails.discoverAMQP();\
      \ \n}\n-----------------------------------------------\n\n[[AMQP-Usingtopics]]\n\
      Using topics\n^^^^^^^^^^^^\n\nTo have using topics working with??`camel-amqp`??you\
      \ need to configure the\ncomponent to use??`topic://`??as topic prefix, as shown\
      \ below:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------\n\
      \ <bean id=\"amqp\" class=\"org.apache.camel.component.amqp.AmqpComponent\"\
      >\n        <property name=\"connectionFactory\">\n          <bean class=\"org.apache.qpid.amqp_1_0.jms.impl.ConnectionFactoryImpl\"\
      \ factory-method=\"createFromURL\">\n            <constructor-arg index=\"0\"\
      \ type=\"java.lang.String\" value=\"amqp://localhost:5672\" />\n           \
      \ <property name=\"topicPrefix\" value=\"topic://\" />  <!-- only necessary\
      \ when connecting to ActiveMQ over AMQP 1.0 -->\n          </bean>\n       \
      \ </property>\n </bean>\n-------------------------------------------------------------------------------------------------------------------------------\n\
      \nKeep in mind that both????`AMQPComponent#amqpComponent()`??methods and\n`AMQPConnectionDetails`\
      \ pre-configure the component with the topic\nprefix, so you don't have to configure\
      \ it explicitly.\n\n[[AMQP-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-apns
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: apns
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: apns
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: apns
          spec:
            containers:
            - image: fabric8/connector-apns:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: apns
        syntax: apns:name
        title: APNS
        description: For sending notifications to Apple iOS devices.
        label: eventbus,mobile
        deprecated: false
        async: false
        javaType: org.apache.camel.component.apns.ApnsComponent
        groupId: org.apache.camel
        artifactId: camel-apns
        version: 2.18.1
      componentProperties:
        apnsService:
          kind: property
          type: object
          javaType: com.notnoop.apns.ApnsService
          deprecated: false
          secret: false
          description: To use a custom link ApnsService
      properties:
        name:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the endpoint
        tokens:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Configure this property in case you want to statically declare tokens related to devices you want to notify. Tokens are separated by comma.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[APNS-ApnsComponent]]
      Apns Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.8*

      The *apns* component is used for sending notifications to iOS devices.
      The apns components use https://github.com/notnoop/java-apns[javapns]
      library. +
       The component supports sending notifications to Apple Push Notification
      Servers (APNS) and consuming feedback from the servers.

      The consumer is configured with 3600 seconds for polling by default
      because it is a best practice to consume feedback stream from Apple Push
      Notification Servers only from time to time. For example: every 1 hour
      to avoid flooding the servers.

      The feedback stream gives informations about inactive devices. You only
      need to get this informations every some hours if your mobile
      application is not a heavily used one.

      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-apns</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[APNS-URIformat]]
      URI format
      ^^^^^^^^^^

      To send notifications:

      [source,java]
      ---------------------
      apns:notify[?options]
      ---------------------

      To consume feedback:

      [source,java]
      -----------------------
      apns:consumer[?options]
      -----------------------

      [[APNS-Options]]
      Options
      ^^^^^^^



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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | apnsService | ApnsService | To use a custom link ApnsService
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The APNS component supports 21 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | Name of the endpoint
      | tokens | common |  | String | Configure this property in case you want to statically declare tokens related to devices you want to notify. Tokens are separated by comma.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


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

      [[APNS-Component]]
      Component
      +++++++++

      The `ApnsComponent` must be configured with a
      `com.notnoop.apns.ApnsService`. The service can be created and
      configured using the
      `org.apache.camel.component.apns.factory.ApnsServiceFactory`. See
      further below for an example. And as well in the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-apns/[test
      source code].

      [[APNS-Exchangedataformat]]
      Exchange data format
      ^^^^^^^^^^^^^^^^^^^^

      When Camel will fetch feedback data corresponding to inactive devices,
      it will retrieve a List of InactiveDevice objects. Each InactiveDevice
      object of the retrieved list will be setted as the In body, and then
      processed by the consumer endpoint.

      [[APNS-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel Apns uses these headers.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Property |Default |Description
      |`CamelApnsTokens` | |Empty by default.
      |`CamelApnsMessageType` |`STRING, PAYLOAD, APNS_NOTIFICATION`?? |In case you choose PAYLOAD for the message type, then the message will
      be considered as a APNS payload and sent as is. In case you choose
      STRING, message will be converted as a APNS payload. From *Camel 2.16*
      onwards APNS_NOTIFICATION is used for sending message body as
      com.notnoop.apns.ApnsNotification types.
      |=======================================================================

      [[APNS-ApnsServiceFactorybuildercallback]]
      ApnsServiceFactory builder callback
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      `ApnsServiceFactory` comes with the empty callback method that could be
      used to configure (or even replace) the default `ApnsServiceBuilder`
      instance. The signature of the method could look as follows:

      [source,java]
      ----------------------------------------------------------------------------------------
      protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder);
      ----------------------------------------------------------------------------------------

      And could be used like as follows:

      [source,java]
      -------------------------------------------------------------------------------------------
      ApnsServiceFactory proxiedApnsServiceFactory = new ApnsServiceFactory(){
       ??
        @Override
        protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder) {
          return serviceBuilder.withSocksProxy("my.proxy.com", 6666);
        }

      };
      -------------------------------------------------------------------------------------------

      [[APNS-Samples]]
      Samples
      ^^^^^^^

      [[APNS-CamelXmlroute]]
      Camel Xml route
      +++++++++++++++

      [source,xml]
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:camel="http://camel.apache.org/schema/spring"
             xsi:schemaLocation="
              http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
              http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

          <!-- Replace by desired values -->
          <bean id="apnsServiceFactory" class="org.apache.camel.component.apns.factory.ApnsServiceFactory">

              <!-- Optional configuration of feedback host and port -->
              <!-- <property name="feedbackHost" value="localhost" /> -->
              <!-- <property name="feedbackPort" value="7843" /> -->

              <!-- Optional configuration of gateway host and port -->
              <!-- <property name="gatewayHost" value="localhost" /> -->
              <!-- <property name="gatewayPort" value="7654" /> -->

              <!-- Declaration of certificate used -->
                      <!-- from Camel 2.11 onwards you can use prefix: classpath:, file: to refer to load the certificate from classpath or file. Default it classpath -->
              <property name="certificatePath" value="certificate.p12" />
              <property name="certificatePassword" value="MyCertPassword" />

              <!-- Optional connection strategy - By Default: No need to configure -->
              <!-- Possible options: NON_BLOCKING, QUEUE, POOL or Nothing -->
              <!-- <property name="connectionStrategy" value="POOL" /> -->
              <!-- Optional pool size -->
              <!-- <property name="poolSize" value="15" /> -->

              <!-- Optional connection strategy - By Default: No need to configure -->
              <!-- Possible options: EVERY_HALF_HOUR, EVERY_NOTIFICATION or Nothing (Corresponds to NEVER javapns option) -->
              <!-- <property name="reconnectionPolicy" value="EVERY_HALF_HOUR" /> -->
          </bean>

          <bean id="apnsService" factory-bean="apnsServiceFactory" factory-method="getApnsService" />

          <!-- Replace this declaration by wanted configuration -->
          <bean id="apns" class="org.apache.camel.component.apns.ApnsComponent">
              <property name="apnsService" ref="apnsService" />
          </bean>

          <camelContext id="camel-apns-test" xmlns="http://camel.apache.org/schema/spring">
                  <route id="apns-test">
                          <from uri="apns:consumer?initialDelay=10&amp;delay=3600&amp;timeUnit=SECONDS" />
                          <to uri="log:org.apache.camel.component.apns?showAll=true&amp;multiline=true" />
                          <to uri="mock:result" />
                  </route>
          </camelContext>

      </beans>
      --------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[APNS-CamelJavaroute]]
      Camel Java route
      ++++++++++++++++

      [[APNS-Createcamelcontextanddeclareapnscomponentprogrammatically]]
      Create camel context and declare apns component programmatically

      [source,java]
      ----------------------------------------------------------------------------------
          protected CamelContext createCamelContext() throws Exception {
              CamelContext camelContext = super.createCamelContext();

              ApnsServiceFactory apnsServiceFactory = new ApnsServiceFactory();
              apnsServiceFactory.setCertificatePath("classpath:/certificate.p12");
              apnsServiceFactory.setCertificatePassword("MyCertPassword");

              ApnsService apnsService = apnsServiceFactory.getApnsService(camelContext);

              ApnsComponent apnsComponent = new ApnsComponent(apnsService);
              camelContext.addComponent("apns", apnsComponent);

              return camelContext;
          }
      ----------------------------------------------------------------------------------

      [[APNS-ApnsProducer-iOStargetdevicedynamicallyconfiguredviaheader:"CamelApnsTokens"]]
      ApnsProducer - iOS target device dynamically configured via header:
      `"CamelApnsTokens"`

      [source,java]
      ---------------------------------------------------------------------------------------
          protected RouteBuilder createRouteBuilder() throws Exception {
              return new RouteBuilder() {
                  public void configure() throws Exception {
                      from("direct:test")
                          .setHeader(ApnsConstants.HEADER_TOKENS, constant(IOS_DEVICE_TOKEN))
                          .to("apns:notify");
                      }
              }
          }
      ---------------------------------------------------------------------------------------

      [[APNS-ApnsProducer-iOStargetdevicestaticallyconfiguredviauri]]
      ApnsProducer - iOS target device statically configured via uri

      [source,java]
      ------------------------------------------------------------------
          protected RouteBuilder createRouteBuilder() throws Exception {
              return new RouteBuilder() {
                  public void configure() throws Exception {
                      from("direct:test").
                      to("apns:notify?tokens=" + IOS_DEVICE_TOKEN);
                  }
              };
          }
      ------------------------------------------------------------------

      [[APNS-ApnsConsumer]]
      ApnsConsumer

      [source,java]
      --------------------------------------------------------------------------
      from("apns:consumer?initialDelay=10&delay=3600&timeUnit=SECONDS")
          .to("log:com.apache.camel.component.apns?showAll=true&multiline=true")
          .to("mock:result");
      --------------------------------------------------------------------------

      [[APNS-SeeAlso]]
      See Also
      ^^^^^^^^

      * http://camel.apache.org/component.html[Component]
      * http://camel.apache.org/endpoint.html[Endpoint]
      *
      http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/[Blog
      about using APNS (in french)]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-asterisk
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: asterisk
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: asterisk
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: asterisk
          spec:
            containers:
            - image: fabric8/connector-asterisk:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: asterisk
        syntax: asterisk:name
        title: Asterisk
        description: The asterisk component is used to interact with Asterisk PBX Server Asterisk PBX Server.
        label: voip
        deprecated: false
        async: false
        javaType: org.apache.camel.component.asterisk.AsteriskComponent
        groupId: org.apache.camel
        artifactId: camel-asterisk
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Logical name
        hostname:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hostname of the asterix server
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Login password
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Login username
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        action:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.asterisk.AsteriskActionEnum
          enum:
          - QUEUE_STATUS
          - SIP_PEERS
          - EXTENSION_STATE
          deprecated: false
          secret: false
          description: What action to perform such as getting queue status sip peers or extension state.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[AsteriskComponent-AsteriskComponent]]
      Asterisk Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18*

      The *asterisk:* component allows you to work easily with an Asterisk PBX Server http://www.asterisk.org/ using https://asterisk-java.org/[asterisk-java]

      This component help to interface with http://www.voip-info.org/wiki-Asterisk+manager+API[Asterisk Manager Interface]

      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-asterisk</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[AsteriskComponent-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------------------------------------------------------------------------------------------
      asterisk:name[?options]
      -------------------------------------------------------------------------------------------------------------------------

      [[AsteriskComponent-Options]]
      Options
      ^^^^^^^

      // component options: START
      The Asterisk component has no options.
      // component options: END

      // endpoint options: START
      The Asterisk component supports 9 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Logical name
      | hostname | common |  | String | The hostname of the asterix server
      | password | common |  | String | Login password
      | username | common |  | String | Login username
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | action | producer |  | AsteriskActionEnum | What action to perform such as getting queue status sip peers or extension state.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Asterisk-Actions]]
      Action
      ^^^^^^
      Supported actions are:

      * QUEUE_STATUS, Queue Status
      * SIP_PEERS, List SIP Peers
      * EXTENSION_STATE, Check Extension Status
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-atmos
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: atmos
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: atmos
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: atmos
          spec:
            containers:
            - image: fabric8/connector-atmos:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: atmos
        syntax: atmos:name/operation
        title: Atmos
        description: The atmos component is used for integrating with EMC's Atomos Storage.
        label: file,cloud
        deprecated: false
        async: false
        javaType: org.apache.camel.component.atmos.AtmosComponent
        groupId: org.apache.camel
        artifactId: camel-atmos
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Atmos name
        operation:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.atmos.util.AtmosOperation
          enum:
          - put
          - del
          - search
          - get
          - move
          deprecated: false
          secret: false
          description: Operation to perform
        enableSslValidation:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Atmos SSL validation
        fullTokenId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Atmos client fullTokenId
        localPath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Local path to put files
        newRemotePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: New path on Atmos when moving files
        query:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Search query on Atmos
        remotePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Where to put files on Atmos
        secretKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Atmos shared secret
        uri:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Atomos server uri
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Atmos-Atmos]]
      Atmos Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.15*

      *Camel-Gora* is an http://camel.apache.org/[Apache Camel] component that
      allows you to work with ViPR object data services using the
      https://github.com/emcvipr/dataservices-sdk-java[Atmos Client].

      [source,java]
      -------------------------------
      from("atmos:foo/get?remotePath=/path").to("mock:test");
      -------------------------------

      [[Atmos-Options]]
      Options
      ~~~~~~~


      // component options: START
      The Atmos component has no options.
      // component options: END



      // endpoint options: START
      The Atmos component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | Atmos name
      | operation | common |  | AtmosOperation | *Required* Operation to perform
      | enableSslValidation | common | false | boolean | Atmos SSL validation
      | fullTokenId | common |  | String | Atmos client fullTokenId
      | localPath | common |  | String | Local path to put files
      | newRemotePath | common |  | String | New path on Atmos when moving files
      | query | common |  | String | Search query on Atmos
      | remotePath | common |  | String | Where to put files on Atmos
      | secretKey | common |  | String | Atmos shared secret
      | uri | common |  | String | Atomos server uri
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Atmos-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      To use Atmos in your camel routes you need to add the dependency
      on *camel-atmos* which implements this data format.

      If you use maven you could just add the following to your pom.xml,
      substituting the version number for the latest & greatest release (see
      link:download.html[the download page for the latest versions]).

      [source,xml]
      ----------------------------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atmos</artifactId>
        <version>x.x.x</version>
        <!-- use the same version as your Camel core version -->
      </dependency>
      ----------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-atmosphere-websocket
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: atmosphere-websocket
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: atmosphere-websocket
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: atmosphere-websocket
          spec:
            containers:
            - image: fabric8/connector-atmosphere-websocket:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: atmosphere-websocket
        extendsScheme: servlet
        syntax: atmosphere-websocket:servicePath
        title: Atmosphere Websocket
        description: To exchange data with external Websocket clients using Atmosphere.
        label: websocket
        deprecated: false
        async: false
        javaType: org.apache.camel.component.atmosphere.websocket.WebsocketComponent
        groupId: org.apache.camel
        artifactId: camel-atmosphere-websocket
        version: 2.18.1
      componentProperties:
        servletName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Default name of servlet to use. The default name is CamelServlet.
        httpRegistry:
          kind: property
          type: object
          javaType: org.apache.camel.component.servlet.HttpRegistry
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.servlet.HttpRegistry.
        attachmentMultipartBinding:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to automatic bind multipart/form-data as attachments on the Camel Exchange. This is turn off by default as this may require servlet specific configuration to enable this when using Servlet's.
        httpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        httpConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpConfiguration
          deprecated: false
          secret: false
          description: To use the shared HttpConfiguration as base configuration.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        servicePath:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of websocket endpoint
        chunked:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        headerFilterStrategy:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        sendToAll:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to send to all (broadcast) or send to a single receiver.
        transferException:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        useStreaming:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To enable streaming to send data as multiple text fragments.
        async:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configure the consumer to work in async mode
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        eagerCheckContentAvailable:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to eager check whether the HTTP requests has content if the content-length header is 0 or not present. This can be turned on in case HTTP clients do not send streamed data.
        httpMethodRestrict:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.
        matchOnUriPrefix:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
        optionsEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off.
        responseBufferSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To use a custom buffer size on the javax.servlet.ServletResponse.
        servletName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelServlet
          description: Name of the servlet to use
        traceEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP TRACE for this Servlet consumer. By default TRACE is turned off.
        attachmentMultipartBinding:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to automatic bind multipart/form-data as attachments on the Camel Exchange. This is turn off by default as this may require servlet specific configuration to enable this when using Servlet's.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        authMethodPriority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - Basic
          - Digest
          - NTLM
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
        copyHeaders:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
        ignoreResponseBody:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true The http producer won't read response body and cache the input stream
        okStatusCodeRange:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
        preserveHostHeader:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
        proxyHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The proxy port number
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        urlRewrite:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.http.common.UrlRewrite
          deprecated: false
          secret: false
          description: Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Atmosphere-Websocket-AtmosphereWebsocketServletComponent]]
      Atmosphere Websocket Servlet Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The??*atmosphere-websocket:*??component provides Websocket
      based??link:endpoint.html[endpoints]??for a servlet communicating with
      external clients over Websocket (as a servlet accepting websocket
      connections from external clients). +
      The component uses the link:servlet.html[SERVLET] component and uses
      the??https://github.com/Atmosphere/atmosphere[Atmosphere]??library to
      support the Websocket transport in various Servlet containers (e..g.,
      Jetty, Tomcat, ...).

      Unlike the
      https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=39621544[Websocket]
      component that starts the embedded Jetty server, this component uses the
      servlet provider of the container.

      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-atmosphere-websocket</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Atmosphere-Websocket-Options]]
      Atmosphere-Websocket Options
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^



      // component options: START
      The Atmosphere Websocket component supports 7 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | servletName | String | Default name of servlet to use. The default name is CamelServlet.
      | httpRegistry | HttpRegistry | To use a custom org.apache.camel.component.servlet.HttpRegistry.
      | attachmentMultipartBinding | boolean | Whether to automatic bind multipart/form-data as attachments on the Camel Exchange. This is turn off by default as this may require servlet specific configuration to enable this when using Servlet's.
      | httpBinding | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | httpConfiguration | HttpConfiguration | To use the shared HttpConfiguration as base configuration.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Atmosphere Websocket component supports 35 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | servicePath | common |  | String | *Required* Name of websocket endpoint
      | chunked | common | true | boolean | If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
      | disableStreamCache | common | false | boolean | Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
      | headerFilterStrategy | common |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | httpBinding | common |  | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | sendToAll | common | false | boolean | Whether to send to all (broadcast) or send to a single receiver.
      | transferException | common | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | useStreaming | common | false | boolean | To enable streaming to send data as multiple text fragments.
      | async | consumer | false | boolean | Configure the consumer to work in async mode
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | eagerCheckContentAvailable | consumer | false | boolean | Whether to eager check whether the HTTP requests has content if the content-length header is 0 or not present. This can be turned on in case HTTP clients do not send streamed data.
      | httpMethodRestrict | consumer |  | String | Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.
      | matchOnUriPrefix | consumer | false | boolean | Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
      | optionsEnabled | consumer | false | boolean | Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off.
      | responseBufferSize | consumer |  | Integer | To use a custom buffer size on the javax.servlet.ServletResponse.
      | servletName | consumer | CamelServlet | String | Name of the servlet to use
      | traceEnabled | consumer | false | boolean | Specifies whether to enable HTTP TRACE for this Servlet consumer. By default TRACE is turned off.
      | attachmentMultipartBinding | consumer (advanced) | false | boolean | Whether to automatic bind multipart/form-data as attachments on the Camel Exchange. This is turn off by default as this may require servlet specific configuration to enable this when using Servlet's.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | authMethodPriority | producer |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | bridgeEndpoint | producer | false | boolean | If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
      | connectionClose | producer | false | boolean | Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
      | copyHeaders | producer | true | boolean | If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
      | ignoreResponseBody | producer | false | boolean | If this option is true The http producer won't read response body and cache the input stream
      | okStatusCodeRange | producer | 200-299 | String | The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
      | preserveHostHeader | producer | false | boolean | If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
      | proxyHost | producer |  | String | The proxy host name
      | proxyPort | producer |  | int | The proxy port number
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | urlRewrite | producer (advanced) |  | UrlRewrite | Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
      | mapHttpMessageBody | advanced | true | boolean | If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
      | mapHttpMessageFormUrlEncodedBody | advanced | true | boolean | If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
      | mapHttpMessageHeaders | advanced | true | boolean | If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Atmosphere-Websocket-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -----------------------------------------------
      atmosphere-websocket:///relative path[?options]
      -----------------------------------------------

      [[Atmosphere-Websocket-ReadingandWritingDataoverWebsocket]]
      Reading and Writing Data over Websocket
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      An atmopshere-websocket endpoint can either write data to the socket or
      read from the socket, depending on whether the endpoint is configured as
      the producer or the consumer, respectively.

      [[Atmosphere-Websocket-ConfiguringURItoReadorWriteData]]
      Configuring URI to Read or Write Data
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In the route below, Camel will read from the specified websocket
      connection.

      [source,java]
      -------------------------------------------
      from("atmosphere-websocket:///servicepath")
              .to("direct:next");
      -------------------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ------------------------------------------------------------
      <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="atmosphere-websocket:///servicepath"/>
          <to uri="direct:next"/>
        </route>
      </camelContext>
      ------------------------------------------------------------

      In the route below, Camel will read from the specified websocket
      connection.

      [source,java]
      ---------------------------------------------------
      from("direct:next")
              .to("atmosphere-websocket:///servicepath");
      ---------------------------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ------------------------------------------------------------
      <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="direct:next"/>
          <to uri="atmosphere-websocket:///servicepath"/>
        </route>
      </camelContext>
      ------------------------------------------------------------

      ??

      [[Atmosphere-Websocket-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:servlet.html[SERVLET]
      * link:ahc-ws.html[AHC-WS]
      *
      https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=39621544[Websocket]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-atom
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: atom
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: atom
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: atom
          spec:
            containers:
            - image: fabric8/connector-atom:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: atom
        syntax: atom:feedUri
        title: Atom
        description: The atom component is used for consuming Atom RSS feeds.
        label: rss
        deprecated: false
        async: false
        consumerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.atom.AtomComponent
        groupId: org.apache.camel
        artifactId: camel-atom
        version: 2.18.1
      componentProperties: {}
      properties:
        feedUri:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URI to the feed to poll.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        feedHeader:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to add the feed object as a header
        filter:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to use filtering or not of the entries.
        lastUpdate:
          kind: parameter
          group: consumer
          type: string
          javaType: java.util.Date
          deprecated: false
          secret: false
          description: Sets the timestamp to be used for filtering entries from the atom feeds. This options is only in conjunction with the splitEntries.
        password:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the password to be used for basic authentication when polling from a HTTP feed
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        sortEntries:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to sort entries by published date. Only works when splitEntries = true.
        splitEntries:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether or not entries should be sent individually or whether the entire feed should be sent as a single message
        throttleEntries:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether all entries identified in a single feed poll should be delivered immediately. If true only one entry is processed per consumer.delay. Only applicable when splitEntries = true.
        username:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the username to be used for basic authentication when polling from a HTTP feed
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[Atom-AtomComponent]]
      Atom Component
      ~~~~~~~~~~~~~~

      The *atom:* component is used for polling Atom feeds.

      Camel will poll the feed every 60 seconds by default. +
       *Note:* The component currently only supports polling (consuming)
      feeds.

      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-atom</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Atom-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------
      atom://atomUri[?options]
      ------------------------

      Where *atomUri* is the URI to the Atom feed to poll.

      [[Atom-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Atom component has no options.
      // component options: END



      // endpoint options: START
      The Atom component supports 28 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | feedUri | consumer |  | String | *Required* The URI to the feed to poll.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | feedHeader | consumer | true | boolean | Sets whether to add the feed object as a header
      | filter | consumer | true | boolean | Sets whether to use filtering or not of the entries.
      | lastUpdate | consumer |  | Date | Sets the timestamp to be used for filtering entries from the atom feeds. This options is only in conjunction with the splitEntries.
      | password | consumer |  | String | Sets the password to be used for basic authentication when polling from a HTTP feed
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | sortEntries | consumer | false | boolean | Sets whether to sort entries by published date. Only works when splitEntries = true.
      | splitEntries | consumer | true | boolean | Sets whether or not entries should be sent individually or whether the entire feed should be sent as a single message
      | throttleEntries | consumer | true | boolean | Sets whether all entries identified in a single feed poll should be delivered immediately. If true only one entry is processed per consumer.delay. Only applicable when splitEntries = true.
      | username | consumer |  | String | Sets the username to be used for basic authentication when polling from a HTTP feed
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


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

      [[Atom-Exchangedataformat]]
      Exchange data format
      ^^^^^^^^^^^^^^^^^^^^

      Camel will set the In body on the returned `Exchange` with the entries.
      Depending on the `splitEntries` flag Camel will either return one
      `Entry` or a `List<Entry>`.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Option |Value |Behavior
      |`splitEntries` |`true` |Only a single entry from the currently being processed feed is set:
      `exchange.in.body(Entry)`

      |`splitEntries` |`false` |The entire list of entries from the feed is set:
      `exchange.in.body(List<Entry>)`
      |=======================================================================

      Camel can set the `Feed` object on the In header (see `feedHeader`
      option to disable this):

      [[Atom-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel atom uses these headers.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Header |Description
      |`CamelAtomFeed` |When consuming the `org.apache.abdera.model.Feed` object is set to this
      header.
      |=======================================================================

      [[Atom-Samples]]
      Samples
      ^^^^^^^

      In this sample we poll James Strachan's blog.

      [source,java]
      ---------------------------------------------------------------------------------
      from("atom://http://macstrac.blogspot.com/feeds/posts/default").to("seda:feeds");
      ---------------------------------------------------------------------------------

      In this sample we want to filter only good blogs we like to a SEDA
      queue. The sample also shows how to setup Camel standalone, not running
      in any Container or using Spring.

      [[Atom-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:rss.html[RSS]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-avro
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: avro
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: avro
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: avro
          spec:
            containers:
            - image: fabric8/connector-avro:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: avro
        syntax: avro:transport:host:port/messageName
        title: Avro
        description: Working with Apache Avro for data serialization.
        label: messaging,transformation
        deprecated: false
        async: true
        javaType: org.apache.camel.component.avro.AvroComponent
        groupId: org.apache.camel
        artifactId: camel-avro
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.avro.AvroConfiguration
          deprecated: false
          secret: false
          description: To use a shared AvroConfiguration to configure options once
      properties:
        transport:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.avro.AvroTransport
          enum:
          - http
          - netty
          deprecated: false
          secret: false
          description: Transport to use
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number to use
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname to use
        messageName:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the message to send.
        protocol:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.avro.Protocol
          deprecated: false
          secret: false
          description: Avro protocol to use
        protocolClassName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Avro protocol to use defined by the FQN class name
        protocolLocation:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Avro protocol location
        reflectionProtocol:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If protocol object provided is reflection protocol. Should be used only with protocol parameter because for protocolClassName protocol type will be auto detected
        singleParameter:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true consumer parameter won't be wrapped into array. Will fail if protocol specifies more then 1 parameter for the message
        uriAuthority:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Authority to use (username and password)
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[avro-AvroComponent]]
      Avro Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.10*

      This component provides a dataformat for avro, which allows
      serialization and deserialization of messages using Apache Avro's binary
      dataformat. Moreover, it provides support for Apache Avro's rpc, by
      providing producers and consumers endpoint for using avro over netty or
      http.

      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-avro</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[avro-ApacheAvroOverview]]
      Apache Avro Overview
      ^^^^^^^^^^^^^^^^^^^^

      Avro allows you to define message types and a protocol using a json like
      format and then generate java code for the specified types and messages.
      An example of how a schema looks like is below.

      [source,xml]
      ------------------------------------------------------------------------------------------
      {"namespace": "org.apache.camel.avro.generated",
       "protocol": "KeyValueProtocol",

       "types": [
           {"name": "Key", "type": "record",
            "fields": [
                {"name": "key",   "type": "string"}
            ]
           },
           {"name": "Value", "type": "record",
            "fields": [
                {"name": "value",   "type": "string"}
            ]
           }
       ],

       "messages": {
           "put": {
               "request": [{"name": "key", "type": "Key"}, {"name": "value", "type": "Value"} ],
               "response": "null"
           },
           "get": {
               "request": [{"name": "key", "type": "Key"}],
               "response": "Value"
           }
       }
      }
      ------------------------------------------------------------------------------------------

      You can easily generate classes from a schema, using maven, ant etc.
      More details can be found at the
      http://avro.apache.org/docs/current/[Apache Avro documentation].

      However, it doesn't enforce a schema first approach and you can create
      schema for your existing classes. *Since 2.12* you can use existing
      protocol interfaces to make RCP calls. You should use interface for the
      protocol itself and POJO beans or primitive/String classes for parameter
      and result types. Here is an example of the class that corresponds to
      schema above:

      [source,java]
      --------------------------------------------------------------
      package org.apache.camel.avro.reflection;

      public interface KeyValueProtocol {
          void put(String key, Value value);
          Value get(String key);
      }

      class Value {
          private String value;
          public String getValue() { return value; }
          public void setValue(String value) { this.value = value; }
      }
      --------------------------------------------------------------

      _Note: Existing classes can be used only for RPC (see below), not in
      data format._

      [[avro-UsingtheAvrodataformat]]
      Using the Avro data format
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      Using the avro data format is as easy as specifying that the class that
      you want to marshal or unmarshal in your route.

      [source,xml]
      --------------------------------------------------------------------------------
          <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
              <route>
                  <from uri="direct:in"/>
                  <marshal>
                      <avro instanceClass="org.apache.camel.dataformat.avro.Message"/>
                  </marshal>
                  <to uri="log:out"/>
              </route>
          </camelContext>
      --------------------------------------------------------------------------------

      An alternative can be to specify the dataformat inside the context and
      reference it from your route.

      [source,xml]
      --------------------------------------------------------------------------------------
          <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
               <dataFormats>
                  <avro id="avro" instanceClass="org.apache.camel.dataformat.avro.Message"/>
              </dataFormats>
              <route>
                  <from uri="direct:in"/>
                  <marshal ref="avro"/>
                  <to uri="log:out"/>
              </route>
          </camelContext>
      --------------------------------------------------------------------------------------

      In the same manner you can umarshal using the avro data format.

      [[avro-UsingAvroRPCinCamel]]
      Using Avro RPC in Camel
      ^^^^^^^^^^^^^^^^^^^^^^^

      As mentioned above Avro also provides RPC support over multiple
      transports such as http and netty. Camel provides consumers and
      producers for these two transports.

      [source,java]
      ----------------------------------------
      avro:[transport]:[host]:[port][?options]
      ----------------------------------------

      The supported transport values are currently http or netty.

      *Since 2.12* you can specify message name right in the URI:

      [source,java]
      ------------------------------------------------------
      avro:[transport]:[host]:[port][/messageName][?options]
      ------------------------------------------------------

      For consumers this allows you to have multiple routes attached to the
      same socket. Dispatching to correct route will be done by the avro
      component automatically. Route with no messageName specified (if any)
      will be used as default.

      When using camel producers for avro ipc, the "in" message body needs to
      contain the parameters of the operation specified in the avro protocol.
      The response will be added in the body of the "out" message.

      In a similar manner when using camel avro consumers for avro ipc, the
      requests parameters will be placed inside the "in" message body of the
      created exchange and once the exchange is processed the body of the
      "out" message will be send as a response.

      *Note:* By default consumer parameters are wrapped into array. If you've
      got only one parameter, *since 2.12* you can use `singleParameter` URI
      option to receive it direcly in the "in" message body without array
      wrapping.

      [[avro-AvroRPCURIOptions]]
      Avro RPC URI Options
      ^^^^^^^^^^^^^^^^^^^^





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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | AvroConfiguration | To use a shared AvroConfiguration to configure options once
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The Avro component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | transport | common |  | AvroTransport | *Required* Transport to use
      | port | common |  | int | *Required* Port number to use
      | host | common |  | String | *Required* Hostname to use
      | messageName | common |  | String | The name of the message to send.
      | protocol | common |  | Protocol | Avro protocol to use
      | protocolClassName | common |  | String | Avro protocol to use defined by the FQN class name
      | protocolLocation | common |  | String | Avro protocol location
      | reflectionProtocol | common | false | boolean | If protocol object provided is reflection protocol. Should be used only with protocol parameter because for protocolClassName protocol type will be auto detected
      | singleParameter | common | false | boolean | If true consumer parameter won't be wrapped into array. Will fail if protocol specifies more then 1 parameter for the message
      | uriAuthority | common |  | String | Authority to use (username and password)
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[avro-AvroRPCHeaders]]
      Avro RPC Headers
      ^^^^^^^^^^^^^^^^

      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |Name |Description

      |`CamelAvroMessageName` |The name of the message to send. In consumer overrides message name from
      URI (if any)
      |=======================================================================

      [[avro-Examples]]
      Examples
      ^^^^^^^^

      An example of using camel avro producers via http:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
              <route>
                  <from uri="direct:start"/>
                  <to uri="avro:http:localhost:{{avroport}}?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol"/>
                  <to uri="log:avro"/>
              </route>
      ---------------------------------------------------------------------------------------------------------------------------

      In the example above you need to fill `CamelAvroMessageName` header.
      *Since 2.12* you can use following syntax to call constant messages:

      [source,xml]
      -------------------------------------------------------------------------------------------------------------------------------
      ?? ?? ?? ?? <route>
      ?? ?? ?? ?? ?? ?? <from uri="direct:start"/>
      ?? ?? ?? ?? ?? ?? <to uri="avro:http:localhost:{{avroport}}/put?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol"/>
      ?? ?? ?? ?? ?? ?? <to uri="log:avro"/>
      ?? ?? ?? ?? </route>
      -------------------------------------------------------------------------------------------------------------------------------

      An example of consuming messages using camel avro consumers via netty:

      [source,xml]
      ------------------------------------------------------------------------------------------------------------------------------
              <route>
                  <from uri="avro:netty:localhost:{{avroport}}?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol"/>
                  <choice>
                      <when>
                          <el>${in.headers.CamelAvroMessageName == 'put'}</el>
                          <process ref="putProcessor"/>
                      </when>
                      <when>
                          <el>${in.headers.CamelAvroMessageName == 'get'}</el>
                          <process ref="getProcessor"/>
                      </when>
                  </choice>
              </route>
      ------------------------------------------------------------------------------------------------------------------------------

      *Since 2.12* you can set up two distinct routes to perform the same
      task:

      [source,xml]
      -------------------------------------------------------------------------------------------------------------------------------------------------------
              <route>
                  <from uri="avro:netty:localhost:{{avroport}}/put?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol">
                  <process ref="putProcessor"/>
              </route>
              <route>
                  <from uri="avro:netty:localhost:{{avroport}}/get?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol&singleParameter=true"/>
                  <process ref="getProcessor"/>
              </route>
      -------------------------------------------------------------------------------------------------------------------------------------------------------

      In the example above, get takes only one parameter, so `singleParameter`
      is used and `getProcessor` will receive Value class directly in body,
      while `putProcessor` will receive an array of size 2 with String key and
      Value value filled as array contents.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-cw
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-cw
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-cw
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-cw
          spec:
            containers:
            - image: fabric8/connector-aws-cw:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-cw
        syntax: aws-cw:namespace
        title: AWS CloudWatch
        description: The aws-cw component is used for sending metrics to an Amazon CloudWatch.
        label: cloud,monitoring
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.aws.cw.CwComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        namespace:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The metric namespace
        accessKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonCwClient:
          kind: parameter
          group: producer
          type: object
          javaType: com.amazonaws.services.cloudwatch.AmazonCloudWatch
          deprecated: false
          secret: false
          description: To use the AmazonCloudWatch as the client
        amazonCwEndpoint:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-CW client wants to work with.
        name:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The metric name
        proxyHost:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        secretKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        timestamp:
          kind: parameter
          group: producer
          type: string
          javaType: java.util.Date
          deprecated: false
          secret: false
          description: The metric timestamp
        unit:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The metric unit
        value:
          kind: parameter
          group: producer
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          description: The metric value
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[AWS-CW-CWComponent]]
      CW Component
      ~~~~~~~~~~~~

      *Available as of Camel 2.11

      The CW component allows messages to be sent to an
      http://aws.amazon.com/cloudwatch/[Amazon CloudWatch] metrics. The
      implementation of the Amazon API is provided by
      the??http://aws.amazon.com/sdkforjava/[AWS SDK].

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon CloudWatch. More information are available at
      http://aws.amazon.com/cloudwatch/[Amazon CloudWatch].

      [[AWS-CW-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ----------------------------
      aws-cw://namespace[?options]
      ----------------------------

      The metrics will be created if they don't already exists. +
       You can append query options to the URI in the following format,
      `?options=value&option2=value&...`

      [[AWS-CW-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS CloudWatch component has no options.
      // component options: END




      // endpoint options: START
      The AWS CloudWatch component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | namespace | producer |  | String | *Required* The metric namespace
      | accessKey | producer |  | String | Amazon AWS Access Key
      | amazonCwClient | producer |  | AmazonCloudWatch | To use the AmazonCloudWatch as the client
      | amazonCwEndpoint | producer |  | String | The region with which the AWS-CW client wants to work with.
      | name | producer |  | String | The metric name
      | proxyHost | producer |  | String | To define a proxy host when instantiating the SQS client
      | proxyPort | producer |  | Integer | To define a proxy port when instantiating the SQS client
      | secretKey | producer |  | String | Amazon AWS Secret Key
      | timestamp | producer |  | Date | The metric timestamp
      | unit | producer |  | String | The metric unit
      | value | producer |  | Double | The metric value
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      Required CW component options

      You have to provide the amazonCwClient in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the http://aws.amazon.com/cloudwatch/[Amazon's CloudWatch].

      [[AWS-CW-Usage]]
      Usage
      ^^^^^

      [[AWS-CW-MessageheadersevaluatedbytheCWproducer]]
      Message headers evaluated by the CW producer
      ++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsCwMetricName` |`String` |The Amazon CW metric name.

      |`CamelAwsCwMetricValue` |`Double` |The Amazon CW metric value.

      |`CamelAwsCwMetricUnit` |`String` |The Amazon CW metric unit.

      |`CamelAwsCwMetricNamespace` |`String` |The Amazon CW metric namespace.

      |`CamelAwsCwMetricTimestamp` |`Date` |The Amazon CW metric timestamp.

      |`CamelAwsCwMetricDimensionName` |`String` |*Camel 2.12:* The Amazon CW metric dimension name.

      |`CamelAwsCwMetricDimensionValue` |`String` |*Camel 2.12:* The Amazon CW metric dimension value.

      |`CamelAwsCwMetricDimensions` |`Map<String, String>` |*Camel 2.12:* A map of dimension names and dimension values.
      |=======================================================================

      [[AWS-CW-AdvancedAmazonCloudWatchconfiguration]]
      Advanced AmazonCloudWatch configuration
      +++++++++++++++++++++++++++++++++++++++

      If you need more control over the `AmazonCloudWatch` instance
      configuration you can create your own instance and refer to it from the
      URI:

      [source,java]
      -------------------------------------------------
      from("direct:start")
      .to("aws-cw://namepsace?amazonCwClient=#client");
      -------------------------------------------------

      The `#client` refers to a `AmazonCloudWatch` in the
      link:registry.html[Registry].

      For example if your Camel Application is running behind a firewall:

      [source,java]
      ------------------------------------------------------------------------------------------
      AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);

      AmazonCloudWatch client = new AmazonCloudWatchClient(awsCredentials, clientConfiguration);

      registry.bind("client", client);
      ------------------------------------------------------------------------------------------

      [[AWS-CW-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.10 or higher).

      [[AWS-CW-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-ddb
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-ddb
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-ddb
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-ddb
          spec:
            containers:
            - image: fabric8/connector-aws-ddb:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-ddb
        syntax: aws-ddb:tableName
        title: AWS DynamoDB
        description: The aws-ddb component is used for storing and retrieving data from Amazon's DynamoDB service.
        label: cloud,database,nosql
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.aws.ddb.DdbComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        tableName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the table currently worked with.
        accessKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonDDBClient:
          kind: parameter
          group: producer
          type: object
          javaType: com.amazonaws.services.dynamodbv2.AmazonDynamoDB
          deprecated: false
          secret: false
          description: To use the AmazonDynamoDB as the client
        amazonDdbEndpoint:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-DDB client wants to work with.
        consistentRead:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not strong consistency should be enforced when data is read.
        keyAttributeName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Attribute name when creating table
        keyAttributeType:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Attribute type when creating table
        operation:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.aws.ddb.DdbOperations
          enum:
          - BatchGetItems
          - DeleteItem
          - DeleteTable
          - DescribeTable
          - GetItem
          - PutItem
          - Query
          - Scan
          - UpdateItem
          - UpdateTable
          deprecated: false
          secret: false
          defaultValue: PutItem
          description: What operation to perform
        proxyHost:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        readCapacity:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: The provisioned throughput to reserve for reading resources from your table
        secretKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        writeCapacity:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: The provisioned throughput to reserved for writing resources to your table
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[AWS-DDB-DDBComponent]]\nDDB Component\n~~~~~~~~~~~~~\n\n\
      *Available as of Camel 2.10*\n\nThe DynamoDB component supports storing and\
      \ retrieving data from/to\nhttp://aws.amazon.com/dynamodb[Amazon's DynamoDB]\
      \ service.\n\nPrerequisites\n\nYou must have a valid Amazon Web Services developer\
      \ account, and be\nsigned up to use Amazon DynamoDB. More information are available\
      \ at\nhttp://aws.amazon.com/dynamodb[Amazon DynamoDB].\n\n[[AWS-DDB-URIFormat]]\n\
      URI Format\n^^^^^^^^^^\n\n[source,java]\n------------------------------\naws-ddb://domainName[?options]\n\
      ------------------------------\n\nYou can append query options to the URI in\
      \ the following format,\n?options=value&option2=value&...\n\n[[AWS-DDB-URIOptions]]\n\
      URI Options\n^^^^^^^^^^^\n\n\n// component options: START\nThe AWS DynamoDB\
      \ component has no options.\n// component options: END\n\n\n\n\n// endpoint\
      \ options: START\nThe AWS DynamoDB component supports 14 endpoint options which\
      \ are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| tableName | producer |\
      \  | String | *Required* The name of the table currently worked with.\n| accessKey\
      \ | producer |  | String | Amazon AWS Access Key\n| amazonDDBClient | producer\
      \ |  | AmazonDynamoDB | To use the AmazonDynamoDB as the client\n| amazonDdbEndpoint\
      \ | producer |  | String | The region with which the AWS-DDB client wants to\
      \ work with.\n| consistentRead | producer | false | boolean | Determines whether\
      \ or not strong consistency should be enforced when data is read.\n| keyAttributeName\
      \ | producer |  | String | Attribute name when creating table\n| keyAttributeType\
      \ | producer |  | String | Attribute type when creating table\n| operation |\
      \ producer | PutItem | DdbOperations | What operation to perform\n| proxyHost\
      \ | producer |  | String | To define a proxy host when instantiating the SQS\
      \ client\n| proxyPort | producer |  | Integer | To define a proxy port when\
      \ instantiating the SQS client\n| readCapacity | producer |  | Long | The provisioned\
      \ throughput to reserve for reading resources from your table\n| secretKey |\
      \ producer |  | String | Amazon AWS Secret Key\n| writeCapacity | producer |\
      \  | Long | The provisioned throughput to reserved for writing resources to\
      \ your table\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\nRequired DDB component options\n\
      \nYou have to provide the amazonDDBClient in the\nlink:registry.html[Registry]\
      \ or your accessKey and secretKey to access\nthe http://aws.amazon.com/dynamodb[Amazon's\
      \ DynamoDB].\n\n[[AWS-DDB-Usage]]\nUsage\n^^^^^\n\n[[AWS-DDB-MessageheadersevaluatedbytheDDBproducer]]\n\
      Message headers evaluated by the DDB producer\n+++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbBatchItems` |`Map<String, KeysAndAttributes>`\
      \ |A map of the table name and corresponding items to get by primary key.\n\n\
      |`CamelAwsDdbTableName` |`String` |Table Name for this operation.\n\n|`CamelAwsDdbKey`\
      \ |`Key` |The primary key that uniquely identifies each item in a table. *From\
      \ Camel 2.16.0 the type of this header is Map<String,\nAttributeValue> and not\
      \ Key*\n\n|`CamelAwsDdbReturnValues` |`String` |Use this parameter if you want\
      \ to get the attribute name-value pairs\nbefore or after they are modified(NONE,\
      \ ALL_OLD, UPDATED_OLD, ALL_NEW,\nUPDATED_NEW).\n\n|`CamelAwsDdbUpdateCondition`\
      \ |`Map<String, ExpectedAttributeValue>` |Designates an attribute for a conditional\
      \ modification.\n\n|`CamelAwsDdbAttributeNames` |`Collection<String>` |If attribute\
      \ names are not specified then all attributes will be\nreturned.\n\n|`CamelAwsDdbConsistentRead`\
      \ |`Boolean` |If set to true, then a consistent read is issued, otherwise eventually\n\
      consistent is used.\n\n|`CamelAwsDdbItem` |`Map<String, AttributeValue>` |A\
      \ map of the attributes for the item, and must include the primary key\nvalues\
      \ that define the item.\n\n|`CamelAwsDdbExactCount` |`Boolean` |If set to true,\
      \ Amazon DynamoDB returns a total number of items that\nmatch the query parameters,\
      \ instead of a list of the matching items and\ntheir attributes. *From Camel\
      \ 2.16.0 this header doesn't exist anymore.*\n\n|`CamelAwsDdbKeyConditions`\
      \ |`Map<String, Condition>` |*From Camel 2.16.0*. This header specify the selection\
      \ criteria for the\nquery, and merge together the two old headers *CamelAwsDdbHashKeyValue*\n\
      and *CamelAwsDdbScanRangeKeyCondition*\n\n|`CamelAwsDdbStartKey` |`Key` |Primary\
      \ key of the item from which to continue an earlier query.\n\n|`CamelAwsDdbHashKeyValue`\
      \ |`AttributeValue` |Value of the hash component of the composite primary key.\n\
      *From Camel 2.16.0 this header doesn't exist anymore.*\n\n|`CamelAwsDdbLimit`\
      \ |`Integer` |The maximum number of items to return.\n\n|`CamelAwsDdbScanRangeKeyCondition`\
      \ |`Condition` |A container for the attribute values and comparison operators\
      \ to use for\nthe query.*From Camel 2.16.0 this header doesn't exist anymore.*\n\
      \n|`CamelAwsDdbScanIndexForward` |`Boolean` |Specifies forward or backward traversal\
      \ of the index.\n\n|`CamelAwsDdbScanFilter` |`Map<String, Condition>` |Evaluates\
      \ the scan results and returns only the desired values.\n\n|`CamelAwsDdbUpdateValues`\
      \ |`Map<String, AttributeValueUpdate>` |Map of attribute name to the new value\
      \ and action for the update.\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringBatchGetItemsoperation]]\nMessage headers\
      \ set during BatchGetItems operation\n++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbBatchResponse` |`Map<String,BatchResponse>`\
      \ |Table names and the respective item attributes from the tables.\n\n|`CamelAwsDdbUnprocessedKeys`\
      \ |`Map<String,KeysAndAttributes>` |Contains a map of tables and their respective\
      \ keys that were not\nprocessed with the current response.\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringDeleteItemoperation]]\nMessage headers set\
      \ during DeleteItem operation\n+++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>`\
      \ |The list of attributes returned by the operation.\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringDeleteTableoperation]]\nMessage headers set\
      \ during DeleteTable operation\n++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbProvisionedThroughput`| | \n\n|`ProvisionedThroughputDescription`\
      \ | |The value of the ProvisionedThroughput property for this table\n\n|`CamelAwsDdbCreationDate`\
      \ |`Date` |Creation DateTime of this table.\n\n|`CamelAwsDdbTableItemCount`\
      \ |`Long` |Item count for this table.\n\n|`CamelAwsDdbKeySchema` |`KeySchema`\
      \ |The KeySchema that identifies the primary key for this table. \n*From Camel\
      \ 2.16.0 the type of this header is List<KeySchemaElement> and not KeySchema*\n\
      \n|`CamelAwsDdbTableName` |`String` |The table name. \n\n|`CamelAwsDdbTableSize`\
      \ |`Long` |The table size in bytes. \n\n|`CamelAwsDdbTableStatus` |`String`\
      \ |The status of the table: CREATING, UPDATING, DELETING, ACTIVE\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringDescribeTableoperation]]\nMessage headers\
      \ set during DescribeTable operation\n++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbProvisionedThroughput` |{{ProvisionedThroughputDescription}}\
      \ |The value of the ProvisionedThroughput property for this table\n\n|`CamelAwsDdbCreationDate`\
      \ |`Date` |Creation DateTime of this table.\n\n|`CamelAwsDdbTableItemCount`\
      \ |`Long` |Item count for this table.\n\n|`CamelAwsDdbKeySchema` |{{KeySchema}}\
      \ |The KeySchema that identifies the primary key for this table.\n*From Camel\
      \ 2.16.0 the type of this header is List<KeySchemaElement> and\nnot KeySchema*\n\
      \n|`CamelAwsDdbTableName` |`String` |The table name.\n\n|`CamelAwsDdbTableSize`\
      \ |`Long` |The table size in bytes.\n\n|`CamelAwsDdbTableStatus` |`String` |The\
      \ status of the table: CREATING, UPDATING, DELETING, ACTIVE\n\n|`CamelAwsDdbReadCapacity`\
      \ |`Long` |ReadCapacityUnits property of this table.\n\n|`CamelAwsDdbWriteCapacity`\
      \ |`Long` |WriteCapacityUnits property of this table.\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringGetItemoperation]]\nMessage headers set during\
      \ GetItem operation\n++++++++++++++++++++++++++++++++++++++++++++\n\n[width=\"\
      100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>`\
      \ |The list of attributes returned by the operation.\n\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringPutItemoperation]]\nMessage headers set during\
      \ PutItem operation\n++++++++++++++++++++++++++++++++++++++++++++\n\n[width=\"\
      100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>`\
      \ |The list of attributes returned by the operation.\n\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringQueryoperation]]\nMessage headers set during\
      \ Query operation\n++++++++++++++++++++++++++++++++++++++++++\n\n[width=\"100%\"\
      ,cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbItems` |`List<java.util.Map<String,AttributeValue>>`\
      \ |The list of attributes returned by the operation.\n\n|`CamelAwsDdbLastEvaluatedKey`\
      \ |`Key` |Primary key of the item where the query operation stopped, inclusive\
      \ of\nthe previous result set.\n\n|`CamelAwsDdbConsumedCapacity` |`Double` |The\
      \ number of Capacity Units of the provisioned throughput of the table\nconsumed\
      \ during the operation.\n\n|`CamelAwsDdbCount` |`Integer` |Number of items in\
      \ the response.\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringScanoperation]]\nMessage headers set during\
      \ Scan operation\n+++++++++++++++++++++++++++++++++++++++++\n\n[width=\"100%\"\
      ,cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbItems` |`List<java.util.Map<String,AttributeValue>>`\
      \ |The list of attributes returned by the operation.\n\n|`CamelAwsDdbLastEvaluatedKey`\
      \ |`Key` |Primary key of the item where the query operation stopped, inclusive\
      \ of\nthe previous result set.\n\n|`CamelAwsDdbConsumedCapacity` |`Double` |The\
      \ number of Capacity Units of the provisioned throughput of the table\nconsumed\
      \ during the operation.\n\n|`CamelAwsDdbCount` |`Integer` |Number of items in\
      \ the response.\n\n|`CamelAwsDdbScannedCount` |`Integer` |Number of items in\
      \ the complete scan before any filters are applied.\n|=======================================================================\n\
      \n[[AWS-DDB-MessageheaderssetduringUpdateItemoperation]]\nMessage headers set\
      \ during UpdateItem operation\n+++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsDdbAttributes` |`Map<String, AttributeValue>`\
      \ |The list of attributes returned by the operation.\n\n|=======================================================================\n\
      \n[[AWS-DDB-AdvancedAmazonDynamoDBconfiguration]]\nAdvanced AmazonDynamoDB configuration\n\
      +++++++++++++++++++++++++++++++++++++\n\nIf you need more control over the `AmazonDynamoDB`\
      \ instance\nconfiguration you can create your own instance and refer to it from\
      \ the\nURI:\n\n[source,java]\n----------------------------------------------------\n\
      from(\"direct:start\")\n.to(\"aws-ddb://domainName?amazonDDBClient=#client\"\
      );\n----------------------------------------------------\n\nThe `#client` refers\
      \ to a `AmazonDynamoDB` in the\nlink:registry.html[Registry].\n\nFor example\
      \ if your Camel Application is running behind a firewall:\n\n[source,java]\n\
      --------------------------------------------------------------------------------------\n\
      AWSCredentials awsCredentials = new BasicAWSCredentials(\"myAccessKey\", \"\
      mySecretKey\");\nClientConfiguration clientConfiguration = new ClientConfiguration();\n\
      clientConfiguration.setProxyHost(\"http://myProxyHost\");\nclientConfiguration.setProxyPort(8080);\n\
      \nAmazonDynamoDB client = new AmazonDynamoDBClient(awsCredentials, clientConfiguration);\n\
      \nregistry.bind(\"client\", client);\n--------------------------------------------------------------------------------------\n\
      \n[[AWS-DDB-Dependencies]]\nDependencies\n^^^^^^^^^^^^\n\nMaven users will need\
      \ to add the following dependency to their pom.xml.\n\n*pom.xml*\n\n[source,xml]\n\
      ---------------------------------------\n<dependency>\n    <groupId>org.apache.camel</groupId>\n\
      \    <artifactId>camel-aws</artifactId>\n    <version>${camel-version}</version>\n\
      </dependency>\n---------------------------------------\n\nwhere `${camel-version`}\
      \ must be replaced by the actual version of Camel\n(2.10 or higher).\n\n[[AWS-DDB-SeeAlso]]\n\
      See Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n* link:aws.html[AWS Component]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-ddbstream
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-ddbstream
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-ddbstream
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-ddbstream
          spec:
            containers:
            - image: fabric8/connector-aws-ddbstream:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-ddbstream
        syntax: aws-ddbstream:tableName
        title: AWS DynamoDB Streams
        description: The aws-ddbstream component is used for working with Amazon DynamoDB Streams.
        label: cloud,messaging,streams
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.aws.ddbstream.DdbStreamComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        tableName:
          kind: path
          group: consumer
          label: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the dynamodb table
        amazonDynamoDbStreamsClient:
          kind: parameter
          group: consumer
          label: consumer
          required: true
          type: object
          javaType: com.amazonaws.services.dynamodbv2.AmazonDynamoDBStreams
          deprecated: false
          secret: false
          description: Amazon DynamoDB client to use for all requests for this endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        iteratorType:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: com.amazonaws.services.dynamodbv2.model.ShardIteratorType
          enum:
          - TRIM_HORIZON
          - LATEST
          - AT_SEQUENCE_NUMBER
          - AFTER_SEQUENCE_NUMBER
          deprecated: false
          secret: false
          defaultValue: LATEST
          description: Defines where in the DynaboDB stream to start getting records. Note that using TRIM_HORIZON can cause a significant delay before the stream has caught up to real-time. if ATAFTER_SEQUENCE_NUMBER are used then a sequenceNumberProvider MUST be supplied.
        maxResultsPerRequest:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Maximum number of records that will be fetched in each poll
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        sequenceNumberProvider:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.aws.ddbstream.SequenceNumberProvider
          deprecated: false
          secret: false
          description: Provider for the sequence number when using one of the two ShardIteratorType.ATAFTER_SEQUENCE_NUMBER iterator types. Can be a registry reference or a literal sequence number.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[AWS-DDBSTREAM-DynamoDBStreamComponent]]
      DynamoDB Stream Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.7*

      The DynamoDB Stream component supports receiving messages from
      Amazon??DynamoDB Stream service.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon DynamoDB Streams. More information are available
      at??http://aws.amazon.com/dynamodb/[AWS DynamoDB]

      [[AWS-DDBSTREAM-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ------------------------------------
      aws-ddbstream://table-name[?options]
      ------------------------------------

      The stream needs to be created prior to it being used. +
       You can append query options to the URI in the following format,
      ?options=value&option2=value&...

      [[AWS-DDBSTREAM-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS DynamoDB Streams component has no options.
      // component options: END






      // endpoint options: START
      The AWS DynamoDB Streams component supports 24 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | tableName | consumer |  | String | *Required* Name of the dynamodb table
      | amazonDynamoDbStreamsClient | consumer |  | AmazonDynamoDBStreams | *Required* Amazon DynamoDB client to use for all requests for this endpoint
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | iteratorType | consumer | LATEST | ShardIteratorType | Defines where in the DynaboDB stream to start getting records. Note that using TRIM_HORIZON can cause a significant delay before the stream has caught up to real-time. if ATAFTER_SEQUENCE_NUMBER are used then a sequenceNumberProvider MUST be supplied.
      | maxResultsPerRequest | consumer |  | int | Maximum number of records that will be fetched in each poll
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | sequenceNumberProvider | consumer |  | SequenceNumberProvider | Provider for the sequence number when using one of the two ShardIteratorType.ATAFTER_SEQUENCE_NUMBER iterator types. Can be a registry reference or a literal sequence number.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END





      Required DynampDBStream component options

      You have to provide the??amazonDynamoDbStreamsClient in the
      link:registry.html[Registry] with proxies and relevant credentials
      configured.

      [[AWS-DDBSTREAM-SequenceNumbers]]
      Sequence Numbers
      ^^^^^^^^^^^^^^^^

      You can provide a literal string as the sequence number or provide a
      bean in the registry. An example of using the bean would be to save your
      current position in the change feed and restore it on Camel startup.

      It is an error to provide a sequence number that is greater than the
      largest sequence number in the describe-streams result, as this will
      lead to the AWS call returning an HTTP 400.

      [[AWS-DDBSTREAM-BatchConsumer]]
      Batch Consumer
      ^^^^^^^^^^^^^^

      This component implements the link:batch-consumer.html[Batch Consumer].

      This allows you for instance to know how many messages exists in this
      batch and for instance let the link:aggregator.html[Aggregator]
      aggregate this number of messages.

      [[AWS-DDBSTREAM-Usage]]
      Usage
      ^^^^^

      [[AWS-DDBSTREAM-AmazonDynamoDBStreamsClientconfiguration]]
      AmazonDynamoDBStreamsClient??configuration
      +++++++++++++++++++++++++++++++++++++++++

      You will need to create an instance of AmazonDynamoDBStreamsClient and
      bind it to the registry

      [source,java]
      --------------------------------------------------------------------------------------------------------------------
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);

      Region region = Region.getRegion(Regions.fromName(region));
      region.createClient(AmazonDynamoDBStreamsClient.class, null, clientConfiguration);
      // the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain

      registry.bind("kinesisClient", client);
      --------------------------------------------------------------------------------------------------------------------

      [[AWS-DDBSTREAM-ProvidingAWSCredentials]]
      Providing AWS Credentials
      +++++++++++++++++++++++++

      It is recommended that the credentials are obtained by using the
      http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html[DefaultAWSCredentialsProviderChain]
      that is the default when creating a new ClientConfiguration instance,
      however, a
      different??http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html[AWSCredentialsProvider]
      can be specified when calling createClient(...).

      [[AWS-DDBSTREAM-CopingwithDowntime]]
      Coping with Downtime
      ^^^^^^^^^^^^^^^^^^^^

      [[AWS-DDBSTREAM-AWSDynamoDBStreamsoutageoflessthan24hours]]
      AWS DynamoDB Streams outage of less than 24 hours
      +++++++++++++++++++++++++++++++++++++++++++++++++

      The consumer will resume from the last seen sequence number (as
      implemented
      for??https://issues.apache.org/jira/browse/CAMEL-9515[CAMEL-9515]), so
      you should receive a flood of events in quick succession, as long as the
      outage did not also include DynamoDB itself.

      [[AWS-DDBSTREAM-AWSDynamoDBStreamsoutageofmorethan24hours]]
      AWS DynamoDB Streams outage of more than 24 hours
      +++++++++++++++++++++++++++++++++++++++++++++++++

      Given that AWS only retain 24 hours worth of changes, you will have
      missed change events no matter what mitigations are in place.

      [[AWS-DDBSTREAM-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.7 or higher).

      [[AWS-DDBSTREAM-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component] +
       +

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-ec2
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-ec2
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-ec2
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-ec2
          spec:
            containers:
            - image: fabric8/connector-aws-ec2:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-ec2
        syntax: aws-ec2:label
        title: AWS EC2
        description: The aws-ec2 is used for managing Amazon EC2 instances.
        label: cloud,management
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.aws.ec2.EC2Component
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        label:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Logical name
        accessKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonEc2Client:
          kind: parameter
          group: producer
          type: object
          javaType: com.amazonaws.services.ec2.AmazonEC2Client
          deprecated: false
          secret: false
          description: To use a existing configured AmazonEC2Client as client
        amazonEc2Endpoint:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-EC2 client wants to work with.
        operation:
          kind: parameter
          group: producer
          label: producer
          required: true
          type: string
          javaType: org.apache.camel.component.aws.ec2.EC2Operations
          enum:
          - createAndRunInstances
          - ' startInstances'
          - ' stopInstances'
          - ' terminateInstances'
          - ' describeInstances'
          - ' describeInstancesStatus'
          - ' rebootInstances'
          - ' monitorInstances'
          - ' unmonitorInstances'
          - ' createTags'
          - ' deleteTags'
          deprecated: false
          secret: false
          description: The operation to perform. It can be createAndRunInstances startInstances stopInstances terminateInstances describeInstances describeInstancesStatus rebootInstances monitorInstances unmonitorInstances createTags or deleteTags
        proxyHost:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        secretKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[AWS-EC2-EC2Component]]
      EC2 Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      The EC2 component supports create, run, start, stop and terminate
      https://aws.amazon.com/it/ec2/[AWS EC2] instances.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon EC2. More information are available at
      https://aws.amazon.com/it/ec2/[Amazon EC2].

      [[AWS-EC2-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -------------------------
      aws-ec2://label[?options]
      -------------------------

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

      [[AWS-EC2-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS EC2 component has no options.
      // component options: END




      // endpoint options: START
      The AWS EC2 component supports 9 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | label | producer |  | String | *Required* Logical name
      | accessKey | producer |  | String | Amazon AWS Access Key
      | amazonEc2Client | producer |  | AmazonEC2Client | To use a existing configured AmazonEC2Client as client
      | amazonEc2Endpoint | producer |  | String | The region with which the AWS-EC2 client wants to work with.
      | operation | producer |  | EC2Operations | *Required* The operation to perform. It can be createAndRunInstances startInstances stopInstances terminateInstances describeInstances describeInstancesStatus rebootInstances monitorInstances unmonitorInstances createTags or deleteTags
      | proxyHost | producer |  | String | To define a proxy host when instantiating the SQS client
      | proxyPort | producer |  | Integer | To define a proxy port when instantiating the SQS client
      | secretKey | producer |  | String | Amazon AWS Secret Key
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      Required EC2 component options

      You have to provide the amazonEc2Client in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the https://aws.amazon.com/it/ec2/[Amazon EC2] service.

      [[AWS-EC2-Usage]]
      Usage
      ^^^^^

      [[AWS-EC2-MessageheadersevaluatedbytheEC2producer]]
      Message headers evaluated by the EC2 producer
      +++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsEC2ImageId` |`String` |An image ID of the AWS marketplace

      |`CamelAwsEC2InstanceType` |com.amazonaws.services.ec2.model.InstanceType |The instance type we want to create and run

      |`CamelAwsEC2Operation` |`String` |The operation we want to perform

      |`CamelAwsEC2InstanceMinCount` |`Int` |The mininum number of instances we want to run.

      |`CamelAwsEC2InstanceMaxCount` |`Int` |The maximum number of instances we want to run.

      |`CamelAwsEC2InstanceMonitoring` |Boolean |Define if we want the running instances to be monitored

      |`CamelAwsEC2InstanceEbsOptimized` |`Boolean` |Define if the creating instance is optimized for EBS I/O.

      |`CamelAwsEC2InstanceSecurityGroups` |Collection |The security groups to associate to the instances

      |`CamelAwsEC2InstancesIds` |`Collection` |A collection of instances IDS to execute start, stop, describe and
      terminate operations on.

      |`CamelAwsEC2InstancesTags` |`Collection` |A collection of tags to add or remove from EC2 resources
      |=======================================================================

      Dependencies

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.16 or higher).

      [[AWS-EC2-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-kinesis
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-kinesis
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-kinesis
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-kinesis
          spec:
            containers:
            - image: fabric8/connector-aws-kinesis:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-kinesis
        syntax: aws-kinesis:streamName
        title: AWS Kinesis
        description: The aws-kinesis component is for consuming records from Amazon Kinesis Streams.
        label: cloud,messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.aws.kinesis.KinesisComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        streamName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the stream
        amazonKinesisClient:
          kind: parameter
          group: common
          required: true
          type: object
          javaType: com.amazonaws.services.kinesis.AmazonKinesis
          deprecated: false
          secret: false
          description: Amazon Kinesis client to use for all requests for this endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        iteratorType:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: com.amazonaws.services.kinesis.model.ShardIteratorType
          enum:
          - AT_SEQUENCE_NUMBER
          - AFTER_SEQUENCE_NUMBER
          - TRIM_HORIZON
          - LATEST
          - AT_TIMESTAMP
          deprecated: false
          secret: false
          description: Defines where in the Kinesis stream to start getting records
        maxResultsPerRequest:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Maximum number of records that will be fetched in each poll
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        sequenceNumber:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The sequence number to start polling from
        shardId:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Defines which shardId in the Kinesis stream to get records from
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[AWS-KINESIS-KinesisComponent]]
      Kinesis Component
      ~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.17*

      The Kinesis component supports receiving messages from Amazon Kinesis
      service.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon Kinesis. More information are available
      at??http://aws.amazon.com/kinesis/[AWS Kinesis]

      [[AWS-KINESIS-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -----------------------------------
      aws-kinesis://stream-name[?options]
      -----------------------------------

      The stream needs to be created prior to it being used. +
       You can append query options to the URI in the following format,
      ?options=value&option2=value&...

      [[AWS-KINESIS-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS Kinesis component has no options.
      // component options: END







      // endpoint options: START
      The AWS Kinesis component supports 25 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | streamName | common |  | String | *Required* Name of the stream
      | amazonKinesisClient | common |  | AmazonKinesis | *Required* Amazon Kinesis client to use for all requests for this endpoint
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | iteratorType | consumer |  | ShardIteratorType | Defines where in the Kinesis stream to start getting records
      | maxResultsPerRequest | consumer | 1 | int | Maximum number of records that will be fetched in each poll
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | sequenceNumber | consumer |  | String | The sequence number to start polling from
      | shardId | consumer |  | String | Defines which shardId in the Kinesis stream to get records from
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END






      Required Kinesis component options

      You have to provide the??amazonKinesisClient in the
      link:registry.html[Registry] with proxies and relevant credentials
      configured.

      [[AWS-KINESIS-BatchConsumer]]
      Batch Consumer
      ^^^^^^^^^^^^^^

      This component implements the link:batch-consumer.html[Batch Consumer].

      This allows you for instance to know how many messages exists in this
      batch and for instance let the link:aggregator.html[Aggregator]
      aggregate this number of messages.

      [[AWS-KINESIS-Usage]]
      Usage
      ^^^^^

      [[AWS-KINESIS-MessageheaderssetbytheKinesisconsumer]]
      Message headers set by the Kinesis consumer
      +++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsKinesisSequenceNumber` |`String` |The sequence number of the record. This is represented as a String as it
      size is not defined by the API. If it is to be used as a numerical type then use

      |`CamelAwsKinesisApproximateArrivalTimestamp` |`String` |The time AWS assigned as the arrival time of the record.

      |`CamelAwsKinesisPartitionKey` |`String` |Identifies which shard in the stream the data record is assigned to.
      |=======================================================================

      [[AWS-KINESIS-AmazonKinesisconfiguration]]
      AmazonKinesis configuration
      +++++++++++++++++++++++++++

      You will need to create an instance of AmazonDynamoDBStreamsClient and
      bind it to the registry

      [source,java]
      --------------------------------------------------------------------------------------------------------------------
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);

      Region region = Region.getRegion(Regions.fromName(region));
      region.createClient(AmazonDynamoDBStreamsClient.class, null, clientConfiguration);
      // the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain

      registry.bind("kinesisClient", client);
      --------------------------------------------------------------------------------------------------------------------

      [[AWS-KINESIS-ProvidingAWSCredentials]]
      Providing AWS Credentials
      +++++++++++++++++++++++++

      It is recommended that the credentials are obtained by using the
      http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/DefaultAWSCredentialsProviderChain.html[DefaultAWSCredentialsProviderChain]
      that is the default when creating a new ClientConfiguration instance,
      however, a
      different??http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/auth/AWSCredentialsProvider.html[AWSCredentialsProvider]
      can be specified when calling createClient(...).

      [[AWS-Kinesis-MessageheaderssetbytheKinesisproducer]]
      Message headers used by the Kinesis producer to write to Kinesis.  The producer expects that the message body is a `ByteBuffer`.
      +++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsKinesisPartitionKey` |`String` |The PartitionKey to pass to Kinesis to store this record.

      |`CamelAwsKinesisSequenceNumber` |`String` |Optional paramter to indicate the sequence number of this record.

      |=======================================================================

      Message headers set by the Kinesis producer on successful storage of a Record
      +++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsKinesisSequenceNumber` |`String` |The sequence number of the record, as defined in
      http://docs.aws.amazon.com/kinesis/latest/APIReference/API_PutRecord.html#API_PutRecord_ResponseSyntax[Response Syntax]

      |`CamelAwsKinesisShardId` |`String` |The shard ID of where the Record was stored


      |=======================================================================

      [[AWS-KINESIS-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.17 or higher).

      [[AWS-KINESIS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-s3
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-s3
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-s3
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-s3
          spec:
            containers:
            - image: fabric8/connector-aws-s3:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-s3
        syntax: aws-s3:bucketNameOrArn
        title: AWS S3 Storage Service
        description: The aws-s3 component is used for storing and retrieving objecct from Amazon S3 Storage Service.
        label: cloud,file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.aws.s3.S3Component
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        bucketNameOrArn:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Bucket name or ARN
        accessKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonS3Client:
          kind: parameter
          group: common
          type: object
          javaType: com.amazonaws.services.s3.AmazonS3
          deprecated: false
          secret: false
          description: Reference to a com.amazonaws.services.sqs.AmazonS3 in the link:registry.htmlRegistry.
        amazonS3Endpoint:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-S3 client wants to work with.
        pathStyleAccess:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not the S3 client should use path style access
        policy:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Camel 2.8.4: The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3setBucketPolicy()
            method.'
        proxyHost:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Camel 2.16: To define a proxy host when instantiating the SQS client'
        proxyPort:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: 'Camel 2.16: Specify a proxy port to be used inside the client definition.'
        secretKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        deleteAfterRead:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs the object is not deleted. If this option is false then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the link S3ConstantsBUCKET_NAME and link S3ConstantsKEY headers or only the link S3ConstantsKEY header.
        fileName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To get the object from the bucket with the given file name
        includeBody:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'Camel 2.17: If it is true the exchange body will be set to a stream
            to the contents of the file. If false the headers will be set with the S3 object
            metadata but the body will be null.'
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Gets the maximum number of messages as a limit to poll at each polling. Is default unlimited but use 0 or negative number to disable it as unlimited.
        prefix:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Camel 2.10.1: The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest
            to only consume objects we are interested in.'
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        deleteAfterWrite:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Camel 2.11.0: Delete file object after the S3 file has been uploaded'
        multiPartUpload:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Camel 2.15.0: If it is true camel will upload the file with multi
            part format the part size is decided by the option of partSize'
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.aws.s3.S3Operations
          enum:
          - copyObject
          - deleteBucket
          - listBuckets
          deprecated: false
          secret: false
          description: 'Camel 2.18: The operation to do in case the user don''t want to
            do only an upload'
        partSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "26214400"
          description: 'Camel 2.15.0: Setup the partSize which is used in multi part upload
            the default size is 25M.'
        region:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region where the bucket is located. This option is used in the com.amazonaws.services.s3.model.CreateBucketRequest.
        serverSideEncryption:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Camel 2.16: Sets the server-side encryption algorithm when encrypting
            the object using AWS-managed keys. For example use AES256.'
        storageClass:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Camel 2.8.4: The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest
            request.'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[AWS-S3-S3Component]]
      S3 Component
      ~~~~~~~~~~~~

      *Available as of Camel 2.8*

      The S3 component supports storing and retrieving objetcs from/to
      http://aws.amazon.com/s3[Amazon's S3] service.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon S3. More information are available at
      http://aws.amazon.com/s3[Amazon S3].

      [[AWS-S3-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ------------------------------
      aws-s3://bucketNameOrArn[?options]
      ------------------------------

      The bucket will be created if it don't already exists. +
       You can append query options to the URI in the following format,
      ?options=value&option2=value&...

      [[AWS-S3-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS S3 Storage Service component has no options.
      // component options: END











      // endpoint options: START
      The AWS S3 Storage Service component supports 40 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | bucketNameOrArn | common |  | String | *Required* Bucket name or ARN
      | accessKey | common |  | String | Amazon AWS Access Key
      | amazonS3Client | common |  | AmazonS3 | Reference to a com.amazonaws.services.sqs.AmazonS3 in the link:registry.htmlRegistry.
      | amazonS3Endpoint | common |  | String | The region with which the AWS-S3 client wants to work with.
      | pathStyleAccess | common | false | boolean | Whether or not the S3 client should use path style access
      | policy | common |  | String | Camel 2.8.4: The policy for this queue to set in the com.amazonaws.services.s3.AmazonS3setBucketPolicy() method.
      | proxyHost | common |  | String | Camel 2.16: To define a proxy host when instantiating the SQS client
      | proxyPort | common |  | Integer | Camel 2.16: Specify a proxy port to be used inside the client definition.
      | secretKey | common |  | String | Amazon AWS Secret Key
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | deleteAfterRead | consumer | true | boolean | Delete objects from S3 after they have been retrieved. The delete is only performed if the Exchange is committed. If a rollback occurs the object is not deleted. If this option is false then the same objects will be retrieve over and over again on the polls. Therefore you need to use the Idempotent Consumer EIP in the route to filter out duplicates. You can filter using the link S3ConstantsBUCKET_NAME and link S3ConstantsKEY headers or only the link S3ConstantsKEY header.
      | fileName | consumer |  | String | To get the object from the bucket with the given file name
      | includeBody | consumer | true | boolean | Camel 2.17: If it is true the exchange body will be set to a stream to the contents of the file. If false the headers will be set with the S3 object metadata but the body will be null.
      | maxMessagesPerPoll | consumer | 10 | int | Gets the maximum number of messages as a limit to poll at each polling. Is default unlimited but use 0 or negative number to disable it as unlimited.
      | prefix | consumer |  | String | Camel 2.10.1: The prefix which is used in the com.amazonaws.services.s3.model.ListObjectsRequest to only consume objects we are interested in.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | deleteAfterWrite | producer | false | boolean | Camel 2.11.0: Delete file object after the S3 file has been uploaded
      | multiPartUpload | producer | false | boolean | Camel 2.15.0: If it is true camel will upload the file with multi part format the part size is decided by the option of partSize
      | operation | producer |  | S3Operations | Camel 2.18: The operation to do in case the user don't want to do only an upload
      | partSize | producer | 26214400 | long | Camel 2.15.0: Setup the partSize which is used in multi part upload the default size is 25M.
      | region | producer |  | String | The region where the bucket is located. This option is used in the com.amazonaws.services.s3.model.CreateBucketRequest.
      | serverSideEncryption | producer |  | String | Camel 2.16: Sets the server-side encryption algorithm when encrypting the object using AWS-managed keys. For example use AES256.
      | storageClass | producer |  | String | Camel 2.8.4: The storage class to set in the com.amazonaws.services.s3.model.PutObjectRequest request.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END









      Required S3 component options

      You have to provide the amazonS3Client in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the http://aws.amazon.com/s3[Amazon's S3].

      [[AWS-S3-BatchConsumer]]
      Batch Consumer
      ^^^^^^^^^^^^^^

      This component implements the link:batch-consumer.html[Batch Consumer].

      This allows you for instance to know how many messages exists in this
      batch and for instance let the link:aggregator.html[Aggregator]
      aggregate this number of messages.

      [[AWS-S3-Usage]]
      Usage
      ^^^^^

      [[AWS-S3-MessageheadersevaluatedbytheS3producer]]
      Message headers evaluated by the S3 producer
      ++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsS3BucketName` |`String` |The bucket Name which this object will be stored or which will be used for the current operation

      |`CamelAwsS3BucketDestinationName` |`String` |*Camel 2.18*: The bucket Destination Name which will be used for the current operation

      |`CamelAwsS3ContentLength` |`Long` |The content length of this object.

      |`CamelAwsS3ContentType` |`String` |The content type of this object.

      |`CamelAwsS3ContentControl` |`String` |*Camel 2.8.2:* The content control of this object.

      |`CamelAwsS3ContentDisposition` |`String` |*Camel 2.8.2:* The content disposition of this object.

      |`CamelAwsS3ContentEncoding` |`String` |*Camel 2.8.2:* The content encoding of this object.

      |`CamelAwsS3ContentMD5` |`String` |*Camel 2.8.2:* The md5 checksum of this object.

      |`CamelAwsS3DestinationKey` |`String` |*Camel 2.18*:The Destination key which will be used for the current operation

      |`CamelAwsS3Key` |`String` |The key under which this object will be stored or which will be used for the current operation

      |`CamelAwsS3LastModified` |`java.util.Date` |*Camel 2.8.2:* The last modified timestamp of this object.

      |`CamelAwsS3Operation` |`String` |*Camel 2.18*: The operation to perform

      |`CamelAwsS3StorageClass` |`String` |*Camel 2.8.4:* The storage class of this object.

      |`CamelAwsS3CannedAcl` |`String` |*Camel 2.11.0:* The canned acl that will be applied to the object. see
      `com.amazonaws.services.s3.model.CannedAccessControlList` for allowed
      values.

      |`CamelAwsS3Acl` |`com.amazonaws.services.s3.model.AccessControlList` |*Camel 2.11.0:* a well constructed Amazon S3 Access Control List object.
      see `com.amazonaws.services.s3.model.AccessControlList` for more details

      |`CamelAwsS3Headers` |`Map<String,String>` |*Camel 2.15.0*: support to get or set custom objectMetadata headers.

      |`CamelAwsS3ServerSideEncryption` |String |*Camel 2.16:* Sets the server-side encryption algorithm when encrypting
      the object using AWS-managed keys. For example use AES256.

      |`CamelAwsS3VersionId` |`String` |The version Id of the object to be stored or returned from the current operation
      |=======================================================================

      [[AWS-S3-MessageheaderssetbytheS3producer]]
      Message headers set by the S3 producer
      ++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description
      |`CamelAwsS3ETag` |`String` |The ETag value for the newly uploaded object.

      |`CamelAwsS3VersionId` |`String` |The *optional* version ID of the newly uploaded object.

      |=======================================================================

      [[AWS-S3-MessageheaderssetbytheS3consumer]]
      Message headers set by the S3 consumer
      ++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsS3Key` |`String` |The key under which this object is stored.

      |`CamelAwsS3BucketName` |`String` |The name of the bucket in which this object is contained.

      |`CamelAwsS3ETag` |`String` |The hex encoded 128-bit MD5 digest of the associated object according to
      RFC 1864. This data is used as an integrity check to verify that the
      data received by the caller is the same data that was sent by Amazon S3.

      |`CamelAwsS3LastModified` |`Date` |The value of the Last-Modified header, indicating the date and time at
      which Amazon S3 last recorded a modification to the associated object.

      |`CamelAwsS3VersionId` |`String` |The version ID of the associated Amazon S3 object if available. Version
      IDs are only assigned to objects when an object is uploaded to an Amazon
      S3 bucket that has object versioning enabled.

      |`CamelAwsS3ContentType` |`String` |The Content-Type HTTP header, which indicates the type of content stored
      in the associated object. The value of this header is a standard MIME
      type.

      |`CamelAwsS3ContentMD5` |`String` |The base64 encoded 128-bit MD5 digest of the associated object (content
      - not including headers) according to RFC 1864. This data is used as a
      message integrity check to verify that the data received by Amazon S3 is
      the same data that the caller sent.

      |`CamelAwsS3ContentLength` |`Long` |The Content-Length HTTP header indicating the size of the associated
      object in bytes.

      |`CamelAwsS3ContentEncoding` |`String` |The *optional* Content-Encoding HTTP header specifying what content
      encodings have been applied to the object and what decoding mechanisms
      must be applied in order to obtain the media-type referenced by the
      Content-Type field.

      |`CamelAwsS3ContentDisposition` |`String` |The *optional* Content-Disposition HTTP header, which specifies
      presentational information such as the recommended filename for the
      object to be saved as.

      |`CamelAwsS3ContentControl` |`String` |The *optional* Cache-Control HTTP header which allows the user to
      specify caching behavior along the HTTP request/reply chain.

      |`CamelAwsS3ServerSideEncryption` |String |*Camel 2.16:* The server-side encryption algorithm when encrypting the
      object using AWS-managed keys.
      |=======================================================================

      [[AWS-S3-AdvancedAmazonS3configuration]]
      Advanced AmazonS3 configuration
      +++++++++++++++++++++++++++++++

      If your Camel Application is running behind a firewall or if you need to
      have more control over the `AmazonS3` instance configuration, you can
      create your own instance:

      [source,java]
      --------------------------------------------------------------------------------------
      AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");

      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);

      AmazonS3 client = new AmazonS3Client(awsCredentials, clientConfiguration);

      registry.bind("client", client);
      --------------------------------------------------------------------------------------

      and refer to it in your Camel aws-s3 component configuration:

      [source,java]
      --------------------------------------------------------------------------------
      from("aws-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
      .to("mock:result");
      --------------------------------------------------------------------------------

      [[AWS-S3-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.8 or higher).

      [[AWS-S3-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-sdb
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-sdb
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-sdb
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-sdb
          spec:
            containers:
            - image: fabric8/connector-aws-sdb:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-sdb
        syntax: aws-sdb:domainName
        title: AWS SimpleDB
        description: The aws-sdb component is for storing and retrieving data from/to Amazon's SDB service.
        label: cloud,database,nosql
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.aws.sdb.SdbComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        domainName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the domain currently worked with.
        accessKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonSDBClient:
          kind: parameter
          group: producer
          type: object
          javaType: com.amazonaws.services.simpledb.AmazonSimpleDB
          deprecated: false
          secret: false
          description: To use the AmazonSimpleDB as the client
        amazonSdbEndpoint:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-SDB client wants to work with.
        consistentRead:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not strong consistency should be enforced when data is read.
        maxNumberOfDomains:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The maximum number of domain names you want returned. The range is 1 to 100.
        operation:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.aws.sdb.SdbOperations
          enum:
          - BatchDeleteAttributes
          - BatchPutAttributes
          - DeleteAttributes
          - DeleteDomain
          - DomainMetadata
          - GetAttributes
          - ListDomains
          - PutAttributes
          - Select
          deprecated: false
          secret: false
          defaultValue: PutAttributes
          description: Operation to perform
        proxyHost:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        secretKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[AWS-SDB-SDBComponent]]
      SDB Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.8.4*

      The sdb component supports storing and retrieving data from/to
      http://aws.amazon.com/sdb[Amazon's SDB] service.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon SDB. More information are available at
      http://aws.amazon.com/sdb[Amazon SDB].

      [[AWS-SDB-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ------------------------------
      aws-sdb://domainName[?options]
      ------------------------------

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

      [[AWS-SDB-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS SimpleDB component has no options.
      // component options: END




      // endpoint options: START
      The AWS SimpleDB component supports 11 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | domainName | producer |  | String | *Required* The name of the domain currently worked with.
      | accessKey | producer |  | String | Amazon AWS Access Key
      | amazonSDBClient | producer |  | AmazonSimpleDB | To use the AmazonSimpleDB as the client
      | amazonSdbEndpoint | producer |  | String | The region with which the AWS-SDB client wants to work with.
      | consistentRead | producer | false | boolean | Determines whether or not strong consistency should be enforced when data is read.
      | maxNumberOfDomains | producer |  | Integer | The maximum number of domain names you want returned. The range is 1 to 100.
      | operation | producer | PutAttributes | SdbOperations | Operation to perform
      | proxyHost | producer |  | String | To define a proxy host when instantiating the SQS client
      | proxyPort | producer |  | Integer | To define a proxy port when instantiating the SQS client
      | secretKey | producer |  | String | Amazon AWS Secret Key
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      Required SDB component options

      You have to provide the amazonSDBClient in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the http://aws.amazon.com/sdb[Amazon's SDB].

      [[AWS-SDB-Usage]]
      Usage
      ^^^^^

      [[AWS-SDB-MessageheadersevaluatedbytheSDBproducer]]
      Message headers evaluated by the SDB producer
      +++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSdbAttributes` |`Collection<Attribute>` |List of attributes to be acted upon.

      |`CamelAwsSdbAttributeNames` |`Collection<String>` |The names of the attributes to be retrieved.

      |`CamelAwsSdbConsistentRead` |`Boolean` |Determines whether or not strong consistency should be enforced when
      data is read.

      |`CamelAwsSdbDeletableItems` |`Collection<DeletableItem>` |A list of items on which to perform the delete operation in a batch.

      |`CamelAwsSdbDomainName` |`String` |The name of the domain currently worked with.

      |`CamelAwsSdbItemName` |`String` |The unique key for this item

      |`CamelAwsSdbMaxNumberOfDomains` |`Integer` |The maximum number of domain names you want returned. The range is 1 *
      to 100.

      |`CamelAwsSdbNextToken` |`String` |A string specifying where to start the next list of domain/item names.

      |`CamelAwsSdbOperation` |`String` |To override the operation from the URI options.

      |`CamelAwsSdbReplaceableAttributes` |`Collection<ReplaceableAttribute>` |List of attributes to put in an Item.

      |`CamelAwsSdbReplaceableItems` |`Collection<ReplaceableItem>` |A list of items to put in a Domain.

      |`CamelAwsSdbSelectExpression` |`String` |The expression used to query the domain.

      |`CamelAwsSdbUpdateCondition` |`UpdateCondition` |The update condition which, if specified, determines whether the
      specified attributes will be updated/deleted or not.
      |=======================================================================

      [[AWS-SDB-MessageheaderssetduringDomainMetadataoperation]]
      Message headers set during DomainMetadata operation
      +++++++++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSdbTimestamp` |`Integer` |The data and time when metadata was calculated, in Epoch (UNIX) seconds.

      |`CamelAwsSdbItemCount` |`Integer` |The number of all items in the domain.

      |`CamelAwsSdbAttributeNameCount` |`Integer` |The number of unique attribute names in the domain.

      |`CamelAwsSdbAttributeValueCount` |`Integer` |The number of all attribute name/value pairs in the domain.

      |`CamelAwsSdbAttributeNameSize` |`Long` |The total size of all unique attribute names in the domain, in bytes.

      |`CamelAwsSdbAttributeValueSize` |`Long` |The total size of all attribute values in the domain, in bytes.

      |`CamelAwsSdbItemNameSize` |`Long` |The total size of all item names in the domain, in bytes.
      |=======================================================================

      [[AWS-SDB-MessageheaderssetduringGetAttributesoperation]]
      Message headers set during GetAttributes operation
      ++++++++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSdbAttributes` |`List<Attribute>` |The list of attributes returned by the operation.
      |=======================================================================

      [[AWS-SDB-MessageheaderssetduringListDomainsoperation]]
      Message headers set during ListDomains operation
      ++++++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSdbDomainNames` |`List<String>` |A list of domain names that match the expression.

      |`CamelAwsSdbNextToken` |`String` |An opaque token indicating that there are more domains than the
      specified MaxNumberOfDomains still available.
      |=======================================================================

      [[AWS-SDB-MessageheaderssetduringSelectoperation]]
      Message headers set during Select operation
      +++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSdbItems` |`List<Item>` |A list of items that match the select expression.

      |`CamelAwsSdbNextToken` |`String` |An opaque token indicating that more items than MaxNumberOfItems were
      matched, the response size exceeded 1 megabyte, or the execution time
      exceeded 5 seconds.
      |=======================================================================

      [[AWS-SDB-AdvancedAmazonSimpleDBconfiguration]]
      Advanced AmazonSimpleDB configuration
      +++++++++++++++++++++++++++++++++++++

      If you need more control over the `AmazonSimpleDB` instance
      configuration you can create your own instance and refer to it from the
      URI:

      [source,java]
      ----------------------------------------------------
      from("direct:start")
      .to("aws-sdb://domainName?amazonSDBClient=#client");
      ----------------------------------------------------

      The `#client` refers to a `AmazonSimpleDB` in the
      link:registry.html[Registry].

      For example if your Camel Application is running behind a firewall:

      [source,java]
      --------------------------------------------------------------------------------------
      AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);

      AmazonSimpleDB client = new AmazonSimpleDBClient(awsCredentials, clientConfiguration);

      registry.bind("client", client);
      --------------------------------------------------------------------------------------

      [[AWS-SDB-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.8.4 or higher).

      [[AWS-SDB-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-ses
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-ses
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-ses
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-ses
          spec:
            containers:
            - image: fabric8/connector-aws-ses:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-ses
        syntax: aws-ses:from
        title: AWS Simple Email Service
        description: The aws-ses component is used for sending emails with Amazon's SES service.
        label: cloud,mail
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.aws.ses.SesComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        from:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The sender's email address.
        accessKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonSESClient:
          kind: parameter
          group: producer
          type: object
          javaType: com.amazonaws.services.simpleemail.AmazonSimpleEmailService
          deprecated: false
          secret: false
          description: To use the AmazonSimpleEmailService as the client
        amazonSESEndpoint:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-SES client wants to work with.
        proxyHost:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        replyToAddresses:
          kind: parameter
          group: producer
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: List of reply-to email address(es) for the message override it using 'CamelAwsSesReplyToAddresses' header.
        returnPath:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The email address to which bounce notifications are to be forwarded override it using 'CamelAwsSesReturnPath' header.
        secretKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        subject:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The subject which is used if the message header 'CamelAwsSesSubject' is not present.
        to:
          kind: parameter
          group: producer
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: List of destination email address. Can be overriden with 'CamelAwsSesTo' header.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[AWS-SES-SESComponent]]
      SES Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.8.4*

      The ses component supports sending emails with
      http://aws.amazon.com/ses[Amazon's SES] service.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon SES. More information are available at
      http://aws.amazon.com/ses[Amazon SES].

      [[AWS-SES-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ------------------------
      aws-ses://from[?options]
      ------------------------

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

      [[AWS-SES-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS Simple Email Service component has no options.
      // component options: END




      // endpoint options: START
      The AWS Simple Email Service component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | from | producer |  | String | *Required* The sender's email address.
      | accessKey | producer |  | String | Amazon AWS Access Key
      | amazonSESClient | producer |  | AmazonSimpleEmailService | To use the AmazonSimpleEmailService as the client
      | amazonSESEndpoint | producer |  | String | The region with which the AWS-SES client wants to work with.
      | proxyHost | producer |  | String | To define a proxy host when instantiating the SQS client
      | proxyPort | producer |  | Integer | To define a proxy port when instantiating the SQS client
      | replyToAddresses | producer |  | List | List of reply-to email address(es) for the message override it using 'CamelAwsSesReplyToAddresses' header.
      | returnPath | producer |  | String | The email address to which bounce notifications are to be forwarded override it using 'CamelAwsSesReturnPath' header.
      | secretKey | producer |  | String | Amazon AWS Secret Key
      | subject | producer |  | String | The subject which is used if the message header 'CamelAwsSesSubject' is not present.
      | to | producer |  | List | List of destination email address. Can be overriden with 'CamelAwsSesTo' header.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      Required SES component options

      You have to provide the amazonSESClient in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the http://aws.amazon.com/ses[Amazon's SES].

      [[AWS-SES-Usage]]
      Usage
      ^^^^^

      [[AWS-SES-MessageheadersevaluatedbytheSESproducer]]
      Message headers evaluated by the SES producer
      +++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSesFrom` |`String` |The sender's email address.

      |`CamelAwsSesTo` |`List<String>` |The destination(s) for this email.

      |`CamelAwsSesSubject` |`String` |The subject of the message.

      |`CamelAwsSesReplyToAddresses` |`List<String>` |The reply-to email address(es) for the message.

      |`CamelAwsSesReturnPath` |`String` |The email address to which bounce notifications are to be forwarded.

      |`CamelAwsSesHtmlEmail` |`Boolean` |*Since Camel 2.12.3* The flag to show if email content is HTML.
      |=======================================================================

      [[AWS-SES-MessageheaderssetbytheSESproducer]]
      Message headers set by the SES producer
      +++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSesMessageId` |`String` |The Amazon SES message ID.
      |=======================================================================

      [[AWS-SES-AdvancedAmazonSimpleEmailServiceconfiguration]]
      Advanced AmazonSimpleEmailService configuration
      +++++++++++++++++++++++++++++++++++++++++++++++

      If you need more control over the `AmazonSimpleEmailService` instance
      configuration you can create your own instance and refer to it from the
      URI:

      [source,java]
      -------------------------------------------------------------
      from("direct:start")
      .to("aws-ses://example@example.com?amazonSESClient=#client");
      -------------------------------------------------------------

      The `#client` refers to a `AmazonSimpleEmailService` in the
      link:registry.html[Registry].

      For example if your Camel Application is running behind a firewall:

      [source,java]
      ----------------------------------------------------------------------------------------------------------
      AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);
      AmazonSimpleEmailService client = new AmazonSimpleEmailServiceClient(awsCredentials, clientConfiguration);

      registry.bind("client", client);
      ----------------------------------------------------------------------------------------------------------

      [[AWS-SES-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.8.4 or higher).

      [[AWS-SES-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-sns
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-sns
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-sns
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-sns
          spec:
            containers:
            - image: fabric8/connector-aws-sns:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-sns
        syntax: aws-sns:topicNameOrArn
        title: AWS Simple Notification System
        description: The aws-sns component is used for sending messages to an Amazon Simple Notification Topic.
        label: cloud,mobile,messaging
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.aws.sns.SnsComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        topicNameOrArn:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Topic name or ARN
        accessKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonSNSClient:
          kind: parameter
          group: producer
          type: object
          javaType: com.amazonaws.services.sns.AmazonSNS
          deprecated: false
          secret: false
          description: To use the AmazonSNS as the client
        amazonSNSEndpoint:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-SNS client wants to work with.
        messageStructure:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The message structure to use such as json
        policy:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The policy for this queue
        proxyHost:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        secretKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        subject:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The subject which is used if the message header 'CamelAwsSnsSubject' is not present.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[AWS-SNS-SNSComponent]]
      SNS Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.8*

      The SNS component allows messages to be sent to an
      http://aws.amazon.com/sns[Amazon Simple Notification] Topic. The
      implementation of the Amazon API is provided by
      the??http://aws.amazon.com/sdkforjava/[AWS SDK].

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon SNS. More information are available at
      http://aws.amazon.com/sns[Amazon SNS].

      [[AWS-SNS-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -----------------------------
      aws-sns://topicNameOrArn[?options]
      -----------------------------

      The topic will be created if they don't already exists. +
       You can append query options to the URI in the following format,
      `?options=value&option2=value&...`

      [[AWS-SNS-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS Simple Notification System component has no options.
      // component options: END





      // endpoint options: START
      The AWS Simple Notification System component supports 11 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | topicNameOrArn | producer |  | String | *Required* Topic name or ARN
      | accessKey | producer |  | String | Amazon AWS Access Key
      | amazonSNSClient | producer |  | AmazonSNS | To use the AmazonSNS as the client
      | amazonSNSEndpoint | producer |  | String | The region with which the AWS-SNS client wants to work with.
      | messageStructure | producer |  | String | The message structure to use such as json
      | policy | producer |  | String | The policy for this queue
      | proxyHost | producer |  | String | To define a proxy host when instantiating the SQS client
      | proxyPort | producer |  | Integer | To define a proxy port when instantiating the SQS client
      | secretKey | producer |  | String | Amazon AWS Secret Key
      | subject | producer |  | String | The subject which is used if the message header 'CamelAwsSnsSubject' is not present.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      Required SNS component options

      You have to provide the amazonSNSClient in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the http://aws.amazon.com/sns[Amazon's SNS].

      [[AWS-SNS-Usage]]
      Usage
      ^^^^^

      [[AWS-SNS-MessageheadersevaluatedbytheSNSproducer]]
      Message headers evaluated by the SNS producer
      +++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSnsSubject` |`String` |The Amazon SNS message subject. If not set, the subject from the
      `SnsConfiguration` is used.
      |=======================================================================

      [[AWS-SNS-MessageheaderssetbytheSNSproducer]]
      Message headers set by the SNS producer
      +++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelAwsSnsMessageId` |`String` |The Amazon SNS message ID.
      |=======================================================================

      [[AWS-SNS-AdvancedAmazonSNSconfiguration]]
      Advanced AmazonSNS configuration
      ++++++++++++++++++++++++++++++++

      If you need more control over the `AmazonSNS` instance configuration you
      can create your own instance and refer to it from the URI:

      [source,java]
      -------------------------------------------------
      from("direct:start")
      .to("aws-sns://MyTopic?amazonSNSClient=#client");
      -------------------------------------------------

      The `#client` refers to a `AmazonSNS` in the
      link:registry.html[Registry].

      For example if your Camel Application is running behind a firewall:

      [source,java]
      --------------------------------------------------------------------------------------
      AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);
      AmazonSNS client = new AmazonSNSClient(awsCredentials, clientConfiguration);

      registry.bind("client", client);
      --------------------------------------------------------------------------------------

      [[AWS-SNS-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.8 or higher).

      [[AWS-SNS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:aws.html[AWS Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-sqs
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-sqs
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-sqs
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-sqs
          spec:
            containers:
            - image: fabric8/connector-aws-sqs:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-sqs
        syntax: aws-sqs:queueNameOrArn
        title: AWS Simple Queue Service
        description: The aws-sqs component is used for sending and receiving messages to Amazon's SQS service.
        label: cloud,messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.aws.sqs.SqsComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        queueNameOrArn:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Queue name or ARN
        accessKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key
        amazonSQSClient:
          kind: parameter
          group: common
          type: object
          javaType: com.amazonaws.services.sqs.AmazonSQS
          deprecated: false
          secret: false
          description: To use the AmazonSQS as client
        amazonSQSEndpoint:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The region with which the AWS-SQS client wants to work with. Only works if Camel creates the AWS-SQS client i.e. if you explicitly set amazonSQSClient then this setting will have no effect. You would have to set it on the client you create directly
        headerFilterStrategy:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to map headers to/from Camel.
        queueOwnerAWSAccountId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the queue owner aws account id when you need to connect the queue with different account owner.
        region:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the queue region which could be used with queueOwnerAWSAccountId to build the service URL.
        secretKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key
        attributeNames:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of attribute names to receive when consuming. Multiple names can be separated by comma.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Allows you to use multiple threads to poll the sqs queue to increase throughput
        defaultVisibilityTimeout:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The default visibility timeout (in seconds)
        deleteAfterRead:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Delete message from SQS after it has been read
        deleteIfFiltered:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to send the DeleteMessage to the SQS queue if an exchange fails to get through a filter. If 'false' and exchange does not make it through a Camel filter upstream in the route then don't send DeleteMessage.
        extendMessageVisibility:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled then a scheduled background task will keep extending the message visibility on SQS. This is needed if it takes a long time to process the message. If set to true defaultVisibilityTimeout must be set. See details at Amazon docs.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Gets the maximum number of messages as a limit to poll at each polling. Is default unlimited but use 0 or negative number to disable it as unlimited.
        messageAttributeNames:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of message attribute names to receive when consuming. Multiple names can be separated by comma.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        visibilityTimeout:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The duration (in seconds) that the received messages are hidden from subsequent retrieve requests after being retrieved by a ReceiveMessage request to set in the com.amazonaws.services.sqs.model.SetQueueAttributesRequest. This only make sense if its different from defaultVisibilityTimeout. It changes the queue visibility timeout attribute permanently.
        waitTimeSeconds:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Duration in seconds (0 to 20) that the ReceiveMessage action call will wait until a message is in the queue to include in the response.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        delaySeconds:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Delay sending messages for a number of seconds.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        proxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To define a proxy host when instantiating the SQS client
        proxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To define a proxy port when instantiating the SQS client
        maximumMessageSize:
          kind: parameter
          group: queue
          label: queue
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The maximumMessageSize (in bytes) an SQS message can contain for this queue.
        messageRetentionPeriod:
          kind: parameter
          group: queue
          label: queue
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The messageRetentionPeriod (in seconds) a message will be retained by SQS for this queue.
        policy:
          kind: parameter
          group: queue
          label: queue
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The policy for this queue
        receiveMessageWaitTimeSeconds:
          kind: parameter
          group: queue
          label: queue
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: If you do not specify WaitTimeSeconds in the request the queue attribute ReceiveMessageWaitTimeSeconds is used to determine how long to wait.
        redrivePolicy:
          kind: parameter
          group: queue
          label: queue
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the policy that send message to DeadLetter queue. See detail at Amazon docs.
    documentation.adoc: "[[AWS-SQS-SQSComponent]]\nSQS Component\n~~~~~~~~~~~~~\n\n\
      *Available as of Camel 2.6*\n\nThe sqs component supports sending and receiving\
      \ messages to\nhttp://aws.amazon.com/sqs[Amazon's SQS] service.\n\nPrerequisites\n\
      \nYou must have a valid Amazon Web Services developer account, and be\nsigned\
      \ up to use Amazon SQS. More information are available at\nhttp://aws.amazon.com/sqs[Amazon\
      \ SQS].\n\n[[AWS-SQS-URIFormat]]\nURI Format\n^^^^^^^^^^\n\n[source,java]\n\
      ------------------------------\naws-sqs://queueNameOrArn[?options]\n------------------------------\n\
      \nThe queue will be created if they don't already exists. +\n You can append\
      \ query options to the URI in the following format,\n?options=value&option2=value&...\n\
      \n[[AWS-SQS-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\n// component options:\
      \ START\nThe AWS Simple Queue Service component has no options.\n// component\
      \ options: END\n\n\n\n\n\n\n\n\n// endpoint options: START\nThe AWS Simple Queue\
      \ Service component supports 45 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| queueNameOrArn | common\
      \ |  | String | *Required* Queue name or ARN\n| accessKey | common |  | String\
      \ | Amazon AWS Access Key\n| amazonSQSClient | common |  | AmazonSQS | To use\
      \ the AmazonSQS as client\n| amazonSQSEndpoint | common |  | String | The region\
      \ with which the AWS-SQS client wants to work with. Only works if Camel creates\
      \ the AWS-SQS client i.e. if you explicitly set amazonSQSClient then this setting\
      \ will have no effect. You would have to set it on the client you create directly\n\
      | headerFilterStrategy | common |  | HeaderFilterStrategy | To use a custom\
      \ HeaderFilterStrategy to map headers to/from Camel.\n| queueOwnerAWSAccountId\
      \ | common |  | String | Specify the queue owner aws account id when you need\
      \ to connect the queue with different account owner.\n| region | common |  |\
      \ String | Specify the queue region which could be used with queueOwnerAWSAccountId\
      \ to build the service URL.\n| secretKey | common |  | String | Amazon AWS Secret\
      \ Key\n| attributeNames | consumer |  | String | A list of attribute names to\
      \ receive when consuming. Multiple names can be separated by comma.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| concurrentConsumers\
      \ | consumer | 1 | int | Allows you to use multiple threads to poll the sqs\
      \ queue to increase throughput\n| defaultVisibilityTimeout | consumer |  | Integer\
      \ | The default visibility timeout (in seconds)\n| deleteAfterRead | consumer\
      \ | true | boolean | Delete message from SQS after it has been read\n| deleteIfFiltered\
      \ | consumer | true | boolean | Whether or not to send the DeleteMessage to\
      \ the SQS queue if an exchange fails to get through a filter. If 'false' and\
      \ exchange does not make it through a Camel filter upstream in the route then\
      \ don't send DeleteMessage.\n| extendMessageVisibility | consumer | false |\
      \ boolean | If enabled then a scheduled background task will keep extending\
      \ the message visibility on SQS. This is needed if it takes a long time to process\
      \ the message. If set to true defaultVisibilityTimeout must be set. See details\
      \ at Amazon docs.\n| maxMessagesPerPoll | consumer |  | int | Gets the maximum\
      \ number of messages as a limit to poll at each polling. Is default unlimited\
      \ but use 0 or negative number to disable it as unlimited.\n| messageAttributeNames\
      \ | consumer |  | String | A list of message attribute names to receive when\
      \ consuming. Multiple names can be separated by comma.\n| sendEmptyMessageWhenIdle\
      \ | consumer | false | boolean | If the polling consumer did not poll any files\
      \ you can enable this option to send an empty message (no body) instead.\n|\
      \ visibilityTimeout | consumer |  | Integer | The duration (in seconds) that\
      \ the received messages are hidden from subsequent retrieve requests after being\
      \ retrieved by a ReceiveMessage request to set in the com.amazonaws.services.sqs.model.SetQueueAttributesRequest.\
      \ This only make sense if its different from defaultVisibilityTimeout. It changes\
      \ the queue visibility timeout attribute permanently.\n| waitTimeSeconds | consumer\
      \ |  | Integer | Duration in seconds (0 to 20) that the ReceiveMessage action\
      \ call will wait until a message is in the queue to include in the response.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| pollStrategy | consumer (advanced) |\
      \  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel.\n| delaySeconds | producer |  | Integer | Delay\
      \ sending messages for a number of seconds.\n| synchronous | advanced | false\
      \ | boolean | Sets whether synchronous processing should be strictly used or\
      \ Camel is allowed to use asynchronous processing (if supported).\n| backoffErrorThreshold\
      \ | scheduler |  | int | The number of subsequent error polls (failed due some\
      \ error) that should happen before the backoffMultipler should kick-in.\n| backoffIdleThreshold\
      \ | scheduler |  | int | The number of subsequent idle polls that should happen\
      \ before the backoffMultipler should kick-in.\n| backoffMultiplier | scheduler\
      \ |  | int | To let the scheduled polling consumer backoff if there has been\
      \ a number of subsequent idles/errors in a row. The multiplier is then the number\
      \ of polls that will be skipped before the next actual attempt is happening\
      \ again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold\
      \ must also be configured.\n| delay | scheduler | 500 | long | Milliseconds\
      \ before the next poll. You can also specify time values using units such as\
      \ 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| greedy\
      \ | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer\
      \ will run immediately again if the previous run polled 1 or more messages.\n\
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll\
      \ starts. You can also specify time values using units such as 60s (60 seconds)\
      \ 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| runLoggingLevel | scheduler\
      \ | TRACE | LoggingLevel | The consumer logs a start/complete log line when\
      \ it polls. This option allows you to configure the logging level for that.\n\
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows\
      \ for configuring a custom/shared thread pool to use for the consumer. By default\
      \ each consumer has its own single threaded thread pool.\n| scheduler | scheduler\
      \ | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either\
      \ camel-spring or camel-quartz2 component\n| schedulerProperties | scheduler\
      \ |  | Map | To configure additional properties when using a custom scheduler\
      \ or any of the Quartz2 Spring based scheduler.\n| startScheduler | scheduler\
      \ | true | boolean | Whether the scheduler should be auto started.\n| timeUnit\
      \ | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay\
      \ options.\n| useFixedDelay | scheduler | true | boolean | Controls if fixed\
      \ delay or fixed rate is used. See ScheduledExecutorService in JDK for details.\n\
      | proxyHost | proxy |  | String | To define a proxy host when instantiating\
      \ the SQS client\n| proxyPort | proxy |  | Integer | To define a proxy port\
      \ when instantiating the SQS client\n| maximumMessageSize | queue |  | Integer\
      \ | The maximumMessageSize (in bytes) an SQS message can contain for this queue.\n\
      | messageRetentionPeriod | queue |  | Integer | The messageRetentionPeriod (in\
      \ seconds) a message will be retained by SQS for this queue.\n| policy | queue\
      \ |  | String | The policy for this queue\n| receiveMessageWaitTimeSeconds |\
      \ queue |  | Integer | If you do not specify WaitTimeSeconds in the request\
      \ the queue attribute ReceiveMessageWaitTimeSeconds is used to determine how\
      \ long to wait.\n| redrivePolicy | queue |  | String | Specify the policy that\
      \ send message to DeadLetter queue. See detail at Amazon docs.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n\n\nRequired SQS component\
      \ options\n\nYou have to provide the amazonSQSClient in the\nlink:registry.html[Registry]\
      \ or your accessKey and secretKey to access\nthe http://aws.amazon.com/sqs[Amazon's\
      \ SQS].\n\n[[AWS-SQS-BatchConsumer]]\nBatch Consumer\n^^^^^^^^^^^^^^\n\nThis\
      \ component implements the link:batch-consumer.html[Batch Consumer].\n\nThis\
      \ allows you for instance to know how many messages exists in this\nbatch and\
      \ for instance let the link:aggregator.html[Aggregator]\naggregate this number\
      \ of messages.\n\n[[AWS-SQS-Usage]]\nUsage\n^^^^^\n\n[[AWS-SQS-MessageheaderssetbytheSQSproducer]]\n\
      Message headers set by the SQS producer\n+++++++++++++++++++++++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsSqsMD5OfBody` |`String` |The MD5 checksum\
      \ of the Amazon SQS message.\n\n|`CamelAwsSqsMessageId` |`String` |The Amazon\
      \ SQS message ID.\n\n|`CamelAwsSqsDelaySeconds` |`Integer` |Since *Camel 2.11*,\
      \ the delay seconds that the Amazon SQS message can be\nsee by others.\n|=======================================================================\n\
      \n[[AWS-SQS-MessageheaderssetbytheSQSconsumer]]\nMessage headers set by the\
      \ SQS consumer\n+++++++++++++++++++++++++++++++++++++++\n\n[width=\"100%\",cols=\"\
      10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelAwsSqsMD5OfBody` |`String` |The MD5 checksum\
      \ of the Amazon SQS message.\n\n|`CamelAwsSqsMessageId` |`String` |The Amazon\
      \ SQS message ID. \n\n|`CamelAwsSqsReceiptHandle` |`String` |The Amazon SQS\
      \ message receipt handle.\n\n|`CamelAwsSqsAttributes` |`Map<String, String>`\
      \ |The Amazon SQS message attributes.\n|=======================================================================\n\
      \n[[AWS-SQS-AdvancedAmazonSQSconfiguration]]\nAdvanced AmazonSQS configuration\n\
      ++++++++++++++++++++++++++++++++\n\nIf your Camel Application is running behind\
      \ a firewall or if you need to\nhave more control over the AmazonSQS instance\
      \ configuration, you can\ncreate your own instance:\n\n[source,java]\n--------------------------------------------------------------------------------------\n\
      AWSCredentials awsCredentials = new BasicAWSCredentials(\"myAccessKey\", \"\
      mySecretKey\");\n\nClientConfiguration clientConfiguration = new ClientConfiguration();\n\
      clientConfiguration.setProxyHost(\"http://myProxyHost\");\nclientConfiguration.setProxyPort(8080);\n\
      \nAmazonSQS client = new AmazonSQSClient(awsCredentials, clientConfiguration);\n\
      \nregistry.bind(\"client\", client);\n--------------------------------------------------------------------------------------\n\
      \nand refer to it in your Camel aws-sqs component configuration:\n\n[source,java]\n\
      ---------------------------------------------------------------------------------\n\
      from(\"aws-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5\"\
      )\n.to(\"mock:result\");\n---------------------------------------------------------------------------------\n\
      \n[[AWS-SQS-Dependencies]]\nDependencies\n^^^^^^^^^^^^\n\nMaven users will need\
      \ to add the following dependency to their pom.xml.\n\n*pom.xml*\n\n[source,xml]\n\
      ---------------------------------------\n<dependency>\n    <groupId>org.apache.camel</groupId>\n\
      \    <artifactId>camel-aws</artifactId>\n    <version>${camel-version}</version>\n\
      </dependency>\n---------------------------------------\n\nwhere `${camel-version`}\
      \ must be replaced by the actual version of Camel\n(2.6 or higher).\n\n[[AWS-SQS-JMS-styleSelectors]]\n\
      JMS-style Selectors\n^^^^^^^^^^^^^^^^^^^\n\nSQS does not allow selectors, but\
      \ you can effectively achieve this by\nusing the link:message-filter.html[Camel\
      \ Filter EIP] and setting an\nappropriate `visibilityTimeout`. When SQS dispatches\
      \ a message, it will\nwait up to the visibility timeout before it will try to\
      \ dispatch the\nmessage to a different consumer unless a DeleteMessage is received.\
      \ By\ndefault, Camel will always send the DeleteMessage at the end of the\n\
      route, unless the route ended in failure. To achieve appropriate\nfiltering\
      \ and not send the DeleteMessage even on successful completion\nof the route,\
      \ use a Filter:\n\n[source,java]\n------------------------------------------------------------------------------------------------------\n\
      from(\"aws-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false\"\
      )\n.filter(\"${header.login} == true\")\n.to(\"mock:result\");\n------------------------------------------------------------------------------------------------------\n\
      \nIn the above code, if an exchange doesn't have an appropriate header, it\n\
      will not make it through the filter AND also not be deleted from the SQS\nqueue.\
      \ After 5000 miliseconds, the message will become visible to other\nconsumers.\n\
      \n[[AWS-SQS-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:aws.html[AWS Component]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-aws-swf
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: aws-swf
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: aws-swf
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: aws-swf
          spec:
            containers:
            - image: fabric8/connector-aws-swf:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: aws-swf
        syntax: aws-swf:type
        title: AWS Simple Workflow
        description: The aws-swf component is used for managing workflows from Amazon Simple Workflow.
        label: cloud,workflow
        deprecated: false
        async: false
        javaType: org.apache.camel.component.aws.swf.SWFComponent
        groupId: org.apache.camel
        artifactId: camel-aws
        version: 2.18.1
      componentProperties: {}
      properties:
        type:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - activity
          - workflow
          deprecated: false
          secret: false
          description: Activity or workflow
        accessKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Access Key.
        amazonSWClient:
          kind: parameter
          group: common
          type: object
          javaType: com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient
          deprecated: false
          secret: false
          description: To use the given AmazonSimpleWorkflowClient as client
        dataConverter:
          kind: parameter
          group: common
          type: object
          javaType: com.amazonaws.services.simpleworkflow.flow.DataConverter
          deprecated: false
          secret: false
          description: An instance of com.amazonaws.services.simpleworkflow.flow.DataConverter to use for serializing/deserializing the data.
        domainName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The workflow domain to use.
        eventName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The workflow or activity event name to use.
        secretKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Amazon AWS Secret Key.
        version:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The workflow or activity event version to use.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        clientConfigurationParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: clientConfiguration.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the ClientConfiguration using the key/values from the Map.
        startWorkflowOptionsParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: startWorkflowOptions.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the StartWorkflowOptions using the key/values from the Map.
        sWClientParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: sWClient.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the AmazonSimpleWorkflowClient using the key/values from the Map.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        activityList:
          kind: parameter
          group: activity
          label: consumer,activity
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The list name to consume activities from.
        activitySchedulingOptions:
          kind: parameter
          group: activity
          label: producer,activity
          type: object
          javaType: com.amazonaws.services.simpleworkflow.flow.ActivitySchedulingOptions
          deprecated: false
          secret: false
          description: Activity scheduling options
        activityThreadPoolSize:
          kind: parameter
          group: activity
          label: consumer,activity
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Maximum number of threads in work pool for activity.
        activityTypeExecutionOptions:
          kind: parameter
          group: activity
          label: consumer,activity
          type: object
          javaType: com.amazonaws.services.simpleworkflow.flow.worker.ActivityTypeExecutionOptions
          deprecated: false
          secret: false
          description: Activity execution options
        activityTypeRegistrationOptions:
          kind: parameter
          group: activity
          label: consumer,activity
          type: object
          javaType: com.amazonaws.services.simpleworkflow.flow.worker.ActivityTypeRegistrationOptions
          deprecated: false
          secret: false
          description: Activity registration options
        childPolicy:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The policy to use on child workflows when terminating a workflow.
        executionStartToCloseTimeout:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "3600"
          description: Set the execution start to close timeout.
        operation:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          enum:
          - SIGNAL
          - CANCEL
          - TERMINATE
          - GET_STATE
          - START
          - DESCRIBE
          - GET_HISTORY
          deprecated: false
          secret: false
          defaultValue: START
          description: Workflow operation
        signalName:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the signal to send to the workflow.
        stateResultType:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The type of the result when a workflow state is queried.
        taskStartToCloseTimeout:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "600"
          description: Set the task start to close timeout.
        terminationDetails:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Details for terminating a workflow.
        terminationReason:
          kind: parameter
          group: workflow
          label: producer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The reason for terminating a workflow.
        workflowList:
          kind: parameter
          group: workflow
          label: consumer,workflow
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The list name to consume workflows from.
        workflowTypeRegistrationOptions:
          kind: parameter
          group: workflow
          label: consumer,workflow
          type: object
          javaType: com.amazonaws.services.simpleworkflow.flow.WorkflowTypeRegistrationOptions
          deprecated: false
          secret: false
          description: Workflow registration options
    documentation.adoc: |
      [[AWS-SWF-SWFComponent]]
      SWF Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.13*

      The Simple Workflow component supports managing workflows from
      http://aws.amazon.com/swf/[Amazon's Simple Workflow] service.

      Prerequisites

      You must have a valid Amazon Web Services developer account, and be
      signed up to use Amazon Simple Workflow. More information are available
      at http://aws.amazon.com/swf/[Amazon Simple Workflow].

      [[AWS-SWF-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------
      aws-swf://<workflow|activity>[?options]
      ---------------------------------------

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

      [[AWS-SWF-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The AWS Simple Workflow component has no options.
      // component options: END




      // endpoint options: START
      The AWS Simple Workflow component supports 30 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | type | common |  | String | *Required* Activity or workflow
      | accessKey | common |  | String | Amazon AWS Access Key.
      | amazonSWClient | common |  | AmazonSimpleWorkflowClient | To use the given AmazonSimpleWorkflowClient as client
      | dataConverter | common |  | DataConverter | An instance of com.amazonaws.services.simpleworkflow.flow.DataConverter to use for serializing/deserializing the data.
      | domainName | common |  | String | The workflow domain to use.
      | eventName | common |  | String | The workflow or activity event name to use.
      | secretKey | common |  | String | Amazon AWS Secret Key.
      | version | common |  | String | The workflow or activity event version to use.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | clientConfigurationParameters | advanced |  | Map | To configure the ClientConfiguration using the key/values from the Map.
      | startWorkflowOptionsParameters | advanced |  | Map | To configure the StartWorkflowOptions using the key/values from the Map.
      | sWClientParameters | advanced |  | Map | To configure the AmazonSimpleWorkflowClient using the key/values from the Map.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | activityList | activity |  | String | The list name to consume activities from.
      | activitySchedulingOptions | activity |  | ActivitySchedulingOptions | Activity scheduling options
      | activityThreadPoolSize | activity | 100 | int | Maximum number of threads in work pool for activity.
      | activityTypeExecutionOptions | activity |  | ActivityTypeExecutionOptions | Activity execution options
      | activityTypeRegistrationOptions | activity |  | ActivityTypeRegistrationOptions | Activity registration options
      | childPolicy | workflow |  | String | The policy to use on child workflows when terminating a workflow.
      | executionStartToCloseTimeout | workflow | 3600 | String | Set the execution start to close timeout.
      | operation | workflow | START | String | Workflow operation
      | signalName | workflow |  | String | The name of the signal to send to the workflow.
      | stateResultType | workflow |  | String | The type of the result when a workflow state is queried.
      | taskStartToCloseTimeout | workflow | 600 | String | Set the task start to close timeout.
      | terminationDetails | workflow |  | String | Details for terminating a workflow.
      | terminationReason | workflow |  | String | The reason for terminating a workflow.
      | workflowList | workflow |  | String | The list name to consume workflows from.
      | workflowTypeRegistrationOptions | workflow |  | WorkflowTypeRegistrationOptions | Workflow registration options
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      Required SWF component options

      You have to provide the??amazonSWClient in the
      link:registry.html[Registry] or your accessKey and secretKey to access
      the http://aws.amazon.com/swf[Amazon's Simple Workflow Service].

      [[AWS-SWF-Usage]]
      Usage
      ^^^^^

      [[AWS-SWF-MessageheadersevaluatedbytheSWFWorkflowProducer]]
      Message headers evaluated by the SWF Workflow Producer
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++

      A workflow producer allows interacting with a workflow. It can start a
      new workflow execution, query its state, send signals to a running
      workflow, or terminate and cancel it.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelSWFOperation` |`String` |The operation to perform on the workflow. Supported operations are:  +
       SIGNAL, CANCEL, TERMINATE, GET_STATE, START, DESCRIBE, GET_HISTORY.

      |`CamelSWFWorkflowId` |`String` |A workflow ID to use.

      |`CamelAwsDdbKeyCamelSWFRunId` |`String` |A worfklow run ID to use.

      |`CamelSWFStateResultType` |`String` |The type of the result when a workflow state is queried.

      |`CamelSWFEventName` |`String` |The workflow or activity event name to use.

      |`CamelSWFVersion` |`String` |The workflow or activity event version to use.

      |`CamelSWFReason` |`String` |The reason for terminating a workflow.

      |`CamelSWFDetails` |`String` |Details for terminating a workflow.

      |`CamelSWFChildPolicy` |`String` |The policy to use on child workflows when terminating a workflow.
      |=======================================================================

      [[AWS-SWF-MessageheaderssetbytheSWFWorkflowProducer]]
      Message headers set by the SWF Workflow Producer
      ++++++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelSWFWorkflowId` |`String` |The worfklow ID used or newly generated.

      |`CamelAwsDdbKeyCamelSWFRunId` |`String` |The worfklow run ID used or generated.
      |=======================================================================

      [[AWS-SWF-MessageheaderssetbytheSWFWorkflowConsumer]]
      Message headers set by the SWF Workflow Consumer
      ++++++++++++++++++++++++++++++++++++++++++++++++

      A workflow consumer represents the workflow logic. When it is started,
      it will start polling workflow decision tasks and process them. In
      addition to processing decision tasks, a workflow consumer route, will
      also receive signals (send from a workflow producer) or state queries.
      The primary purpose of a workflow consumer is to schedule activity tasks
      for execution using activity producers. Actually activity tasks can be
      scheduled only from a thread started by a workflow consumer.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelSWFAction` |`String` |Indicates what type is the current event: CamelSWFActionExecute,
      CamelSWFSignalReceivedAction or CamelSWFGetStateAction.

      |`CamelSWFWorkflowReplaying` |`boolean` |Indicates whether the current decision task is a replay or not.

      |`CamelSWFWorkflowStartTime` |`long` |The time of the start event for this decision task.
      |=======================================================================

      [[AWS-SWF-MessageheaderssetbytheSWFActivityProducer]]
      Message headers set by the SWF Activity Producer
      ++++++++++++++++++++++++++++++++++++++++++++++++

      An activity producer allows scheduling activity tasks. An activity
      producer can be used only from a thread started by a workflow consumer
      ie, it can process synchronous exchanges started by a workflow consumer.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelSWFEventName` |`String` |The activity name to schedule.

      |`CamelSWFVersion` |`String` |The activity version to schedule.
      |=======================================================================

      [[AWS-SWF-MessageheaderssetbytheSWFActivityConsumer]]
      Message headers set by the SWF Activity Consumer
      ++++++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelSWFTaskToken` |`String` |The task token that is required to report task completion for manually
      completed tasks.
      |=======================================================================

      [[AWS-SWF-AdvancedamazonSWClientconfiguration]]
      Advanced amazonSWClient configuration
      +++++++++++++++++++++++++++++++++++++

      If you need more control over the??AmazonSimpleWorkflowClient instance
      configuration you can create your own instance and refer to it from the
      URI:

      The `#client` refers to a??AmazonSimpleWorkflowClient in the
      link:registry.html[Registry].

      For example if your Camel Application is running behind a firewall:

      [source,java]
      --------------------------------------------------------------------------------------------------------
      AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
      ClientConfiguration clientConfiguration = new ClientConfiguration();
      clientConfiguration.setProxyHost("http://myProxyHost");
      clientConfiguration.setProxyPort(8080);

      AmazonSimpleWorkflowClient client = new AmazonSimpleWorkflowClient(awsCredentials, clientConfiguration);

      registry.bind("client", client);
      --------------------------------------------------------------------------------------------------------

      [[AWS-SWF-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-aws</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.13 or higher).

      [[AWS-SWF-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      link:aws.html[AWS Component]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-bean
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: bean
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: bean
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: bean
          spec:
            containers:
            - image: fabric8/connector-bean:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: bean
        syntax: bean:beanName
        title: Bean
        description: The bean component is for invoking Java beans from Camel.
        label: core,java
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.bean.BeanComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        beanName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the bean to invoke
        method:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the method to invoke on the bean
        cache:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
        multiParameterArray:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          defaultValue: false
          description: 'How to treat the parameters which are passed from the message body;
            if it is true the message body should be an array of parameters. Note: This
            option is used internally by Camel and is not intended for end users to use.'
        parameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: bean.
          multiValue: true
          deprecated: false
          secret: false
          description: Used for configuring additional properties on the bean
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Bean-BeanComponent]]
      Bean Component
      ~~~~~~~~~~~~~~

      The *bean:* component binds beans to Camel message exchanges.

      [[Bean-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------
      bean:beanID[?options]
      ---------------------

      Where *beanID* can be any string which is used to look up the bean in
      the link:registry.html[Registry]

      [[Bean-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Bean component has no options.
      // component options: END



      // endpoint options: START
      The Bean component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | beanName | producer |  | String | *Required* Sets the name of the bean to invoke
      | method | producer |  | String | Sets the name of the method to invoke on the bean
      | cache | advanced | false | boolean | If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
      | multiParameterArray | advanced | false | boolean | How to treat the parameters which are passed from the message body; if it is true the message body should be an array of parameters. Note: This option is used internally by Camel and is not intended for end users to use.
      | parameters | advanced |  | Map | Used for configuring additional properties on the bean
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


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

      [[Bean-Using]]
      Using
      ^^^^^

      The object instance that is used to consume messages must be explicitly
      registered with the link:registry.html[Registry]. For example, if you
      are using Spring you must define the bean in the Spring configuration,
      `spring.xml`; or if you don't use Spring, by registering the bean in
      JNDI.

      Error formatting macro: snippet: java.lang.IndexOutOfBoundsException:
      Index: 20, Size: 20

      Once an endpoint has been registered, you can build Camel routes that
      use it to process exchanges.

      A *bean:* endpoint cannot be defined as the input to the route; i.e. you
      cannot consume from it, you can only route from some inbound message
      link:endpoint.html[Endpoint] to the bean endpoint as output. So consider
      using a *direct:* or *queue:* endpoint as the input.

      You can use the `createProxy()` methods on
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/bean/ProxyHelper.html[ProxyHelper]
      to create a proxy that will generate BeanExchanges and send them to any
      endpoint:

      And the same route using Spring DSL:

      [source,xml]
      ----------------------------
      <route>
         <from uri="direct:hello">
         <to uri="bean:bye"/>
      </route>
      ----------------------------

      [[Bean-Beanasendpoint]]
      Bean as endpoint
      ^^^^^^^^^^^^^^^^

      Camel also supports invoking link:bean.html[Bean] as an Endpoint. In the
      route below:

      What happens is that when the exchange is routed to the `myBean` Camel
      will use the link:bean-binding.html[Bean Binding] to invoke the bean. +
       The source for the bean is just a plain POJO:

      Camel will use link:bean-binding.html[Bean Binding] to invoke the
      `sayHello` method, by converting the Exchange's In body to the `String`
      type and storing the output of the method on the Exchange Out body.

      [[Bean-JavaDSLbeansyntax]]
      Java DSL bean syntax
      ^^^^^^^^^^^^^^^^^^^^

      Java DSL comes with syntactic sugar for the link:bean.html[Bean]
      component. Instead of specifying the bean explicitly as the endpoint
      (i.e. `to("bean:beanName")`) you can use the following syntax:

      [source,java]
      -------------------------------------------------------
      // Send message to the bean endpoint
      // and invoke method resolved using Bean Binding.
      from("direct:start").beanRef("beanName");

      // Send message to the bean endpoint
      // and invoke given method.
      from("direct:start").beanRef("beanName", "methodName");
      -------------------------------------------------------

      Instead of passing name of the reference to the bean (so that Camel will
      lookup for it in the registry), you can specify the bean itself:

      [source,java]
      ---------------------------------------------------------------
      // Send message to the given bean instance.
      from("direct:start").bean(new ExampleBean());

      // Explicit selection of bean method to be invoked.
      from("direct:start").bean(new ExampleBean(), "methodName");

      // Camel will create the instance of bean and cache it for you.
      from("direct:start").bean(ExampleBean.class);
      ---------------------------------------------------------------

      [[Bean-BeanBinding]]
      Bean Binding
      ^^^^^^^^^^^^

      How bean methods to be invoked are chosen (if they are not specified
      explicitly through the *method* parameter) and how parameter values are
      constructed from the link:message.html[Message] are all defined by the
      link:bean-binding.html[Bean Binding] mechanism which is used throughout
      all of the various link:bean-integration.html[Bean Integration]
      mechanisms in Camel.

      [[Bean-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:class.html[Class] component
      * link:bean-binding.html[Bean Binding]
      * link:bean-integration.html[Bean Integration]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-bean-validator
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: bean-validator
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: bean-validator
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: bean-validator
          spec:
            containers:
            - image: fabric8/connector-bean-validator:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: bean-validator
        syntax: bean-validator:label
        title: Bean Validator
        description: The Validator component performs bean validation of the message body using the Java Bean Validation API.
        label: validation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.bean.validator.BeanValidatorComponent
        groupId: org.apache.camel
        artifactId: camel-bean-validator
        version: 2.18.1
      componentProperties: {}
      properties:
        label:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Where label is an arbitrary text value describing the endpoint
        constraintValidatorFactory:
          kind: parameter
          group: producer
          type: object
          javaType: javax.validation.ConstraintValidatorFactory
          deprecated: false
          secret: false
          description: To use a custom ConstraintValidatorFactory
        group:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: javax.validation.groups.Default
          description: To use a custom validation group
        messageInterpolator:
          kind: parameter
          group: producer
          type: object
          javaType: javax.validation.MessageInterpolator
          deprecated: false
          secret: false
          description: To use a custom MessageInterpolator
        traversableResolver:
          kind: parameter
          group: producer
          type: object
          javaType: javax.validation.TraversableResolver
          deprecated: false
          secret: false
          description: To use a custom TraversableResolver
        validationProviderResolver:
          kind: parameter
          group: producer
          type: object
          javaType: javax.validation.ValidationProviderResolver
          deprecated: false
          secret: false
          description: To use a a custom ValidationProviderResolver
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[BeanValidator-BeanValidatorComponent]]\nBean Validator\
      \ Component\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.3*\n\nThe\
      \ Validator component performs bean validation of the message body\nusing the\
      \ Java Bean Validation API\n(http://jcp.org/en/jsr/detail?id=303[JSR 303]).\
      \ Camel uses the reference\nimplementation, which is\nhttp://docs.jboss.org/hibernate/validator/4.3/reference/en-US/html_single/[Hibernate\n\
      Validator].\n\nMaven users will need to add the following dependency to their\
      \ `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-bean-validator</artifactId>\n\
      \    <version>x.y.z</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[BeanValidator-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n------------------------------\n\
      bean-validator:label[?options]\n------------------------------\n\nor\n\n[source,java]\n\
      --------------------------------\nbean-validator://label[?options]\n--------------------------------\n\
      \nWhere *label* is an arbitrary text value describing the endpoint. +\n You\
      \ can append query options to the URI in the following format,\n?option=value&option=value&...\n\
      \n[[BeanValidator-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\n// component options:\
      \ START\nThe Bean Validator component has no options.\n// component options:\
      \ END\n\n\n\n// endpoint options: START\nThe Bean Validator component supports\
      \ 7 endpoint options which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| label | producer |  |\
      \ String | *Required* Where label is an arbitrary text value describing the\
      \ endpoint\n| constraintValidatorFactory | producer |  | ConstraintValidatorFactory\
      \ | To use a custom ConstraintValidatorFactory\n| group | producer | javax.validation.groups.Default\
      \ | String | To use a custom validation group\n| messageInterpolator | producer\
      \ |  | MessageInterpolator | To use a custom MessageInterpolator\n| traversableResolver\
      \ | producer |  | TraversableResolver | To use a custom TraversableResolver\n\
      | validationProviderResolver | producer |  | ValidationProviderResolver | To\
      \ use a a custom ValidationProviderResolver\n| synchronous | advanced | false\
      \ | boolean | Sets whether synchronous processing should be strictly used or\
      \ Camel is allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[BeanValidator-OSGideployment]]\n\
      OSGi deployment\n^^^^^^^^^^^^^^^\n\nTo use Hibernate Validator in the OSGi environment\
      \ use dedicated\n`ValidationProviderResolver` implementation, just as\n`org.apache.camel.component.bean.validator.HibernateValidationProviderResolver`.\n\
      The snippet below demonstrates this approach. Keep in mind that you can\nuse\
      \ `HibernateValidationProviderResolver` starting from the Camel\n2.13.0.\n\n\
      *Using HibernateValidationProviderResolver*\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------\n\
      from(\"direct:test\").\n  to(\"bean-validator://ValidationProviderResolverTest?validationProviderResolver=#myValidationProviderResolver\"\
      );\n\n...\n\n<bean id=\"myValidationProviderResolver\" class=\"org.apache.camel.component.bean.validator.HibernateValidationProviderResolver\"\
      /> \n--------------------------------------------------------------------------------------------------------------------------------\n\
      \nIf no custom??`ValidationProviderResolver` is defined and the validator\n\
      component has been deployed into the OSGi environment,\nthe??`HibernateValidationProviderResolver`\
      \ will be automatically used.\n\n[[BeanValidator-Example]]\nExample\n^^^^^^^\n\
      \nAssumed we have a java bean with the following annotations\n\n*Car.java*\n\
      \n[source,java]\n-----------------------------------------------------------\n\
      public class Car {\n\n    @NotNull\n    private String manufacturer;\n\n   \
      \ @NotNull\n    @Size(min = 5, max = 14, groups = OptionalChecks.class)\n  \
      \  private String licensePlate;\n    \n    // getter and setter\n}\n-----------------------------------------------------------\n\
      \nand an interface definition for our custom validation group\n\n*OptionalChecks.java*\n\
      \n[source,java]\n---------------------------------\npublic interface OptionalChecks\
      \ {\n}\n---------------------------------\n\nwith the following Camel route,\
      \ only the *@NotNull* constraints on the\nattributes manufacturer and licensePlate\
      \ will be validated (Camel uses\nthe default group `javax.validation.groups.Default`).\n\
      \n[source,java]\n-------------------------\nfrom(\"direct:start\")\n.to(\"bean-validator://x\"\
      )\n.to(\"mock:end\")\n-------------------------\n\nIf you want to check the\
      \ constraints from the group `OptionalChecks`,\nyou have to define the route\
      \ like this\n\n[source,java]\n----------------------------------------------\n\
      from(\"direct:start\")\n.to(\"bean-validator://x?group=OptionalChecks\")\n.to(\"\
      mock:end\")\n----------------------------------------------\n\nIf you want to\
      \ check the constraints from both groups, you have to\ndefine a new interface\
      \ first\n\n*AllChecks.java*\n\n[source,java]\n-----------------------------------------------------\n\
      @GroupSequence({Default.class, OptionalChecks.class})\npublic interface AllChecks\
      \ {\n}\n-----------------------------------------------------\n\nand then your\
      \ route definition should looks like this\n\n[source,java]\n-----------------------------------------\n\
      from(\"direct:start\")\n.to(\"bean-validator://x?group=AllChecks\")\n.to(\"\
      mock:end\")\n-----------------------------------------\n\nAnd if you have to\
      \ provide your own message interpolator, traversable\nresolver and constraint\
      \ validator factory, you have to write a route\nlike this\n\n[source,java]\n\
      ------------------------------------------------------------------------------------------------------\n\
      <bean id=\"myMessageInterpolator\" class=\"my.ConstraintValidatorFactory\" />\n\
      <bean id=\"myTraversableResolver\" class=\"my.TraversableResolver\" />\n<bean\
      \ id=\"myConstraintValidatorFactory\" class=\"my.ConstraintValidatorFactory\"\
      \ />\n\nfrom(\"direct:start\")\n.to(\"bean-validator://x?group=AllChecks&messageInterpolator=#myMessageInterpolator\n\
      &traversableResolver=#myTraversableResolver&constraintValidatorFactory=#myConstraintValidatorFactory\"\
      )\n.to(\"mock:end\")\n------------------------------------------------------------------------------------------------------\n\
      \nIt's also possible to describe your constraints as XML and not as Java\nannotations.\
      \ In this case, you have to provide the file\n`META-INF/validation.xml` which\
      \ could looks like this\n\n*validation.xml*\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<validation-config\n    xmlns=\"\
      http://jboss.org/xml/ns/javax/validation/configuration\"\n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\
      \n    xsi:schemaLocation=\"http://jboss.org/xml/ns/javax/validation/configuration\"\
      >\n    <default-provider>org.hibernate.validator.HibernateValidator</default-provider>\n\
      \    <message-interpolator>org.hibernate.validator.engine.ResourceBundleMessageInterpolator</message-interpolator>\n\
      \    <traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver>\n\
      \    <constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory>\n\
      \    \n    <constraint-mapping>/constraints-car.xml</constraint-mapping>\n</validation-config>\n\
      ------------------------------------------------------------------------------------------------------------------------------\n\
      \nand the `constraints-car.xml` file\n\n*constraints-car.xml*\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<constraint-mappings xmlns:xsi=\"\
      http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"http://jboss.org/xml/ns/javax/validation/mapping\
      \ validation-mapping-1.0.xsd\"\n    xmlns=\"http://jboss.org/xml/ns/javax/validation/mapping\"\
      >\n    <default-package>org.apache.camel.component.bean.validator</default-package>\n\
      \    \n    <bean class=\"CarWithoutAnnotations\" ignore-annotations=\"true\"\
      >\n        <field name=\"manufacturer\">\n            <constraint annotation=\"\
      javax.validation.constraints.NotNull\" />\n        </field>\n        \n    \
      \    <field name=\"licensePlate\">\n            <constraint annotation=\"javax.validation.constraints.NotNull\"\
      \ />\n            \n            <constraint annotation=\"javax.validation.constraints.Size\"\
      >\n                <groups>\n                    <value>org.apache.camel.component.bean.validator.OptionalChecks</value>\n\
      \                </groups>\n                <element name=\"min\">5</element>\n\
      \                <element name=\"max\">14</element>\n            </constraint>\n\
      \        </field>\n    </bean>\n</constraint-mappings>\n----------------------------------------------------------------------------------------------------\n\
      \n[[BeanValidator-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-beanstalk
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: beanstalk
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: beanstalk
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: beanstalk
          spec:
            containers:
            - image: fabric8/connector-beanstalk:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: beanstalk
        syntax: beanstalk:connectionSettings
        title: Beanstalk
        description: The beanstalk component is used for job retrieval and post-processing of Beanstalk jobs.
        label: messaging
        deprecated: false
        async: true
        javaType: org.apache.camel.component.beanstalk.BeanstalkComponent
        groupId: org.apache.camel
        artifactId: camel-beanstalk
        version: 2.18.1
      componentProperties:
        connectionSettingsFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.beanstalk.ConnectionSettingsFactory
          deprecated: false
          secret: false
          description: Custom ConnectionSettingsFactory. Specify which ConnectionSettingsFactory to use to make connections to Beanstalkd. Especially useful for unit testing without beanstalkd daemon (you can mock ConnectionSettings)
      properties:
        connectionSettings:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Connection settings host:port/tube
        command:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.beanstalk.BeanstalkCommand
          enum:
          - bury
          - release
          - put
          - touch
          - delete
          - kick
          deprecated: false
          secret: false
          description: put means to put the job into Beanstalk. Job body is specified in the Camel message body. Job ID will be returned in beanstalk.jobId message header. delete release touch or bury expect Job ID in the message header beanstalk.jobId. Result of the operation is returned in beanstalk.result message header kick expects the number of jobs to kick in the message body and returns the number of jobs actually kicked out in the message header beanstalk.result.
        jobDelay:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Job delay in seconds.
        jobPriority:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Job priority. (0 is the highest see Beanstalk protocol)
        jobTimeToRun:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "60"
          description: Job time to run in seconds. (when 0 the beanstalkd daemon raises it to 1 automatically see Beanstalk protocol)
        awaitJob:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to wait for job to complete before ack the job from beanstalk
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        onFailure:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.beanstalk.BeanstalkCommand
          enum:
          - bury
          - release
          - put
          - touch
          - delete
          - kick
          deprecated: false
          secret: false
          description: Command to use when processing failed.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        useBlockIO:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use blockIO.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[Beanstalk-Beanstalkcomponent]]
      Beanstalk component
      ~~~~~~~~~~~~~~~~~~~

      *Available in Camel 2.15*

      camel-beanstalk project provides a Camel component for job retrieval and
      post-processing of Beanstalk jobs.

      You can find the detailed explanation of Beanstalk job lifecycle
      at??http://github.com/kr/beanstalkd/blob/v1.3/doc/protocol.txt[Beanstalk
      protocol].

      [[Beanstalk-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users need to add the following dependency to their `pom.xml`

      [source,xml]
      ------------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-beanstalk</artifactId>
        <version>${camel-version}</version>
      </dependency>
      ------------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.15.0 or higher).

      [[Beanstalk-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,xml]
      ------------------------------------------
      beanstalk://[host[:port]][/tube][?options]
      ------------------------------------------

      You may omit either??`port`??or both??`host`??and??`port`: for the Beanstalk
      defaults to be used (???localhost??? and 11300). If you omit??`tube`,
      Beanstalk component will use the tube with name ???default???.

      When listening, you may probably want to watch for jobs from several
      tubes. Just separate them with plus sign, e.g.

      [source,java]
      ---------------------------------------
      beanstalk://localhost:11300/tube1+tube2
      ---------------------------------------

      Tube name will be URL decoded, so if your tube names include special
      characters like + or ?, you need to URL-encode them appropriately, or
      use the RAW syntax, see link:how-do-i-configure-endpoints.html[more
      details here].

      By the way, you cannot specify several tubes when you are writing jobs
      into Beanstalk.

      [[Beanstalk-options]]
      Beanstalk options
      ^^^^^^^^^^^^^^^^^



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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | connectionSettingsFactory | ConnectionSettingsFactory | Custom ConnectionSettingsFactory. Specify which ConnectionSettingsFactory to use to make connections to Beanstalkd. Especially useful for unit testing without beanstalkd daemon (you can mock ConnectionSettings)
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Beanstalk component supports 27 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | connectionSettings | common |  | String | Connection settings host:port/tube
      | command | common |  | BeanstalkCommand | put means to put the job into Beanstalk. Job body is specified in the Camel message body. Job ID will be returned in beanstalk.jobId message header. delete release touch or bury expect Job ID in the message header beanstalk.jobId. Result of the operation is returned in beanstalk.result message header kick expects the number of jobs to kick in the message body and returns the number of jobs actually kicked out in the message header beanstalk.result.
      | jobDelay | common | 0 | int | Job delay in seconds.
      | jobPriority | common | 1000 | long | Job priority. (0 is the highest see Beanstalk protocol)
      | jobTimeToRun | common | 60 | int | Job time to run in seconds. (when 0 the beanstalkd daemon raises it to 1 automatically see Beanstalk protocol)
      | awaitJob | consumer | true | boolean | Whether to wait for job to complete before ack the job from beanstalk
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | onFailure | consumer |  | BeanstalkCommand | Command to use when processing failed.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | useBlockIO | consumer | true | boolean | Whether to use blockIO.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      Producer??behavior??is affected by the??`command`??parameter which tells
      what to do with the job, it can be

      The consumer may delete the job immediately after reserving it or wait
      until Camel routes process it. While the first scenario is more like a
      ???message queue???, the second is similar to ???job queue???. This behavior is
      controlled by??`consumer.awaitJob`??parameter, which equals??`true`??by
      default (following Beanstalkd nature).

      When synchronous, the consumer calls??`delete`??on successful job
      completion and calls??`bury`??on failure. You can choose which command to
      execute in the case of failure by
      specifying??`consumer.onFailure`??parameter in the URI. It can take values
      of??`bury`,??`delete`??or??`release`.

      There is a boolean parameter??`consumer.useBlockIO`??which corresponds to
      the same parameter in JavaBeanstalkClient library. By default it
      is??`true`.

      Be careful when specifying??`release`, as the failed job will immediately
      become available in the same tube and your consumer will try to acquire
      it again. You can??`release`??and specify??_jobDelay_??though.

      The beanstalk consumer is a??Scheduled??link:polling-consumer.html[Polling
      Consumer] which means there is more options you can configure, such as
      how frequent the consumer should poll. For more details
      see??link:polling-consumer.html[Polling Consumer].

      [[Beanstalk-ConsumerHeaders]]
      Consumer Headers
      ^^^^^^^^^^^^^^^^

      The consumer stores a number of job headers in the Exchange message:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Property |Type |Description

      |_beanstalk.jobId_ |long | Job ID

      |_beanstalk.tube_ |string |the name of the tube that contains this job

      |_beanstalk.state_ |string |???ready??? or ???delayed??? or ???reserved??? or ???buried??? (must be ???reserved???)

      |_beanstalk.priority_ |long |the priority value set

      |_beanstalk.age_ |int |the time in seconds since the put command that created this job

      |_beanstalk.time-left_ |int |the number of seconds left until the server puts this job into the ready
      queue

      |_beanstalk.timeouts_ |int |the number of times this job has timed out during a reservation

      |_beanstalk.releases_ |int |the number of times a client has released this job from a reservation

      |_beanstalk.buries_ |int |the number of times this job has been buried

      |_beanstalk.kicks_ |int |the number of times this job has been kicked
      |=======================================================================

      [[Beanstalk-Examples]]
      Examples
      ^^^^^^^^

      This Camel component lets you both request the jobs for processing and
      supply them to Beanstalkd daemon. Our simple demo routes may look like

      [source,java]
      ----------------------------------------------------------------------------------------------
      from("beanstalk:testTube").
         log("Processing job #${property.beanstalk.jobId} with body ${in.body}").
         process(new Processor() {
           @Override
           public void process(Exchange exchange) {
             // try to make integer value out of body
             exchange.getIn().setBody( Integer.valueOf(exchange.getIn().getBody(classOf[String])) );
           }
         }).
         log("Parsed job #${property.beanstalk.jobId} to body ${in.body}");
      ----------------------------------------------------------------------------------------------

      [source,java]
      ---------------------------------------------------------------------
      from("timer:dig?period=30seconds").
         setBody(constant(10)).log("Kick ${in.body} buried/delayed tasks").
         to("beanstalk:testTube?command=kick");
      ---------------------------------------------------------------------

      In the first route we are listening for new jobs in tube ???testTube???.
      When they are arriving, we are trying to parse integer value from the
      message body. If done successful, we log it and this successful exchange
      completion makes Camel component to??_delete_??this job from Beanstalk
      automatically. Contrary, when we cannot parse the job data, the exchange
      failed and the Camel component??_buries_??it by default, so that it can be
      processed later or probably we are going to inspect failed jobs
      manually.

      So the second route periodically requests Beanstalk to??_kick_??10 jobs
      out of buried and/or delayed state to the normal queue.

      ??

      [[Beanstalk-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-binding
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: binding
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: binding
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: binding
          spec:
            containers:
            - image: fabric8/connector-binding:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: binding
        syntax: binding:bindingName:delegateUri
        title: Binding
        description: The binding component is used for as a of wrapping an Endpoint in a contract with a data format.
        label: core,transformation
        deprecated: false
        async: false
        javaType: org.apache.camel.component.binding.BindingNameComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        bindingName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the binding to lookup in the Camel registry.
        delegateUri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Uri of the delegate endpoint.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Binding-Binding]]
      Binding
      -------

      In Camel terms a _binding_ is a way of wrapping an
      link:endpoint.html[Endpoint] in a contract; such as a
      link:data-format.html[Data Format], a link:content-enricher.html[Content
      Enricher] or validation step. Bindings are completely optional and you
      can choose to use them on any link:components.html[camel endpoint].

      Bindings are inspired by the work of
      http://www.jboss.org/switchyard[SwitchYard project] adding service
      contracts to various technologies like Camel and many others. But rather
      than the SwitchYard approach of wrapping Camel in SCA, _Camel Bindings_
      provide a way of wrapping Camel endpoints with contracts inside the
      Camel framework itself; so you can use them easily inside any Camel
      route.

      [[Binding-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Binding component has no options.
      // component options: END



      // endpoint options: START
      The Binding component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | bindingName | common |  | String | *Required* Name of the binding to lookup in the Camel registry.
      | delegateUri | common |  | String | *Required* Uri of the delegate endpoint.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Binding-UsingBindings]]
      Using Bindings
      ~~~~~~~~~~~~~~

      A Binding is currently a bean which defines the contract (though we'll
      hopefully add bindings to the Camel DSL).

      There are a few approaches to defining a bound endpoint (i.e. an
      endpoint bound with a Binding).

      [[Binding-UsingthebindingURI]]
      Using the binding URI
      ^^^^^^^^^^^^^^^^^^^^^

      You can prefix any endpoint URI with *binding:nameOfBinding:* where
      _nameOfBinding_ is the name of the Binding bean in your registry.

      [source,java]
      ------------------------------------------------------------------------------
      from("binding:jaxb:activemq:myQueue").to("binding:jaxb:activemq:anotherQueue")
      ------------------------------------------------------------------------------

      Here we are using the "jaxb" binding which may, for example, use the
      JAXB link:data-format.html[Data Format] to marshal and unmarshal
      messages.

      [[Binding-UsingaBindingComponent]]
      Using a BindingComponent
      ^^^^^^^^^^^^^^^^^^^^^^^^

      There is a link:component.html[Component] called BindingComponent which
      can be configured in your link:registry.html[Registry] by dependency
      injection which allows the creation of endpoints which are already bound
      to some binding.

      For example if you registered a new component called "jsonmq" in your
      registry using code like this

      [source,java]
      -----------------------------------------------------------------------------------------------------
              JacksonDataFormat format = new JacksonDataFormat(MyBean.class);
              context.bind("jsonmq", new BindingComponent(new DataFormatBinding(format), "activemq:foo."));
      -----------------------------------------------------------------------------------------------------

      Then you could use the endpoint as if it were any other endpoint.

      [source,java]
      ------------------------------------------------
      from("jsonmq:myQueue").to("jsonmq:anotherQueue")
      ------------------------------------------------

      which would be using the queueus "foo.myQueue" and "foo.anotherQueue"
      and would use the given Jackson link:data-format.html[Data Format] to
      marshal on and off the queue.

      [[Binding-WhentouseBindings]]
      When to use Bindings
      ~~~~~~~~~~~~~~~~~~~~

      If you only use an endpoint once in a single route; a binding may
      actually be more complex and more work than just using the 'raw'
      endpoint directly and using explicit marshalling and validation in the
      camel route as normal.

      However bindings can help when you are composing many routes together;
      or using a single route as a 'template' that is configured input and
      output endpoints; bindings then provide a nice way to wrap up a contract
      and endpoint together.

      Another good use case for bindings is when you are using many endpoints
      which use the same binding; rather than always having to mention a
      specific data format or validation rule, you can just use the
      BindingComponent to wrap the endpoints in the binding of your choice.

      So bindings are a composition tool really; only use them when they make
      sense - the extra complexity may not be worth it unless you have lots of
      routes or endpoints.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-box
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: box
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: box
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: box
          spec:
            containers:
            - image: fabric8/connector-box:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: box
        syntax: box:apiName/methodName
        title: Box
        description: For uploading downloading and managing files folders groups collaborations etc on box DOT com.
        label: api,file,cloud
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.box.BoxComponent
        groupId: org.apache.camel
        artifactId: camel-box
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.box.BoxConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
      properties:
        apiName:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.box.internal.BoxApiName
          enum:
          - COLLABORATIONS
          - COMMENTS
          - EVENTS
          - FILES
          - FOLDERS
          - GROUPS
          - POLL_EVENTS
          - SEARCH
          - SHARED_COMMENTS
          - SHARED_FILES
          - SHARED_FOLDERS
          - SHARED_ITEMS
          - USERS
          deprecated: false
          secret: false
          description: What kind of operation to perform
        methodName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: What sub operation to use for the selected operation
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Box application client ID
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        loginTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30"
          description: Amount of time the component will wait for a response from Box.com default is 30 seconds
        revokeOnShutdown:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flag to revoke OAuth refresh token on route shutdown default false. Will require a fresh refresh token on restart using either a custom IAuthSecureStorage or automatic component login by providing a user password
        sharedLink:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Box shared link for shared endpoints can be a link for a shared comment file or folder
        sharedPassword:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password associated with the shared link MUST be provided with sharedLink
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        boxConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.box.boxjavalibv2.IBoxConfig
          deprecated: false
          secret: false
          description: Custom Box SDK configuration not required normally
        connectionManagerBuilder:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.box.boxjavalibv2.BoxConnectionManagerBuilder
          deprecated: false
          secret: false
          description: Custom Box connection manager builder used to override default settings like max connections for underlying HttpClient.
        httpParams:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: Custom HTTP params for settings like proxy host
        refreshListener:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.box.boxjavalibv2.authorization.OAuthRefreshListener
          deprecated: false
          secret: false
          description: OAuth listener for token updates if the Camel application needs to use the access token outside the route
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        authSecureStorage:
          kind: parameter
          group: security
          label: advanced,security
          type: object
          javaType: com.box.boxjavalibv2.authorization.IAuthSecureStorage
          deprecated: false
          secret: false
          description: OAuth Secure Storage callback can be used to provide and or save OAuth tokens. The callback may return null on first call to allow the component to login and authorize application and obtain an OAuth token which can then be saved in the secure storage. For the component to be able to create a token automatically a user password must be provided.
        clientSecret:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Box application client secret
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        userName:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Box user name MUST be provided
        userPassword:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Box user password MUST be provided if authSecureStorage is not set or returns null on first call
    documentation.adoc: "[[Box-BoxComponent]]\nBox Component\n~~~~~~~~~~~~~\n\n*Available\
      \ as of Camel 2.14*\n\nThe Box component provides access to all of the Box.com\
      \ APIs accessible\nusing https://github.com/box/box-java-sdk-v2/[box-java-sdk-v2].\
      \ It\nallows producing messages to upload and download files, create, edit,\n\
      and manage folders, etc. It also supports APIs that allow polling for\nupdates\
      \ to user accounts and even changes to enterprise accounts, etc.\n\nBox.com\
      \ requires the use of OAuth2.0 for all client application\nauthentication. In\
      \ order to use camel-box with your account, you'll need\nto create a new application\
      \ within Box.com at\nhttps://app.box.com/developers/services/edit/[https://app.box.com/developers/services/edit/].\n\
      The Box application's client id and secret will allow access to Box APIs\nwhich\
      \ require a current user. A user access token is generated and\nmanaged by the\
      \ API for an end user. Alternatively the Camel application\ncan register an\
      \ implementation\nof??com.box.boxjavalibv2.authorization.IAuthSecureStorage\
      \ to provide\nan??com.box.boxjavalibv2.dao.IAuthData OAuth token.\n\nMaven users\
      \ will need to add the following dependency to their pom.xml\nfor this component:\n\
      \n[source,java]\n-------------------------------------------\n    <dependency>\n\
      \        <groupId>org.apache.camel</groupId>\n        <artifactId>camel-box</artifactId>\n\
      \        <version>${camel-version}</version>\n    </dependency>\n-------------------------------------------\n\
      \n[[Box-Options]]\nBox Options\n^^^^^^^^^^^\n\n\n\n\n\n// component options:\
      \ START\nThe Box component supports 1 options which are listed below.\n\n\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | BoxConfiguration | To use\
      \ the shared configuration\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Box component supports 21 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| apiName | common |  |\
      \ BoxApiName | *Required* What kind of operation to perform\n| methodName |\
      \ common |  | String | *Required* What sub operation to use for the selected\
      \ operation\n| clientId | common |  | String | Box application client ID\n|\
      \ inBody | common |  | String | Sets the name of a parameter to be passed in\
      \ the exchange In Body\n| loginTimeout | common | 30 | int | Amount of time\
      \ the component will wait for a response from Box.com default is 30 seconds\n\
      | revokeOnShutdown | common | false | boolean | Flag to revoke OAuth refresh\
      \ token on route shutdown default false. Will require a fresh refresh token\
      \ on restart using either a custom IAuthSecureStorage or automatic component\
      \ login by providing a user password\n| sharedLink | common |  | String | Box\
      \ shared link for shared endpoints can be a link for a shared comment file or\
      \ folder\n| sharedPassword | common |  | String | Password associated with the\
      \ shared link MUST be provided with sharedLink\n| bridgeErrorHandler | consumer\
      \ | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| boxConfig | advanced |  | IBoxConfig | Custom Box SDK configuration\
      \ not required normally\n| connectionManagerBuilder | advanced |  | BoxConnectionManagerBuilder\
      \ | Custom Box connection manager builder used to override default settings\
      \ like max connections for underlying HttpClient.\n| httpParams | advanced |\
      \  | Map | Custom HTTP params for settings like proxy host\n| refreshListener\
      \ | advanced |  | OAuthRefreshListener | OAuth listener for token updates if\
      \ the Camel application needs to use the access token outside the route\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | authSecureStorage | security |  | IAuthSecureStorage | OAuth Secure Storage\
      \ callback can be used to provide and or save OAuth tokens. The callback may\
      \ return null on first call to allow the component to login and authorize application\
      \ and obtain an OAuth token which can then be saved in the secure storage. For\
      \ the component to be able to create a token automatically a user password must\
      \ be provided.\n| clientSecret | security |  | String | Box application client\
      \ secret\n| sslContextParameters | security |  | SSLContextParameters | To configure\
      \ security using SSLContextParameters.\n| userName | security |  | String |\
      \ Box user name MUST be provided\n| userPassword | security |  | String | Box\
      \ user password MUST be provided if authSecureStorage is not set or returns\
      \ null on first call\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[Box-URIformat]]\nURI format\n\
      ^^^^^^^^^^\n\n[source,java]\n--------------------------------------------\n\
      \    box://endpoint-prefix/endpoint?[options]\n--------------------------------------------\n\
      \nEndpoint prefix can be one of:\n\n* collaborations\n* comments\n* events\n\
      * files\n* folders\n* groups\n* poll-events\n* search\n* shared-comments\n*\
      \ shared-files\n* shared-folders\n* shared-items\n* users\n\n[[Box-BoxComponent.1]]\n\
      BoxComponent\n^^^^^^^^^^^^\n\nThe Box Component can be configured with the options\
      \ below. These\noptions can be provided using the component's bean\nproperty??*`configuration`*??of\n\
      type??*`org.apache.camel.component.box.BoxConfiguration`*. These options\ncan\
      \ also be specified in the endpoint URI.??\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Option |Type |Description\n\n|authSecureStorage |com.box.boxjavalibv2.authorization.IAuthSecureStorage\
      \ |OAuth Secure Storage callback, can be used to provide and or save OAuth\n\
      tokens. The callback may return null on first call to allow the\ncomponent to\
      \ login and authorize application and obtain an OAuth token,\nwhich can then\
      \ be saved in the secure storage. For the component to be\nable to create a\
      \ token automatically a user password must be provided.\n\n|boxConfig |com.box.boxjavalibv2.IBoxConfig\
      \ |Custom Box SDK configuration, not required normally\n\n|clientId |String\
      \ |Box application client ID\n\n|clientSecret |String |Box application client\
      \ secret\n\n|connectionManagerBuilder |com.box.boxjavalibv2.BoxConnectionManagerBuilder\
      \ |Custom Box connection manager builder, used to override default settings\n\
      like max connections for underlying HttpClient.\n\n|httpParams |java.util.Map\
      \ |Custom HTTP params for settings like proxy host\n\n|loginTimeout |int |amount\
      \ of time the component will wait for a response from Box.com,\ndefault is 30\
      \ seconds\n\n|refreshListener |com.box.boxjavalibv2.authorization.OAuthRefreshListener\
      \ |OAuth listener for token updates, if the Camel application needs to use\n\
      the access token outside the route\n\n|revokeOnShutdown |boolean |Flag to revoke\
      \ OAuth refresh token on route shutdown, default false.\nWill require a fresh\
      \ refresh token on restart using either a custom\nIAuthSecureStorage or automatic\
      \ component login by providing a user\npassword\n\n|sharedLink |String |Box\
      \ shared link for shared-* endpoints, can be a link for a shared\ncomment, file\
      \ or folder\n\n|sharedPassword |String |Password associated with the shared\
      \ link, MUST be provided with\nsharedLink\n\n|userName |String |Box user name,\
      \ MUST be provided\n\n|userPassword |String |Box user password, MUST be provided\
      \ if authSecureStorage is not set, or\nreturns null on first call\n|=======================================================================\n\
      \n[[Box-ProducerEndpoints:]]\nProducer Endpoints:\n^^^^^^^^^^^^^^^^^^^\n\nProducer\
      \ endpoints can use endpoint prefixes followed by endpoint names\nand associated\
      \ options described next. A shorthand alias can be used for\nsome endpoints.\
      \ The endpoint URI MUST contain a prefix.\n\nEndpoint options that are not mandatory\
      \ are denoted by *[]*. When there\nare no mandatory options for an endpoint,\
      \ one of the set of *[]* options\nMUST be provided. Producer endpoints can also\
      \ use a special\noption??*`inBody`*??that in turn should contain the name of\
      \ the endpoint\noption whose value will be contained in the Camel Exchange In\
      \ message.\n\nAny of the endpoint options can be provided in either the endpoint\
      \ URI,\nor dynamically in a message header. The message header name must be\
      \ of\nthe format??*`CamelBox.<option>`*. Note that the??*`inBody`*??option\n\
      overrides message header, i.e. the endpoint\noption??*`inBody=option`*??would\
      \ override a??*`CamelBox.option`*??header.\n\nIf a value is not provided for\
      \ the option *defaultRequest* either in the\nendpoint URI or in a message header,\
      \ it will be assumed to be??`null`.\nNote that the??`null`??value will only\
      \ be used if other options do not\nsatisfy matching endpoints.\n\nIn case of\
      \ Box API errors the endpoint will throw a\nRuntimeCamelException with a\n*com.box.restclientv2.exceptions.BoxSDKException*??derived\
      \ exception\ncause.\n\n[[Box-EndpointPrefixcollaborations]]\nEndpoint Prefix??_collaborations_\n\
      ++++++++++++++++++++++++++++++++\n\nFor more information on Box collaborations\
      \ see\nhttps://developers.box.com/docs/#collaborations[https://developers.box.com/docs/#collaborations].??The\n\
      following endpoints can be invoked with the prefix??*`collaborations`*??as\n\
      follows:\n\n[source,java]\n-------------------------------------------\n   \
      \ box://collaborations/endpoint?[options]\n-------------------------------------------\n\
      \n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|createCollaboration\
      \ |create |collabRequest, folderId |com.box.boxjavalibv2.dao.BoxCollaboration\n\
      \n|deleteCollaboration |delete |collabId, defaultRequest |\n\n|getAllCollaborations\
      \ |allCollaborations |getAllCollabsRequest |java.util.List\n\n|getCollaboration\
      \ |collaboration |collabId, defaultRequest |com.box.boxjavalibv2.dao.BoxCollaboration\n\
      \n|updateCollaboration |update |collabId, collabRequest |com.box.boxjavalibv2.dao.BoxCollaboration\n\
      |=======================================================================\n\n\
      [[Box-URIOptionsforcollaborations]]\nURI Options for??_collaborations_\n\n\n\
      [width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|collabId |String\n\n|collabRequest |com.box.boxjavalibv2.requests.requestobjects.BoxCollabRequestObject\n\
      \n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|folderId |String\n\n|getAllCollabsRequest |com.box.boxjavalibv2.requests.requestobjects.BoxGetAllCollabsRequestObject\n\
      |=======================================================================\n\n\
      [[Box-EndpointPrefixevents]]\nEndpoint Prefix??_events_\n++++++++++++++++++++++++\n\
      \nFor more information on Box events see\nhttps://developers.box.com/docs/#events[https://developers.box.com/docs/#events].\n\
      Although this endpoint can be used by producers, Box events are better\nused\
      \ as a consumer endpoint using the *poll-events* endpoint prefix. The\nfollowing\
      \ endpoints can be invoked with the prefix??*`events`*??as\nfollows:\n\n[source,java]\n\
      ---------------------------------\n  box://events/endpoint?[options]\n---------------------------------\n\
      \n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|getEventOptions |eventOptions\
      \ |defaultRequest |com.box.boxjavalibv2.dao.BoxCollection\n\n|getEvents |events\
      \ |eventRequest |com.box.boxjavalibv2.dao.BoxEventCollection\n|=======================================================================\n\
      \n[[Box-URIOptionsforevents]]\nURI Options for??_events_\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|eventRequest |com.box.boxjavalibv2.requests.requestobjects.BoxEventRequestObject\n\
      |=======================================================================\n\n\
      [[Box-EndpointPrefixgroups]]\nEndpoint Prefix??_groups_\n++++++++++++++++++++++++\n\
      \nFor more information on Box groups see\nhttps://developers.box.com/docs/#groups[https://developers.box.com/docs/#groups].\n\
      The following endpoints can be invoked with the prefix??*`groups`*??as\nfollows:\n\
      \n[source,java]\n-----------------------------------\n    box://groups/endpoint?[options]\n\
      -----------------------------------\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|createGroup |[groupRequest],\
      \ [name] |com.box.boxjavalibv2.dao.BoxGroup \n\n|createMembership |[groupId,\
      \ role, userId], [groupMembershipRequest] |com.box.boxjavalibv2.dao.BoxGroupMembership\n\
      \n|deleteGroup |delete |defaultRequest, groupId |\n\n|deleteMembership |delete\
      \ |defaultRequest, membershipId |\n\n|getAllCollaborations |allCollaborations\
      \ |defaultRequest, groupId |com.box.boxjavalibv2.dao.BoxCollection\n\n|getAllGroups\
      \ |allGroups |defaultRequest |com.box.boxjavalibv2.dao.BoxCollection\n\n|getMembership\
      \ |membership |defaultRequest, membershipId |com.box.boxjavalibv2.dao.BoxGroupMembership\n\
      \n|getMemberships |memberships |defaultRequest, groupId |com.box.boxjavalibv2.dao.BoxCollection\n\
      \n|updateGroup |update |groupId, groupRequest |com.box.boxjavalibv2.dao.BoxGroup\n\
      \n|updateMembership |update |[groupMembershipRequest], [role], membershipId\
      \ |com.box.boxjavalibv2.dao.BoxGroupMembership\n|=======================================================================\n\
      \n[[Box-URIOptionsforgroups]]\nURI Options for??_groups_\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|groupId |String\n\n|groupMembershipRequest |com.box.boxjavalibv2.requests.requestobjects.BoxGroupMembershipRequestObject\n\
      \n|groupRequest |com.box.boxjavalibv2.requests.requestobjects.BoxGroupRequestObject\n\
      \n|membershipId |String\n\n|name |String\n\n|role |String\n\n|userId |String\n\
      \n|=======================================================================\n\
      \n[[Box-EndpointPrefixsearch]]\nEndpoint Prefix??_search_\n++++++++++++++++++++++++\n\
      \nFor more information on Box search API see\nhttps://developers.box.com/docs/#search[https://developers.box.com/docs/#search].??The\n\
      following endpoints can be invoked with the prefix??*`search`*??as\nfollows:\n\
      \n[source,java]\n-----------------------------------\n    box://search/endpoint?[options]\n\
      -----------------------------------\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|search |defaultRequest,\
      \ searchQuery |com.box.boxjavalibv2.dao.BoxCollection\n|=======================================================================\n\
      \n[[Box-URIOptionsforsearch]]\nURI Options for??_search_\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|searchQuery |String\n|=======================================================================\n\
      \n[[Box-EndpointPrefixcommentsandshared-comments]]\nEndpoint Prefix _comments_\
      \ and??_shared-comments_\n++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nFor more information on Box comments see\nhttps://developers.box.com/docs/#comments[https://developers.box.com/docs/#comments].\n\
      The following endpoints can be invoked with the prefix??*comments*\nor??*`shared-comments`*??as\
      \ follows. The??*shared-comments* prefix requires\n*sharedLink* and *sharedPassword*\
      \ properties.??\n\n[source,java]\n--------------------------------------------\n\
      \    box://comments/endpoint?[options]\n    box://shared-comments/endpoint?[options]\n\
      --------------------------------------------\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|addComment |[commentRequest],\
      \ [commentedItemId, commentedItemType, message] | | com.box.boxjavalibv2.dao.BoxComment\
      \ \n\n|deleteComment |delete |  |commentId, defaultRequest\n\n|getComment |comment\
      \ |commentId, defaultRequest |com.box.boxjavalibv2.dao.BoxComment\n\n|updateComment\
      \ |update |commentId, commentRequest |com.box.boxjavalibv2.dao.BoxComment\n\
      |=======================================================================\n\n\
      [[Box-URIOptionsforcommentsandshared-comments]]\nURI Options for _comments_\
      \ and??_shared-comments_\n\n[width=\"100%\",cols=\"10%,90%\",options=\"header\"\
      ,]\n|=======================================================================\n\
      |Name |Type\n\n|commentId |String\n\n|commentRequest |com.box.boxjavalibv2.requests.requestobjects.BoxCommentRequestObject\n\
      \n|commentedItemId |String\n\n|commentedItemType |com.box.boxjavalibv2.dao.IBoxType\n\
      \n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|message |String\n|=======================================================================\n\
      \n[[Box-EndpointPrefixfilesandshared-files]]\nEndpoint Prefix??_files_ and??_shared-files_\n\
      ++++++++++++++++++++++++++++++++++++++++++\n\nFor more information on Box files\
      \ see\nhttps://developers.box.com/docs/#files[https://developers.box.com/docs/#files].\n\
      The following endpoints can be invoked with the\nprefix??*`files`*??or??*`shared-files`*??as\
      \ follows. The\n*`shared-files??`*prefix requires *sharedLink* and *sharedPassword*\n\
      properties.??\n\n[source,java]\n----------------------------------------\n \
      \  box://files/endpoint?[options]\n   box://shared-files/endpoint?[options]\n\
      ----------------------------------------\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|copyFile |  |fileId,\
      \ itemCopyRequest |com.box.boxjavalibv2.dao.BoxFile\n\n|createSharedLink |create\
      \ |fileId, sharedLinkRequest |com.box.boxjavalibv2.dao.BoxFile\n\n|deleteFile\
      \ |  | defaultRequest, fileId |\n\n|downloadFile |download |[destination, listener],\
      \ [listener, outputStreams], defaultRequest,\nfileId |java.io.InputStream\n\n\
      |downloadThumbnail |download |extension, fileId, imageRequest |java.io.InputStream\n\
      \n|getFile |file |defaultRequest, fileId |com.box.boxjavalibv2.dao.BoxFile \n\
      \n|getFileComments |fileComments defaultRequest, fileId |com.box.boxjavalibv2.dao.BoxCollection\n\
      \n|getFileVersions |fileVersions |defaultRequest, fileId |java.util.List\n\n\
      |getPreview |preview |extension, fileId, imageRequest |com.box.boxjavalibv2.dao.BoxPreview\n\
      \n|getThumbnail |thumbnail |extension, fileId, imageRequest |com.box.boxjavalibv2.dao.BoxThumbnail\n\
      \n|updateFileInfo |update |fileId, fileRequest |com.box.boxjavalibv2.dao.BoxFile\n\
      \n|uploadFile |upload |fileUploadRequest |com.box.boxjavalibv2.dao.BoxFile\n\
      \n|uploadNewVersion |upload |fileId, fileUploadRequest |com.box.boxjavalibv2.dao.BoxFile\n\
      |=======================================================================\n\n\
      [[Box-URIOptionsforfilesandshared-files]]\nURI Options for _files_ and??_shared-files_\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|destination |java.io.File\n\n|extension |String\n\n|fileId |String\n\n|fileRequest\
      \ |com.box.boxjavalibv2.requests.requestobjects.BoxFileRequestObject\n\n|fileUploadRequest\
      \ |com.box.restclientv2.requestsbase.BoxFileUploadRequestObject\n\n|imageRequest|com.box.boxjavalibv2.requests.requestobjects.BoxImageRequestObject\
      \ \n\n|itemCopyRequest |com.box.boxjavalibv2.requests.requestobjects.BoxItemCopyRequestObject\n\
      \n|listener |com.box.boxjavalibv2.filetransfer.IFileTransferListener\n\n|outputStreams\
      \ |java.io.OutputStream[]\n\n|sharedLinkRequest |com.box.boxjavalibv2.requests.requestobjects.BoxSharedLinkRequestObject\n\
      |=======================================================================\n\n\
      [[Box-EndpointPrefixfoldersandshared-folders]]\nEndpoint Prefix _folders_ and??_shared-folders_\n\
      ++++++++++++++++++++++++++++++++++++++++++++++\n\nFor more information on Box\
      \ folders see\nhttps://developers.box.com/docs/#folders[https://developers.box.com/docs/#folders].\n\
      The following endpoints can be invoked with the prefix\n*`folders`*??or??*`shared-folders`*??as\
      \ follows. The prefix\n*shared-folders* requires *sharedLink* and *sharedPassword*\
      \ properties.??\n\n[source,java]\n-------------------------------------------\n\
      \    box://folders/endpoint?[options]\n    box://shared-folders/endpoint?[options]\n\
      -------------------------------------------\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|copyFolder |  |folderId,\
      \ itemCopyRequest |com.box.boxjavalibv2.dao.BoxFolder\n\n|createFolder |create\
      \ |folderRequest |com.box.boxjavalibv2.dao.BoxFolder\n\n|createSharedLink |create\
      \ |folderId, sharedLinkRequest|com.box.boxjavalibv2.dao.BoxFolder \n\n|deleteFolder\
      \ |delete |folderDeleteRequest, folderId\n\n|getFolder |folder |defaultRequest,\
      \ folderId |com.box.boxjavalibv2.dao.BoxFolder\n\n|getFolderCollaborations |folderCollaborations\
      \ |defaultRequest, folderId |java.util.List\n\n|getFolderItems |folderItems\
      \ |folderId, pagingRequest |com.box.boxjavalibv2.dao.BoxCollection\n\n|updateFolderInfo\
      \ |update |folderId, folderRequest |com.box.boxjavalibv2.dao.BoxFolder\n|=======================================================================\n\
      \n[[Box-URIOptionsforfoldersorshared-folders]]\nURI Options for _folders_ or??_shared-folders_\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|folderDeleteRequest |com.box.boxjavalibv2.requests.requestobjects.BoxFolderDeleteRequestObject\n\
      \n|folderId |String\n\n|folderRequest |com.box.boxjavalibv2.requests.requestobjects.BoxFolderRequestObject\n\
      \n|itemCopyRequest |com.box.boxjavalibv2.requests.requestobjects.BoxItemCopyRequestObject\n\
      \n|pagingRequest |com.box.boxjavalibv2.requests.requestobjects.BoxPagingRequestObject\n\
      \n|sharedLinkRequest |com.box.boxjavalibv2.requests.requestobjects.BoxSharedLinkRequestObject\n\
      |=======================================================================\n\n\
      [[Box-EndpointPrefixshared-items]]\nEndpoint Prefix??_shared-items_\n++++++++++++++++++++++++++++++\n\
      \nFor more information on Box shared items see\nhttps://developers.box.com/docs/#shared-items[https://developers.box.com/docs/#shared-items].\n\
      The following endpoints can be invoked with the\nprefix??*`shared-items`*??as\
      \ follows:\n\n[source,java]\n-----------------------------------------\n   \
      \ box://shared-items/endpoint?[options]\n-----------------------------------------\n\
      \n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|getSharedItem |sharedItem\
      \ |defaultRequest |com.box.boxjavalibv2.dao.BoxItem\n|=======================================================================\n\
      \n[[Box-URIOptionsforshared-items]]\nURI Options for??_shared-items_\n\n[width=\"\
      100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      |=======================================================================\n\n\
      [[Box-EndpointPrefixusers]]\nEndpoint Prefix??_users_\n+++++++++++++++++++++++\n\
      \nFor information on Box users see\nhttps://developers.box.com/docs/#users[https://developers.box.com/docs/#users].\n\
      The following endpoints can be invoked with the prefix??*`users`*??as\nfollows:\n\
      \n[source,java]\n----------------------------------\n    box://users/endpoint?[options]\n\
      ----------------------------------\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|addEmailAlias |  |emailAliasRequest,\
      \ userId |com.box.boxjavalibv2.dao.BoxEmailAlias\n\n|createEnterpriseUser |create\
      \ |userRequest |com.box.boxjavalibv2.dao.BoxUser\n\n|deleteEmailAlias |  |defaultRequest,\
      \ emailId, userId |\n\ndeleteEnterpriseUser |  |userDeleteRequest, userId |\n\
      \n|getAllEnterpriseUser |allEnterpriseUser |defaultRequest, filterTerm |java.util.List\n\
      \n|getCurrentUser |currentUser |defaultRequest |com.box.boxjavalibv2.dao.BoxUser\n\
      \n|getEmailAliases |emailAliases |defaultRequest, userId |java.util.List\n\n\
      |moveFolderToAnotherUser |  | folderId, simpleUserRequest, userId |com.box.boxjavalibv2.dao.BoxFolder\n\
      \n|updateUserInformaiton |update |userId, userRequest |com.box.boxjavalibv2.dao.BoxUser\n\
      \n|updateUserPrimaryLogin |update |userId, userUpdateLoginRequest |com.box.boxjavalibv2.dao.BoxUser\n\
      |=======================================================================\n\n\
      [[Box-URIOptionsforusers]]\nURI Options for??_users_\n\n[width=\"100%\",cols=\"\
      10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|defaultRequest |com.box.restclientv2.requestsbase.BoxDefaultRequestObject\n\
      \n|emailAliasRequest |com.box.boxjavalibv2.requests.requestobjects.BoxEmailAliasRequestObject\n\
      \n|emailId |String\n\n|filterTerm |String\n\n|folderId |String\n\n|simpleUserRequest\
      \ |com.box.boxjavalibv2.requests.requestobjects.BoxSimpleUserRequestObject\n\
      \n|userDeleteRequest |com.box.boxjavalibv2.requests.requestobjects.BoxUserDeleteRequestObject\n\
      \n|userId |String\n\n|userRequest |com.box.boxjavalibv2.requests.requestobjects.BoxUserRequestObject\n\
      \n|userUpdateLoginRequest |com.box.boxjavalibv2.requests.requestobjects.BoxUserUpdateLoginRequestObject\n\
      |=======================================================================\n\n\
      [[Box-ConsumerEndpoints:]]\nConsumer Endpoints:\n^^^^^^^^^^^^^^^^^^^\n\nFor\
      \ more information on Box events see\nhttps://developers.box.com/docs/#events[https://developers.box.com/docs/#events]??and\n\
      for long polling\nsee??https://developers.box.com/docs/#events-long-polling[https://developers.box.com/docs/#events-long-polling].\n\
      Consumer endpoints can only use the endpoint prefix *poll-events* as\nshown\
      \ in the example next.??By default the consumer will split\nthe??com.box.boxjavalibv2.dao.BoxEventCollection\
      \ from every long poll and\ncreate an exchange for every??com.box.boxjavalibv2.dao.BoxEvent.\
      \ To make\nthe consumer return the entire collection in a single exchange, use\
      \ the\nURI option *consumer.splitResult=false*.\n\n[source,java]\n----------------------------------------\n\
      \    box://poll-events/endpoint?[options]\n----------------------------------------\n\
      \n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Shorthand Alias |Options |Result Body Type\n\n|poll |  |limit, streamPosition,\
      \ streamType |com.box.boxjavalibv2.dao.BoxEvent by default, or\ncom.box.boxjavalibv2.dao.BoxEventCollection\
      \ when\nconsumer.splitResult=false\n|=======================================================================\n\
      \n[[Box-URIOptionsforpoll-events]]\nURI Options for??_poll-events_\n\n[width=\"\
      100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type\n\n|limit |Integer\n\n|streamPosition |Long\n\n|streamType |String\n\
      \n|splitResult |boolean\n|=======================================================================\n\
      \n[[Box-Messageheader]]\nMessage header\n^^^^^^^^^^^^^^\n\nAny of the options??can\
      \ be provided in a message header for producer\nendpoints with *CamelBox.* prefix.\n\
      \n[[Box-Messagebody]]\nMessage body\n^^^^^^^^^^^^\n\nAll result message bodies\
      \ utilize objects provided by the Box Java SDK.\nProducer endpoints can specify\
      \ the option name for incoming message body\nin the *inBody* endpoint parameter.\n\
      \n[[Box-TypeConverter]]\nType Converter\n^^^^^^^^^^^^^^\n\nThe Box component\
      \ also provides a Camel type converter to convert\nhttp://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/file/GenericFile.html[GenericFile]\n\
      objects from http://camel.apache.org/file2.html[File] component to\na??*com.box.restclientv2.requestsbase.BoxFileUploadRequestObject*\
      \ to\nupload files to Box.com. The target *folderId* for the upload can be\n\
      specified in the exchange property??*CamelBox.folderId*. If the exchange\nproperty\
      \ is not specified the value defaults to *\"**0\"* for the root\nfolder ID.??\n\
      \n[[Box-Usecases]]\nUse cases\n^^^^^^^^^\n\nThe following route uploads new\
      \ files to the user's root folder:\n\n[source,java]\n-----------------------------------------------------------\n\
      \    from(\"file:...\")\n        .to(\"box://files/upload/inBody=fileUploadRequest\"\
      );\n-----------------------------------------------------------\n\nThe following\
      \ route polls user's account for updates:\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      \    from(\"box://poll-events/poll?streamPosition=-1&streamType=all&limit=100\"\
      )\n        .to(\"bean:blah\");\n-----------------------------------------------------------------------------\n\
      \nThe following route uses a producer with dynamic header options.??The\n*fileId*??property\
      \ has the Box file id , so its assigned to the\n*CamelBox.fileId* header as\
      \ follows:\n\n[source,java]\n-------------------------------------------------------\n\
      \    from(\"direct:foo\")\n        .setHeader(\"CamelBox.fileId\", header(\"\
      fileId\"))\n        .to(\"box://files/download\")\n        .to(\"file://...\"\
      );\n-------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-braintree
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: braintree
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: braintree
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: braintree
          spec:
            containers:
            - image: fabric8/connector-braintree:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: braintree
        syntax: braintree:apiName/methodName
        title: Braintree
        description: The braintree component is used for integrating with the Braintree Payment System.
        label: api,cloud,payment
        deprecated: false
        async: false
        javaType: org.apache.camel.component.braintree.BraintreeComponent
        groupId: org.apache.camel
        artifactId: camel-braintree
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.braintree.BraintreeConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
      properties:
        apiName:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.braintree.internal.BraintreeApiName
          enum:
          - ADDON
          - ADDRESS
          - CLIENTTOKEN
          - CREDITCARDVERIFICATION
          - CUSTOMER
          - DISCOUNT
          - MERCHANTACCOUNT
          - PAYMENTMETHOD
          - PAYMENTMETHODNONCE
          - PLAN
          - SETTLEMENTBATCHSUMMARY
          - SUBSCRIPTION
          - TRANSACTION
          - WEBHOOKNOTIFICATION
          deprecated: false
          secret: false
          description: What kind of operation to perform
        methodName:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: What sub operation to use for the selected operation
        environment:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The environment Either SANDBOX or PRODUCTION
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        merchantId:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The merchant id provided by Braintree.
        privateKey:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The private key provided by Braintree.
        publicKey:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The public key provided by Braintree.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        httpReadTimeout:
          kind: parameter
          group: advanced
          label: advanced
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Set read timeout for http calls.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        httpLogLevel:
          kind: parameter
          group: logging
          label: advanced,logging
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set logging level for http calls see java.util.logging.Level
        proxyHost:
          kind: parameter
          group: proxy
          label: proxy
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host
        proxyPort:
          kind: parameter
          group: proxy
          label: proxy
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The proxy port
    documentation.adoc: |
      [[Braintree-BraintreeComponent]]
      Braintree Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.17*

      The Braintree component provides access to
      https://www.braintreepayments.com/[Braintree Payments] trough through
      theirs https://developers.braintreepayments.com/start/hello-server/java[Java
      SDK].

      All client applications need API credential in order to process
      payments. In order to use camel-braintree with your account, you'll need
      to create a new
      https://www.braintreepayments.com/get-started[Sandbox]??or??https://www.braintreepayments.com/signup[Production]
      account.


      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-braintree</artifactId>
          <version>${camel-version}</version>
      </dependency>
      --------------------------------------------

      ??

      [[Braintree-Options]]
      Braintree Options
      ^^^^^^^^^^^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | BraintreeConfiguration | To use the shared configuration
      |=======================================================================
      {% endraw %}
      // component options: END





      // endpoint options: START
      The Braintree component supports 15 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | apiName | common |  | BraintreeApiName | *Required* What kind of operation to perform
      | methodName | common |  | String | What sub operation to use for the selected operation
      | environment | common |  | String | *Required* The environment Either SANDBOX or PRODUCTION
      | inBody | common |  | String | Sets the name of a parameter to be passed in the exchange In Body
      | merchantId | common |  | String | *Required* The merchant id provided by Braintree.
      | privateKey | common |  | String | *Required* The private key provided by Braintree.
      | publicKey | common |  | String | *Required* The public key provided by Braintree.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | httpReadTimeout | advanced |  | Integer | Set read timeout for http calls.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | httpLogLevel | logging |  | String | Set logging level for http calls see java.util.logging.Level
      | proxyHost | proxy |  | String | The proxy host
      | proxyPort | proxy |  | Integer | The proxy port
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Braintree-URIformat]]
      URI format
      ^^^^^^^^^^

      ??

      [source,java]
      ---------------------------------------------
      braintree://endpoint-prefix/endpoint?[options]
      ---------------------------------------------

      ??

      Endpoint prefix can be one of:

      * addOn
      * address
      * clientToken
      * creditCardverification
      * customer
      * discount
      * merchantAccount
      * paymentmethod
      * paymentmethodNonce
      * plan
      * settlementBatchSummary
      * subscription
      * transaction
      * webhookNotification

      ??

      [[Braintree-BraintreeComponent.1]]
      BraintreeComponent
      ^^^^^^^^^^^^^^^^^^

      The Braintree Component can be configured with the options below. These
      options can be provided using the component's bean
      property??*configuration*??of
      type??*org.apache.camel.component.braintree.BraintreeConfiguration*.

      [cols="<,<,<",options="header",]
      |=======================================================================
      |Option |Type |Description
      |environment |String |value that specifies where requests should be
      directed ??? sandbox or production

      |merchantId |String |a unique identifier for your gateway account, which
      is different than your merchant account ID

      |publicKey |String |user-specific public identifier

      |privateKey |String |user-specific secure identifier that should not be
      shared ??? even with us!
      |=======================================================================

      All the options above are provided by Braintree Payments

      [[Braintree-ProducerEndpoints:]]
      Producer Endpoints:
      ^^^^^^^^^^^^^^^^^^^

      Producer endpoints can use endpoint prefixes followed by endpoint names
      and associated options described next. A shorthand alias can be used for
      some endpoints. The endpoint URI MUST contain a prefix.

      Endpoint options that are not mandatory are denoted by []. When there
      are no mandatory options for an endpoint, one of the set of [] options
      MUST be provided. Producer endpoints can also use a special
      option??*inBody*??that in turn should contain the name of the endpoint
      option whose value will be contained in the Camel Exchange In message.

      Any of the endpoint options can be provided in either the endpoint URI,
      or dynamically in a message header. The message header name must be of
      the format??*CamelBraintree.<option>*. Note that the??*inBody*??option
      overrides message header, i.e. the endpoint option??*inBody=option*??would
      override a??*CamelBraintree.option*??header.

      For more information on the endpoints and options see Braintree
      references
      at??https://developers.braintreepayments.com/reference/overview[https://developers.braintreepayments.com/reference/overview]

      ??

      [[Braintree-EndpointprefixaddOn]]
      Endpoint prefix??_addOn_
      +++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*addOn*??as
      follows:

      ??

      [source,java]
      --------------------------
      braintree://addOn/endpoint
      --------------------------

      [cols="<,<,<,<",options="header",]
      |====================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |all |?? |?? |List<com.braintreegateway.Addon>
      |====================================================

      [[Braintree-Endpointprefixaddress]]
      Endpoint prefix??_address_
      +++++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*address*??as
      follows:

      ??

      [source,java]
      --------------------------------------
      braintree://address/endpoint?[options]
      --------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |create |?? |customerId, request
      |com.braintreegateway.Result<com.braintreegateway.Address>

      |delete |?? |customerId, id
      |com.braintreegateway.Result<com.braintreegateway.Address>??

      |find |?? |customerId, id |com.braintreegateway.Address

      |update |?? |customerId, id, request
      |com.braintreegateway.Result<com.braintreegateway.Address>??
      |=======================================================================

      [[Braintree-URIOptionsforaddress]]
      URI Options for??_address_

      [cols="<,<",options="header",]
      |============================================
      |Name |Type
      |customerId |String
      |request |com.braintreegateway.AddressRequest
      |id |String
      |============================================

      [[Braintree-EndpointprefixclientToken]]
      Endpoint prefix??_clientToken_
      +++++++++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*clientToken*??as
      follows:

      ??

      [source,java]
      ------------------------------------------
      braintree://clientToken/endpoint?[options]
      ------------------------------------------

      [cols="<,<,<,<",options="header",]
      |====================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |generate |?? |??request |String
      |====================================================

      [[Braintree-URIOptionsforclientToken]]
      URI Options for??_clientToken_

      [cols="<,<",options="header",]
      |================================================
      |Name |Type
      |request |com.braintreegateway.ClientTokenrequest
      |================================================

      [[Braintree-EndpointprefixcreditCardVerification]]
      Endpoint prefix??_creditCardVerification_
      ++++++++++++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the
      prefix??*creditCardverification*??as follows:

      ??

      [source,java]
      -----------------------------------------------------
      braintree://creditCardVerification/endpoint?[options]
      -----------------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |find |?? |??id |com.braintreegateway.CreditCardVerification

      |search |?? |query
      |com.braintreegateway.ResourceCollection<com.braintreegateway.CreditCardVerification>
      |=======================================================================

      [[Braintree-URIOptionsforcreditCardVerification]]
      URI Options for??_creditCardVerification_

      [cols="<,<",options="header",]
      |===============================================================
      |Name |Type
      |id |String
      |query |com.braintreegateway.CreditCardVerificationSearchRequest
      |===============================================================

      [[Braintree-Endpointprefixcustomer]]
      Endpoint prefix??_customer_
      ++++++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*customer*??as
      follows:

      ??

      [source,java]
      ---------------------------------------
      braintree://customer/endpoint?[options]
      ---------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |all |?? |?? |??

      |create |?? |request
      |com.braintreegateway.Result<com.braintreegateway.Customer>

      |delete |?? |id
      |com.braintreegateway.Result<com.braintreegateway.Customer>

      |find |?? |id |com.braintreegateway.Customer

      |search |?? |query
      |com.braintreegateway.ResourceCollection<com.braintreegateway.Customer>

      |update |?? |id, request
      |com.braintreegateway.Result<com.braintreegateway.Customer>
      |=======================================================================

      [[Braintree-URIOptionsforcustomer]]
      URI Options for??_customer_

      [cols="<,<",options="header",]
      |=================================================
      |Name |Type
      |id |String
      |request |com.braintreegateway.CustomerRequest
      |query |com.braintreegateway.CustomerSearchRequest
      |=================================================

      [[Braintree-Endpointprefixdiscount]]
      Endpoint prefix??_discount_
      ++++++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*discount*??as
      follows:

      ??

      [source,java]
      -----------------------------
      braintree://discount/endpoint
      -----------------------------

      [cols="<,<,<,<",options="header",]
      |====================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |all |?? |?? |List<com.braintreegateway.Discount>
      |====================================================

       +

       +

      [[Braintree-EndpointprefixmerchantAccount]]
      Endpoint prefix??_merchantAccount_
      +++++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the
      prefix??*merchantAccount*??as follows:

      ??

      [source,java]
      ----------------------------------------------
      braintree://merchantAccount/endpoint?[options]
      ----------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |create |?? |request
      |com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

      |find |?? |id |com.braintreegateway.MerchantAccount

      |update |?? |id, request
      |com.braintreegateway.Result<com.braintreegateway.MerchantAccount>
      |=======================================================================

      [[Braintree-URIOptionsformerchantAccount]]
      URI Options for??_merchantAccount_

      [cols="<,<",options="header",]
      |====================================================
      |Name |Type
      |id |String
      |request |com.braintreegateway.MerchantAccountRequest
      |====================================================

      [[Braintree-EndpointprefixpaymentMethod]]
      Endpoint prefix??_paymentMethod_
      +++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the
      prefix??*paymentMethod*??as follows:

      ??

      [source,java]
      --------------------------------------------
      braintree://paymentMethod/endpoint?[options]
      --------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |create |?? |request
      |com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

      |delete |?? |token
      |com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

      |find |?? |token |com.braintreegateway.PaymentMethod

      |update |?? |token, request
      |com.braintreegateway.Result<com.braintreegateway.PaymentMethod>
      |=======================================================================

      [[Braintree-URIOptionsforpaymentMethod]]
      URI Options for??_paymentMethod_

      [cols="<,<",options="header",]
      |==================================================
      |Name |Type
      |token |String
      |request |com.braintreegateway.PaymentMethodRequest
      |==================================================

      [[Braintree-EndpointprefixpaymentMethodNonce]]
      Endpoint prefix??_paymentMethodNonce_
      ++++++++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the
      prefix??*paymentMethodNonce*??as follows:

      ??

      [source,java]
      -------------------------------------------------
      braintree://paymentMethodNonce/endpoint?[options]
      -------------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |create |?? |paymentMethodToken
      |com.braintreegateway.Result<com.braintreegateway.PaymentMethodNonce>

      |find |?? |paymentMethodNonce |com.braintreegateway.PaymentMethodNonce
      |=======================================================================

      [[Braintree-URIOptionsforpaymentMethodNonce]]
      URI Options for??_paymentMethodNonce_

      [cols="<,<",options="header",]
      |==========================
      |Name |Type
      |paymentMethodToken |String
      |paymentMethodNonce |String
      |==========================

      [[Braintree-Endpointprefixplan]]
      Endpoint prefix??_plan_
      ++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*plan*??as
      follows:

      ??

      [source,java]
      -------------------------
      braintree://plan/endpoint
      -------------------------

      [cols="<,<,<,<",options="header",]
      |====================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |all |?? |?? |List<com.braintreegateway.Plan>
      |====================================================

      ??

      [[Braintree-EndpointprefixsettlementBatchSummary]]
      Endpoint prefix??_settlementBatchSummary_
      ++++++++++++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the
      prefix??*settlementBatchSummary*??as follows:

      ??

      [source,java]
      -----------------------------------------------------
      braintree://settlementBatchSummary/endpoint?[options]
      -----------------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |generate |?? |??request
      |com.braintreegateway.Result<com.braintreegateway.SettlementBatchSummary>
      |=======================================================================

      [[Braintree-URIOptionsforsettlementBatchSummary]]
      URI Options for??_settlementBatchSummary_

      [cols="<,<",options="header",]
      |==========================
      |Name |Type
      |settlementDate |Calendar
      |groupByCustomField |String
      |==========================

      [[Braintree-Endpointprefixsubscription]]
      Endpoint prefix??_subscription_
      ++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*subscription*??as
      follows:

      ??

      [source,java]
      -------------------------------------------
      braintree://subscription/endpoint?[options]
      -------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |cancel |?? |??id
      |??com.braintreegateway.Result<com.braintreegateway.Subscription>

      |create |?? |request
      |com.braintreegateway.Result<com.braintreegateway.Subscription>

      |delete |?? |customerId, id
      |com.braintreegateway.Result<com.braintreegateway.Subscription>

      |find |?? |id |com.braintreegateway.Subscription

      |retryCharge |?? |subscriptionId, amount
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |search |?? |searchRequest
      |com.braintreegateway.ResourceCollection<com.braintreegateway.Subscription>

      |update |?? |id, request
      |com.braintreegateway.Result<com.braintreegateway.Subscription>
      |=======================================================================

      [[Braintree-URIOptionsforsubscription]]
      URI Options for??_subscription_

      [cols="<,<",options="header",]
      |==============================================================
      |Name |Type
      |id |String
      |request |com.braintreegateway.SubscriptionRequest
      |customerId |String
      |subscriptionId |String
      |amount |BigDecimal
      |searchRequest |com.braintreegateway.SubscriptionSearchRequest.
      |==============================================================

      ??

      [[Braintree-Endpointprefixtransaction]]
      Endpoint prefix??_transaction_
      +++++++++++++++++++++++++++++

      The following endpoints can be invoked with the prefix??*transaction*??as
      follows:

      ??

      [source,java]
      ------------------------------------------
      braintree://transaction/endpoint?[options]
      ------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |cancelRelease |?? |id
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |cloneTransaction |?? |id, cloneRequest
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |credit |?? |request
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |find |?? |id |com.braintreegateway.Transaction

      |holdInEscrow |?? |id
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |releaseFromEscrow |?? |id
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |refund |?? |id, amount
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |sale |?? |request
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |search |?? |query
      |com.braintreegateway.ResourceCollection<com.braintreegateway.Transaction>

      |submitForPartialSettlement |?? |id, amount
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |submitForSettlement |?? |id, amount, request
      |com.braintreegateway.Result<com.braintreegateway.Transaction>

      |voidTransaction |?? |id
      |com.braintreegateway.Result<com.braintreegateway.Transaction>
      |=======================================================================

      [[Braintree-URIOptionsfortransaction]]
      URI Options for??_transaction_

      [cols="<,<",options="header",]
      |==========================================================
      |Name |Type
      |id |String
      |request |com.braintreegateway.TransactionCloneRequest
      |cloneRequest |com.braintreegateway.TransactionCloneRequest
      |amount |BigDecimal
      |query |com.braintreegateway.TransactionSearchRequest
      |==========================================================

      [[Braintree-EndpointprefixwebhookNotification]]
      Endpoint prefix??_webhookNotification_
      +++++++++++++++++++++++++++++++++++++

      The following endpoints can be invoked with the
      prefix??*webhookNotification*??as follows:

      ??

      [source,java]
      --------------------------------------------------
      braintree://webhookNotification/endpoint?[options]
      --------------------------------------------------

      [cols="<,<,<,<",options="header",]
      |=======================================================================
      |Endpoint |Shorthand Alias |Options |Result Body Type
      |parse |?? |??signature, payload |com.braintreegateway.WebhookNotification
      |verify |?? |challenge |String
      |=======================================================================

      [[Braintree-URIOptionsforwebhookNotification]]
      URI Options for??_webhookNotification_

      [cols="<,<",options="header",]
      |=================
      |Name |Type
      |signature |String
      |payload |String
      |challenge |String
      |=================

      ??

      [[Braintree-ConsumerEndpoints]]
      Consumer Endpoints
      ^^^^^^^^^^^^^^^^^^

      Any of the producer endpoints can be used as a consumer endpoint.
      Consumer endpoints can
      use??http://camel.apache.org/polling-consumer.html#PollingConsumer-ScheduledPollConsumerOptions[Scheduled
      Poll Consumer Options]??with a??*consumer.*??prefix to schedule endpoint
      invocation. By default Consumer endpoints that return an array or
      collection will generate one exchange per element, and their routes will
      be executed once for each exchange. To change this behavior use the
      property??*consumer.splitResults=true*??to return a single exchange for
      the entire list or array.??

      [[Braintree-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Any URI option can be provided in a message header for producer
      endpoints with a??*CamelBraintree.*??prefix.

      [[Braintree-Messagebody]]
      Message body
      ^^^^^^^^^^^^

      All result message bodies utilize objects provided by the Braintree Java
      SDK. Producer endpoints can specify the option name for incoming message
      body in the??*inBody*??endpoint parameter.

      ??

      ??

      [[Braintree-Examples]]
      Examples
      ^^^^^^^^

      *Blueprint*

      [source,xml]
      --------------------------------------------------------------------------------------------------------------------------------------------
      <?xml version="1.0"?>
      <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
                 xsi:schemaLocation="
                   http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.0.0.xsd
                   http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
                   http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">


          <cm:property-placeholder id="placeholder" persistent-id="camel.braintree">
          </cm:property-placeholder>

          <bean id="braintree" class="org.apache.camel.component.braintree.BraintreeComponent">
              <property name="configuration">
                  <bean class="org.apache.camel.component.braintree.BraintreeConfiguration">
                      <property name="environment" value="${environment}"/>
                      <property name="merchantId" value="${merchantId}"/>
                      <property name="publicKey" value="${publicKey}"/>
                      <property name="privateKey" value="${privateKey}"/>
                  </bean>
              </property>
          </bean>

          <camelContext trace="true" xmlns="http://camel.apache.org/schema/blueprint" id="braintree-example-context">
              <route id="braintree-example-route">
                  <from uri="direct:generateClientToken"/>
                  <to uri="braintree://clientToken/generate"/>
                  <to uri="stream:out"/>
              </route>
          </camelContext>

      </blueprint>
      --------------------------------------------------------------------------------------------------------------------------------------------

      [[Braintree-SeeAlso]]
      See Also
      ^^^^^^^^

      *
      https://cwiki.apache.org/confluence/display/CAMEL/Configuring+Camel[Configuring
      Camel]
      * https://cwiki.apache.org/confluence/display/CAMEL/Component[Component]
      * https://cwiki.apache.org/confluence/display/CAMEL/Endpoint[Endpoint]
      *
      https://cwiki.apache.org/confluence/display/CAMEL/Getting+Started[Getting
      Started]

      ??

      https://cwiki.apache.org/confluence/display/CAMEL/AMQP[??]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-browse
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: browse
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: browse
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: browse
          spec:
            containers:
            - image: fabric8/connector-browse:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: browse
        syntax: browse:name
        title: Browse
        description: The browse component is used for viewsing the messages received on endpoints that supports BrowsableEndpoint.
        label: core,monitoring
        deprecated: false
        async: false
        javaType: org.apache.camel.component.browse.BrowseComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A name which can be any string to uniquely identify the endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Browse-BrowseComponent]]
      Browse Component
      ~~~~~~~~~~~~~~~~

      The Browse component provides a simple
      link:browsableendpoint.html[BrowsableEndpoint] which can be useful for
      testing, visualisation tools or debugging. The exchanges sent to the
      endpoint are all available to be browsed.

      [[Browse-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------
      browse:someName[?options]
      -------------------------

      Where *someName* can be any string to uniquely identify the endpoint.


      [[Gora-Options]]
      Options
      ~~~~~~~


      // component options: START
      The Browse component has no options.
      // component options: END



      // endpoint options: START
      The Browse component supports 5 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* A name which can be any string to uniquely identify the endpoint
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Browse-Sample]]
      Sample
      ^^^^^^

      In the route below, we insert a `browse:` component to be able to browse
      the Exchanges that are passing through:

      [source,java]
      -------------------------------------------------------------------------------
        from("activemq:order.in").to("browse:orderReceived").to("bean:processOrder");
      -------------------------------------------------------------------------------

      We can now inspect the received exchanges from within the Java code:

      [source,java]
      --------------------------------------------------------------------------------------------------------
          private CamelContext context;

          public void inspectRecievedOrders() {
              BrowsableEndpoint browse = context.getEndpoint("browse:orderReceived", BrowsableEndpoint.class);
              List<Exchange> exchanges = browse.getExchanges();
              ...
              // then we can inspect the list of received exchanges from Java
              for (Exchange exchange : exchanges) {
                  String payload = exchange.getIn().getBody();
                  ...
              }
         }
      --------------------------------------------------------------------------------------------------------

      [[Browse-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cache
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cache
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cache
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cache
          spec:
            containers:
            - image: fabric8/connector-cache:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cache
        syntax: cache:cacheName
        title: EHCache
        description: The cache component enables you to perform caching operations using EHCache as the Cache Implementation.
        label: cache
        deprecated: true
        async: false
        javaType: org.apache.camel.component.cache.CacheComponent
        groupId: org.apache.camel
        artifactId: camel-cache
        version: 2.18.1
      componentProperties:
        cacheManagerFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.cache.CacheManagerFactory
          deprecated: false
          secret: false
          description: To use the given CacheManagerFactory for creating the CacheManager. By default the DefaultCacheManagerFactory is used.
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.cache.CacheConfiguration
          deprecated: false
          secret: false
          description: Sets the Cache configuration
        configurationFile:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the location of the ehcache.xml file to load from classpath or file system. By default the file is loaded from classpath:ehcache.xml
      properties:
        cacheName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the cache
        diskExpiryThreadIntervalSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The number of seconds between runs of the disk expiry thread.
        diskPersistent:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the disk store persists between restarts of the application.
        diskStorePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: This parameter is ignored. CacheManager sets it using setter injection.
        eternal:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether elements are eternal. If eternal timeouts are ignored and the element never expires.
        key:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default key to use. If a key is provided in the message header then the key from the header takes precedence.
        maxElementsInMemory:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The number of elements that may be stored in the defined cache in memory.
        memoryStoreEvictionPolicy:
          kind: parameter
          group: common
          type: string
          javaType: net.sf.ehcache.store.MemoryStoreEvictionPolicy
          enum:
          - LRU
          - LFU
          - FIFO
          deprecated: false
          secret: false
          defaultValue: LFU
          description: Which eviction strategy to use when maximum number of elements in memory is reached. The strategy defines which elements to be removed. LRU - Lest Recently Used LFU - Lest Frequently Used FIFO - First In First Out
        objectCache:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to turn on allowing to store non serializable objects in the cache. If this option is enabled then overflow to disk cannot be enabled as well.
        operation:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default cache operation to use. If an operation in the message header then the operation from the header takes precedence.
        overflowToDisk:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether cache may overflow to disk
        timeToIdleSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "300"
          description: The maximum amount of time between accesses before an element expires
        timeToLiveSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "300"
          description: The maximum time between creation time and when an element expires. Is used only if the element is not eternal
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        cacheLoaderRegistry:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cache.CacheLoaderRegistry
          deprecated: false
          secret: false
          description: To configure cache loader using the CacheLoaderRegistry
        cacheManagerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cache.CacheManagerFactory
          deprecated: false
          secret: false
          description: To use a custom CacheManagerFactory for creating the CacheManager to be used by this endpoint. By default the CacheManagerFactory configured on the component is used.
        eventListenerRegistry:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cache.CacheEventListenerRegistry
          deprecated: false
          secret: false
          description: To configure event listeners using the CacheEventListenerRegistry
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Cache-CacheComponent]]
      Cache Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.1*

      The *cache* component enables you to perform caching operations using
      EHCache as the Cache Implementation. The cache itself is created on
      demand or if a cache of that name already exists then it is simply
      utilized with its original settings.

      This component supports producer and event based consumer endpoints.

      The Cache consumer is an event based consumer and can be used to listen
      and respond to specific cache activities. If you need to perform
      selections from a pre-existing cache, use the processors defined for the
      cache component.

      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-cache</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Cache-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------
      cache://cacheName[?options]
      ---------------------------

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

      [[Cache-Options]]
      Options
      ^^^^^^^





      // component options: START
      The EHCache component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | cacheManagerFactory | CacheManagerFactory | To use the given CacheManagerFactory for creating the CacheManager. By default the DefaultCacheManagerFactory is used.
      | configuration | CacheConfiguration | Sets the Cache configuration
      | configurationFile | String | Sets the location of the ehcache.xml file to load from classpath or file system. By default the file is loaded from classpath:ehcache.xml
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The EHCache component supports 20 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | cacheName | common |  | String | *Required* Name of the cache
      | diskExpiryThreadIntervalSeconds | common |  | long | The number of seconds between runs of the disk expiry thread.
      | diskPersistent | common | false | boolean | Whether the disk store persists between restarts of the application.
      | diskStorePath | common |  | String | This parameter is ignored. CacheManager sets it using setter injection.
      | eternal | common | false | boolean | Sets whether elements are eternal. If eternal timeouts are ignored and the element never expires.
      | key | common |  | String | The default key to use. If a key is provided in the message header then the key from the header takes precedence.
      | maxElementsInMemory | common | 1000 | int | The number of elements that may be stored in the defined cache in memory.
      | memoryStoreEvictionPolicy | common | LFU | MemoryStoreEvictionPolicy | Which eviction strategy to use when maximum number of elements in memory is reached. The strategy defines which elements to be removed. LRU - Lest Recently Used LFU - Lest Frequently Used FIFO - First In First Out
      | objectCache | common | false | boolean | Whether to turn on allowing to store non serializable objects in the cache. If this option is enabled then overflow to disk cannot be enabled as well.
      | operation | common |  | String | The default cache operation to use. If an operation in the message header then the operation from the header takes precedence.
      | overflowToDisk | common | true | boolean | Specifies whether cache may overflow to disk
      | timeToIdleSeconds | common | 300 | long | The maximum amount of time between accesses before an element expires
      | timeToLiveSeconds | common | 300 | long | The maximum time between creation time and when an element expires. Is used only if the element is not eternal
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | cacheLoaderRegistry | advanced |  | CacheLoaderRegistry | To configure cache loader using the CacheLoaderRegistry
      | cacheManagerFactory | advanced |  | CacheManagerFactory | To use a custom CacheManagerFactory for creating the CacheManager to be used by this endpoint. By default the CacheManagerFactory configured on the component is used.
      | eventListenerRegistry | advanced |  | CacheEventListenerRegistry | To configure event listeners using the CacheEventListenerRegistry
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Cache-SendingReceivingMessagestofromthecache]]
      Sending/Receiving Messages to/from the cache
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [[Cache-MessageHeadersuptoCamel2.7]]
      Message Headers up to Camel 2.7
      +++++++++++++++++++++++++++++++

      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |Header |Description

      |`CACHE_OPERATION` |The operation to be performed on the cache. Valid options are

      * GET
      * CHECK
      * ADD
      * UPDATE
      * DELETE
      * DELETEALL +
       `GET` and `CHECK` requires *Camel 2.3* onwards.

      |`CACHE_KEY` |The cache key used to store the Message in the cache. The cache key is
      optional if the CACHE_OPERATION is DELETEALL
      |=======================================================================
      [[Cache-MessageHeadersCamel2.8]]
      Message Headers Camel 2.8+
      ++++++++++++++++++++++++++

      [Info]
      ====
      Header changes in Camel 2.8

      The header names and supported values have changed to be prefixed with
      'CamelCache' and use mixed case. This makes them easier to identify and
      keep separate from other headers. The CacheConstants variable names
      remain unchanged, just their values have been changed. Also, these
      headers are now removed from the exchange after the cache operation is
      performed.

      ====

      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |Header |Description

      |`CamelCacheOperation` |The operation to be performed on the cache. The valid options are

      * CamelCacheGet
      * CamelCacheCheck
      * CamelCacheAdd
      * CamelCacheUpdate
      * CamelCacheDelete
      * CamelCacheDeleteAll

      |`CamelCacheKey` |The cache key used to store the Message in the cache. The cache key is
      optional if the CamelCacheOperation is CamelCacheDeleteAll
      |=======================================================================

      The `CamelCacheAdd` and `CamelCacheUpdate` operations support additional
      headers:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelCacheTimeToLive` |`Integer` |*Camel 2.11:* Time to live in seconds.

      |`CamelCacheTimeToIdle` |`Integer` |*Camel 2.11:* Time to idle in seconds.

      |`CamelCacheEternal` |`Boolean` |*Camel 2.11:* Whether the content is eternal.
      |=======================================================================

      [[Cache-CacheProducer]]
      Cache Producer
      ++++++++++++++

      Sending data to the cache involves the ability to direct payloads in
      exchanges to be stored in a pre-existing or created-on-demand cache. The
      mechanics of doing this involve

      * setting the Message Exchange Headers shown above.
      * ensuring that the Message Exchange Body contains the message directed
      to the cache

      [[Cache-CacheConsumer]]
      Cache Consumer
      ++++++++++++++

      Receiving data from the cache involves the ability of the CacheConsumer
      to listen on a pre-existing or created-on-demand Cache using an event
      Listener and receive automatic notifications when any cache activity
      take place (i.e
      CamelCacheGet/CamelCacheUpdate/CamelCacheDelete/CamelCacheDeleteAll).
      Upon such an activity taking place

      * an exchange containing Message Exchange Headers and a Message Exchange
      Body containing the just added/updated payload is placed and sent.
      * in case of a CamelCacheDeleteAll operation, the Message Exchange
      Header CamelCacheKey and the Message Exchange Body are not populated.

      [[Cache-CacheProcessors]]
      Cache Processors
      ++++++++++++++++

      There are a set of nice processors with the ability to perform cache
      lookups and selectively replace payload content at the

      * body
      * token
      * xpath level

      [[Cache-CacheUsageSamples]]
      Cache Usage Samples
      ^^^^^^^^^^^^^^^^^^^

      [[Cache-Example1:Configuringthecache]]
      Example 1: Configuring the cache
      ++++++++++++++++++++++++++++++++

      [source,java]
      -------------------------------------------------
      from("cache://MyApplicationCache" +
                "?maxElementsInMemory=1000" +
                "&memoryStoreEvictionPolicy=" +
                    "MemoryStoreEvictionPolicy.LFU" +
                "&overflowToDisk=true" +
                "&eternal=true" +
                "&timeToLiveSeconds=300" +
                "&timeToIdleSeconds=true" +
                "&diskPersistent=true" +
                "&diskExpiryThreadIntervalSeconds=300")
      -------------------------------------------------

      [[Cache-Example2:Addingkeystothecache]]
      Example 2: Adding keys to the cache
      +++++++++++++++++++++++++++++++++++

      [source,java]
      ---------------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
           from("direct:start")
           .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD))
           .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
           .to("cache://TestCache1")
         }
      };
      ---------------------------------------------------------------------------------------------

      [[Cache-Example2:Updatingexistingkeysinacache]]
      Example 2: Updating existing keys in a cache
      ++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
           from("direct:start")
           .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_UPDATE))
           .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
           .to("cache://TestCache1")
         }
      };
      ------------------------------------------------------------------------------------------------

      [[Cache-Example3:Deletingexistingkeysinacache]]
      Example 3: Deleting existing keys in a cache
      ++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
           from("direct:start")
           .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_DELETE))
           .setHeader(CacheConstants.CACHE_KEY", constant("Ralph_Waldo_Emerson"))
           .to("cache://TestCache1")
         }
      };
      --------------------------------------------------------------------------------------

      [[Cache-Example4:Deletingallexistingkeysinacache]]
      Example 4: Deleting all existing keys in a cache
      ++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      -----------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
           from("direct:start")
           .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_DELETEALL))
           .to("cache://TestCache1");
          }
      };
      -----------------------------------------------------------------------------------------

      [[Cache-Example5:NotifyinganychangesregisteringinaCachetoProcessorsandotherProducers]]
      Example 5: Notifying any changes registering in a Cache to Processors and other Producers
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
           from("cache://TestCache1")
           .process(new Processor() {
              public void process(Exchange exchange)
                     throws Exception {
                 String operation = (String) exchange.getIn().getHeader(CacheConstants.CACHE_OPERATION);
                 String key = (String) exchange.getIn().getHeader(CacheConstants.CACHE_KEY);
                 Object body = exchange.getIn().getBody();
                 // Do something
              }
           })
         }
      };
      --------------------------------------------------------------------------------------------------

      [[Cache-Example6:UsingProcessorstoselectivelyreplacepayloadwithcachevalues]]
      Example 6: Using Processors to selectively replace payload with cache values
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ---------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
         public void configure() {
           //Message Body Replacer
           from("cache://TestCache1")
           .filter(header(CacheConstants.CACHE_KEY).isEqualTo("greeting"))
           .process(new CacheBasedMessageBodyReplacer("cache://TestCache1","farewell"))
           .to("direct:next");

          //Message Token replacer
          from("cache://TestCache1")
          .filter(header(CacheConstants.CACHE_KEY).isEqualTo("quote"))
          .process(new CacheBasedTokenReplacer("cache://TestCache1","novel","#novel#"))
          .process(new CacheBasedTokenReplacer("cache://TestCache1","author","#author#"))
          .process(new CacheBasedTokenReplacer("cache://TestCache1","number","#number#"))
          .to("direct:next");

          //Message XPath replacer
          from("cache://TestCache1").
          .filter(header(CacheConstants.CACHE_KEY).isEqualTo("XML_FRAGMENT"))
          .process(new CacheBasedXPathReplacer("cache://TestCache1","book1","/books/book1"))
          .process (new CacheBasedXPathReplacer("cache://TestCache1","book2","/books/book2"))
          .to("direct:next");
         }
      };
      ---------------------------------------------------------------------------------------

      [[Cache-Example7:GettinganentryfromtheCache]]
      Example 7: Getting an entry from the Cache
      ++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------------------------------------
      from("direct:start")
          // Prepare headers
          .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_GET))
          .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
          .to("cache://TestCache1").
          // Check if entry was not found
          .choice().when(header(CacheConstants.CACHE_ELEMENT_WAS_FOUND).isNull()).
              // If not found, get the payload and put it to cache
              .to("cxf:bean:someHeavyweightOperation").
              .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD))
              .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
              .to("cache://TestCache1")
          .end()
          .to("direct:nextPhase");
      ------------------------------------------------------------------------------------------------

      [[Cache-Example8:CheckingforanentryintheCache]]
      Example 8: Checking for an entry in the Cache
      +++++++++++++++++++++++++++++++++++++++++++++

      Note: The CHECK command tests existence of an entry in the cache but
      doesn't place a message in the body.

      [source,java]
      ------------------------------------------------------------------------------------------------
      from("direct:start")
          // Prepare headers
          .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_CHECK))
          .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
          .to("cache://TestCache1").
          // Check if entry was not found
          .choice().when(header(CacheConstants.CACHE_ELEMENT_WAS_FOUND).isNull()).
              // If not found, get the payload and put it to cache
              .to("cxf:bean:someHeavyweightOperation").
              .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD))
              .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
              .to("cache://TestCache1")
          .end();
      ------------------------------------------------------------------------------------------------

      [[Cache-ManagementofEHCache]]
      Management of EHCache
      ^^^^^^^^^^^^^^^^^^^^^

      http://ehcache.org/[EHCache] has its own statistics and management from
      link:camel-jmx.html[JMX].

      Here's a snippet on how to expose them via JMX in a Spring application
      context:

      [source,xml]
      -----------------------------------------------------------------------------------------------------------------------------
      <bean id="ehCacheManagementService" class="net.sf.ehcache.management.ManagementService" init-method="init" lazy-init="false">
        <constructor-arg>
          <bean class="net.sf.ehcache.CacheManager" factory-method="getInstance"/>
        </constructor-arg>
        <constructor-arg>
          <bean class="org.springframework.jmx.support.JmxUtils" factory-method="locateMBeanServer"/>
        </constructor-arg>
        <constructor-arg value="true"/>
        <constructor-arg value="true"/>
        <constructor-arg value="true"/>
        <constructor-arg value="true"/>
      </bean>
      -----------------------------------------------------------------------------------------------------------------------------

      Of course you can do the same thing in straight Java:

      [source,java]
      --------------------------------------------------------------------------------------------------
      ManagementService.registerMBeans(CacheManager.getInstance(), mbeanServer, true, true, true, true);
      --------------------------------------------------------------------------------------------------

      You can get cache hits, misses, in-memory hits, disk hits, size stats
      this way. You can also change CacheConfiguration parameters on the fly.

      [[Cache-CachereplicationCamel2.8]]
      Cache replication Camel 2.8
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The Camel Cache component is able to distribute a cache across server
      nodes using several different replication mechanisms including: RMI,
      JGroups, JMS and Cache Server.

      There are two different ways to make it work:

      *1.* You can configure `ehcache.xml` manually

      OR

      *2.* You can configure these three options:

      * cacheManagerFactory
      * eventListenerRegistry
      * cacheLoaderRegistry

      Configuring Camel Cache replication using the first option is a bit of
      hard work as you have to configure all caches separately. So in a
      situation when the all names of caches are not known, using
      `ehcache.xml` is not a good idea.

      The second option is much better when you want to use many different
      caches as you do not need to define options per cache. This is because
      replication options are set per `CacheManager` and per `CacheEndpoint`.
      Also it is the only way when cache names are not know at the development
      phase.

      [Note]
      ====


      It might be useful to read the http://ehcache.org/documentation[EHCache
      manual] to get a better understanding of the Camel Cache replication
      mechanism.

      ====

      [[Cache-Example:JMScachereplication]]
      Example: JMS cache replication
      ++++++++++++++++++++++++++++++

      JMS replication is the most powerful and secured replication method.
      Used together with Camel Cache replication makes it also rather
      simple. An example is available on link:cachereplicationjmsexample.html[a
      separate page].

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-chronicle-engine
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: chronicle-engine
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: chronicle-engine
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: chronicle-engine
          spec:
            containers:
            - image: fabric8/connector-chronicle-engine:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: chronicle-engine
        syntax: chronicle-engine:addresses/path
        title: Chronicle Engine
        description: The camel chronicle-engine component let you leverage the power of OpenHFT's Chronicle-Engine.
        label: Chronicle
        deprecated: false
        async: false
        javaType: org.apache.camel.component.chronicle.engine.ChronicleEngineComponent
        groupId: org.apache.camel
        artifactId: camel-chronicle
        version: 2.18.1
      componentProperties: {}
      properties:
        addresses:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Engine addresses. Multiple addresses can be separated by comman.
        path:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Engine path
        action:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - PUBLISH
          - PUBLISH_AND_INDEX
          - PPUT
          - PGET_AND_PUT
          - PPUT_ALL
          - PPUT_IF_ABSENT
          - PGET
          - PGET_AND_REMOVE
          - PREMOVE
          - PIS_EMPTY
          - PSIZE
          deprecated: false
          secret: false
          description: 'The default action to perform valid values are: - PUBLISH - PPUBLISH_AND_INDEX
            - PPUT - PGET_AND_PUT - PPUT_ALL - PPUT_IF_ABSENT - PGET - PGET_AND_REMOVE -
            PREMOVE - PIS_EMPTY - PSIZE'
        filteredMapEvents:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'A comma separated list of Map event type to filer valid values are:
            INSERT UPDATE REMOVE.'
        persistent:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enable/disable data persistence
        subscribeMapEvents:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Set if consumer should subscribe to Map events default true.
        subscribeTopicEvents:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set if consumer should subscribe to TopicEventsd efault false.
        subscribeTopologicalEvents:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set if consumer should subscribe to TopologicalEventsd efault false.
        wireType:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - TEXT
          - BINARY
          - BINARY_LIGHT
          - DEFAULT_ZERO_BINARY
          - DELTA_BINARY
          - FIELDLESS_BINARY
          - COMPRESSED_BINARY
          - JSON
          - RAW
          - CSV
          - READ_ANY
          deprecated: false
          secret: false
          defaultValue: BINARY
          description: The Wire type to use default to binary wire.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |2+

      // component options: START
      The Chronicle Engine component has no options.
      // component options: END



      // endpoint options: START
      The Chronicle Engine component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | addresses | common |  | String | *Required* Engine addresses. Multiple addresses can be separated by comman.
      | path | common |  | String | *Required* Engine path
      | action | common |  | String | The default action to perform valid values are: - PUBLISH - PPUBLISH_AND_INDEX - PPUT - PGET_AND_PUT - PPUT_ALL - PPUT_IF_ABSENT - PGET - PGET_AND_REMOVE - PREMOVE - PIS_EMPTY - PSIZE
      | filteredMapEvents | common |  | String | A comma separated list of Map event type to filer valid values are: INSERT UPDATE REMOVE.
      | persistent | common | true | boolean | Enable/disable data persistence
      | subscribeMapEvents | common | true | boolean | Set if consumer should subscribe to Map events default true.
      | subscribeTopicEvents | common | false | boolean | Set if consumer should subscribe to TopicEventsd efault false.
      | subscribeTopologicalEvents | common | false | boolean | Set if consumer should subscribe to TopologicalEventsd efault false.
      | wireType | common | BINARY | String | The Wire type to use default to binary wire.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-chunk
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: chunk
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: chunk
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: chunk
          spec:
            containers:
            - image: fabric8/connector-chunk:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: chunk
        syntax: chunk:resourceUri
        title: Chunk
        description: Transforms the message using a Chunk template.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.chunk.ChunkComponent
        groupId: org.apache.camel
        artifactId: camel-chunk
        version: 2.18.1
      componentProperties: {}
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        encoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Define the encoding of the body
        extension:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Define the file extension of the template
        themeFolder:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Define the themes folder to scan
        themeLayer:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Define the theme layer to elaborate
        themeSubfolder:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Define the themes subfolder to scan
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Chunk-Chunk]]
      Chunk
      ~~~~~

      *Available as of Camel 2.15*

      The *chunk:*??component allows for processing a message using a
      http://www.x5software.com/chunk/examples/ChunkExample?loc=en_US[Chunk]??template.
      This can be ideal when using??link:templating.html[Templating]??to
      generate responses for requests.

      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-chunk</artifactId>
      <version>x.x.x</version> <!-- use the same version as your Camel core version -->
      </dependency>
      ---------------------------------------------------------------------------------

      [[Chunk-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------
      chunk:templateName[?options]
      ----------------------------

      Where??*templateName*??is the classpath-local URI of the template to
      invoke.

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

      [[Chunk-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Chunk component has no options.
      // component options: END



      // endpoint options: START
      The Chunk component supports 8 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
      | encoding | producer |  | String | Define the encoding of the body
      | extension | producer |  | String | Define the file extension of the template
      | themeFolder | producer |  | String | Define the themes folder to scan
      | themeLayer | producer |  | String | Define the theme layer to elaborate
      | themeSubfolder | producer |  | String | Define the themes subfolder to scan
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      Chunk component will look for a specific template in _themes_ folder
      with extensions _.chtml_ or _.cxml.??_If you need to specify a different
      folder or extensions, you will need to use the specific options listed
      above.

      [[Chunk-ChunkContext]]
      Chunk Context
      ^^^^^^^^^^^^^

      Camel will provide exchange information in the Chunk context (just
      a??`Map`). The??`Exchange`??is transferred as:

      ??
      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |key |value

      |`exchange` |The `Exchange` itself.

      |`exchange.properties` |The `Exchange` properties.

      |`headers` |The headers of the In message.

      |`camelContext` |The Camel Context.

      |`request` |The In message.

      |`body` |The In message body.

      |`response` |The Out message (only for InOut message exchange pattern).
      |=======================================================================

      [[Chunk-Dynamictemplates]]
      Dynamic templates
      ^^^^^^^^^^^^^^^^^

      Camel provides two headers by which you can define a different resource
      location for a template or the template content itself. If any of these
      headers is set then Camel uses this over the endpoint configured
      resource. This allows you to provide a dynamic template at runtime.

      [width="100%",cols="20%,10%,10%,60%",options="header",]
      |=======================================================================
      |Header |Type |Description |Support Version

      |ChunkConstants.CHUNK_RESOURCE_URI |String |A URI for the template resource to use instead of the endpoint
      configured. |

      |ChunkConstants.CHUNK_TEMPLATE |String |The template to use instead of the endpoint configured. |
      |=======================================================================

      [[Chunk-Samples]]
      Samples
      ^^^^^^^

      For example you could use something like:

      [source,java]
      --------------------------
      from("activemq:My.Queue").
      to("chunk:template");
      --------------------------

      To use a Chunk template to formulate a response for a message for InOut
      message exchanges (where there is a??`JMSReplyTo`??header).

      If you want to use InOnly and consume the message and send it to another
      destination you could use:

      [source,java]
      -----------------------------
      from("activemq:My.Queue").
      to("chunk:template").
      to("activemq:Another.Queue");
      -----------------------------

      It's possible to specify what template the component should use
      dynamically via a header, so for example:

      [source,java]
      ------------------------------------------------------------------
      from("direct:in").
      setHeader(ChunkConstants.CHUNK_RESOURCE_URI).constant("template").
      to("chunk:dummy");
      ------------------------------------------------------------------

      An example of Chunk component options use:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("direct:in").
      to("chunk:file_example?themeFolder=template&themeSubfolder=subfolder&extension=chunk");
      ---------------------------------------------------------------------------------------

      In this example Chunk component will look for the file
      _file_example.chunk_ in the folder _template/subfolder._

      [[Chunk-TheEmailSample]]
      The Email Sample
      ^^^^^^^^^^^^^^^^

      In this sample we want to use Chunk templating for an order confirmation
      email. The email template is laid out in Chunk as:

      [source,java]
      ----------------------------------------------
      ??
      Dear {$headers.lastName}, {$headers.firstName}

      Thanks for the order of {$headers.item}.

      Regards Camel Riders Bookstore
      {$body}
      ----------------------------------------------

      [[Chunk-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-class
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: class
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: class
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: class
          spec:
            containers:
            - image: fabric8/connector-class:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: class
        syntax: class:beanName
        title: Class
        description: The Class Component is for invoking Java Classes (Java beans) from Camel.
        label: core,java
        deprecated: false
        async: false
        javaType: org.apache.camel.component.beanclass.ClassComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        beanName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the bean to invoke
        method:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the method to invoke on the bean
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        cache:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
        multiParameterArray:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          defaultValue: false
          description: 'How to treat the parameters which are passed from the message body;
            if it is true the message body should be an array of parameters. Note: This
            option is used internally by Camel and is not intended for end users to use.'
        parameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: bean.
          multiValue: true
          deprecated: false
          secret: false
          description: Used for configuring additional properties on the bean
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Class-ClassComponent]]
      Class Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.4*

      The *class:* component binds beans to Camel message exchanges. It works
      in the same way as the link:bean.html[Bean] component but instead of
      looking up beans from a link:registry.html[Registry] it creates the bean
      based on the class name.

      [[Class-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------
      class:className[?options]
      -------------------------

      Where *className* is the fully qualified class name to create and use as
      bean.

      [[Class-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Class component has no options.
      // component options: END



      // endpoint options: START
      The Class component supports 9 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | beanName | common |  | String | *Required* Sets the name of the bean to invoke
      | method | common |  | String | Sets the name of the method to invoke on the bean
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | cache | advanced | false | boolean | If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
      | multiParameterArray | advanced | false | boolean | How to treat the parameters which are passed from the message body; if it is true the message body should be an array of parameters. Note: This option is used internally by Camel and is not intended for end users to use.
      | parameters | advanced |  | Map | Used for configuring additional properties on the bean
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Class-Using]]
      Using
      ^^^^^

      You simply use the *class* component just as the link:bean.html[Bean]
      component but by specifying the fully qualified classname instead. +
       For example to use the `MyFooBean` you have to do as follows:

      [source,java]
      -------------------------------------------------------------------------------------------------
          from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean").to("mock:result");
      -------------------------------------------------------------------------------------------------

      You can also specify which method to invoke on the `MyFooBean`, for
      example `hello`:

      [source,java]
      --------------------------------------------------------------------------------------------------------------
          from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean?method=hello").to("mock:result");
      --------------------------------------------------------------------------------------------------------------

      [[Class-Settingpropertiesonthecreatedinstance]]
      Setting properties on the created instance
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      In the endpoint uri you can specify properties to set on the created
      instance, for example if it has a `setPrefix` method:

      [source,java]
      ---------------------------------------------------------------------------------
         // Camel 2.17 onwards
         from("direct:start")
              .to("class:org.apache.camel.component.bean.MyPrefixBean?bean.prefix=Bye")
              .to("mock:result");
      ??
         // Camel 2.16 and older??
         from("direct:start")
              .to("class:org.apache.camel.component.bean.MyPrefixBean?prefix=Bye")
              .to("mock:result");
      ---------------------------------------------------------------------------------

      And you can also use the `#` syntax to refer to properties to be looked
      up in the link:registry.html[Registry].

      [source,java]
      --------------------------------------------------------------------------------
          // Camel 2.17 onwards
          from("direct:start")
              .to("class:org.apache.camel.component.bean.MyPrefixBean?bean.cool=#foo")
              .to("mock:result");

          // Camel 2.16 and older
          from("direct:start")
              .to("class:org.apache.camel.component.bean.MyPrefixBean?cool=#foo")
              .to("mock:result");
      --------------------------------------------------------------------------------

      Which will lookup a bean from the link:registry.html[Registry] with the
      id `foo` and invoke the `setCool` method on the created instance of the
      `MyPrefixBean` class.

      TIP:See more details at the link:bean.html[Bean] component as the *class*
      component works in much the same way.

      [[Class-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:bean.html[Bean]
      * link:bean-binding.html[Bean Binding]
      * link:bean-integration.html[Bean Integration]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cm-sms
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cm-sms
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cm-sms
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cm-sms
          spec:
            containers:
            - image: fabric8/connector-cm-sms:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cm-sms
        syntax: cm-sms:host
        title: CM SMS Gateway
        description: The influxdb component allows to integrate with CM SMS Gateway.
        label: mobile
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.cm.CMComponent
        groupId: org.apache.camel
        artifactId: camel-cm-sms
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SMS Provider HOST with scheme
        defaultFrom:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This is the sender name. The maximum length is 11 characters.
        defaultMaxNumberOfParts:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8"
          description: If it is a multipart message forces the max number. Message can be truncated. Technically the gateway will first check if a message is larger than 160 characters if so the message will be cut into multiple 153 characters parts limited by these parameters.
        productToken:
          kind: parameter
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The unique token to use
        testConnectionOnStartup:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to test the connection to the SMS Gateway on startup
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[CM-SMS]]\nCM-SMS\n~~~~~~\n\n*Available as of Camel 2.18*\n\
      \n*Camel-Cm-Sms* is an http://camel.apache.org/[Apache Camel] component \nfor\
      \ the [CM SMS Gateway](https://www.cmtelecom.com). \n\nIt allows to integrate\
      \ https://dashboard.onlinesmsgateway.com/docs[CM SMS API]in an application as\
      \ a camel component. \n\nYou must have a valid account.  More information are\
      \ available at https://www.cmtelecom.com/support[CM Telecom].\n\n[source,java]\n\
      -------------------------------\ncm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=DefaultSender&defaultMaxNumberOfParts=8&productToken=xxxxx\n\
      -------------------------------\n\nMaven users will need to add the following\
      \ dependency to their pom.xml\nfor this component:\n\n[source,xml]\n---------------------------------------------------------\n\
      <dependency>\n??<groupId>org.apache.camel</groupId>\n??<artifactId>camel-cm-sms</artifactId>\n\
      ??<version>x.x.x</version>\n??<!-- use the same version as your Camel core version\
      \ -->\n</dependency>\n---------------------------------------------------------\n\
      \n[[CM-SMS-Options]]\nOptions\n~~~~~~~\n\n\n// component options: START\nThe\
      \ CM SMS Gateway component has no options.\n// component options: END\n\n\n\n\
      // endpoint options: START\nThe CM SMS Gateway component supports 6 endpoint\
      \ options which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | producer |  | String\
      \ | *Required* SMS Provider HOST with scheme\n| defaultFrom | producer |  |\
      \ String | This is the sender name. The maximum length is 11 characters.\n|\
      \ defaultMaxNumberOfParts | producer | 8 | int | If it is a multipart message\
      \ forces the max number. Message can be truncated. Technically the gateway will\
      \ first check if a message is larger than 160 characters if so the message will\
      \ be cut into multiple 153 characters parts limited by these parameters.\n|\
      \ productToken | producer |  | String | *Required* The unique token to use\n\
      | testConnectionOnStartup | producer | false | boolean | Whether to test the\
      \ connection to the SMS Gateway on startup\n| synchronous | advanced | false\
      \ | boolean | Sets whether synchronous processing should be strictly used or\
      \ Camel is allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[CM-SMS-Sample]]\nSample\n~~~~~~\n\
      \nYou can try https://github.com/oalles/camel-cm-sample[this project] to see\
      \ how camel-cm-sms can be integrated in a camel route. \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cmis
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cmis
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cmis
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cmis
          spec:
            containers:
            - image: fabric8/connector-cmis:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cmis
        syntax: cmis:url
        title: CMIS
        description: The cmis component uses the Apache Chemistry client API and allows you to add/read nodes to/from a CMIS compliant content repositories.
        label: cms,database
        deprecated: false
        async: false
        javaType: org.apache.camel.component.cmis.CMISComponent
        groupId: org.apache.camel
        artifactId: camel-cmis
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: the cmis url
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        queryMode:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true will execute the cmis query from the message body and return result otherwise will create a node in the cmis repository
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[CMIS-CMISComponent]]
      CMIS Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.11* +
       The cmis component uses the
      http://chemistry.apache.org/java/opencmis.html[Apache Chemistry] client
      API and allows you to add/read nodes to/from a CMIS compliant content
      repositories.

      [[CMIS-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      ------------------------------
      cmis://cmisServerUrl[?options]
      ------------------------------

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

      [[CMIS-URIOptions]]
      CMIS Options
      ^^^^^^^^^^^^


      // component options: START
      The CMIS component has no options.
      // component options: END



      // endpoint options: START
      The CMIS component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | common |  | String | *Required* the cmis url
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | queryMode | producer | false | boolean | If true will execute the cmis query from the message body and return result otherwise will create a node in the cmis repository
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[CMIS-Usage]]
      Usage
      ^^^^^

      [[CMIS-Messageheadersevaluatedbytheproducer]]
      Message headers evaluated by the producer
      +++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Default Value |Description

      |`CamelCMISFolderPath` |`/` |The current folder to use during the execution. If not specified will
      use the root folder

      |`CamelCMISRetrieveContent` |`false` |In `queryMode` this header will force the producer to retrieve the
      content of document nodes.

      |`CamelCMISReadSize` |`0` |Max number of nodes to read.

      |`cmis:path` |`null` |If `CamelCMISFolderPath` is not set, will try to find out the path of
      the node from this cmis property and it is name

      |`cmis:name` |`null` |If `CamelCMISFolderPath` is not set, will try to find out the path of
      the node from this cmis property and it is path

      |`cmis:objectTypeId` |`null` |The type of the node

      |`cmis:contentStreamMimeType` |`null` |The mimetype to set for a document
      |=======================================================================

      [[CMIS-MessageheaderssetduringqueryingProduceroperation]]
      Message headers set during querying Producer operation
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelCMISResultCount` |`Integer` |Number of nodes returned from the query.
      |=======================================================================

      The message body will contain a list of maps, where each entry in the
      map is cmis property and its value. If `CamelCMISRetrieveContent` header is set to true, one additional
      entry in the map with key `CamelCMISContent` will contain `InputStream`
      of the document type of nodes.

      [[CMIS-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ---------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-cmis</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.11 or higher).

      [[CMIS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-coap
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: coap
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: coap
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: coap
          spec:
            containers:
            - image: fabric8/connector-coap:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: coap
        syntax: coap:uri
        title: CoAP
        description: The coap component is used for sending and receiving messages from COAP capable devices.
        label: iot
        deprecated: false
        async: false
        javaType: org.apache.camel.coap.CoAPComponent
        groupId: org.apache.camel
        artifactId: camel-coap
        version: 2.18.1
      componentProperties: {}
      properties:
        uri:
          kind: path
          group: common
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The URI for the CoAP endpoint
        coapMethod:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '*'
          description: The CoAP method this endpoint binds to. Default is to bind to all () but can be restricted to GET POST PUT DELETE PING
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[CoAP-CoAPComponent]]\nCoAP Component\n~~~~~~~~~~~~~~\n\n\
      *Camel-CoAP* is an http://camel.apache.org/[Apache Camel] component that\nallows\
      \ you to work with CoAP, a lightweight REST-type protocol for machine-to-machine\
      \ operation. \nhttp://coap.technology/[CoAP], Constrained Application Protocol\
      \ is a specialized web transfer protocol \nfor use with constrained nodes and\
      \ constrained networks and it is based on RFC 7252.\n\n*Available as of Camel\
      \ 2.16*\n\nMaven users will need to add the following dependency to their pom.xml\n\
      for this component:\n\n[source,xml]\n---------------------------------------------------------\n\
      <dependency>\n??<groupId>org.apache.camel</groupId>\n??<artifactId>camel-coap</artifactId>\n\
      ??<version>x.x.x</version>\n??<!-- use the same version as your Camel core version\
      \ -->\n</dependency>\n---------------------------------------------------------\n\
      \n[[CoAP-Options]]\nOptions\n~~~~~~~\n\n\n// component options: START\nThe CoAP\
      \ component has no options.\n// component options: END\n\n\n\n\n// endpoint\
      \ options: START\nThe CoAP component supports 6 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| uri | common |  | URI\
      \ | The URI for the CoAP endpoint\n| coapMethod | common | * | String | The\
      \ CoAP method this endpoint binds to. Default is to bind to all () but can be\
      \ restricted to GET POST PUT DELETE PING\n| bridgeErrorHandler | consumer |\
      \ false | boolean | 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/ERROR level and ignored.\n| exceptionHandler | consumer (advanced)\
      \ |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cometd
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cometd
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cometd
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cometd
          spec:
            containers:
            - image: fabric8/connector-cometd:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cometd
        alternativeSchemes: cometd,cometds
        syntax: cometd:host:port/channelName
        title: CometD
        description: The cometd component is a transport for working with the Jetty implementation of the cometd/bayeux protocol.
        label: websocket
        deprecated: false
        async: false
        javaType: org.apache.camel.component.cometd.CometdComponent
        groupId: org.apache.camel
        artifactId: camel-cometd
        version: 2.18.1
      componentProperties:
        sslKeyPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password for the keystore when using SSL.
        sslPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password when using SSL.
        sslKeystore:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The path to the keystore.
        securityPolicy:
          kind: property
          type: object
          javaType: org.cometd.bayeux.server.SecurityPolicy
          deprecated: false
          secret: false
          description: To use a custom configured SecurityPolicy to control authorization
        extensions:
          kind: property
          type: array
          javaType: java.util.List<org.cometd.bayeux.server.BayeuxServer.Extension>
          deprecated: false
          secret: false
          description: To use a list of custom BayeuxServer.Extension that allows modifying incoming and outgoing requests.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Host port number
        channelName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The channelName represents a topic that can be subscribed to by the Camel endpoints.
        allowedOrigins:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '*'
          description: The origins domain that support to cross if the crosssOriginFilterOn is true
        baseResource:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The root directory for the web resources or classpath. Use the protocol
            file: or classpath: depending if you want that the component loads the resource
            from file system or classpath. Classpath is required for OSGI deployment where
            the resources are packaged in the jar'
        crossOriginFilterOn:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the server will support for cross-domain filtering
        filterPath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The filterPath will be used by the CrossOriginFilter if the crosssOriginFilterOn is true
        interval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The client side poll timeout in milliseconds. How long a client will wait between reconnects
        jsonCommented:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true the server will accept JSON wrapped in a comment and will generate JSON wrapped in a comment. This is a defence against Ajax Hijacking.
        logLevel:
          kind: parameter
          group: common
          type: string
          javaType: int
          enum:
          - "0"
          - "1"
          - "2"
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Logging level. 0=none 1=info 2=debug.
        maxInterval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The max client side poll timeout in milliseconds. A client will be removed if a connection is not received in this time.
        multiFrameInterval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1500"
          description: The client side poll timeout if multiple connections are detected from the same browser.
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "240000"
          description: The server side poll timeout in milliseconds. This is how long the server will hold a reconnect request before responding.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sessionHeadersEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to include the server session headers in the Camel message when creating a Camel Message for incoming requests.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        disconnectLocalSession:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to disconnect local sessions after publishing a message to its channel. Disconnecting local session is needed as they are not swept by default by CometD and therefore you can run out of memory.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Cometd-CometdComponent]]
      Cometd Component
      ~~~~~~~~~~~~~~~~

      The *cometd:* component is a transport for working with the
      http://www.mortbay.org/jetty[jetty] implementation of the
      http://docs.codehaus.org/display/JETTY/Cometd+%28aka+Bayeux%29[cometd/bayeux
      protocol]. +
       Using this component in combination with the dojo toolkit library it's
      possible to push Camel messages directly into the browser using an AJAX
      based mechanism.

      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-cometd</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Cometd-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------------
      cometd://host:port/channelName[?options]
      ----------------------------------------

      The *channelName* represents a topic that can be subscribed to by the
      Camel endpoints.

      [[Cometd-Examples]]
      Examples
      ^^^^^^^^

      ------------------------------------------
      cometd://localhost:8080/service/mychannel
      cometds://localhost:8443/service/mychannel
      ------------------------------------------

      where `cometds:` represents an SSL configured endpoint.

      [[Cometd-Options]]
      Options
      ^^^^^^^




      // component options: START
      The CometD component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | sslKeyPassword | String | The password for the keystore when using SSL.
      | sslPassword | String | The password when using SSL.
      | sslKeystore | String | The path to the keystore.
      | securityPolicy | SecurityPolicy | To use a custom configured SecurityPolicy to control authorization
      | extensions | List | To use a list of custom BayeuxServer.Extension that allows modifying incoming and outgoing requests.
      | sslContextParameters | SSLContextParameters | To configure security using SSLContextParameters
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The CometD component supports 19 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Hostname
      | port | common |  | int | *Required* Host port number
      | channelName | common |  | String | *Required* The channelName represents a topic that can be subscribed to by the Camel endpoints.
      | allowedOrigins | common | * | String | The origins domain that support to cross if the crosssOriginFilterOn is true
      | baseResource | common |  | String | The root directory for the web resources or classpath. Use the protocol file: or classpath: depending if you want that the component loads the resource from file system or classpath. Classpath is required for OSGI deployment where the resources are packaged in the jar
      | crossOriginFilterOn | common | false | boolean | If true the server will support for cross-domain filtering
      | filterPath | common |  | String | The filterPath will be used by the CrossOriginFilter if the crosssOriginFilterOn is true
      | interval | common |  | int | The client side poll timeout in milliseconds. How long a client will wait between reconnects
      | jsonCommented | common | true | boolean | If true the server will accept JSON wrapped in a comment and will generate JSON wrapped in a comment. This is a defence against Ajax Hijacking.
      | logLevel | common | 1 | int | Logging level. 0=none 1=info 2=debug.
      | maxInterval | common | 30000 | int | The max client side poll timeout in milliseconds. A client will be removed if a connection is not received in this time.
      | multiFrameInterval | common | 1500 | int | The client side poll timeout if multiple connections are detected from the same browser.
      | timeout | common | 240000 | int | The server side poll timeout in milliseconds. This is how long the server will hold a reconnect request before responding.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sessionHeadersEnabled | consumer | false | boolean | Whether to include the server session headers in the Camel message when creating a Camel Message for incoming requests.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | disconnectLocalSession | producer | false | boolean | Whether to disconnect local sessions after publishing a message to its channel. Disconnecting local session is needed as they are not swept by default by CometD and therefore you can run out of memory.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



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

      Here is some examples on How to pass the parameters

      For file (for webapp resources located in the Web Application directory
      --> cometd://localhost:8080?resourceBase=file./webapp +
       For classpath (when by example the web resources are packaged inside
      the webapp folder -->
      cometd://localhost:8080?resourceBase=classpath:webapp

      [[Cometd-Authentication]]
      Authentication
      ^^^^^^^^^^^^^^

      *Available as of Camel 2.8*

      You can configure custom `SecurityPolicy` and `Extension`'s to the
      `CometdComponent` which allows you to use authentication as
      http://cometd.org/documentation/howtos/authentication[documented here]

      [[Cometd-SettingupSSLforCometdComponent]]
      Setting up SSL for Cometd Component
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [[Cometd-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of Camel 2.9, the Cometd component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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. You need to configure SSL
      on the CometdComponent.

      [[Cometd-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);
      -----------------------------------------------------------------------------------------------

      [[Cometd-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:keyManagers>
        </camel:sslContextParameters>...
      ??
        <bean id="cometd" class="org.apache.camel.component.cometd.CometdComponent">
          <property name="sslContextParameters" ref="sslContextParameters"/>
        </bean>
      ...
        <to uri="cometds://127.0.0.1:443/service/test?baseResource=file:./target/test-classes/webapp&timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"/>...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Cometd-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cometds
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cometds
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cometds
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cometds
          spec:
            containers:
            - image: fabric8/connector-cometds:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cometds
        alternativeSchemes: cometd,cometds
        syntax: cometds:host:port/channelName
        title: CometD
        description: The cometd component is a transport for working with the Jetty implementation of the cometd/bayeux protocol.
        label: websocket
        deprecated: false
        async: false
        javaType: org.apache.camel.component.cometd.CometdComponent
        groupId: org.apache.camel
        artifactId: camel-cometd
        version: 2.18.1
      componentProperties:
        sslKeyPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password for the keystore when using SSL.
        sslPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password when using SSL.
        sslKeystore:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The path to the keystore.
        securityPolicy:
          kind: property
          type: object
          javaType: org.cometd.bayeux.server.SecurityPolicy
          deprecated: false
          secret: false
          description: To use a custom configured SecurityPolicy to control authorization
        extensions:
          kind: property
          type: array
          javaType: java.util.List<org.cometd.bayeux.server.BayeuxServer.Extension>
          deprecated: false
          secret: false
          description: To use a list of custom BayeuxServer.Extension that allows modifying incoming and outgoing requests.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Host port number
        channelName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The channelName represents a topic that can be subscribed to by the Camel endpoints.
        allowedOrigins:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '*'
          description: The origins domain that support to cross if the crosssOriginFilterOn is true
        baseResource:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The root directory for the web resources or classpath. Use the protocol
            file: or classpath: depending if you want that the component loads the resource
            from file system or classpath. Classpath is required for OSGI deployment where
            the resources are packaged in the jar'
        crossOriginFilterOn:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the server will support for cross-domain filtering
        filterPath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The filterPath will be used by the CrossOriginFilter if the crosssOriginFilterOn is true
        interval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The client side poll timeout in milliseconds. How long a client will wait between reconnects
        jsonCommented:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true the server will accept JSON wrapped in a comment and will generate JSON wrapped in a comment. This is a defence against Ajax Hijacking.
        logLevel:
          kind: parameter
          group: common
          type: string
          javaType: int
          enum:
          - "0"
          - "1"
          - "2"
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Logging level. 0=none 1=info 2=debug.
        maxInterval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The max client side poll timeout in milliseconds. A client will be removed if a connection is not received in this time.
        multiFrameInterval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1500"
          description: The client side poll timeout if multiple connections are detected from the same browser.
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "240000"
          description: The server side poll timeout in milliseconds. This is how long the server will hold a reconnect request before responding.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sessionHeadersEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to include the server session headers in the Camel message when creating a Camel Message for incoming requests.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        disconnectLocalSession:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to disconnect local sessions after publishing a message to its channel. Disconnecting local session is needed as they are not swept by default by CometD and therefore you can run out of memory.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Cometd-CometdComponent]]
      Cometd Component
      ~~~~~~~~~~~~~~~~

      The *cometd:* component is a transport for working with the
      http://www.mortbay.org/jetty[jetty] implementation of the
      http://docs.codehaus.org/display/JETTY/Cometd+%28aka+Bayeux%29[cometd/bayeux
      protocol]. +
       Using this component in combination with the dojo toolkit library it's
      possible to push Camel messages directly into the browser using an AJAX
      based mechanism.

      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-cometd</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Cometd-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------------
      cometd://host:port/channelName[?options]
      ----------------------------------------

      The *channelName* represents a topic that can be subscribed to by the
      Camel endpoints.

      [[Cometd-Examples]]
      Examples
      ^^^^^^^^

      ------------------------------------------
      cometd://localhost:8080/service/mychannel
      cometds://localhost:8443/service/mychannel
      ------------------------------------------

      where `cometds:` represents an SSL configured endpoint.

      [[Cometd-Options]]
      Options
      ^^^^^^^




      // component options: START
      The CometD component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | sslKeyPassword | String | The password for the keystore when using SSL.
      | sslPassword | String | The password when using SSL.
      | sslKeystore | String | The path to the keystore.
      | securityPolicy | SecurityPolicy | To use a custom configured SecurityPolicy to control authorization
      | extensions | List | To use a list of custom BayeuxServer.Extension that allows modifying incoming and outgoing requests.
      | sslContextParameters | SSLContextParameters | To configure security using SSLContextParameters
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The CometD component supports 19 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Hostname
      | port | common |  | int | *Required* Host port number
      | channelName | common |  | String | *Required* The channelName represents a topic that can be subscribed to by the Camel endpoints.
      | allowedOrigins | common | * | String | The origins domain that support to cross if the crosssOriginFilterOn is true
      | baseResource | common |  | String | The root directory for the web resources or classpath. Use the protocol file: or classpath: depending if you want that the component loads the resource from file system or classpath. Classpath is required for OSGI deployment where the resources are packaged in the jar
      | crossOriginFilterOn | common | false | boolean | If true the server will support for cross-domain filtering
      | filterPath | common |  | String | The filterPath will be used by the CrossOriginFilter if the crosssOriginFilterOn is true
      | interval | common |  | int | The client side poll timeout in milliseconds. How long a client will wait between reconnects
      | jsonCommented | common | true | boolean | If true the server will accept JSON wrapped in a comment and will generate JSON wrapped in a comment. This is a defence against Ajax Hijacking.
      | logLevel | common | 1 | int | Logging level. 0=none 1=info 2=debug.
      | maxInterval | common | 30000 | int | The max client side poll timeout in milliseconds. A client will be removed if a connection is not received in this time.
      | multiFrameInterval | common | 1500 | int | The client side poll timeout if multiple connections are detected from the same browser.
      | timeout | common | 240000 | int | The server side poll timeout in milliseconds. This is how long the server will hold a reconnect request before responding.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sessionHeadersEnabled | consumer | false | boolean | Whether to include the server session headers in the Camel message when creating a Camel Message for incoming requests.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | disconnectLocalSession | producer | false | boolean | Whether to disconnect local sessions after publishing a message to its channel. Disconnecting local session is needed as they are not swept by default by CometD and therefore you can run out of memory.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



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

      Here is some examples on How to pass the parameters

      For file (for webapp resources located in the Web Application directory
      --> cometd://localhost:8080?resourceBase=file./webapp +
       For classpath (when by example the web resources are packaged inside
      the webapp folder -->
      cometd://localhost:8080?resourceBase=classpath:webapp

      [[Cometd-Authentication]]
      Authentication
      ^^^^^^^^^^^^^^

      *Available as of Camel 2.8*

      You can configure custom `SecurityPolicy` and `Extension`'s to the
      `CometdComponent` which allows you to use authentication as
      http://cometd.org/documentation/howtos/authentication[documented here]

      [[Cometd-SettingupSSLforCometdComponent]]
      Setting up SSL for Cometd Component
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [[Cometd-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of Camel 2.9, the Cometd component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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. You need to configure SSL
      on the CometdComponent.

      [[Cometd-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);
      -----------------------------------------------------------------------------------------------

      [[Cometd-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:keyManagers>
        </camel:sslContextParameters>...
      ??
        <bean id="cometd" class="org.apache.camel.component.cometd.CometdComponent">
          <property name="sslContextParameters" ref="sslContextParameters"/>
        </bean>
      ...
        <to uri="cometds://127.0.0.1:443/service/test?baseResource=file:./target/test-classes/webapp&timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"/>...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Cometd-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-consul
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: consul
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: consul
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: consul
          spec:
            containers:
            - image: fabric8/connector-consul:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: consul
        syntax: consul:apiEndpoint
        title: Consul
        description: The camel consul component allows you to work with Consul a distributed highly available datacenter-aware service discovery and configuration system.
        label: api,cloud
        deprecated: false
        async: false
        javaType: org.apache.camel.component.consul.ConsulComponent
        groupId: org.apache.camel
        artifactId: camel-consul
        version: 2.18.1
      componentProperties: {}
      properties:
        apiEndpoint:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The API endpoint
        connectTimeoutMillis:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Connect timeout for OkHttpClient
        dc:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The data center
        key:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default key. Can be overridden by CamelConsulKey
        pingInstance:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Configure if the AgentClient should attempt a ping before returning the Consul instance
        readTimeoutMillis:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Read timeout for OkHttpClient
        tags:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set tags. You can separate multiple tags by comma.
        url:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Consul agent URL
        writeTimeoutMillis:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Write timeout for OkHttpClient
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        action:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default action. Can be overridden by CamelConsulAction
        valueAsString:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Default to transform values retrieved from Consul i.e. on KV endpoint to string.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        blockSeconds:
          kind: parameter
          group: watch
          label: consumer,watch
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "10"
          description: The second to wait for a watch event default 10 seconds
        firstIndex:
          kind: parameter
          group: watch
          label: consumer,watch
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: The first index for watch for default 0
        recursive:
          kind: parameter
          group: watch
          label: consumer,watch
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Recursively watch default false
        aclToken:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the ACL token to be used with Consul
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the password to be used for basic authentication
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: SSL configuration using an org.apache.camel.util.jsse.SSLContextParameters instance.
        userName:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the username to be used for basic authentication
    documentation.adoc: |
      [[Consul-ConsulComponent]]
      Consul Component
      ~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18*

      The *Consul* component is a component for integrating your application with Consul.

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

      [source,java]
      -------------------------------------------------
          <dependency>
              <groupId>org.apache.camel</groupId>
              <artifactId>camel-consul</artifactId>
              <version>${camel-version}</version>
          </dependency>
      -------------------------------------------------

      [[Consul-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------
          consul://domain?[options]
      ---------------------------------------

      You can append query options to the URI in the following format:

      ---------------------------------------
          ?option=value&option=value&...
      ---------------------------------------

      [[Consul-Options]]
      Options
      ^^^^^^^




      // component options: START
      The Consul component has no options.
      // component options: END






      // endpoint options: START
      The Consul component supports 22 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | apiEndpoint | common |  | String | *Required* The API endpoint
      | connectTimeoutMillis | common |  | Long | Connect timeout for OkHttpClient
      | dc | common |  | String | The data center
      | key | common |  | String | The default key. Can be overridden by CamelConsulKey
      | pingInstance | common | true | boolean | Configure if the AgentClient should attempt a ping before returning the Consul instance
      | readTimeoutMillis | common |  | Long | Read timeout for OkHttpClient
      | tags | common |  | String | Set tags. You can separate multiple tags by comma.
      | url | common |  | String | The Consul agent URL
      | writeTimeoutMillis | common |  | Long | Write timeout for OkHttpClient
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | action | producer |  | String | The default action. Can be overridden by CamelConsulAction
      | valueAsString | producer | false | boolean | Default to transform values retrieved from Consul i.e. on KV endpoint to string.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | blockSeconds | watch | 10 | Integer | The second to wait for a watch event default 10 seconds
      | firstIndex | watch | 0 | long | The first index for watch for default 0
      | recursive | watch | false | boolean | Recursively watch default false
      | aclToken | security |  | String | Sets the ACL token to be used with Consul
      | password | security |  | String | Sets the password to be used for basic authentication
      | sslContextParameters | security |  | SSLContextParameters | SSL configuration using an org.apache.camel.util.jsse.SSLContextParameters instance.
      | userName | security |  | String | Sets the username to be used for basic authentication
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Consul-Headers]]
      Headers
      ^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description
      |CamelConsulAction|String|The Producer action
      |CamelConsulKey|String|The Key on which the action should applied
      |CamelConsulEventId|String|The event id (consumer only)
      |CamelConsulEventName|String|The event name (consumer only)
      |CamelConsulEventLTime|Long|The event LTime
      |CamelConsulNodeFilter|String|The Node filter
      |CamelConsulTagFilter|String|The tag filter
      |CamelConsulSessionFilter|String|The session filter
      |CamelConsulVersion|int|The data version
      |CamelConsulFlags|Long|Flags associated with a value
      |CamelConsulCreateIndex|Long|The internal index value that represents when the entry was created
      |CamelConsulLockIndex|Long|The number of times this key has successfully been acquired in a lock
      |CamelConsulModifyIndex|Long|The last index that modified this key
      |CamelConsulOptions|Object|Options associated to the request
      |CamelConsulResult|boolean|true if the response has a result
      |CamelConsulSession|String|The session id
      |CamelConsulValueAsString|boolean|To transform values retrieved from Consul i.e. on KV endpoint to string.
      |=======================================================================
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-context
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: context
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: context
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: context
          spec:
            containers:
            - image: fabric8/connector-context:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: context
        syntax: context:contextId:localEndpointUrl
        title: Camel Context
        description: The context component allows to send/receive messages between Camel routes in a black box way.
        label: endpoint
        deprecated: true
        async: false
        javaType: org.apache.camel.component.context.QualifiedContextComponent
        groupId: org.apache.camel
        artifactId: camel-context
        version: 2.18.1
      componentProperties: {}
      properties:
        contextId:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is the ID you used to register the CamelContext into the Registry.
        localEndpointUrl:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Can be a valid Camel URI evaluated within the black box CamelContext. Or it can be a logical name which is mapped to any local endpoints. For example if you locally have endpoints like direct:invoices and seda:purchaseOrders inside a CamelContext of id supplyChain then you can just use the URIs supplyChain:invoices or supplyChain:purchaseOrders to omit the physical endpoint kind and use pure logical URIs.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Context-ContextComponent]]\nContext Component\n~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.7*\n\nThe *context* component allows you to create\
      \ new Camel Components from a\nCamelContext with a number of routes which is\
      \ then treated as a black\nbox, allowing you to refer to the local endpoints\
      \ within the component\nfrom other CamelContexts.\n\nIt is similar to the link:routebox.html[Routebox]\
      \ component in idea,\nthough the Context component tries to be really simple\
      \ for end users;\njust a simple convention over configuration approach to refer\
      \ to local\nendpoints inside the CamelContext Component.\n\nMaven users will\
      \ need to add the following dependency to their `pom.xml`\nfor this component:\n\
      \n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-context</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Context-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n--------------------------------------------------\n\
      context:camelContextId:localEndpointName[?options]\n--------------------------------------------------\n\
      \nOr you can omit the \"context:\" prefix.\n\n[source,java]\n------------------------------------------\n\
      camelContextId:localEndpointName[?options]\n------------------------------------------\n\
      \n\n\n// component options: START\nThe Camel Context component has no options.\n\
      // component options: END\n\n\n\n// endpoint options: START\nThe Camel Context\
      \ component supports 6 endpoint options which are listed below:\n\n{% raw %}\n\
      [width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| contextId | common | \
      \ | String | *Required* Is the ID you used to register the CamelContext into\
      \ the Registry.\n| localEndpointUrl | common |  | String | *Required* Can be\
      \ a valid Camel URI evaluated within the black box CamelContext. Or it can be\
      \ a logical name which is mapped to any local endpoints. For example if you\
      \ locally have endpoints like direct:invoices and seda:purchaseOrders inside\
      \ a CamelContext of id supplyChain then you can just use the URIs supplyChain:invoices\
      \ or supplyChain:purchaseOrders to omit the physical endpoint kind and use pure\
      \ logical URIs.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\nYou can append query options to\
      \ the URI in the following format,\n`?option=value&option=value&...`\n\n[[Context-Example]]\n\
      Example\n^^^^^^^\n\nIn this example we'll create a black box context, then we'll\
      \ use it from\nanother CamelContext.\n\n[[Context-Definingthecontextcomponent]]\n\
      Defining the context component\n++++++++++++++++++++++++++++++\n\nFirst you\
      \ need to create a CamelContext, add some routes in it, start it\nand then register\
      \ the CamelContext into the link:registry.html[Registry]\n(JNDI, Spring, Guice\
      \ or OSGi etc).\n\nThis can be done in the usual Camel way from this\nhttp://svn.apache.org/viewvc/camel/trunk/components/camel-context/src/test/java/org/apache/camel/component/context/JavaDslBlackBoxTest.java?revision=1069442&view=markup[test\n\
      case] (see the createRegistry() method); this example shows Java and\nJNDI being\
      \ used...\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      // lets create our black box as a camel context and a set of routes\nDefaultCamelContext\
      \ blackBox = new DefaultCamelContext(registry);\nblackBox.setName(\"blackBox\"\
      );\nblackBox.addRoutes(new RouteBuilder() {\n    @Override\n    public void\
      \ configure() throws Exception {\n        // receive purchase orders, lets process\
      \ it in some way then send an invoice\n        // to our invoice endpoint\n\
      \        from(\"direct:purchaseOrder\").\n          setHeader(\"received\").constant(\"\
      true\").\n          to(\"direct:invoice\");\n    }\n});\nblackBox.start();\n\
      \nregistry.bind(\"accounts\", blackBox);\n------------------------------------------------------------------------------------\n\
      \nNotice in the above route we are using pure local endpoints (*direct*\nand\
      \ *seda*). Also note we expose this CamelContext using the *accounts*\nID. We\
      \ can do the same thing in Spring via\n\n[source,xml]\n--------------------------------------------------------------------------\n\
      <camelContext id=\"accounts\" xmlns=\"http://camel.apache.org/schema/spring\"\
      >\n  <route> \n    <from uri=\"direct:purchaseOrder\"/>\n    ...\n    <to uri=\"\
      direct:invoice\"/>\n  </route>\n</camelContext>\n--------------------------------------------------------------------------\n\
      \n[[Context-Usingthecontextcomponent]]\nUsing the context component\n+++++++++++++++++++++++++++\n\
      \nThen in another CamelContext we can then refer to this \"accounts black\n\
      box\" by just sending to *accounts:purchaseOrder* and consuming from\n*accounts:invoice*.\n\
      \nIf you prefer to be more verbose and explicit you could use\n*context:accounts:purchaseOrder*\
      \ or even\n*context:accounts:direct://purchaseOrder* if you prefer. But using\n\
      logical endpoint URIs is preferred as it hides the implementation detail\nand\
      \ provides a simple logical naming scheme.\n\nFor example if we wish to then\
      \ expose this accounts black box on some\nmiddleware (outside of the black box)\
      \ we can do things like...\n\n[source,xml]\n--------------------------------------------------------------------------------\n\
      <camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n  <route> \n\
      \    <!-- consume from an ActiveMQ into the black box -->\n    <from uri=\"\
      activemq:Accounts.PurchaseOrders\"/>\n    <to uri=\"accounts:purchaseOrders\"\
      />\n  </route>\n  <route> \n    <!-- lets send invoices from the black box to\
      \ a different ActiveMQ Queue -->\n    <from uri=\"accounts:invoice\"/>\n   \
      \ <to uri=\"activemq:UK.Accounts.Invoices\"/>\n  </route>\n</camelContext>\n\
      --------------------------------------------------------------------------------\n\
      \n[[Context-Namingendpoints]]\nNaming endpoints\n++++++++++++++++\n\nA context\
      \ component instance can have many public input and output\nendpoints that can\
      \ be accessed from outside it's CamelContext. When\nthere are many it is recommended\
      \ that you use logical names for them to\nhide the middleware as shown above.\n\
      \nHowever when there is only one input, output or error/dead letter\nendpoint\
      \ in a component we recommend using the common posix shell names\n*in*, *out*\
      \ and *err*\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-controlbus
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: controlbus
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: controlbus
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: controlbus
          spec:
            containers:
            - image: fabric8/connector-controlbus:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: controlbus
        syntax: controlbus:command:language
        title: Control Bus
        description: The controlbus component provides easy management of Camel applications based on the Control Bus EIP pattern.
        label: core,monitoring
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.controlbus.ControlBusComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        command:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - route
          - language
          deprecated: false
          secret: false
          description: Command can be either route or language
        language:
          kind: path
          group: producer
          type: string
          javaType: org.apache.camel.spi.Language
          enum:
          - bean
          - constant
          - el
          - exchangeProperty
          - file
          - groovy
          - header
          - jsonpath
          - jxpath
          - mvel
          - ognl
          - ref
          - simple
          - spel
          - sql
          - terser
          - tokenize
          - xpath
          - xquery
          - xtokenize
          deprecated: false
          secret: false
          description: Allows you to specify the name of a Language to use for evaluating the message body. If there is any result from the evaluation then the result is put in the message body.
        action:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - start
          - stop
          - suspend
          - resume
          - status
          deprecated: false
          secret: false
          description: 'To denote an action that can be either: start stop or status. To
            either start or stop a route or to get the status of the route as output in
            the message body. You can use suspend and resume from Camel 2.11.1 onwards to
            either suspend or resume a route. And from Camel 2.11.1 onwards you can use
            stats to get performance statics returned in XML format; the routeId option
            can be used to define which route to get the performance stats for if routeId
            is not defined then you get statistics for the entire CamelContext.'
        async:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to execute the control bus task asynchronously. Important:
            If this option is enabled then any result from the task is not set on the Exchange.
            This is only possible if executing tasks synchronously.'
        loggingLevel:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: INFO
          description: Logging level used for logging when task is done or if any exceptions occurred during processing the task.
        routeId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To specify a route by its id. The special keyword current indicates the current route.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[ControlBus-ControlBus]]\nControlBus\n^^^^^^^^^^\n\nThe\
      \ http://www.eaipatterns.com/ControlBus.html[Control Bus] from the\nlink:enterprise-integration-patterns.html[EIP\
      \ patterns] allows for the\nintegration system to be monitored and managed from\
      \ within the\nframework.\n\nimage:http://www.eaipatterns.com/img/ControlBus.gif[image]\n\
      \nUse a Control Bus to manage an enterprise integration system. The\nControl\
      \ Bus uses the same messaging mechanism used by the application\ndata, but uses\
      \ separate channels to transmit data that is relevant to\nthe management of\
      \ components involved in the message flow.\n\nIn Camel you can manage and monitor\
      \ using link:camel-jmx.html[JMX], or\nby using a Java API from the `CamelContext`,\
      \ or from the\n`org.apache.camel.api.management` package, +\n or use the event\
      \ notifier which has an example\nlink:eventnotifier-to-log-details-about-all-sent-exchanges.html[here].\n\
      \nFrom Camel 2.11 onwards we have introduced a new\nlink:controlbus-component.html[ControlBus\
      \ Component] that allows you to\nsend messages to a control bus link:endpoint.html[Endpoint]\
      \ that reacts\naccordingly.\n\n[[ControlBus-ControlBusComponent]]\nControlBus\
      \ Component\n~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.11*\n\nThe *controlbus:*\
      \ component provides easy management of Camel\napplications based on the link:controlbus.html[Control\
      \ Bus] EIP\npattern. \nFor example, by sending a message to an link:endpoint.html[Endpoint]\n\
      you can control the lifecycle of routes, or gather performance\nstatistics.\n\
      \n[source,java]\n----------------------------\ncontrolbus:command[?options]\n\
      ----------------------------\n\nWhere *command* can be any string to identify\
      \ which type of command to\nuse.\n\n[[ControlBus-Commands]]\nCommands\n^^^^^^^^\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Command |Description\n\n|`route` |To control routes using the `routeId` and\
      \ `action` parameter.\n\n|`language` |Allows you to specify a link:language.html[Language]\
      \ to use for\nevaluating the message body. If there is any result from the evaluation,\n\
      then the result is put in the message body.\n|=======================================================================\n\
      \n[[ControlBus-Options]]\nOptions\n^^^^^^^\n\n\n// component options: START\n\
      The Control Bus component has no options.\n// component options: END\n\n\n\n\
      // endpoint options: START\nThe Control Bus component supports 7 endpoint options\
      \ which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| command | producer | \
      \ | String | *Required* Command can be either route or language\n| language\
      \ | producer |  | Language | Allows you to specify the name of a Language to\
      \ use for evaluating the message body. If there is any result from the evaluation\
      \ then the result is put in the message body.\n| action | producer |  | String\
      \ | To denote an action that can be either: start stop or status. To either\
      \ start or stop a route or to get the status of the route as output in the message\
      \ body. You can use suspend and resume from Camel 2.11.1 onwards to either suspend\
      \ or resume a route. And from Camel 2.11.1 onwards you can use stats to get\
      \ performance statics returned in XML format; the routeId option can be used\
      \ to define which route to get the performance stats for if routeId is not defined\
      \ then you get statistics for the entire CamelContext.\n| async | producer |\
      \ false | boolean | Whether to execute the control bus task asynchronously.\
      \ Important: If this option is enabled then any result from the task is not\
      \ set on the Exchange. This is only possible if executing tasks synchronously.\n\
      | loggingLevel | producer | INFO | LoggingLevel | Logging level used for logging\
      \ when task is done or if any exceptions occurred during processing the task.\n\
      | routeId | producer |  | String | To specify a route by its id. The special\
      \ keyword current indicates the current route.\n| synchronous | advanced | false\
      \ | boolean | Sets whether synchronous processing should be strictly used or\
      \ Camel is allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\nYou can append query options to\
      \ the URI in the following format,\n`?option=value&option=value&...`\n\n[[ControlBus-Samples]]\n\
      Samples\n^^^^^^^\n\n[[ControlBus-Usingroutecommand]]\nUsing route command\n\
      +++++++++++++++++++\n\nThe route command allows you to do common tasks on a\
      \ given route very\neasily, for example to start a route, you can send an empty\
      \ message to\nthis endpoint:\n\n[source,java]\n---------------------------------------------------------------------\n\
      template.sendBody(\"controlbus:route?routeId=foo&action=start\", null);\n---------------------------------------------------------------------\n\
      \nTo get the status of the route, you can do:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------\n\
      String status = template.requestBody(\"controlbus:route?routeId=foo&action=status\"\
      , null, String.class);\n-------------------------------------------------------------------------------------------------------\n\
      \n[[ControlBus-Gettingperformancestatistics]]\nGetting performance statistics\n\
      \n*Available as of Camel 2.11.1*\n\nThis requires JMX to be enabled (is by default)\
      \ then you can get the\nperformance statics per route, or for the\nlink:camelcontext.html[CamelContext].\
      \ For example to get the statics for\na route named foo, we can do:\n\n[source,java]\n\
      ---------------------------------------------------------------------------------------------------\n\
      String xml = template.requestBody(\"controlbus:route?routeId=foo&action=stats\"\
      , null, String.class);\n---------------------------------------------------------------------------------------------------\n\
      \nThe returned statics is in XML format. Its the same data you can get\nfrom\
      \ JMX with the `dumpRouteStatsAsXml` operation on the\n`ManagedRouteMBean`.\n\
      \nTo get statics for the entire link:camelcontext.html[CamelContext] you\njust\
      \ omit the routeId parameter as shown below:\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      String xml = template.requestBody(\"controlbus:route?action=stats\", null, String.class);\n\
      ---------------------------------------------------------------------------------------\n\
      \n[[ControlBus-Usinglanguage]]\nUsing link:simple.html[Simple] language\n+++++++++++++++++++++++++++++++++++++++\n\
      \nYou can use the link:simple.html[Simple] language with the control bus,\n\
      for example to stop a specific route, you can send a message to the\n`\"controlbus:language:simple\"\
      ` endpoint containing the following\nmessage:\n\n[source,java]\n----------------------------------------------------------------------------------------\n\
      template.sendBody(\"controlbus:language:simple\", \"${camelContext.stopRoute('myRoute')}\"\
      );\n----------------------------------------------------------------------------------------\n\
      \nAs this is a void operation, no result is returned. However, if you want\n\
      the route status you can do:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------\n\
      String status = template.requestBody(\"controlbus:language:simple\", \"${camelContext.getRouteStatus('myRoute')}\"\
      , String.class);\n------------------------------------------------------------------------------------------------------------------------------\n\
      \n*Notice:* its easier to use the `route` command to control lifecycle of\n\
      routes. The `language` command allows you to execute a language script\nthat\
      \ has stronger powers such as link:groovy.html[Groovy] or to some\nextend the\
      \ link:simple.html[Simple] language.\n\nFor example to shutdown Camel itself\
      \ you can do:\n\n[source,java]\n-------------------------------------------------------------------------------------\n\
      template.sendBody(\"controlbus:language:simple?async=true\", \"${camelContext.stop()}\"\
      );\n-------------------------------------------------------------------------------------\n\
      \nNotice we use `async=true` to stop Camel asynchronously as otherwise we\n\
      would be trying to stop Camel while it was in-flight processing the\nmessage\
      \ we sent to the control bus component.\n\nTIP:You can also use other languages\
      \ such as link:groovy.html[Groovy], etc.\n\n[[ControlBus-SeeAlso]]\nSee Also\n\
      ^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n* link:controlbus.html[ControlBus] EIP\n* link:jmx.html[JMX] Component\n*\
      \ Using link:camel-jmx.html[JMX] with Camel\n\n[[ControlBus-UsingThisPattern]]\n\
      Using This Pattern\n++++++++++++++++++\n\nIf you would like to use this EIP\
      \ Pattern then please read the\nlink:getting-started.html[Getting Started],\
      \ you may also find the\nlink:architecture.html[Architecture] useful particularly\
      \ the description\nof link:endpoint.html[Endpoint] and link:uris.html[URIs].\
      \ Then you could\ntry out some of the link:examples.html[Examples] first before\
      \ trying\nthis pattern out.\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-couchdb
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: couchdb
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: couchdb
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: couchdb
          spec:
            containers:
            - image: fabric8/connector-couchdb:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: couchdb
        syntax: couchdb:protocol:hostname:port/database
        title: CouchDB
        description: The couchdb component is used for integrate with CouchDB databases.
        label: database,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.couchdb.CouchDbComponent
        groupId: org.apache.camel
        artifactId: camel-couchdb
        version: 2.18.1
      componentProperties: {}
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - http
          - https
          deprecated: false
          secret: false
          description: The protocol to use for communicating with the database.
        hostname:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the running couchdb instance
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5984"
          description: Port number for the running couchdb instance
        database:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the database to use
        createDatabase:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Creates the database if it does not already exist
        deletes:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Document deletes are published as events
        heartbeat:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: How often to send an empty message to keep socket alive in millis
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for authenticated databases
        style:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - all_docs
          - main_only
          deprecated: false
          secret: false
          defaultValue: main_only
          description: Specifies how many revisions are returned in the changes array. The default main_only will only return the current winning revision; all_docs will return all leaf revisions (including conflicts and deleted former conflicts.)
        updates:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Document inserts/updates are published as events
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username in case of authenticated databases
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[CouchDB-CamelCouchDBcomponent]]\nCamel CouchDB component\n\
      ~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.11*\n\nThe *couchdb:* component\
      \ allows you to treat\nhttp://couchdb.apache.org/[CouchDB] instances as a producer\
      \ or consumer\nof messages. Using the lightweight LightCouch API, this camel\
      \ component\nhas the following features:\n\n* As a consumer, monitors couch\
      \ changesets for inserts, updates and\ndeletes and publishes these as messages\
      \ into camel routes.\n* As a producer, can save, update and from Camel 2.18\
      \ delete (by using CouchDbMethod with DELETE value) \ndocuments into couch.\n\
      * Can support as many endpoints as required, eg for multiple databases\nacross\
      \ multiple instances.\n* Ability to have events trigger for only deletes, only\
      \ inserts/updates\nor all (default).\n* Headers set for sequenceId, document\
      \ revision, document id, and HTTP\nmethod type.\n\nMaven users will need to\
      \ add the following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-couchdb</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[CouchDB-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------------------------\n\
      couchdb:http://hostname[:port]/database?[options]\n-------------------------------------------------\n\
      \nWhere *hostname* is the hostname of the running couchdb instance. Port\nis\
      \ optional and if not specified then defaults to 5984.\n\n[[CouchDB-Options]]\n\
      Options\n^^^^^^^\n\n// component options: START\nThe CouchDB component has no\
      \ options.\n// component options: END\n\n// endpoint options: START\nThe CouchDB\
      \ component supports 15 endpoint options which are listed below:\n\n{% raw %}\n\
      [width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* The protocol to use for communicating with the database.\n\
      | hostname | common |  | String | *Required* Hostname of the running couchdb\
      \ instance\n| port | common | 5984 | int | Port number for the running couchdb\
      \ instance\n| database | common |  | String | *Required* Name of the database\
      \ to use\n| createDatabase | common | false | boolean | Creates the database\
      \ if it does not already exist\n| deletes | common | true | boolean | Document\
      \ deletes are published as events\n| heartbeat | common | 30000 | long | How\
      \ often to send an empty message to keep socket alive in millis\n| password\
      \ | common |  | String | Password for authenticated databases\n| style | common\
      \ | main_only | String | Specifies how many revisions are returned in the changes\
      \ array. The default main_only will only return the current winning revision;\
      \ all_docs will return all leaf revisions (including conflicts and deleted former\
      \ conflicts.)\n| updates | common | true | boolean | Document inserts/updates\
      \ are published as events\n| username | common |  | String | Username in case\
      \ of authenticated databases\n| bridgeErrorHandler | consumer | false | boolean\
      \ | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n[[CouchDB-Headers]]\nHeaders\n^^^^^^^\n\
      \nThe following headers are set on exchanges during message transport.\n\n[width=\"\
      100%\",cols=\"20%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Property |Value\n\n|`CouchDbDatabase` |the database the message came from\n\
      \n|`CouchDbSeq` |the couchdb changeset sequence number of the update / delete\
      \ message\n\n|`CouchDbId` |the couchdb document id\n\n|`CouchDbRev` |the couchdb\
      \ document revision\n\n|`CouchDbMethod` |the method (delete / update)\n|=======================================================================\n\
      \nHeaders are set by the consumer once the message is received. The\nproducer\
      \ will also set the headers for downstream processors once the\ninsert/update\
      \ has taken place. Any headers set prior to the producer are\nignored. That\
      \ means for example, if you set CouchDbId as a header, it\nwill not be used\
      \ as the id for insertion, the id of the document will\nstill be used.\n\n[[CouchDB-MessageBody]]\n\
      Message Body\n^^^^^^^^^^^^\n\nThe component will use the message body as the\
      \ document to be inserted.\nIf the body is an instance of String, then it will\
      \ be marshalled into a\nGSON object before insert. This means that the string\
      \ must be valid JSON\nor the insert / update will fail. If the body is an instance\
      \ of a\ncom.google.gson.JsonElement then it will be inserted as is. Otherwise\n\
      the producer will throw an exception of unsupported body type.\n\n[[CouchDB-Samples]]\n\
      Samples\n^^^^^^^\n\nFor example if you wish to consume all inserts, updates\
      \ and deletes from\na CouchDB instance running locally, on port 9999 then you\
      \ could use the\nfollowing:\n\n[source,java]\n-------------------------------------------------------------\n\
      from(\"couchdb:http://localhost:9999\").process(someProcessor);\n-------------------------------------------------------------\n\
      \nIf you were only interested in deletes, then you could use the following\n\
      \n[source,java]\n---------------------------------------------------------------------------\n\
      from(\"couchdb:http://localhost:9999?updates=false\").process(someProcessor);\n\
      ---------------------------------------------------------------------------\n\
      \nIf you wanted to insert a message as a document, then the body of the\nexchange\
      \ is used\n\n[source,java]\n----------------------------------------------------------------------------------------\n\
      from(\"someProducingEndpoint\").process(someProcessor).to(\"couchdb:http://localhost:9999\"\
      )\n----------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cql
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cql
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cql
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cql
          spec:
            containers:
            - image: fabric8/connector-cql:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cql
        syntax: cql:beanRef:hosts:port/keyspace
        title: Cassandra CQL
        description: The cql component aims at integrating Cassandra 2.0 using the CQL3 API (not the Thrift API).
        label: database,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.cassandra.CassandraComponent
        groupId: org.apache.camel
        artifactId: camel-cassandraql
        version: 2.18.1
      componentProperties: {}
      properties:
        beanRef:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: beanRef is defined using bean:id
        hosts:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname(s) cassansdra server(s). Multiple hosts can be separated by comma.
        port:
          kind: path
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Port number of cassansdra server(s)
        keyspace:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Keyspace to use
        cluster:
          kind: parameter
          group: common
          type: object
          javaType: com.datastax.driver.core.Cluster
          deprecated: false
          secret: false
          description: To use the Cluster instance (you would normally not use this option)
        clusterName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Cluster name
        consistencyLevel:
          kind: parameter
          group: common
          type: string
          javaType: com.datastax.driver.core.ConsistencyLevel
          enum:
          - ANY
          - ONE
          - TWO
          - THREE
          - QUORUM
          - ALL
          - LOCAL_QUORUM
          - EACH_QUORUM
          - SERIAL
          - LOCAL_SERIAL
          - LOCAL_ONE
          deprecated: false
          secret: false
          description: Consistency level to use
        cql:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: CQL query to perform. Can be overridden with the message header with key CamelCqlQuery.
        loadBalancingPolicy:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use a specific LoadBalancingPolicy
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for session authentication
        prepareStatements:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use PreparedStatements or regular Statements
        resultSetConversionStrategy:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use a custom class that implements logic for converting ResultSet into message body ALL ONE LIMIT_10 LIMIT_100...
        session:
          kind: parameter
          group: common
          type: object
          javaType: com.datastax.driver.core.Session
          deprecated: false
          secret: false
          description: To use the Session instance (you would normally not use this option)
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for session authentication
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Cassandra-CamelCassandraComponent]]
      Camel Cassandra Component
      -------------------------

      *Available as of Camel 2.15*

      http://cassandra.apache.org[Apache Cassandra] is an open source NoSQL
      database designed to handle large amounts on commodity hardware. Like
      Amazon's DynamoDB, Cassandra has a peer-to-peer and master-less
      architecture to avoid single point of failure and garanty high
      availability. Like Google's BigTable, Cassandra data is structured using
      column families which can be accessed through the Thrift RPC API or a
      SQL-like API called CQL.

      This component aims at integrating Cassandra 2.0+ using the CQL3 API
      (not the Thrift API). It's based on
      https://github.com/datastax/java-driver[Cassandra Java Driver] provided
      by DataStax.

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

      *pom.xml*

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

      [[Cassandra-URIformat]]
      URI format
      ~~~~~~~~~~

      The endpoint can initiate the Cassandra connection or use an existing
      one.

      [cols="<,<",options="header",]
      |======================================================================
      |URI |Description
      |`cql:localhost/keyspace` |Single host, default port, usual for testing
      |`cql:host1,host2/keyspace` |Multi host, default port
      |`cql:host1,host2:9042/keyspace` |Multi host, custom port
      |`cql:host1,host2` |Default port and keyspace
      |`cql:bean:sessionRef` |Provided Session reference
      |`cql:bean:clusterRef/keyspace` |Provided Cluster reference
      |======================================================================

      To fine tune the Cassandra connection (SSL options, pooling options,
      load balancing policy, retry policy, reconnection policy...), create
      your own Cluster instance and give it to the Camel endpoint.

      [[Cassandra-Options]]
      Cassandra Options
      ~~~~~~~~~~~~~~~~~


      // component options: START
      The Cassandra CQL component has no options.
      // component options: END



      // endpoint options: START
      The Cassandra CQL component supports 18 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | beanRef | common |  | String | beanRef is defined using bean:id
      | hosts | common |  | String | Hostname(s) cassansdra server(s). Multiple hosts can be separated by comma.
      | port | common |  | Integer | Port number of cassansdra server(s)
      | keyspace | common |  | String | Keyspace to use
      | cluster | common |  | Cluster | To use the Cluster instance (you would normally not use this option)
      | clusterName | common |  | String | Cluster name
      | consistencyLevel | common |  | ConsistencyLevel | Consistency level to use
      | cql | common |  | String | CQL query to perform. Can be overridden with the message header with key CamelCqlQuery.
      | loadBalancingPolicy | common |  | String | To use a specific LoadBalancingPolicy
      | password | common |  | String | Password for session authentication
      | prepareStatements | common | true | boolean | Whether to use PreparedStatements or regular Statements
      | resultSetConversionStrategy | common |  | String | To use a custom class that implements logic for converting ResultSet into message body ALL ONE LIMIT_10 LIMIT_100...
      | session | common |  | Session | To use the Session instance (you would normally not use this option)
      | username | common |  | String | Username for session authentication
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Cassandra-Messages]]
      Messages
      ~~~~~~~~

      [[Cassandra-IncomingMessage]]
      Incoming Message
      ^^^^^^^^^^^^^^^^

      The Camel Cassandra endpoint expects a bunch of simple objects (`Object`
      or `Object[]` or `Collection<Object>`) which will be bound to the CQL
      statement as query parameters. If message body is null or empty, then??
      CQL query will be executed without binding parameters.

      Headers:

      * `CamelCqlQuery` (optional, `String` or `RegularStatement`): CQL query
      either as a plain String or built using the `QueryBuilder`.

      [[Cassandra-OutgoingMessage]]
      Outgoing Message
      ^^^^^^^^^^^^^^^^

      The Camel Cassandra endpoint produces one or many a Cassandra Row
      objects depending on the??`resultSetConversionStrategy`:

      ??

      * `List<Row>` if `resultSetConversionStrategy` is `ALL` or
      `LIMIT_[0-9]+`
      * Single` Row` if `resultSetConversionStrategy` is `ONE`
      * Anything else, if `resultSetConversionStrategy` is a custom
      implementation of the `ResultSetConversionStrategy`

      [[Cassandra-Repositories]]
      Repositories
      ~~~~~~~~~~~~

      Cassandra can be used to store message keys or messages for the
      idempotent and aggregation EIP.

      Cassandra might not be the best tool for queuing use cases yet, read
      http://www.datastax.com/dev/blog/cassandra-anti-patterns-queues-and-queue-like-datasets[Cassandra
      anti-patterns queues and queue like datasets]. It's advised to use
      LeveledCompaction and a small GC grace setting for these tables to allow
      tombstoned rows to be removed quickly.

      [[Cassandra-Idempotentrepository]]
      Idempotent repository
      ^^^^^^^^^^^^^^^^^^^^^

      The `NamedCassandraIdempotentRepository` stores messages keys in a
      Cassandra table like this:

      *CAMEL_IDEMPOTENT.cql*

      [source,sql]
      ---------------------------------------------------------
      CREATE TABLE CAMEL_IDEMPOTENT (
        NAME varchar,   -- Repository name
        KEY varchar,    -- Message key
        PRIMARY KEY (NAME, KEY)
      ) WITH compaction = {'class':'LeveledCompactionStrategy'}
        AND gc_grace_seconds = 86400;
      ---------------------------------------------------------

      This repository implementation uses lightweight transactions (also known
      as Compare and Set) and requires Cassandra 2.0.7+.

      Alternatively, the `CassandraIdempotentRepository` does not have a
      `NAME` column and can be extended to use a different data model.

      [width="100%",cols="<34%,<33%,<33%",options="header",]
      |=======================================================================
      |Option |Default |Description

      |`table` |`CAMEL_IDEMPOTENT` |Table name

      |`pkColumns` |`NAME`,` KEY` |Primary key columns

      |`name` |  | Repository name, value used for `NAME` column

      |`ttl` |   | Key time to live

      |`writeConsistencyLevel` |  | Consistency level used to insert/delete key: `ANY`, `ONE`, `TWO`,
      `QUORUM`, `LOCAL_QUORUM`???

      |`readConsistencyLevel` |  | Consistency level used to read/check key: `ONE`, `TWO`, `QUORUM`,
      `LOCAL_QUORUM`???
      |=======================================================================

      [[Cassandra-Aggregationrepository]]
      Aggregation repository
      ^^^^^^^^^^^^^^^^^^^^^^

      The `NamedCassandraAggregationRepository` stores exchanges by
      correlation key in a Cassandra table like this:

      *CAMEL_AGGREGATION.cql*

      [source,sql]
      ---------------------------------------------------------
      CREATE TABLE CAMEL_AGGREGATION (
        NAME varchar,        -- Repository name
        KEY varchar,         -- Correlation id
        EXCHANGE_ID varchar, -- Exchange id
        EXCHANGE blob,       -- Serialized exchange
        PRIMARY KEY (NAME, KEY)
      ) WITH compaction = {'class':'LeveledCompactionStrategy'}
        AND gc_grace_seconds = 86400;
      ---------------------------------------------------------

      Alternatively, the `CassandraAggregationRepository` does not have a
      `NAME` column and can be extended to use a different data model.

      [width="100%",cols="<34%,<33%,<33%",options="header",]
      |=======================================================================
      |Option |Default |Description

      |`table` |`CAMEL_AGGREGATION` |Table name

      |`pkColumns` |`NAME`,`KEY` |Primary key columns

      |`exchangeIdColumn` |`EXCHANGE_ID` |Exchange Id column

      |`exchangeColumn` |`EXCHANGE` |Exchange content column

      |`name` |  | Repository name, value used for `NAME` column

      |`ttl` |  | Exchange time to live

      |`writeConsistencyLevel` |  | Consistency level used to insert/delete exchange: `ANY`, `ONE`, `TWO`,
      `QUORUM`, `LOCAL_QUORUM`???

      |`readConsistencyLevel` |  | Consistency level used to read/check exchange: `ONE`, `TWO`, `QUORUM`,
      `LOCAL_QUORUM`???
      |=======================================================================
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-crypto
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: crypto
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: crypto
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: crypto
          spec:
            containers:
            - image: fabric8/connector-crypto:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: crypto
        syntax: crypto:cryptoOperation:name
        title: Crypto (JCE)
        description: The crypto component is used for signing and verifying exchanges using the Signature Service of the Java Cryptographic Extension (JCE).
        label: security,transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.crypto.DigitalSignatureComponent
        groupId: org.apache.camel
        artifactId: camel-crypto
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.crypto.DigitalSignatureConfiguration
          deprecated: false
          secret: false
          description: To use the shared DigitalSignatureConfiguration as configuration
      properties:
        cryptoOperation:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.crypto.CryptoOperation
          enum:
          - sign
          - verify
          deprecated: false
          secret: false
          description: Set the Crypto operation from that supplied after the crypto scheme in the endpoint uri e.g. crypto:sign sets sign as the operation.
        name:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The logical name of this operation.
        algorithm:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: SHA1WithDSA
          description: Sets the JCE name of the Algorithm that should be used for the signer.
        alias:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the alias used to query the KeyStore for keys and link java.security.cert.Certificate Certificates to be used in signing and verifying exchanges. This value can be provided at runtime via the message header link org.apache.camel.component.crypto.DigitalSignatureConstantsKEYSTORE_ALIAS
        certificateName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the reference name for a PrivateKey that can be fond in the registry.
        keystore:
          kind: parameter
          group: producer
          type: object
          javaType: java.security.KeyStore
          deprecated: false
          secret: false
          description: Sets the KeyStore that can contain keys and Certficates for use in signing and verifying exchanges. A KeyStore is typically used with an alias either one supplied in the Route definition or dynamically via the message header CamelSignatureKeyStoreAlias. If no alias is supplied and there is only a single entry in the Keystore then this single entry will be used.
        keystoreName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the reference name for a Keystore that can be fond in the registry.
        privateKey:
          kind: parameter
          group: producer
          type: object
          javaType: java.security.PrivateKey
          deprecated: false
          secret: true
          description: Set the PrivateKey that should be used to sign the exchange
        privateKeyName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the reference name for a PrivateKey that can be fond in the registry.
        provider:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the id of the security provider that provides the configured Signature algorithm.
        publicKeyName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: references that should be resolved when the context changes
        secureRandomName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the reference name for a SecureRandom that can be fond in the registry.
        signatureHeaderName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the name of the message header that should be used to store the base64 encoded signature. This defaults to 'CamelDigitalSignature'
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2048"
          description: Set the size of the buffer used to read in the Exchange payload data.
        certificate:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.security.cert.Certificate
          deprecated: false
          secret: false
          description: Set the Certificate that should be used to verify the signature in the exchange based on its payload.
        clearHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Determines if the Signature specific headers be cleared after signing and verification. Defaults to true and should only be made otherwise at your extreme peril as vital private information such as Keys and passwords may escape if unset.
        keyStoreParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.util.jsse.KeyStoreParameters
          deprecated: false
          secret: false
          description: Sets the KeyStore that can contain keys and Certficates for use in signing and verifying exchanges based on the given KeyStoreParameters. A KeyStore is typically used with an alias either one supplied in the Route definition or dynamically via the message header CamelSignatureKeyStoreAlias. If no alias is supplied and there is only a single entry in the Keystore then this single entry will be used.
        publicKey:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.security.PublicKey
          deprecated: false
          secret: false
          description: Set the PublicKey that should be used to verify the signature in the exchange.
        secureRandom:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.security.SecureRandom
          deprecated: false
          secret: true
          description: Set the SecureRandom used to initialize the Signature service
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the password used to access an aliased PrivateKey in the KeyStore.
    documentation.adoc: "[[Crypto-Crypto]]\nCrypto\n~~~~~~\n\n*Available as of Camel\
      \ 2.3* \n*PGP Available as of Camel 2.9*\n\nThe Crypto link:data-format.html[Data\
      \ Format] integrates the Java\nCryptographic Extension into Camel, allowing\
      \ simple and flexible\nencryption and decryption of messages using Camel's familiar\
      \ marshall\nand unmarshal formatting mechanism. It assumes marshalling to mean\n\
      encryption to cyphertext and unmarshalling to mean decryption back to\nthe original\
      \ plaintext. This data format implements only symmetric\n(shared-key) encryption\
      \ and decyption.\n\n[[Crypto-Options]]\nOptions\n^^^^^^^\n\n// component options:\
      \ START\nThe Crypto (JCE) component supports 1 options which are listed below.\n\
      \n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | DigitalSignatureConfiguration\
      \ | To use the shared DigitalSignatureConfiguration as configuration\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n// endpoint options: START\nThe Crypto\
      \ (JCE) component supports 21 endpoint options which are listed below:\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| cryptoOperation | producer\
      \ |  | CryptoOperation | *Required* Set the Crypto operation from that supplied\
      \ after the crypto scheme in the endpoint uri e.g. crypto:sign sets sign as\
      \ the operation.\n| name | producer |  | String | *Required* The logical name\
      \ of this operation.\n| algorithm | producer | SHA1WithDSA | String | Sets the\
      \ JCE name of the Algorithm that should be used for the signer.\n| alias | producer\
      \ |  | String | Sets the alias used to query the KeyStore for keys and link\
      \ java.security.cert.Certificate Certificates to be used in signing and verifying\
      \ exchanges. This value can be provided at runtime via the message header link\
      \ org.apache.camel.component.crypto.DigitalSignatureConstantsKEYSTORE_ALIAS\n\
      | certificateName | producer |  | String | Sets the reference name for a PrivateKey\
      \ that can be fond in the registry.\n| keystore | producer |  | KeyStore | Sets\
      \ the KeyStore that can contain keys and Certficates for use in signing and\
      \ verifying exchanges. A KeyStore is typically used with an alias either one\
      \ supplied in the Route definition or dynamically via the message header CamelSignatureKeyStoreAlias.\
      \ If no alias is supplied and there is only a single entry in the Keystore then\
      \ this single entry will be used.\n| keystoreName | producer |  | String | Sets\
      \ the reference name for a Keystore that can be fond in the registry.\n| privateKey\
      \ | producer |  | PrivateKey | Set the PrivateKey that should be used to sign\
      \ the exchange\n| privateKeyName | producer |  | String | Sets the reference\
      \ name for a PrivateKey that can be fond in the registry.\n| provider | producer\
      \ |  | String | Set the id of the security provider that provides the configured\
      \ Signature algorithm.\n| publicKeyName | producer |  | String | references\
      \ that should be resolved when the context changes\n| secureRandomName | producer\
      \ |  | String | Sets the reference name for a SecureRandom that can be fond\
      \ in the registry.\n| signatureHeaderName | producer |  | String | Set the name\
      \ of the message header that should be used to store the base64 encoded signature.\
      \ This defaults to 'CamelDigitalSignature'\n| bufferSize | advanced | 2048 |\
      \ Integer | Set the size of the buffer used to read in the Exchange payload\
      \ data.\n| certificate | advanced |  | Certificate | Set the Certificate that\
      \ should be used to verify the signature in the exchange based on its payload.\n\
      | clearHeaders | advanced | true | boolean | Determines if the Signature specific\
      \ headers be cleared after signing and verification. Defaults to true and should\
      \ only be made otherwise at your extreme peril as vital private information\
      \ such as Keys and passwords may escape if unset.\n| keyStoreParameters | advanced\
      \ |  | KeyStoreParameters | Sets the KeyStore that can contain keys and Certficates\
      \ for use in signing and verifying exchanges based on the given KeyStoreParameters.\
      \ A KeyStore is typically used with an alias either one supplied in the Route\
      \ definition or dynamically via the message header CamelSignatureKeyStoreAlias.\
      \ If no alias is supplied and there is only a single entry in the Keystore then\
      \ this single entry will be used.\n| publicKey | advanced |  | PublicKey | Set\
      \ the PublicKey that should be used to verify the signature in the exchange.\n\
      | secureRandom | advanced |  | SecureRandom | Set the SecureRandom used to initialize\
      \ the Signature service\n| synchronous | advanced | false | boolean | Sets whether\
      \ synchronous processing should be strictly used or Camel is allowed to use\
      \ asynchronous processing (if supported).\n| password | security |  | String\
      \ | Sets the password used to access an aliased PrivateKey in the KeyStore.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n[[Crypto-BasicUsage]]\nBasic Usage\n\
      ^^^^^^^^^^^\n\nAt its most basic all that is required to encrypt/decrypt an\
      \ exchange is\na shared secret key. If one or more instances of the Crypto data\
      \ format\nare configured with this key the format can be used to encrypt the\n\
      payload in one route (or part of one) and decrypted in another. For\nexample,\
      \ using the Java DSL as follows:\n\nIn Spring the dataformat is configured first\
      \ and then used in routes\n\n[source,xml]\n-----------------------------------------------------------------------\n\
      <camelContext id=\"camel\" xmlns=\"http://camel.apache.org/schema/spring\">\n\
      \  <dataFormats>\n    <crypto id=\"basic\" algorithm=\"DES\" keyRef=\"desKey\"\
      \ />\n  </dataFormats>\n    ...\n  <route>\n    <from uri=\"direct:basic-encryption\"\
      \ />\n    <marshal ref=\"basic\" />\n    <to uri=\"mock:encrypted\" />\n   \
      \ <unmarshal ref=\"basic\" />\n    <to uri=\"mock:unencrypted\" />\n  </route>\n\
      </camelContext>\n-----------------------------------------------------------------------\n\
      \n[[Crypto-SpecifyingtheEncryptionAlgorithm]]\nSpecifying the Encryption Algorithm\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nChanging the algorithm is a matter of\
      \ supplying the JCE algorithm name.\nIf you change the algorithm you will need\
      \ to use a compatible key.\n\nA list of the available algorithms in Java 7 is\
      \ available via the\nhttp://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html[Java\n\
      Cryptography Architecture Standard Algorithm Name Documentation].\n\n[[Crypto-SpecifyinganInitializationVector]]\n\
      Specifying an Initialization Vector\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\
      Some crypto algorithms, particularly block algorithms, require\nconfiguration\
      \ with an initial block of data known as an Initialization\nVector. In the JCE\
      \ this is passed as an AlgorithmParameterSpec when the\nCipher is initialized.\
      \ To use such a vector with the CryptoDataFormat\nyou can configure it with\
      \ a byte[] containing the required data e.g.\n\nor with spring, suppling a reference\
      \ to a byte[]\n\nThe same vector is required in both the encryption and decryption\n\
      phases. As it is not necessary to keep the IV a secret, the DataFormat\nallows\
      \ for it to be inlined into the encrypted data and subsequently\nread out in\
      \ the decryption phase to initialize the Cipher. To inline the\nIV set the /oinline\
      \ flag.\n\nor with spring.\n\nFor more information of the use of Initialization\
      \ Vectors, consult\n\n*\nhttp://en.wikipedia.org/wiki/Initialization_vector[http://en.wikipedia.org/wiki/Initialization_vector]\n\
      *\nhttp://www.herongyang.com/Cryptography/[http://www.herongyang.com/Cryptography/]\n\
      *\nhttp://en.wikipedia.org/wiki/Block_cipher_modes_of_operation[http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation]\n\
      \n[[Crypto-HashedMessageAuthenticationCodes(HMAC)]]\nHashed Message Authentication\
      \ Codes (HMAC)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTo avoid attacks\
      \ against the encrypted data while it is in transit the\nCryptoDataFormat can\
      \ also calculate a Message Authentication Code for\nthe encrypted exchange contents\
      \ based on a configurable MAC algorithm.\nThe calculated HMAC is appended to\
      \ the stream after encryption. It is\nseparated from the stream in the decryption\
      \ phase. The MAC is\nrecalculated and verified against the transmitted version\
      \ to insure\nnothing was tampered with in transit.For more information on Message\n\
      Authentication Codes see\nhttp://en.wikipedia.org/wiki/HMAC[http://en.wikipedia.org/wiki/HMAC]\n\
      \nor with spring.\n\nBy default the HMAC is calculated using the HmacSHA1 mac\
      \ algorithm\nthough this can be easily changed by supplying a different algorithm\n\
      name. See\nhttps://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=here&linkCreation=true&fromPageId=17268915[here]\n\
      for how to check what algorithms are available through the configured\nsecurity\
      \ providers\n\nor with spring.\n\n[[Crypto-SupplyingKeysDynamically]]\nSupplying\
      \ Keys Dynamically\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen using a Recipient list\
      \ or similar EIP the recipient of an exchange\ncan vary dynamically. Using the\
      \ same key across all recipients may\nneither be feasible or desirable. It would\
      \ be useful to be able to\nspecify keys dynamically on a per exchange basis.\
      \ The exchange could\nthen be dynamically enriched with the key of its target\
      \ recipient before\nbeing processed by the data format. To facilitate this the\
      \ DataFormat\nallow for keys to be supplied dynamically via the message headers\
      \ below\n\n* `CryptoDataFormat.KEY` `\"CamelCryptoKey\"`\n\nor with spring.\n\
      \n[[Crypto-PGPMessage]]\nPGP Message\n^^^^^^^^^^^\n\nThe PGP Data Formater can\
      \ create and decrypt/verify PGP Messages of the\nfollowing PGP packet structure\
      \ (entries in brackets are optional and\nellipses indicate repetition, comma\
      \ represents ??sequential composition,\nand vertical bar separates alternatives):\n\
      \n?? ?? Public Key Encrypted Session Key ..., Symmetrically Encrypted Data |\n\
      Sym. Encrypted and Integrity Protected Data, (Compressed Data,) (One\nPass Signature\
      \ ...,)??Literal Data, (Signature ...,)\n\n*Since Camel 2.16*.*0* the Compressed\
      \ Data packet is optional, before it\nwas mandatory.\n\n??\n\n[[Crypto-PGPDataFormatOptions]]\n\
      PGPDataFormat Options\n^^^^^^^^^^^^^^^^^^^^^\n[width=\"70%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Default |Description\n\n|`keyUserid` |`String` |`null` |The user\
      \ ID of the key in the PGP keyring used during encryption. See\nalso option\
      \ `keyUserids`. Can also be only a part of a user ID. For\nexample, if the user\
      \ ID is \"Test User <test@camel.com>\" then you can use\nthe part \"Test User\"\
      \ or \"<test@camel.com>\" to address the user ID.\n\n|`keyUserids` |`List<String>`\
      \ |`null` |*Since camel 2.12.2*: PGP allows to encrypt the symmetric key by\
      \ several\nasymmetric public receiver keys. You can specify here the User IDs\
      \ or\nparts of User IDs of several public keys contained in the PGP keyring.\n\
      If you just have one User ID, then you can also use the option\n`keyUserid`.\
      \ The User ID specified in `keyUserid` and the User IDs in\n`keyUserids` will\
      \ be merged together and the corresponding public keys\nwill be used for the\
      \ encryption.\n\n|`password` |`String` |`null` |Password used when opening the\
      \ private key (not used for encryption).\n\n|`keyFileName` |`String` |`null`\
      \ |Filename of the keyring; must be accessible as a classpath resource (but\n\
      you can specify a location in the file system by using the \"file:\"\nprefix).\n\
      \n|`encryptionKeyRing` |`byte[]` |`null` |*Since camel 2.12.1*: encryption keyring;\
      \ you can not set the\nkeyFileName and encryptionKeyRing at the same time.\n\
      \n|`signatureKeyUserid` |`String` |`null` |*Since Camel 2.11.0*; optional User\
      \ ID of the key in the PGP keyring\nused for signing (during encryption) or\
      \ signature verification (during\ndecryption). During the signature verification\
      \ process the specified\nUser ID restricts the public keys from the public keyring\
      \ which can be\nused for the verification. If no User ID is specified for the\
      \ signature\nverficiation then any public key in the public keyring can be used\
      \ for\nthe verification. Can also be only a part of a user ID. For example,\
      \ if\nthe user ID is \"Test User <test@camel.com>\" then you can use the part\n\
      \"Test User\" or \"<test@camel.com>\" to address the User ID.\n\n|`signatureKeyUserids`\
      \ |`List<String>` |`null` |*Since Camel 2.12.3*: optional list of User IDs of\
      \ the key in the PGP\nkeyring used for signing (during encryption) or signature\
      \ verification\n(during decryption). You can specify here the User IDs or parts\
      \ of User\nIDs of several keys contained in the PGP keyring. If you just have\
      \ one\nUser ID, then you can also use the option `keyUserid`. The User ID\n\
      specified in `keyUserid` and the User IDs in `keyUserids` will be merged\ntogether\
      \ and the corresponding keys will be used for the signing or\nsignature verification.\
      \ If the specified User IDs reference several keys\nthen for each key a signature\
      \ is added to the PGP result during the\nencryption-signing process. In the\
      \ decryption-verifying process the list\nof User IDs restricts the list of public\
      \ keys which can be used for\nsignature verification. If the list of User IDs\
      \ is empty then any public\nkey in the public keyring can be used for the signature\
      \ verification.\n\n|`signaturePassword` |`String` |`null` |*Since Camel 2.11.0*:\
      \ optional password used when opening the private\nkey used for signing (during\
      \ encryption).\n\n|`signatureKeyFileName` |`String` |`null` |*Since Camel 2.11.0*:\
      \ optional filename of the keyring to use for\nsigning (during encryption) or\
      \ for signature verification (during\ndecryption); must be accessible as a classpath\
      \ resource (but you can\nspecify a location in the file system by using the\
      \ \"file:\" prefix).\n\n|`signatureKeyRing` |`byte[]` |`null` |*Since camel\
      \ 2.12.1*: signature keyring; you can not set the\nsignatureKeyFileName and\
      \ signatureKeyRing at the same time.\n\n|`algorithm` |`int` |`SymmetricKeyAlgorithmTags.CAST5`\
      \ |*Since camel 2.12.2*: symmetric key encryption algorithm; possible\nvalues\
      \ are defined in `org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags`;\nfor example\
      \ 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7\n(= AES_128).\
      \ Only relevant for encrypting.\n\n|`compressionAlgorithm` |`int` |`CompressionAlgorithmTags.ZIP`\
      \ |*Since camel 2.12.2*: compression algorithm; possible values are defined\n\
      in `org.bouncycastle.bcpg.CompressionAlgorithmTags`; for example 0 (=\nUNCOMPRESSED),\
      \ 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for\nencrypting.\n\n|`hashAlgorithm`\
      \ |`int` |`HashAlgorithmTags.SHA1` |*Since camel 2.12.2*: signature hash algorithm;\
      \ possible values are\ndefined in `org.bouncycastle.bcpg.HashAlgorithmTags`;\
      \ for example 2 (=\nSHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224).\
      \ Only\nrelevant for signing.\n\n|`armored` |`boolean` |`false` |This option\
      \ will cause PGP to base64 encode the encrypted text, making\nit available for\
      \ copy/paste, etc.\n\n|`integrity` |`boolean` |`true` |Adds an integrity check/sign\
      \ into the encryption file.\n\n|`passphraseAccessor` |`PGPPassphraseAccessor`\
      \ |`null` |*Since Camel 2.12.2*: provides passphrases corresponding to user\
      \ Ids. If\nno passpharase can be found from the option `password` or\n`signaturePassword`\
      \ and from the headers `CamelPGPDataFormatKeyPassword`\nor `CamelPGPDataFormatSignatureKeyPassword`\
      \ then the passphrase is\nfetched from the passphrase accessor. You provide\
      \ a bean which\nimplements the interface\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPPassphraseAccessor.java[PGPPassphraseAccessor].\n\
      A default implementation is given by\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPPassphraseAccessor.java[DefaultPGPPassphraseAccessor].\n\
      The passphrase accessor is especially useful in the decrypt case; see\nchapter\
      \ 'PGP Decrypting/Verifying of Messages Encrypted/Signed by\nDifferent Private/Public\
      \ Keys' below.\n\n|`signatureVerificationOption` |`String` |`\"optional\"` |*Since\
      \ Camel 2.13.0*: controls the behavior for verifying the signature\nduring unmarshaling.\
      \ There are three values possible:\n\n* `\"optional\"`: The PGP message may\
      \ or may not contain signatures; if it\ndoes contain signatures, then a signature\
      \ verification is executed. Use\nthe constant\nPGPKeyAccessDataFormat.SIGNATURE_VERIFICATION_OPTION_OPTIONAL.\n\
      * `\"required\"`: The PGP message must contain at least one signature; if\n\
      this is not the case an exception (PGPException) is thrown. A signature\nverification\
      \ is executed. Use the constant\nPGPKeyAccessDataFormat.SIGNATURE_VERIFICATION_OPTION_REQUIRED.\n\
      * `\"ignore\"`: Contained signatures in the PGP message are ignored; no\nsignature\
      \ verification is executed. Use the constant\nPGPKeyAccessDataFormat.SIGNATURE_VERIFICATION_OPTION_IGNORE.\n\
      * `\"no_signature_allowed\"`: The PGP message must not contain a\nsignature;\
      \ otherwise an exception (PGPException) is thrown. Use the\nconstant\nPGPKeyAccessDataFormat.SIGNATURE_VERIFICATION_OPTION_NO_SIGNATURE_ALLOWED.\n\
      \n|`FileName` |`String` |`\"_CONSOLE\"` |*Since camel 2.15.0*: Sets the file\
      \ name for the literal data packet.\nCan be overwritten by the?? header \\{@link\
      \ Exchange#FILE_NAME}.\n\n\"`_CONSOLE`\" indicates that the message is considered\
      \ to be \"for your\neyes only\". This advises that the message data is unusually\
      \ sensitive,\nand the receiving program should process it more carefully, perhaps\n\
      avoiding storing the received data to disk, for example.Only used for\nmarshaling.\n\
      \n|`withCompressedDataPacket` |boolean |`true` |*Since Camel 2.16.0*: Indicator\
      \ whether the PGP Message shall be created\nwith or without a Compressed Data\
      \ packet. If the value is set to false,\nthen no Compressed Data packet is added\
      \ and the compressionAlgorithm\nvalue is ignored. Only used for marshaling.\n\
      |=======================================================================\n\n\
      [[Crypto-PGPDataFormatMessageHeaders]]\nPGPDataFormat Message Headers\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nYou can override the PGPDataFormat options by applying below headers\ninto\
      \ message dynamically.\n\n[width=\"70%\",cols=\"10%,10%,80%\",options=\"header\"\
      ,]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelPGPDataFormatKeyFileName` |`String` |*Since\
      \ Camel 2.11.0*; filename of the keyring; will override existing\nsetting directly\
      \ on the PGPDataFormat.\n\n|`CamelPGPDataFormatEncryptionKeyRing` |`byte[]`\
      \ |*Since Camel 2.12.1*; the encryption keyring; will override existing\nsetting\
      \ directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatKeyUserid` |`String`\
      \ |*Since Camel 2.11.0*; the User ID of the key in the PGP keyring; will\noverride\
      \ existing setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatKeyUserids`\
      \ |`List<String>` |*Since camel 2.12.2*: the User IDs of the key in the PGP\
      \ keyring; will\noverride existing setting directly on the PGPDataFormat.\n\n\
      |`CamelPGPDataFormatKeyPassword` |`String` |*Since Camel 2.11.0*; password used\
      \ when opening the private key; will\noverride existing setting directly on\
      \ the PGPDataFormat.\n\n|`CamelPGPDataFormatSignatureKeyFileName` |`String`\
      \ |*Since Camel 2.11.0*; filename of the signature keyring; will override\n\
      existing setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatSignatureKeyRing`\
      \ |`byte[]` |*Since Camel 2.12.1*; the signature keyring; will override existing\n\
      setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatSignatureKeyUserid`\
      \ |`String` |*Since Camel 2.11.0*; the User ID of the signature key in the PGP\n\
      keyring; will override existing setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatSignatureKeyUserids`\
      \ |`List<String>` |*Since Camel 2.12.3*; the User IDs of the signature keys\
      \ in the PGP\nkeyring; will override existing setting directly on the PGPDataFormat.\n\
      \n|`CamelPGPDataFormatSignatureKeyPassword` |`String` |*Since Camel 2.11.0*;\
      \ password used when opening the signature private\nkey; will override existing\
      \ setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatEncryptionAlgorithm`\
      \ |`int` |*Since Camel 2.12.2*; symmetric key encryption algorithm; will override\n\
      existing setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatSignatureHashAlgorithm`\
      \ |`int` |*Since Camel 2.12.2*; signature hash algorithm; will override existing\n\
      setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatCompressionAlgorithm`\
      \ |`int` |*Since Camel 2.12.2*; compression algorithm; will override existing\n\
      setting directly on the PGPDataFormat.\n\n|`CamelPGPDataFormatNumberOfEncryptionKeys`\
      \ |`Integer` |*Since*??*Camel 2.12.3;??*number of public keys used for encrypting\
      \ the\nsymmectric key, set by PGPDataFormat during encryptiion process\n\n|`CamelPGPDataFormatNumberOfSigningKeys`\
      \ |`Integer` |*Since*??*Camel 2.12.3;??*number of private keys used for creating\n\
      signatures, set by PGPDataFormat during signing process\n|=======================================================================\n\
      \n[[Crypto-EncryptingwithPGPDataFormat]]\nEncrypting with PGPDataFormat\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe following sample uses the popular PGP format for\nencrypting/decrypting\
      \ files using the\nhttp://www.bouncycastle.org/java.html[Bouncy Castle Java\
      \ libraries]:\n\nThe following sample performs signing + encryption, and then\
      \ signature\nverification + decryption. It uses the same keyring for both signing\
      \ and\nencryption, but you can obviously use different keys:\n\nOr using Spring:\n\
      \n[[Crypto-Toworkwiththepreviousexampleyouneedthefollowing]]\nTo work with the\
      \ previous example you need the following\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n* A public keyring file which contains the public keys used to encrypt\nthe\
      \ data\n* A private keyring file which contains the keys used to decrypt the\n\
      data\n* The keyring password\n\n[[Crypto-Managingyourkeyring]]\nManaging your\
      \ keyring\n+++++++++++++++++++++\n\nTo manage the keyring, I use the command\
      \ line tools, I find this to be\nthe simplest approach in managing the keys.\
      \ There are also Java\nlibraries available from\nhttp://www.bouncycastle.org/java.html[http://www.bouncycastle.org/java.html]\n\
      if you would prefer to do it that way.\n\n1.  Install the command line utilities\
      \ on linux\n\n[source,java]\n---------------------\napt-get install gnupg\n\
      ---------------------\n2.  Create your keyring, entering a secure password\n\
      \n[source,java]\n-------------\ngpg --gen-key\n-------------\n3.  If you need\
      \ to import someone elses public key so that you can\nencrypt a file for them.\n\
      \n[source,java]\n--------------------------\ngpg --import <filename.key\n--------------------------\n\
      4.  The following files should now exist and can be used to run the\nexample\n\
      \n[source,java]\n-----------------------------------------------\nls -l ~/.gnupg/pubring.gpg\
      \ ~/.gnupg/secring.gpg\n-----------------------------------------------\n\n\
      [[Crypto-PGPDecrypting/VerifyingofMessagesEncrypted/SignedbyDifferentPrivate/PublicKeys]]\n\
      PGP Decrypting/Verifying of Messages Encrypted/Signed by Different\nPrivate/Public\
      \ Keys\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nSince *Camel 2.12.2*.\n\nA PGP Data Formater can decrypt/verify messages which\
      \ have been\nencrypted by different public keys or signed by different private\
      \ keys.\nJust, provide the corresponding private keys in the secret keyring,\
      \ the\ncorresponding public keys in the public keyring, and the passphrases\
      \ in\nthe passphrase accessor.\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------------------\n\
      Map<String, String> userId2Passphrase = new HashMap<String, String>(2);\n//\
      \ add passphrases of several private keys whose corresponding public keys have\
      \ been used to encrypt the messages\nuserId2Passphrase.put(\"UserIdOfKey1\"\
      ,\"passphrase1\"); // you must specify the exact User ID!\nuserId2Passphrase.put(\"\
      UserIdOfKey2\",\"passphrase2\");\nPGPPassphraseAccessor passphraseAccessor =\
      \ new PGPPassphraseAccessorDefault(userId2Passphrase);\n\nPGPDataFormat pgpVerifyAndDecrypt\
      \ = new PGPDataFormat();\npgpVerifyAndDecrypt.setPassphraseAccessor(passphraseAccessor);\n\
      // the method getSecKeyRing() provides the secret keyring as byte array containing\
      \ the private keys\npgpVerifyAndDecrypt.setEncryptionKeyRing(getSecKeyRing());\
      \ // alternatively you can use setKeyFileName(keyfileName)\n// the method getPublicKeyRing()\
      \ provides the public keyring as byte array containing the public keys\npgpVerifyAndDecrypt.setSignatureKeyRing((getPublicKeyRing());\
      \  // alternatively you can use setSignatureKeyFileName(signatgureKeyfileName)\n\
      // it is not necessary to specify the encryption or signer  User Id\n \nfrom(\"\
      direct:start\")\n         ...     \n        .unmarshal(pgpVerifyAndDecrypt)\
      \ // can decrypt/verify messages encrypted/signed by different private/public\
      \ keys\n        ...            \n------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n* The functionality is especially useful to support the key exchange. If\n\
      you want to exchange the private key for decrypting you can accept for a\nperiod\
      \ of time messages which are either encrypted with the old or new\ncorresponding\
      \ public key. Or if the sender wants to exchange his signer\nprivate key, you\
      \ can accept for a period of time, the old or new signer\nkey.\n* Technical\
      \ background: The PGP encrypted data contains a Key ID of the\npublic key which\
      \ was used to encrypt the data. This Key ID can be used\nto locate the private\
      \ key in the secret keyring to decrypt the data. The\nsame mechanism is also\
      \ used to locate the public key for verifying a\nsignature. Therefore you no\
      \ longer must specify User IDs for the\nunmarshaling.\n\n[[Crypto-RestrictingtheSignerIdentitiesduringPGPSignatureVerification]]\n\
      Restricting the Signer Identities during PGP Signature Verification\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nSince??*Camel 2.12.3.*\n\nIf you verify a signature you not only want to verify\
      \ the correctness of\nthe signature but you also want check that the signature\
      \ comes from a\ncertain identity or a specific set of identities. Therefore\
      \ it is\npossible to restrict the number of public keys from the public keyring\n\
      which can be used for the verification of a signature. ??\n\n*Signature User\
      \ IDs*\n\n[source,java]\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      // specify the User IDs of the expected signer identities\n List<String> expectedSigUserIds\
      \ = new ArrayList<String>();\n expectedSigUserIds.add(\"Trusted company1\");\n\
      \ expectedSigUserIds.add(\"Trusted company2\");\n??\n PGPDataFormat pgpVerifyWithSpecificKeysAndDecrypt\
      \ = new PGPDataFormat();\n pgpVerifyWithSpecificKeysAndDecrypt.setPassword(\"\
      my password\"); // for decrypting with private key\n pgpVerifyWithSpecificKeysAndDecrypt.setKeyFileName(keyfileName);\n\
      \ pgpVerifyWithSpecificKeysAndDecrypt.setSignatureKeyFileName(signatgureKeyfileName);\n\
      \ pgpVerifyWithSpecificKeysAndDecrypt.setSignatureKeyUserids(expectedSigUserIds);\
      \ // if you have only one signer identity then you can also use setSignatureKeyUserid(\"\
      expected Signer\")\n??\nfrom(\"direct:start\")\n         ...     \n        .unmarshal(pgpVerifyWithSpecificKeysAndDecrypt)\n\
      \        ...      \n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n* If the PGP content has several signatures the verification is\nsuccessful\
      \ as soon as one signature can be verified.\n* If you do not want to restrict\
      \ the signer identities for verification\nthen do not specify the signature\
      \ key User IDs. In this case all public\nkeys in the public keyring are taken\
      \ into account.\n\n[[Crypto-SeveralSignaturesinOnePGPDataFormat]]\nSeveral Signatures\
      \ in One PGP Data Format\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSince??*Camel\
      \ 2.12.3.*\n\nThe PGP specification allows that one PGP data format can contain\n\
      several signatures from different keys. Since Camel 2.13.3 it is\npossible to\
      \ create such kind of PGP content via specifying signature\nUser IDs which relate\
      \ to several private keys in the secret keyring.\n\n*Several Signatures*\n\n\
      [source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \ PGPDataFormat pgpSignAndEncryptSeveralSignerKeys = new PGPDataFormat();\n\
      \ pgpSignAndEncryptSeveralSignerKeys.setKeyUserid(keyUserid); // for encrypting,\
      \ you can also use setKeyUserids if you want to encrypt with several keys\n\
      \ pgpSignAndEncryptSeveralSignerKeys.setKeyFileName(keyfileName);\n pgpSignAndEncryptSeveralSignerKeys.setSignatureKeyFileName(signatgureKeyfileName);\n\
      \ pgpSignAndEncryptSeveralSignerKeys.setSignaturePassword(\"sdude\"); // here\
      \ we assume that all private keys have the same password, if this is not the\
      \ case then you can use setPassphraseAccessor\n\n List<String> signerUserIds\
      \ = new ArrayList<String>();\n signerUserIds.add(\"company old key\");\n signerUserIds.add(\"\
      company new key\");\n pgpSignAndEncryptSeveralSignerKeys.setSignatureKeyUserids(signerUserIds);\n\
      ??\nfrom(\"direct:start\")\n         ...     \n        .marshal(pgpSignAndEncryptSeveralSignerKeys)\n\
      \        ...      \n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Crypto-SupportofSub-KeysandKeyFlagsinPGPDataFormatMarshaler]]\nSupport of\
      \ Sub-Keys and Key Flags in PGP Data Format Marshaler\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nSince??*Camel 2.12.3. +\n*An https://tools.ietf.org/html/rfc4880#section-12.1[OpenPGP\
      \ V4 key] can\nhave a primary key and sub-keys. The usage of the keys is indicated\
      \ by\nthe so called https://tools.ietf.org/html/rfc4880#section-5.2.3.21[Key\n\
      Flags]. For example, you can have a primary key with two sub-keys; the\nprimary\
      \ key shall only be used for certifying other keys (Key Flag\n0x01), the first\
      \ sub-key?? shall only be used for signing (Key Flag\n0x02), and the second\
      \ sub-key shall only be used for encryption (Key\nFlag 0x04 or 0x08). The PGP\
      \ Data Format marshaler takes into account\nthese Key Flags of the primary key\
      \ and sub-keys in order to determine\nthe right key for signing and encryption.\
      \ This is necessary because the\nprimary key and its sub-keys have the same\
      \ User IDs.\n\n[[Crypto-SupportofCustomKeyAccessors]]\nSupport of Custom Key\
      \ Accessors\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSince *Camel 2.13.0. +\n*You\
      \ can implement custom key accessors for encryption/signing. The\nabove PGPDataFormat\
      \ class selects in a certain predefined way the keys\nwhich should be used for\
      \ signing/encryption or verifying/decryption. If\nyou have special requirements\
      \ how your keys should be selected you\nshould use the\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPKeyAccessDataFormat.java[PGPKeyAccessDataFormat]\n\
      class instead and implement the interfaces\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPPublicKeyAccessor.java[PGPPublicKeyAccessor]\n\
      and\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/PGPSecretKeyAccessor.java[PGPSecretKeyAccessor]\n\
      as beans. There are default implementations\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPPublicKeyAccessor.java[DefaultPGPPublicKeyAccessor]\n\
      and\nhttps://github.com/apache/camel/blob/master/components/camel-crypto/src/main/java/org/apache/camel/converter/crypto/DefaultPGPSecretKeyAccessor.java[DefaultPGPSecretKeyAccessor]\n\
      which cache the keys, so that not every time the keyring is parsed when\nthe\
      \ processor is called.\n\nPGPKeyAccessDataFormat has the same options as PGPDataFormat\
      \ except\npassword, keyFileName, encryptionKeyRing, signaturePassword,\nsignatureKeyFileName,\
      \ and signatureKeyRing.\n\n[[Crypto-Dependencies]]\nDependencies\n^^^^^^^^^^^^\n\
      \nTo use the link:crypto.html[Crypto] dataformat in your camel routes you\n\
      need to add the following dependency to your pom.\n\n[source,xml]\n----------------------------------------------------------\n\
      <dependency>\n  <groupId>org.apache.camel</groupId>\n  <artifactId>camel-crypto</artifactId>\n\
      \  <version>x.x.x</version>\n  <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n----------------------------------------------------------\n\
      \n[[Crypto-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:data-format.html[Data Format]\n\
      * link:crypto-digital-signatures.html[Crypto (Digital Signatures)]\n* http://www.bouncycastle.org/java.html[http://www.bouncycastle.org/java.html]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cxf
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cxf
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cxf
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cxf
          spec:
            containers:
            - image: fabric8/connector-cxf:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cxf
        syntax: cxf:beanId:address
        title: CXF
        description: The cxf component is used for SOAP WebServices using Apache CXF.
        label: soap,webservice
        deprecated: false
        async: true
        javaType: org.apache.camel.component.cxf.CxfComponent
        groupId: org.apache.camel
        artifactId: camel-cxf
        version: 2.18.1
      componentProperties:
        allowStreaming:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: This option controls whether the CXF component when running in PAYLOAD mode will DOM parse the incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source object that would allow streaming in some cases.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        beanId:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To lookup an existing configured CxfEndpoint. Must used bean: as
            prefix.'
        address:
          kind: path
          group: service
          label: service
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The service publish address.
        dataFormat:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.cxf.DataFormat
          enum:
          - PAYLOAD
          - RAW
          - MESSAGE
          - CXF_MESSAGE
          - POJO
          deprecated: false
          secret: false
          defaultValue: POJO
          description: The data type messages supported by the CXF endpoint.
        wrappedStyle:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: The WSDL style that describes how parameters are represented in the SOAP body. If the value is false CXF will chose the document-literal unwrapped style If the value is true CXF will chose the document-literal wrapped style
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        defaultOperationName:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option will set the default operationName that will be used by the CxfProducer which invokes the remote service.
        defaultOperationNamespace:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option will set the default operationNamespace that will be used by the CxfProducer which invokes the remote service.
        hostnameVerifier:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: javax.net.ssl.HostnameVerifier
          deprecated: false
          secret: false
          description: The hostname verifier to be used. Use the notation to reference a HostnameVerifier from the registry.
        sslContextParameters:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: The Camel SSL setting reference. Use the notation to reference the SSL Context.
        wrapped:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Which kind of operation that CXF endpoint producer will invoke
        allowStreaming:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: This option controls whether the CXF component when running in PAYLOAD mode will DOM parse the incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source object that would allow streaming in some cases.
        bus:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.cxf.Bus
          deprecated: false
          secret: false
          description: To use a custom configured CXF Bus.
        continuationTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: This option is used to set the CXF continuation timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or Servlet transport.
        cxfBinding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cxf.CxfBinding
          deprecated: false
          secret: false
          description: To use a custom CxfBinding to control the binding between Camel Message and CXF Message.
        cxfEndpointConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cxf.CxfEndpointConfigurer
          deprecated: false
          secret: false
          description: This option could apply the implementation of org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to configure the CXF endpoint in programmatic way. User can configure the CXF server and client by implementing configureServerClient method of CxfEndpointConfigurer.
        defaultBus:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Will set the default bus when CXF endpoint create a bus by itself
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        mergeProtocolHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to merge protocol headers. If enabled then propagating headers between Camel and CXF becomes more consistent and similar. For more details see CAMEL-6393.
        mtomEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To enable MTOM (attachments). This requires to use POJO or PAYLOAD data format mode.
        properties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: properties.
          multiValue: true
          deprecated: false
          secret: false
          description: To set additional CXF options using the key/value pairs from the Map. For example to turn on stacktraces in SOAP faults properties.faultStackTraceEnabled=true
        skipPayloadMessagePartCheck:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether SOAP message validation should be disabled.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        loggingFeatureEnabled:
          kind: parameter
          group: logging
          label: logging
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option enables CXF Logging Feature which writes inbound and outbound SOAP messages to log.
        loggingSizeLimit:
          kind: parameter
          group: logging
          label: logging
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "49152"
          description: To limit the total size of number of bytes the logger will output when logging feature has been enabled and -1 for no limit.
        skipFaultLogging:
          kind: parameter
          group: logging
          label: logging
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option controls whether the PhaseInterceptorChain skips logging the Fault that it catches.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: This option is used to set the basic authentication information of password for the CXF client.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: This option is used to set the basic authentication information of username for the CXF client.
        bindingId:
          kind: parameter
          group: service
          label: service
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The bindingId for the service model to use.
        portName:
          kind: parameter
          group: service
          label: service
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The endpoint name this service is implementing it maps to the wsdl:portname. In the format of ns:PORT_NAME where ns is a namespace prefix valid at this scope.
        publishedEndpointUrl:
          kind: parameter
          group: service
          label: service
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option can override the endpointUrl that published from the WSDL which can be accessed with service address url plus wsd
        serviceClass:
          kind: parameter
          group: service
          label: service
          type: string
          javaType: java.lang.Class<?>
          deprecated: false
          secret: false
          description: The class name of the SEI (Service Endpoint Interface) class which could have JSR181 annotation or not.
        serviceName:
          kind: parameter
          group: service
          label: service
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The service name this service is implementing it maps to the wsdl:servicename.
        wsdlURL:
          kind: parameter
          group: service
          label: service
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The location of the WSDL. Can be on the classpath file system or be hosted remotely.
    documentation.adoc: "[[CXF-CXFComponent]]\nCXF Component\n~~~~~~~~~~~~~\n\nNOTE:When\
      \ using CXF as a consumer, the link:cxf-bean-component.html[CXF Bean\nComponent]\
      \ allows you to factor out how message payloads are received\nfrom their processing\
      \ as a RESTful or SOAP web service. This has the\npotential of using a multitude\
      \ of transports to consume web services.\nThe bean component's configuration\
      \ is also simpler and provides the\nfastest method to implement web services\
      \ using Camel and CXF.\n\nTIP:When using CXF in streaming modes (see DataFormat\
      \ option), then also\nread about link:stream-caching.html[Stream caching].\n\
      \nThe *cxf:* component provides integration with\nhttp://cxf.apache.org[Apache\
      \ CXF] for connecting to JAX-WS services\nhosted in CXF.\n\n* link:#CXF-CXFComponent[CXF\
      \ Component]\n** link:#CXF-URIformat[URI format]\n** link:#CXF-Options[Options]\n\
      *** link:#CXF-Thedescriptionsofthedataformats[The descriptions of the\ndataformats]\n\
      **** link:#CXF-HowtoenableCXFLoggingOutInterceptorinMESSAGEmode[How to\nenable\
      \ CXF's LoggingOutInterceptor in MESSAGE mode]\n*** link:#CXF-DescriptionofrelayHeadersoption[Description\
      \ of\nrelayHeaders option]\n**** link:#CXF-AvailableonlyinPOJOmode[Available\
      \ only in POJO mode]\n**** link:#CXF-ChangessinceRelease2.0[Changes since Release\
      \ 2.0]\n** link:#CXF-ConfiguretheCXFendpointswithSpring[Configure the CXF\n\
      endpoints with Spring]\n**\nlink:#CXF-ConfiguringtheCXFEndpointswithApacheAriesBlueprint.[Configuring\n\
      the CXF Endpoints with Apache Aries Blueprint.]\n**\nlink:#CXF-Howtomakethecamel-cxfcomponentuselog4jinsteadofjava.util.logging[How\n\
      to make the camel-cxf component use log4j instead of java.util.logging]\n**\
      \ link:#CXF-Howtoletcamel-cxfresponsemessagewithxmlstartdocument[How to\nlet\
      \ camel-cxf response message with xml start document]\n** link:#CXF-HowtooverridetheCXFproduceraddressfrommessageheader[How\
      \ to\noverride the CXF producer address from message header]\n**\nlink:#CXF-Howtoconsumeamessagefromacamel-cxfendpointinPOJOdataformat[How\n\
      to consume a message from a camel-cxf endpoint in POJO data format]\n**\nlink:#CXF-Howtopreparethemessageforthecamel-cxfendpointinPOJOdataformat[How\n\
      to prepare the message for the camel-cxf endpoint in POJO data format]\n**\n\
      link:#CXF-Howtodealwiththemessageforacamel-cxfendpointinPAYLOADdataformat[How\n\
      to deal with the message for a camel-cxf endpoint in PAYLOAD data\nformat]\n\
      ** link:#CXF-HowtogetandsetSOAPheadersinPOJOmode[How to get and set SOAP\nheaders\
      \ in POJO mode]\n** link:#CXF-HowtogetandsetSOAPheadersinPAYLOADmode[How to\
      \ get and set\nSOAP headers in PAYLOAD mode]\n** link:#CXF-SOAPheadersarenotavailableinMESSAGEmode[SOAP\
      \ headers are\nnot available in MESSAGE mode]\n** link:#CXF-HowtothrowaSOAPFaultfromCamel[How\
      \ to throw a SOAP Fault\nfrom Camel]\n**\nlink:#CXF-Howtopropagateacamel-cxfendpointrequestandresponsecontext[How\n\
      to propagate a camel-cxf endpoint's request and response context]\n** link:#CXF-AttachmentSupport[Attachment\
      \ Support]\n** link:#CXF-StreamingSupportinPAYLOADmode[Streaming Support in\
      \ PAYLOAD\nmode]\n** link:#CXF-UsingthegenericCXFDispatchmode[Using the generic\
      \ CXF\nDispatch mode]\n** link:#CXF-SeeAlso[See Also]\n\nMaven users will need\
      \ to add the following dependency to their `pom.xml`\nfor this component:\n\n\
      [source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-cxf</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[Tip]\n====\nCXF dependencies\n\nIf you want to learn about CXF dependencies\
      \ you can checkout the\n`WHICH-JARS` text file.\n\n====\n\n[[CXF-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source,java]\n------------------------------\ncxf:bean:cxfEndpoint[?options]\n\
      ------------------------------\n\nWhere *cxfEndpoint* represents a bean ID that\
      \ references a bean in the\nSpring bean registry. With this URI format, most\
      \ of the endpoint details\nare specified in the bean definition.\n\n[source,java]\n\
      ---------------------------\ncxf://someAddress[?options]\n---------------------------\n\
      \nWhere *someAddress* specifies the CXF endpoint's address. With this URI\n\
      format, most of the endpoint details are specified using options.\n\nFor either\
      \ style above, you can append options to the URI as follows:\n\n[source,java]\n\
      ---------------------------------------------------------------------\ncxf:bean:cxfEndpoint?wsdlURL=wsdl/hello_world.wsdl&dataFormat=PAYLOAD\n\
      ---------------------------------------------------------------------\n\n[[CXF-Options]]\n\
      Options\n^^^^^^^\n\n\n\n// component options: START\nThe CXF component supports\
      \ 2 options which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| allowStreaming | Boolean | This option controls\
      \ whether the CXF component when running in PAYLOAD mode will DOM parse the\
      \ incoming messages into DOM Elements or keep the payload as a javax.xml.transform.Source\
      \ object that would allow streaming in some cases.\n| headerFilterStrategy |\
      \ HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header\
      \ to and from Camel message.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n// endpoint options: START\n\
      The CXF component supports 35 endpoint options which are listed below:\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| beanId | common |  | String\
      \ | To lookup an existing configured CxfEndpoint. Must used bean: as prefix.\n\
      | address | service |  | String | The service publish address.\n| dataFormat\
      \ | common | POJO | DataFormat | The data type messages supported by the CXF\
      \ endpoint.\n| wrappedStyle | common |  | Boolean | The WSDL style that describes\
      \ how parameters are represented in the SOAP body. If the value is false CXF\
      \ will chose the document-literal unwrapped style If the value is true CXF will\
      \ chose the document-literal wrapped style\n| bridgeErrorHandler | consumer\
      \ | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| defaultOperationName | producer |  | String | This option\
      \ will set the default operationName that will be used by the CxfProducer which\
      \ invokes the remote service.\n| defaultOperationNamespace | producer |  | String\
      \ | This option will set the default operationNamespace that will be used by\
      \ the CxfProducer which invokes the remote service.\n| hostnameVerifier | producer\
      \ |  | HostnameVerifier | The hostname verifier to be used. Use the notation\
      \ to reference a HostnameVerifier from the registry.\n| sslContextParameters\
      \ | producer |  | SSLContextParameters | The Camel SSL setting reference. Use\
      \ the notation to reference the SSL Context.\n| wrapped | producer | false |\
      \ boolean | Which kind of operation that CXF endpoint producer will invoke\n\
      | allowStreaming | advanced |  | Boolean | This option controls whether the\
      \ CXF component when running in PAYLOAD mode will DOM parse the incoming messages\
      \ into DOM Elements or keep the payload as a javax.xml.transform.Source object\
      \ that would allow streaming in some cases.\n| bus | advanced |  | Bus | To\
      \ use a custom configured CXF Bus.\n| continuationTimeout | advanced | 30000\
      \ | long | This option is used to set the CXF continuation timeout which could\
      \ be used in CxfConsumer by default when the CXF server is using Jetty or Servlet\
      \ transport.\n| cxfBinding | advanced |  | CxfBinding | To use a custom CxfBinding\
      \ to control the binding between Camel Message and CXF Message.\n| cxfEndpointConfigurer\
      \ | advanced |  | CxfEndpointConfigurer | This option could apply the implementation\
      \ of org.apache.camel.component.cxf.CxfEndpointConfigurer which supports to\
      \ configure the CXF endpoint in programmatic way. User can configure the CXF\
      \ server and client by implementing configureServerClient method of CxfEndpointConfigurer.\n\
      | defaultBus | advanced | false | boolean | Will set the default bus when CXF\
      \ endpoint create a bus by itself\n| headerFilterStrategy | advanced |  | HeaderFilterStrategy\
      \ | To use a custom HeaderFilterStrategy to filter header to and from Camel\
      \ message.\n| mergeProtocolHeaders | advanced | false | boolean | Whether to\
      \ merge protocol headers. If enabled then propagating headers between Camel\
      \ and CXF becomes more consistent and similar. For more details see CAMEL-6393.\n\
      | mtomEnabled | advanced | false | boolean | To enable MTOM (attachments). This\
      \ requires to use POJO or PAYLOAD data format mode.\n| properties | advanced\
      \ |  | Map | To set additional CXF options using the key/value pairs from the\
      \ Map. For example to turn on stacktraces in SOAP faults properties.faultStackTraceEnabled=true\n\
      | skipPayloadMessagePartCheck | advanced | false | boolean | Sets whether SOAP\
      \ message validation should be disabled.\n| synchronous | advanced | false |\
      \ boolean | Sets whether synchronous processing should be strictly used or Camel\
      \ is allowed to use asynchronous processing (if supported).\n| loggingFeatureEnabled\
      \ | logging | false | boolean | This option enables CXF Logging Feature which\
      \ writes inbound and outbound SOAP messages to log.\n| loggingSizeLimit | logging\
      \ | 49152 | int | To limit the total size of number of bytes the logger will\
      \ output when logging feature has been enabled and -1 for no limit.\n| skipFaultLogging\
      \ | logging | false | boolean | This option controls whether the PhaseInterceptorChain\
      \ skips logging the Fault that it catches.\n| password | security |  | String\
      \ | This option is used to set the basic authentication information of password\
      \ for the CXF client.\n| username | security |  | String | This option is used\
      \ to set the basic authentication information of username for the CXF client.\n\
      | bindingId | service |  | String | The bindingId for the service model to use.\n\
      | portName | service |  | String | The endpoint name this service is implementing\
      \ it maps to the wsdl:portname. In the format of ns:PORT_NAME where ns is a\
      \ namespace prefix valid at this scope.\n| publishedEndpointUrl | service |\
      \  | String | This option can override the endpointUrl that published from the\
      \ WSDL which can be accessed with service address url plus wsd\n| serviceClass\
      \ | service |  | Class<?> | The class name of the SEI (Service Endpoint Interface)\
      \ class which could have JSR181 annotation or not.\n| serviceName | service\
      \ |  | String | The service name this service is implementing it maps to the\
      \ wsdl:servicename.\n| wsdlURL | service |  | String | The location of the WSDL.\
      \ Can be on the classpath file system or be hosted remotely.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\nThe `serviceName` and `portName`\
      \ are\nhttp://en.wikipedia.org/wiki/QName[QNames], so if you provide them be\n\
      sure to prefix them with their \\{namespace} as shown in the examples\nabove.\n\
      \n[[CXF-Thedescriptionsofthedataformats]]\nThe descriptions of the dataformats\n\
      +++++++++++++++++++++++++++++++++++\n\n[width=\"100%\",cols=\"50%,50%\",options=\"\
      header\",]\n|=======================================================================\n\
      |DataFormat |Description\n\n|`POJO` |POJOs (Plain old Java objects) are the\
      \ Java parameters to the method\nbeing invoked on the target server. Both Protocol\
      \ and Logical JAX-WS\nhandlers are supported.\n\n|`PAYLOAD` |`PAYLOAD` is the\
      \ message payload (the contents of the `soap:body`) after\nmessage configuration\
      \ in the CXF endpoint is applied. Only Protocol\nJAX-WS handler is supported.\
      \ Logical JAX-WS handler is not supported.\n\n|`MESSAGE` |`MESSAGE` is the raw\
      \ message that is received from the transport layer.\nIt is not suppose to touch\
      \ or change Stream, some of the CXF\ninterceptors will be removed if you are\
      \ using this kind of DataFormat so\nyou can't see any soap headers after the\
      \ camel-cxf consumer and JAX-WS\nhandler is not supported.\n\n|`CXF_MESSAGE`\
      \ |New in *Camel 2.8.2*, `CXF_MESSAGE` allows for invoking the full\ncapabilities\
      \ of CXF interceptors by converting the message from the\ntransport layer into\
      \ a raw SOAP message\n|=======================================================================\n\
      \nYou can determine the data format mode of an exchange by retrieving the\n\
      exchange property, `CamelCXFDataFormat`. The exchange key constant is\ndefined\
      \ in\n`org.apache.camel.component.cxf.CxfConstants.DATA_FORMAT_PROPERTY`.\n\n\
      [[CXF-HowtoenableCXFLoggingOutInterceptorinMESSAGEmode]]\nHow to enable CXF's\
      \ LoggingOutInterceptor in MESSAGE mode\n\nCXF's `LoggingOutInterceptor` outputs\
      \ outbound message that goes on the\nwire to logging system (Java Util Logging).\
      \ Since the\n`LoggingOutInterceptor` is in `PRE_STREAM` phase (but `PRE_STREAM`\
      \ phase\nis removed in `MESSAGE` mode), you have to configure\n`LoggingOutInterceptor`\
      \ to be run during the `WRITE` phase. The\nfollowing is an example.\n\n[source,xml]\n\
      -------------------------------------------------------------------------------------------------------\n\
      <bean id=\"loggingOutInterceptor\" class=\"org.apache.cxf.interceptor.LoggingOutInterceptor\"\
      >\n    <!--  it really should have been user-prestream but CXF does have such\
      \ phase! -->\n    <constructor-arg value=\"target/write\"/> \n</bean>\n    \
      \     \n<cxf:cxfEndpoint id=\"serviceEndpoint\" address=\"http://localhost:${CXFTestSupport.port2}/LoggingInterceptorInMessageModeTest/helloworld\"\
      \n    serviceClass=\"org.apache.camel.component.cxf.HelloService\">\n    <cxf:outInterceptors>\n\
      \        <ref bean=\"loggingOutInterceptor\"/>\n    </cxf:outInterceptors>\n\
      \    <cxf:properties>\n        <entry key=\"dataFormat\" value=\"MESSAGE\"/>\n\
      \    </cxf:properties>\n</cxf:cxfEndpoint>\n-------------------------------------------------------------------------------------------------------\n\
      \n[[CXF-DescriptionofrelayHeadersoption]]\nDescription of relayHeaders option\n\
      ++++++++++++++++++++++++++++++++++\n\nThere are _in-band_ and _out-of-band_\
      \ on-the-wire headers from the\nperspective of a JAXWS WSDL-first developer.\n\
      \nThe _in-band_ headers are headers that are explicitly defined as part of\n\
      the WSDL binding contract for an endpoint such as SOAP headers.\n\nThe _out-of-band_\
      \ headers are headers that are serialized over the wire,\nbut are not explicitly\
      \ part of the WSDL binding contract.\n\nHeaders relaying/filtering is bi-directional.\n\
      \nWhen a route has a CXF endpoint and the developer needs to have\non-the-wire\
      \ headers, such as SOAP headers, be relayed along the route to\nbe consumed\
      \ say by another JAXWS endpoint, then `relayHeaders` should be\nset to `true`,\
      \ which is the default value.\n\n[[CXF-AvailableonlyinPOJOmode]]\nAvailable\
      \ only in POJO mode\n\nThe `relayHeaders=true` express an intent to relay the\
      \ headers. The\nactual decision on whether a given header is relayed is delegated\
      \ to a\npluggable instance that implements the `MessageHeadersRelay` interface.\n\
      A concrete implementation of `MessageHeadersRelay` will be consulted to\ndecide\
      \ if a header needs to be relayed or not. There is already an\nimplementation\
      \ of `SoapMessageHeadersRelay` which binds itself to\nwell-known SOAP name spaces.\
      \ Currently only out-of-band headers are\nfiltered, and in-band headers will\
      \ always be relayed when\n`relayHeaders=true`. If there is a header on the wire,\
      \ whose name space\nis unknown to the runtime, then a fall back `DefaultMessageHeadersRelay`\n\
      will be used, which simply allows all headers to be relayed.\n\nThe `relayHeaders=false`\
      \ setting asserts that all headers in-band and\nout-of-band will be dropped.\n\
      \nYou can plugin your own `MessageHeadersRelay` implementations overriding\n\
      or adding additional ones to the list of relays. In order to override a\npreloaded\
      \ relay instance just make sure that your `MessageHeadersRelay`\nimplementation\
      \ services the same name spaces as the one you looking to\noverride. Also note,\
      \ that the overriding relay has to service all of the\nname spaces as the one\
      \ you looking to override, or else a runtime\nexception on route start up will\
      \ be thrown as this would introduce an\nambiguity in name spaces to relay instance\
      \ mappings.\n\n[source,xml]\n-------------------------------------------------------------------------------------------------------\n\
      <cxf:cxfEndpoint ...>\n   <cxf:properties>\n     <entry key=\"org.apache.camel.cxf.message.headers.relays\"\
      >\n       <list>\n         <ref bean=\"customHeadersRelay\"/>\n       </list>\n\
      \     </entry>\n   </cxf:properties>\n </cxf:cxfEndpoint>\n <bean id=\"customHeadersRelay\"\
      \ class=\"org.apache.camel.component.cxf.soap.headers.CustomHeadersRelay\"/>\n\
      -------------------------------------------------------------------------------------------------------\n\
      \nTake a look at the tests that show how you'd be able to relay/drop\nheaders\
      \ here:\n\nhttps://svn.apache.org/repos/asf/camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java[https://svn.apache.org/repos/asf/camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java]\n\
      \n[[CXF-ChangessinceRelease2.0]]\nChanges since Release 2.0\n\n* `POJO` and\
      \ `PAYLOAD` modes are supported. In `POJO` mode, only\nout-of-band message headers\
      \ are available for filtering as the in-band\nheaders have been processed and\
      \ removed from header list by CXF. The\nin-band headers are incorporated into\
      \ the `MessageContentList` in POJO\nmode. The `camel-cxf` component does make\
      \ any attempt to remove the\nin-band headers from the `MessageContentList`.\
      \ If filtering of in-band\nheaders is required, please use `PAYLOAD` mode or\
      \ plug in a (pretty\nstraightforward) CXF interceptor/JAXWS Handler to the CXF\
      \ endpoint.\n* The Message Header Relay mechanism has been merged into\n`CxfHeaderFilterStrategy`.\
      \ The `relayHeaders` option, its semantics, and\ndefault value remain the same,\
      \ but it is a property of\n`CxfHeaderFilterStrategy`. \n Here is an example\
      \ of configuring it.\n\n[source,xml]\n-------------------------------------------------------------------------------------------------------\n\
      <bean id=\"dropAllMessageHeadersStrategy\" class=\"org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy\"\
      >\n \n    <!--  Set relayHeaders to false to drop all SOAP headers -->\n   \
      \ <property name=\"relayHeaders\" value=\"false\"/>\n     \n</bean>\n-------------------------------------------------------------------------------------------------------\n\
      \nThen, your endpoint can reference the `CxfHeaderFilterStrategy`.\n\n[source,xml]\n\
      -------------------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"cxf:bean:routerNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy\"\
      />          \n    <to uri=\"cxf:bean:serviceNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy\"\
      />\n</route>\n-------------------------------------------------------------------------------------------------------\n\
      \n* The `MessageHeadersRelay` interface has changed slightly and has been\n\
      renamed to `MessageHeaderFilter`. It is a property of\n`CxfHeaderFilterStrategy`.\
      \ Here is an example of configuring user\ndefined Message Header Filters:\n\n\
      [source,xml]\n-------------------------------------------------------------------------------------------------------\n\
      <bean id=\"customMessageFilterStrategy\" class=\"org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy\"\
      >\n    <property name=\"messageHeaderFilters\">\n        <list>\n          \
      \  <!--  SoapMessageHeaderFilter is the built in filter.  It can be removed\
      \ by omitting it. -->\n            <bean class=\"org.apache.camel.component.cxf.common.header.SoapMessageHeaderFilter\"\
      />\n             \n            <!--  Add custom filter here -->   \n       \
      \     <bean class=\"org.apache.camel.component.cxf.soap.headers.CustomHeaderFilter\"\
      />\n        </list>\n    </property>\n</bean>\n-------------------------------------------------------------------------------------------------------\n\
      \n* Other than `relayHeaders`, there are new properties that can be\nconfigured\
      \ in `CxfHeaderFilterStrategy`.\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"\
      header\",]\n|=======================================================================\n\
      |Name |Required |Description\n|`relayHeaders` |No |All message headers will\
      \ be processed by Message Header Filters  \n _Type_: `boolean`  \n _Default_:\
      \ `true`\n\n|`relayAllMessageHeaders` | No |All message headers will be propagated\
      \ (without processing by Message\nHeader Filters)  \n _Type_: `boolean`  \n\
      \ _Default_: `false`\n\n|`allowFilterNamespaceClash` |No |If two filters overlap\
      \ in activation namespace, the property control how\nit should be handled. If\
      \ the value is `true`, last one wins. If the\nvalue is `false`, it will throw\
      \ an exception  \n _Type_: `boolean`  \n _Default_: `false`\n|=======================================================================\n\
      \n[[CXF-ConfiguretheCXFendpointswithSpring]]\nConfigure the CXF endpoints with\
      \ Spring\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nYou can configure the CXF\
      \ endpoint with the Spring configuration file\nshown below, and you can also\
      \ embed the endpoint into the `camelContext`\ntags. When you are invoking the\
      \ service endpoint, you can set the\n`operationName` and `operationNamespace`\
      \ headers to explicitly state\nwhich operation you are calling.\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------------------------------------\n\
      <beans xmlns=\"http://www.springframework.org/schema/beans\"\n        xmlns:xsi=\"\
      http://www.w3.org/2001/XMLSchema-instance\"\n        xmlns:cxf=\"http://camel.apache.org/schema/cxf\"\
      \n        xsi:schemaLocation=\"\n        http://www.springframework.org/schema/beans\
      \ http://www.springframework.org/schema/beans/spring-beans.xsd\n        http://camel.apache.org/schema/cxf\
      \ http://camel.apache.org/schema/cxf/camel-cxf.xsd\n        http://camel.apache.org/schema/spring\
      \ http://camel.apache.org/schema/spring/camel-spring.xsd\">\n     <cxf:cxfEndpoint\
      \ id=\"routerEndpoint\" address=\"http://localhost:9003/CamelContext/RouterPort\"\
      \n            serviceClass=\"org.apache.hello_world_soap_http.GreeterImpl\"\
      />\n     <cxf:cxfEndpoint id=\"serviceEndpoint\" address=\"http://localhost:9000/SoapContext/SoapPort\"\
      \n            wsdlURL=\"testutils/hello_world.wsdl\"\n            serviceClass=\"\
      org.apache.hello_world_soap_http.Greeter\"\n            endpointName=\"s:SoapPort\"\
      \n            serviceName=\"s:SOAPService\"\n        xmlns:s=\"http://apache.org/hello_world_soap_http\"\
      \ />\n     <camelContext id=\"camel\" xmlns=\"http://camel.apache.org/schema/spring\"\
      >\n       <route>\n         <from uri=\"cxf:bean:routerEndpoint\" />\n     \
      \    <to uri=\"cxf:bean:serviceEndpoint\" />\n       </route>\n    </camelContext>\n\
      \  </beans>\n----------------------------------------------------------------------------------------------------------------\n\
      \nBe sure to include the JAX-WS `schemaLocation` attribute specified on\nthe\
      \ root beans element. This allows CXF to validate the file and is\nrequired.\
      \ Also note the namespace declarations at the end of the\n`<cxf:cxfEndpoint/>`\
      \ tag--these are required because the combined\n\\{`namespace}localName` syntax\
      \ is presently not supported for this tag's\nattribute values.\n\nThe `cxf:cxfEndpoint`\
      \ element supports many additional attributes:\n\n[width=\"100%\",cols=\"50%,50%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Value\n\n|`PortName` |The endpoint name this service is implementing,\
      \ it maps to the\n`wsdl:port@name`. In the format of `ns:PORT_NAME` where `ns`\
      \ is a\nnamespace prefix valid at this scope.\n\n|`serviceName` |The service\
      \ name this service is implementing, it maps to the\n`wsdl:service@name`. In\
      \ the format of `ns:SERVICE_NAME` where `ns` is a\nnamespace prefix valid at\
      \ this scope.\n\n|`wsdlURL` |The location of the WSDL. Can be on the classpath,\
      \ file system, or be\nhosted remotely.\n\n|`bindingId` |The `bindingId` for\
      \ the service model to use.\n\n|`address` |The service publish address.\n\n\
      |`bus` |The bus name that will be used in the JAX-WS endpoint.\n\n|`serviceClass`\
      \ |The class name of the SEI (Service Endpoint Interface) class which could\n\
      have JSR181 annotation or not.\n|=======================================================================\n\
      \nIt also supports many child elements:\n\n[width=\"100%\",cols=\"50%,50%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Value\n\n|`cxf:inInterceptors` |The incoming interceptors for this endpoint.\
      \ A list of `<bean>` or\n`<ref>`.\n\n|`cxf:inFaultInterceptors` |The incoming\
      \ fault interceptors for this endpoint. A list of `<bean>` or\n`<ref>`.\n\n\
      |`cxf:outInterceptors` |The outgoing interceptors for this endpoint. A list\
      \ of `<bean>` or\n`<ref>`.\n\n|`cxf:outFaultInterceptors` |The outgoing fault\
      \ interceptors for this endpoint. A list of `<bean>` or\n`<ref>`.\n\n|`cxf:properties`\
      \ | A properties map which should be supplied to the JAX-WS endpoint. See\n\
      below.\n\n|`cxf:handlers` |A JAX-WS handler list which should be supplied to\
      \ the JAX-WS endpoint.\nSee below.\n\n|`cxf:dataBinding` |You can specify the\
      \ which `DataBinding` will be use in the endpoint.\nThis can be supplied using\
      \ the Spring `<bean class=\"MyDataBinding\"/>`\nsyntax.\n\n|`cxf:binding` |You\
      \ can specify the `BindingFactory` for this endpoint to use. This can\nbe supplied\
      \ using the Spring `<bean class=\"MyBindingFactory\"/>` syntax.\n\n|`cxf:features`\
      \ |The features that hold the interceptors for this endpoint. A list of\nbeans\
      \ or refs\n\n|`cxf:schemaLocations` |The schema locations for endpoint to use.\
      \ A list of schemaLocations\n\n|`cxf:serviceFactory` |The service factory for\
      \ this endpoint to use. This can be supplied using\nthe Spring `<bean class=\"\
      MyServiceFactory\"/>` syntax\n|=======================================================================\n\
      \nYou can find more advanced examples that show how to provide\ninterceptors,\
      \ properties and handlers on the CXF\nhttps://cwiki.apache.org/CXF20DOC/JAX-WS+Configuration[JAX-WS\n\
      Configuration page].\n\n*NOTE* \n You can use cxf:properties to set the camel-cxf\
      \ endpoint's dataFormat\nand setDefaultBus properties from spring configuration\
      \ file.\n\n[source,xml]\n-------------------------------------------------------------------------\n\
      <cxf:cxfEndpoint id=\"testEndpoint\" address=\"http://localhost:9000/router\"\
      \n     serviceClass=\"org.apache.camel.component.cxf.HelloService\"\n     endpointName=\"\
      s:PortName\"\n     serviceName=\"s:ServiceName\"\n     xmlns:s=\"http://www.example.com/test\"\
      >\n     <cxf:properties>\n       <entry key=\"dataFormat\" value=\"MESSAGE\"\
      />\n       <entry key=\"setDefaultBus\" value=\"true\"/>\n     </cxf:properties>\n\
      \   </cxf:cxfEndpoint>\n-------------------------------------------------------------------------\n\
      \n[[CXF-ConfiguringtheCXFEndpointswithApacheAriesBlueprint.]]\nConfiguring the\
      \ CXF Endpoints with Apache Aries Blueprint.\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nSince camel 2.8 there is support for utilizing aries blueprint\ndependency\
      \ injection for your CXF endpoints. \n The schema utilized is very similar to\
      \ the spring schema so the\ntransition is fairly transparent.\n\nExample\n\n\
      [source,xml]\n------------------------------------------------------------------------------------------------------------------------------------\n\
      <blueprint xmlns=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\"\n          \
      \ xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n           xmlns:cm=\"\
      http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0\"\n           xmlns:camel-cxf=\"\
      http://camel.apache.org/schema/blueprint/cxf\"\n       xmlns:cxfcore=\"http://cxf.apache.org/blueprint/core\"\
      \n           xsi:schemaLocation=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\
      \ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd\">\n\n      <camel-cxf:cxfEndpoint\
      \ id=\"routerEndpoint\"\n                     address=\"http://localhost:9001/router\"\
      \n                     serviceClass=\"org.apache.servicemix.examples.cxf.HelloWorld\"\
      >\n        <camel-cxf:properties>\n            <entry key=\"dataFormat\" value=\"\
      MESSAGE\"/>\n        </camel-cxf:properties>\n     </camel-cxf:cxfEndpoint>\n\
      \n     <camel-cxf:cxfEndpoint id=\"serviceEndpoint\"\n            address=\"\
      http://localhost:9000/SoapContext/SoapPort\"\n                     serviceClass=\"\
      org.apache.servicemix.examples.cxf.HelloWorld\">\n    </camel-cxf:cxfEndpoint>\n\
      \n    <camelContext xmlns=\"http://camel.apache.org/schema/blueprint\">\n  \
      \      <route>\n            <from uri=\"routerEndpoint\"/>\n            <to\
      \ uri=\"log:request\"/>\n        </route>\n    </camelContext>\n\n</blueprint>\n\
      ------------------------------------------------------------------------------------------------------------------------------------\n\
      \nCurrently the endpoint element is the first supported CXF\nnamespacehandler.\n\
      \nYou can also use the bean references just as in spring\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------\n\
      <blueprint xmlns=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\"\n          \
      \ xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n           xmlns:cm=\"\
      http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0\"\n           xmlns:jaxws=\"\
      http://cxf.apache.org/blueprint/jaxws\"\n           xmlns:cxf=\"http://cxf.apache.org/blueprint/core\"\
      \n           xmlns:camel=\"http://camel.apache.org/schema/blueprint\"\n    \
      \       xmlns:camelcxf=\"http://camel.apache.org/schema/blueprint/cxf\"\n  \
      \         xsi:schemaLocation=\"\n             http://www.osgi.org/xmlns/blueprint/v1.0.0\
      \ http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd\n             http://cxf.apache.org/blueprint/jaxws\
      \ http://cxf.apache.org/schemas/blueprint/jaxws.xsd\n             http://cxf.apache.org/blueprint/core\
      \ http://cxf.apache.org/schemas/blueprint/core.xsd\n             \">\n\n   \
      \ <camelcxf:cxfEndpoint id=\"reportIncident\"\n                     address=\"\
      /camel-example-cxf-blueprint/webservices/incident\"\n                     wsdlURL=\"\
      META-INF/wsdl/report_incident.wsdl\"\n                     serviceClass=\"org.apache.camel.example.reportincident.ReportIncidentEndpoint\"\
      >\n    </camelcxf:cxfEndpoint>\n\n    <bean id=\"reportIncidentRoutes\" class=\"\
      org.apache.camel.example.reportincident.ReportIncidentRoutes\" />\n\n    <camelContext\
      \ xmlns=\"http://camel.apache.org/schema/blueprint\">\n        <routeBuilder\
      \ ref=\"reportIncidentRoutes\"/>\n    </camelContext>\n\n</blueprint>\n----------------------------------------------------------------------------------------------------------------\n\
      \n[[CXF-Howtomakethecamel-cxfcomponentuselog4jinsteadofjava.util.logging]]\n\
      How to make the camel-cxf component use log4j instead of java.util.logging\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nCXF's default logger is `java.util.logging`. If you want to change it to\n\
      log4j, proceed as follows. Create a file, in the classpath, named\n`META-INF/cxf/org.apache.cxf.logger`.\
      \ This file should contain the\nfully-qualified name of the class,\n`org.apache.cxf.common.logging.Log4jLogger`,\
      \ with no comments, on a\nsingle line.\n\n[[CXF-Howtoletcamel-cxfresponsemessagewithxmlstartdocument]]\n\
      How to let camel-cxf response message with xml start document\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIf you are using some SOAP client such as PHP, you will get this kind of\n\
      error, because CXF doesn't add the XML start document \"<?xml\nversion=\"1.0\"\
      \ encoding=\"utf-8\"?>\"\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      Error:sendSms: SoapFault exception: [Client] looks like we got no XML document\
      \ in [...]\n---------------------------------------------------------------------------------------\n\
      \nTo resolved this issue, you just need to tell StaxOutInterceptor to\nwrite\
      \ the XML start document for you.\n\nYou can add a customer interceptor like\
      \ this and configure it into you\ncamel-cxf endpont\n\nOr adding a message header\
      \ for it like this if you are using *Camel\n2.4*.\n\n[source,java]\n-------------------------------------------------------------------\n\
      \ // set up the response context which force start document\n Map<String, Object>\
      \ map = new HashMap<String, Object>();\n map.put(\"org.apache.cxf.stax.force-start-document\"\
      , Boolean.TRUE);\n exchange.getOut().setHeader(Client.RESPONSE_CONTEXT, map);\n\
      -------------------------------------------------------------------\n\n[[CXF-HowtooverridetheCXFproduceraddressfrommessageheader]]\n\
      How to override the CXF producer address from message header\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe??`camel-cxf`??producer supports to override the services address by\n\
      setting the message with the key of \"CamelDestinationOverrideUrl\".\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------------\n\
      \ // set up the service address from the message header to override the setting\
      \ of CXF endpoint\n exchange.getIn().setHeader(Exchange.DESTINATION_OVERRIDE_URL,\
      \ constant(getServiceAddress()));\n----------------------------------------------------------------------------------------------\n\
      \n[[CXF-Howtoconsumeamessagefromacamel-cxfendpointinPOJOdataformat]]\nHow to\
      \ consume a message from a camel-cxf endpoint in POJO data format\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe `camel-cxf` endpoint consumer POJO data format is based on the\nhttp://cwiki.apache.org/CXF20DOC/invokers.html[cxf\
      \ invoker], so the\nmessage header has a property with the name of\n`CxfConstants.OPERATION_NAME`\
      \ and the message body is a list of the SEI\nmethod parameters.\n\n[[CXF-Howtopreparethemessageforthecamel-cxfendpointinPOJOdataformat]]\n\
      How to prepare the message for the camel-cxf endpoint in POJO data format\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\
      The `camel-cxf` endpoint producer is based on the\nhttps://svn.apache.org/repos/asf/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java[cxf\n\
      client API]. First you need to specify the operation name in the message\nheader,\
      \ then add the method parameters to a list, and initialize the\nmessage with\
      \ this parameter list. The response message's body is a\nmessageContentsList,\
      \ you can get the result from that list.\n\nIf you don't specify the operation\
      \ name in the message header,\n`CxfProducer` will try to use the `defaultOperationName\
      \ `from\n`CxfEndpoint`, if there is no `defaultOperationName` set on\n`CxfEndpoint`,\
      \ it will pickup the first operationName from the Operation\nlist.\n\nIf you\
      \ want to get the object array from the message body, you can get\nthe body\
      \ using `message.getbody(Object[].class)`, as follows:\n\n[[CXF-Howtodealwiththemessageforacamel-cxfendpointinPAYLOADdataformat]]\n\
      How to deal with the message for a camel-cxf endpoint in PAYLOAD data format\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n`PAYLOAD` means that you process the payload message from the SOAP\nenvelope.\
      \ You can use the `Header.HEADER_LIST` as the key to set or get\nthe SOAP headers\
      \ and use the `List<Element>` to set or get SOAP body\nelements. \n `Message.getBody()`\
      \ will return an\n`org.apache.camel.component.cxf.CxfPayload` object, which\
      \ has getters\nfor SOAP message headers and Body elements. This change enables\n\
      decoupling the native CXF message from the Camel message.\n\n[[CXF-HowtogetandsetSOAPheadersinPOJOmode]]\n\
      How to get and set SOAP headers in POJO mode\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n`POJO` means that the data format is a \"list of Java objects\" when the\n\
      Camel-cxf endpoint produces or consumes Camel exchanges. Even though\nCamel\
      \ expose message body as POJOs in this mode, Camel-cxf still\nprovides access\
      \ to read and write SOAP headers. However, since CXF\ninterceptors remove in-band\
      \ SOAP headers from Header list after they\nhave been processed, only out-of-band\
      \ SOAP headers are available to\nCamel-cxf in POJO mode.\n\nThe following example\
      \ illustrate how to get/set SOAP headers. Suppose we\nhave a route that forwards\
      \ from one Camel-cxf endpoint to another. That\nis, SOAP Client -> Camel ->\
      \ CXF service. We can attach two processors to\nobtain/insert SOAP headers at\
      \ (1) before request goes out to the CXF\nservice and (2) before response comes\
      \ back to the SOAP Client. Processor\n(1) and (2) in this example are InsertRequestOutHeaderProcessor\
      \ and\nInsertResponseOutHeaderProcessor. Our route looks like this:\n\nSOAP\
      \ headers are propagated to and from Camel Message headers. The Camel\nmessage\
      \ header name is \"org.apache.cxf.headers.Header.list\" which is a\nconstant\
      \ defined in CXF (org.apache.cxf.headers.Header.HEADER_LIST). The\nheader value\
      \ is a List of CXF SoapHeader objects\n(org.apache.cxf.binding.soap.SoapHeader).\
      \ The following snippet is the\nInsertResponseOutHeaderProcessor (that insert\
      \ a new SOAP header in the\nresponse message). The way to access SOAP headers\
      \ in both\nInsertResponseOutHeaderProcessor and InsertRequestOutHeaderProcessor\
      \ are\nactually the same. The only difference between the two processors is\n\
      setting the direction of the inserted SOAP header.\n\n[[CXF-HowtogetandsetSOAPheadersinPAYLOADmode]]\n\
      How to get and set SOAP headers in PAYLOAD mode\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nWe've already shown how to access SOAP message (CxfPayload object) in\nPAYLOAD\
      \ mode (See \"How to deal with the message for a camel-cxf endpoint\nin PAYLOAD\
      \ data format\").\n\nOnce you obtain a CxfPayload object, you can invoke the\n\
      CxfPayload.getHeaders() method that returns a List of DOM Elements (SOAP\nheaders).\n\
      \nSince Camel 2.16.0, you can also use the same way as described in\nsub-chapter\
      \ \"How to get and set SOAP headers in POJO mode\" to set or get\nthe SOAP headers.\
      \ So, you can use now the\nheader??\"org.apache.cxf.headers.Header.list\" to\
      \ get and set a list of\nSOAP headers.This does also mean that if you have a\
      \ route??that forwards\nfrom one Camel-cxf endpoint to another (SOAP Client\
      \ -> Camel -> CXF\nservice), now also the SOAP headers sent by the SOAP client\
      \ are\nforwarded to the CXF service. If you do not want that these headers are\n\
      forwarded you have to remove them in the Camel header\n\"org.apache.cxf.headers.Header.list\"\
      .\n\n[[CXF-SOAPheadersarenotavailableinMESSAGEmode]]\nSOAP headers are not available\
      \ in MESSAGE mode\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSOAP headers\
      \ are not available in MESSAGE mode as SOAP processing is\nskipped.\n\n[[CXF-HowtothrowaSOAPFaultfromCamel]]\n\
      How to throw a SOAP Fault from Camel\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIf you are using a `camel-cxf` endpoint to consume the SOAP request, you\n\
      may need to throw the SOAP Fault from the camel context. +\n Basically, you\
      \ can use the `throwFault` DSL to do that; it works for\n`POJO`, `PAYLOAD` and\
      \ `MESSAGE` data format. +\n You can define the soap fault like this\n\nThen\
      \ throw it as you like\n\nIf your CXF endpoint is working in the `MESSAGE` data\
      \ format, you could\nset the the SOAP Fault message in the message body and\
      \ set the response\ncode in the message header.\n\nSame for using POJO data\
      \ format. You can set the SOAPFault on the out\nbody and also indicate it's\
      \ a fault by calling Message.setFault(true):\n\n[[CXF-Howtopropagateacamel-cxfendpointrequestandresponsecontext]]\n\
      How to propagate a camel-cxf endpoint's request and response context\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nhttps://svn.apache.org/repos/asf/cxf/trunk/api/src/main/java/org/apache/cxf/endpoint/Client.java[cxf\n\
      client API] provides a way to invoke the operation with request and\nresponse\
      \ context. If you are using a `camel-cxf` endpoint producer to\ninvoke the outside\
      \ web service, you can set the request context and get\nresponse context with\
      \ the following code:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------\n\
      \        CxfExchange exchange = (CxfExchange)template.send(getJaxwsEndpointUri(),\
      \ new Processor() {\n             public void process(final Exchange exchange)\
      \ {\n                 final List<String> params = new ArrayList<String>();\n\
      \                 params.add(TEST_MESSAGE);\n                 // Set the request\
      \ context to the inMessage\n                 Map<String, Object> requestContext\
      \ = new HashMap<String, Object>();\n                 requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,\
      \ JAXWS_SERVER_ADDRESS);\n                 exchange.getIn().setBody(params);\n\
      \                 exchange.getIn().setHeader(Client.REQUEST_CONTEXT , requestContext);\n\
      \                 exchange.getIn().setHeader(CxfConstants.OPERATION_NAME, GREET_ME_OPERATION);\n\
      \             }\n         });\n         org.apache.camel.Message out = exchange.getOut();\n\
      \         // The output is an object array, the first element of the array is\
      \ the return value\n         Object\\[\\] output = out.getBody(Object\\[\\].class);\n\
      \         LOG.info(\"Received output text: \" + output\\[0\\]);\n         //\
      \ Get the response context form outMessage\n         Map<String, Object> responseContext\
      \ = CastUtils.cast((Map)out.getHeader(Client.RESPONSE_CONTEXT));\n         assertNotNull(responseContext);\n\
      \         assertEquals(\"Get the wrong wsdl opertion name\", \"{http://apache.org/hello_world_soap_http}greetMe\"\
      ,\n                      responseContext.get(\"javax.xml.ws.wsdl.operation\"\
      ).toString());\n-------------------------------------------------------------------------------------------------------------\n\
      \n[[CXF-AttachmentSupport]]\nAttachment Support\n^^^^^^^^^^^^^^^^^^\n\n*POJO\
      \ Mode:* Both SOAP with Attachment and MTOM are supported (see\nexample in Payload\
      \ Mode for enabling MTOM).?? However, SOAP with\nAttachment is not tested.??\
      \ Since attachments are marshalled and\nunmarshalled into POJOs, users typically\
      \ do not need to deal with the\nattachment themself.?? Attachments are propagated\
      \ to Camel message's\nattachments if the MTOM is not enabled, since 2.12.3.??\
      \ So, it is\npossible to retreive attachments by Camel Message API\n\n[source,java]\n\
      --------------------------------------------\nDataHandler Message.getAttachment(String\
      \ id)\n--------------------------------------------\n\n*Payload Mode:* MTOM\
      \ is supported since 2.1. Attachments can be\nretrieved by Camel Message APIs\
      \ mentioned above. SOAP with Attachment\n(SwA) is supported and attachments\
      \ can be retrieved since 2.5. SwA is\nthe default (same as setting the CXF endpoint\
      \ property \"mtom-enabled\" to\nfalse).??\n\nTo enable MTOM, set the CXF endpoint\
      \ property \"mtom-enabled\" to _true_.\n(I believe you can only do it with Spring.)\n\
      \nYou can produce a Camel message with attachment to send to a CXF\nendpoint\
      \ in Payload mode.\n\nYou can also consume a Camel message received from a CXF\
      \ endpoint in\nPayload mode.\n\n*Message Mode:* Attachments are not supported\
      \ as it does not process the\nmessage at all.\n\n*CXF_MESSAGE Mode*: MTOM is\
      \ supported, and Attachments can be retrieved\nby Camel Message APIs mentioned\
      \ above. Note that when receiving a\nmultipart (i.e. MTOM) message the default\
      \ SOAPMessage to String\nconverter will provide the complete multipart payload\
      \ on the body. If\nyou require just the SOAP XML as a String, you can set the\
      \ message body\nwith message.getSOAPPart(), and Camel convert can do the rest\
      \ of work\nfor you.\n\n[[CXF-StreamingSupportinPAYLOADmode]]\nStreaming Support\
      \ in PAYLOAD mode\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn 2.8.2, the camel-cxf\
      \ component now supports streaming of incoming\nmessages when using PAYLOAD\
      \ mode. Previously, the incoming messages\nwould have been completely DOM parsed.\
      \ For large messages, this is time\nconsuming and uses a significant amount\
      \ of memory. Starting in 2.8.2,\nthe incoming messages can remain as a javax.xml.transform.Source\
      \ while\nbeing routed and, if nothing modifies the payload, can then be directly\n\
      streamed out to the target destination. For common \"simple proxy\" use\ncases\
      \ (example: from(\"cxf:...\").to(\"cxf:...\")), this can provide very\nsignificant\
      \ performance increases as well as significantly lowered\nmemory requirements.\n\
      \nHowever, there are cases where streaming may not be appropriate or\ndesired.\
      \ Due to the streaming nature, invalid incoming XML may not be\ncaught until\
      \ later in the processing chain. Also, certain actions may\nrequire the message\
      \ to be DOM parsed anyway (like WS-Security or message\ntracing and such) in\
      \ which case the advantages of the streaming is\nlimited. At this point, there\
      \ are two ways to control the streaming:\n\n* Endpoint property: you can add\
      \ \"allowStreaming=false\" as an endpoint\nproperty to turn the streaming on/off.\n\
      \n* Component property: the CxfComponent object also has an allowStreaming\n\
      property that can set the default for endpoints created from that\ncomponent.\n\
      \nGlobal system property: you can add a system property of\n\"org.apache.camel.component.cxf.streaming\"\
      \ to \"false\" to turn if off.\nThat sets the global default, but setting the\
      \ endpoint property above\nwill override this value for that endpoint.\n\n[[CXF-UsingthegenericCXFDispatchmode]]\n\
      Using the generic CXF Dispatch mode\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\
      From 2.8.0, the camel-cxf component supports the generic\nhttps://cxf.apache.org/docs/jax-ws-dispatch-api.html[CXF\
      \ dispatch\nmode]??that can transport messages of arbitrary structures (i.e.,\
      \ not\nbound to a specific XML schema). To use this mode, you simply omit\n\
      specifying the wsdlURL and serviceClass attributes of the CXF endpoint.\n\n\
      [source,xml]\n-------------------------------------------------------------------------------------------\n\
      <cxf:cxfEndpoint id=\"testEndpoint\" address=\"http://localhost:9000/SoapContext/SoapAnyPort\"\
      >\n     <cxf:properties>\n       <entry key=\"dataFormat\" value=\"PAYLOAD\"\
      />\n     </cxf:properties>\n   </cxf:cxfEndpoint>\n-------------------------------------------------------------------------------------------\n\
      \nIt is noted that the default CXF dispatch client does not send a\nspecific\
      \ SOAPAction header. Therefore, when the target service requires\na specific\
      \ SOAPAction value, it is supplied in the Camel header using\nthe key SOAPAction\
      \ (case-insensitive).\n\n??\n\n[[CXF-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-cxfrs
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: cxfrs
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: cxfrs
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: cxfrs
          spec:
            containers:
            - image: fabric8/connector-cxfrs:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: cxfrs
        syntax: cxfrs:beanId:address
        title: CXF-RS
        description: The cxfrs component is used for JAX-RS REST services using Apache CXF.
        label: rest
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.cxf.jaxrs.CxfRsComponent
        groupId: org.apache.camel
        artifactId: camel-cxf
        version: 2.18.1
      componentProperties:
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        beanId:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To lookup an existing configured CxfRsEndpoint. Must used bean:
            as prefix.'
        address:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The service publish address.
        features:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<org.apache.cxf.feature.Feature>
          deprecated: false
          secret: false
          description: Set the feature list to the CxfRs endpoint.
        loggingFeatureEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option enables CXF Logging Feature which writes inbound and outbound REST messages to log.
        loggingSizeLimit:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To limit the total size of number of bytes the logger will output when logging feature has been enabled.
        modelRef:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to specify the model file which is useful for the resource class without annotation. When using this option then the service class can be omitted to emulate document-only endpoints
        providers:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set custom JAX-RS provider(s) list to the CxfRs endpoint. You can specify a string with a list of providers to lookup in the registy separated by comma.
        resourceClasses:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.Class<?>>
          deprecated: false
          secret: false
          description: The resource classes which you want to export as REST service. Multiple classes can be separated by comma.
        schemaLocations:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: Sets the locations of the schema(s) which can be used to validate the incoming XML or JAXB-driven JSON.
        skipFaultLogging:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option controls whether the PhaseInterceptorChain skips logging the Fault that it catches.
        bindingStyle:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.cxf.jaxrs.BindingStyle
          enum:
          - SimpleConsumer
          - Default
          - Custom
          deprecated: false
          secret: false
          defaultValue: Default
          description: 'Sets how requests and responses will be mapped to/from Camel. Two
            values are possible: SimpleConsumer: This binding style processes request parameters
            multiparts etc. and maps them to IN headers IN attachments and to the message
            body. It aims to eliminate low-level processing of org.apache.cxf.message.MessageContentsList.
            It also also adds more flexibility and simplicity to the response mapping. Only
            available for consumers. Default: The default style. For consumers this passes
            on a MessageContentsList to the route requiring low-level processing in the
            route. This is the traditional binding style which simply dumps the org.apache.cxf.message.MessageContentsList
            coming in from the CXF stack onto the IN message body. The user is then responsible
            for processing it according to the contract defined by the JAX-RS method signature.
            Custom: allows you to specify a custom binding through the binding option.'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        hostnameVerifier:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: javax.net.ssl.HostnameVerifier
          deprecated: false
          secret: false
          description: The hostname verifier to be used. Use the notation to reference a HostnameVerifier from the registry.
        sslContextParameters:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: The Camel SSL setting reference. Use the notation to reference the SSL Context.
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: This option tells the CxfRsProducer to inspect return codes and will generate an Exception if the return code is larger than 207.
        httpClientAPI:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If it is true the CxfRsProducer will use the HttpClientAPI to invoke the service. If it is false the CxfRsProducer will use the ProxyClientAPI to invoke the service
        ignoreDeleteMethodMessageBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option is used to tell CxfRsProducer to ignore the message body of the DELETE method when using HTTP API.
        maxClientCacheSize:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: This option allows you to configure the maximum size of the cache. The implementation caches CXF clients or ClientFactoryBean in CxfProvider and CxfRsProvider.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cxf.jaxrs.CxfRsBinding
          deprecated: false
          secret: false
          description: To use a custom CxfBinding to control the binding between Camel Message and CXF Message.
        bus:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.cxf.Bus
          deprecated: false
          secret: false
          description: To use a custom configured CXF Bus.
        continuationTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: This option is used to set the CXF continuation timeout which could be used in CxfConsumer by default when the CXF server is using Jetty or Servlet transport.
        cxfRsEndpointConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.cxf.jaxrs.CxfRsEndpointConfigurer
          deprecated: false
          secret: false
          description: This option could apply the implementation of org.apache.camel.component.cxf.jaxrs.CxfRsEndpointConfigurer which supports to configure the CXF endpoint in programmatic way. User can configure the CXF server and client by implementing configureServer/Client method of CxfEndpointConfigurer.
        defaultBus:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Will set the default bus when CXF endpoint create a bus by itself
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        performInvocation:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When the option is true Camel will perform the invocation of the resource class instance and put the response object into the exchange for further processing.
        propagateContexts:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When the option is true JAXRS UriInfo HttpHeaders Request and SecurityContext contexts will be available to custom CXFRS processors as typed Camel exchange properties. These contexts can be used to analyze the current requests using JAX-RS API.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[CXFRS-CXFRSComponent]]\nCXFRS Component\n~~~~~~~~~~~~~~~\n\
      \n[Note]\n====\n\n\nWhen using CXF as a consumer, the link:cxf-bean-component.html[CXF\
      \ Bean\nComponent] allows you to factor out how message payloads are received\n\
      from their processing as a RESTful or SOAP web service. This has the\npotential\
      \ of using a multitude of transports to consume web services.\nThe bean component's\
      \ configuration is also simpler and provides the\nfastest method to implement\
      \ web services using Camel and CXF.\n\n====\n\nThe *cxfrs:* component provides\
      \ integration with\nhttp://cxf.apache.org[Apache CXF] for connecting to JAX-RS\
      \ 1.1 and 2.0\nservices hosted in CXF.\n\nMaven users will need to add the following\
      \ dependency to their pom.xml\nfor this component:\n\n[source,xml]\n-------------------------------------------------------------------------------------\n\
      <dependency>\n   <groupId>org.apache.camel</groupId>\n   <artifactId>camel-cxf</artifactId>\n\
      \   <version>x.x.x</version>  <!-- use the same version as your Camel core version\
      \ -->\n</dependency>\n-------------------------------------------------------------------------------------\n\
      \n[[CXFRS-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-----------------------\n\
      cxfrs://address?options\n-----------------------\n\nWhere *address* represents\
      \ the CXF endpoint's address\n\n[source,java]\n---------------------\ncxfrs:bean:rsEndpoint\n\
      ---------------------\n\nWhere *rsEndpoint* represents the spring bean's name\
      \ which presents the\nCXFRS client or server\n\nFor either style above, you\
      \ can append options to the URI as follows:\n\n[source,java]\n------------------------------------------------------------------\n\
      cxfrs:bean:cxfEndpoint?resourceClasses=org.apache.camel.rs.Example\n------------------------------------------------------------------\n\
      \n[[CXFRS-Options]]\nOptions\n^^^^^^^\n\n\n\n// component options: START\nThe\
      \ CXF-RS component supports 1 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| headerFilterStrategy | HeaderFilterStrategy\
      \ | To use a custom HeaderFilterStrategy to filter header to and from Camel\
      \ message.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The CXF-RS component supports 29 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| beanId | common |  | String\
      \ | To lookup an existing configured CxfRsEndpoint. Must used bean: as prefix.\n\
      | address | common |  | String | The service publish address.\n| features |\
      \ common |  | List | Set the feature list to the CxfRs endpoint.\n| loggingFeatureEnabled\
      \ | common | false | boolean | This option enables CXF Logging Feature which\
      \ writes inbound and outbound REST messages to log.\n| loggingSizeLimit | common\
      \ |  | int | To limit the total size of number of bytes the logger will output\
      \ when logging feature has been enabled.\n| modelRef | common |  | String |\
      \ This option is used to specify the model file which is useful for the resource\
      \ class without annotation. When using this option then the service class can\
      \ be omitted to emulate document-only endpoints\n| providers | common |  | String\
      \ | Set custom JAX-RS provider(s) list to the CxfRs endpoint. You can specify\
      \ a string with a list of providers to lookup in the registy separated by comma.\n\
      | resourceClasses | common |  | List | The resource classes which you want to\
      \ export as REST service. Multiple classes can be separated by comma.\n| schemaLocations\
      \ | common |  | List | Sets the locations of the schema(s) which can be used\
      \ to validate the incoming XML or JAXB-driven JSON.\n| skipFaultLogging | common\
      \ | false | boolean | This option controls whether the PhaseInterceptorChain\
      \ skips logging the Fault that it catches.\n| bindingStyle | consumer | Default\
      \ | BindingStyle | Sets how requests and responses will be mapped to/from Camel.\
      \ Two values are possible: SimpleConsumer: This binding style processes request\
      \ parameters multiparts etc. and maps them to IN headers IN attachments and\
      \ to the message body. It aims to eliminate low-level processing of org.apache.cxf.message.MessageContentsList.\
      \ It also also adds more flexibility and simplicity to the response mapping.\
      \ Only available for consumers. Default: The default style. For consumers this\
      \ passes on a MessageContentsList to the route requiring low-level processing\
      \ in the route. This is the traditional binding style which simply dumps the\
      \ org.apache.cxf.message.MessageContentsList coming in from the CXF stack onto\
      \ the IN message body. The user is then responsible for processing it according\
      \ to the contract defined by the JAX-RS method signature. Custom: allows you\
      \ to specify a custom binding through the binding option.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| hostnameVerifier | producer |  | HostnameVerifier\
      \ | The hostname verifier to be used. Use the notation to reference a HostnameVerifier\
      \ from the registry.\n| sslContextParameters | producer |  | SSLContextParameters\
      \ | The Camel SSL setting reference. Use the notation to reference the SSL Context.\n\
      | throwExceptionOnFailure | producer | true | boolean | This option tells the\
      \ CxfRsProducer to inspect return codes and will generate an Exception if the\
      \ return code is larger than 207.\n| httpClientAPI | producer (advanced) | true\
      \ | boolean | If it is true the CxfRsProducer will use the HttpClientAPI to\
      \ invoke the service. If it is false the CxfRsProducer will use the ProxyClientAPI\
      \ to invoke the service\n| ignoreDeleteMethodMessageBody | producer (advanced)\
      \ | false | boolean | This option is used to tell CxfRsProducer to ignore the\
      \ message body of the DELETE method when using HTTP API.\n| maxClientCacheSize\
      \ | producer (advanced) | 10 | int | This option allows you to configure the\
      \ maximum size of the cache. The implementation caches CXF clients or ClientFactoryBean\
      \ in CxfProvider and CxfRsProvider.\n| binding | advanced |  | CxfRsBinding\
      \ | To use a custom CxfBinding to control the binding between Camel Message\
      \ and CXF Message.\n| bus | advanced |  | Bus | To use a custom configured CXF\
      \ Bus.\n| continuationTimeout | advanced | 30000 | long | This option is used\
      \ to set the CXF continuation timeout which could be used in CxfConsumer by\
      \ default when the CXF server is using Jetty or Servlet transport.\n| cxfRsEndpointConfigurer\
      \ | advanced |  | CxfRsEndpointConfigurer | This option could apply the implementation\
      \ of org.apache.camel.component.cxf.jaxrs.CxfRsEndpointConfigurer which supports\
      \ to configure the CXF endpoint in programmatic way. User can configure the\
      \ CXF server and client by implementing configureServer/Client method of CxfEndpointConfigurer.\n\
      | defaultBus | advanced | false | boolean | Will set the default bus when CXF\
      \ endpoint create a bus by itself\n| headerFilterStrategy | advanced |  | HeaderFilterStrategy\
      \ | To use a custom HeaderFilterStrategy to filter header to and from Camel\
      \ message.\n| performInvocation | advanced | false | boolean | When the option\
      \ is true Camel will perform the invocation of the resource class instance and\
      \ put the response object into the exchange for further processing.\n| propagateContexts\
      \ | advanced | false | boolean | When the option is true JAXRS UriInfo HttpHeaders\
      \ Request and SecurityContext contexts will be available to custom CXFRS processors\
      \ as typed Camel exchange properties. These contexts can be used to analyze\
      \ the current requests using JAX-RS API.\n| synchronous | advanced | false |\
      \ boolean | Sets whether synchronous processing should be strictly used or Camel\
      \ is allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\nYou can also configure the CXF REST\
      \ endpoint through the spring\nconfiguration. Since there are lots of difference\
      \ between the CXF REST\nclient and CXF REST Server, we provide different configuration\
      \ for\nthem. Please check out the\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd[schema\n\
      file] and https://cwiki.apache.org/CXF20DOC/JAX-RS[CXF JAX-RS\ndocumentation]\
      \ for more information.\n\n[[CXFRS-HowtoconfiguretheRESTendpointinCamel]]\n\
      How to configure the REST endpoint in Camel\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIn\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd[camel-cxf\n\
      schema file], there are two elements for the REST endpoint definition.\n*cxf:rsServer*\
      \ for REST consumer, *cxf:rsClient* for REST producer. +\n You can find a Camel\
      \ REST service route configuration example here.\n\n[[CXFRS-HowtooverridetheCXFproduceraddressfrommessageheader]]\n\
      How to override the CXF producer address from message header\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe??`camel-cxfrs`??producer supports to override the services address by\n\
      setting the message with the key of \"CamelDestinationOverrideUrl\".\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------------\n\
      \ // set up the service address from the message header to override the setting\
      \ of CXF endpoint\n exchange.getIn().setHeader(Exchange.DESTINATION_OVERRIDE_URL,\
      \ constant(getServiceAddress()));\n----------------------------------------------------------------------------------------------\n\
      \n[[CXFRS-ConsumingaRESTRequest-SimpleBindingStyle]]\nConsuming a REST Request\
      \ - Simple Binding Style\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\
      *Available as of Camel 2.11*\n\nThe `Default` binding style is rather low-level,\
      \ requiring the user to\nmanually process the `MessageContentsList` object coming\
      \ into the route.\nThus, it tightly couples the route logic with the method\
      \ signature and\nparameter indices of the JAX-RS operation. Somewhat inelegant,\
      \ difficult\nand error-prone.\n\nIn contrast, the `SimpleConsumer` binding style\
      \ performs the following\nmappings, in order to *make the request data more\
      \ accessible* to you\nwithin the Camel Message:\n\n* JAX-RS Parameters (@HeaderParam,\
      \ @QueryParam, etc.) are injected as IN\nmessage headers. The header name matches\
      \ the value of the annotation.\n* The request entity (POJO or other type) becomes\
      \ the IN message body.\nIf a single entity cannot be identified in the JAX-RS\
      \ method signature,\nit falls back to the original `MessageContentsList`.\n\
      * Binary `@Multipart` body parts become IN message attachments,\nsupporting\
      \ `DataHandler`, `InputStream`, `DataSource` and CXF's\n`Attachment` class.\n\
      * Non-binary `@Multipart` body parts are mapped as IN message headers.\nThe\
      \ header name matches the Body Part name.\n\nAdditionally, the following rules\
      \ apply to the *Response mapping*:\n\n* If the message body type is different\
      \ to `javax.ws.rs.core.Response`\n(user-built response), a new `Response` is\
      \ created and the message body\nis set as the entity (so long it's not null).\
      \ The response status code\nis taken from the `Exchange.HTTP_RESPONSE_CODE`\
      \ header, or defaults to\n200 OK if not present.\n* If the message body type\
      \ is equal to `javax.ws.rs.core.Response`, it\nmeans that the user has built\
      \ a custom response, and therefore it is\nrespected and it becomes the final\
      \ response.\n* In all cases, Camel headers permitted by custom or default\n\
      `HeaderFilterStrategy` are added to the HTTP response.\n\n[[CXFRS-EnablingtheSimpleBindingStyle]]\n\
      Enabling the Simple Binding Style\n+++++++++++++++++++++++++++++++++\n\nThis\
      \ binding style can be activated by setting the `bindingStyle`\nparameter in\
      \ the consumer endpoint to value `SimpleConsumer`:\n\n[source,java]\n---------------------------------------------------------\n\
      \  from(\"cxfrs:bean:rsServer?bindingStyle=SimpleConsumer\")\n    .to(\"log:TEST?showAll=true\"\
      );\n---------------------------------------------------------\n\n[[CXFRS-Examplesofrequestbindingwithdifferentmethodsignatures]]\n\
      Examples of request binding with different method signatures\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nBelow is a list of method signatures along with the expected result from\n\
      the Simple binding.\n\n*`public Response doAction(BusinessObject request);`*\
      \ +\n Request payload is placed in IN message body, replacing the original\n\
      MessageContentsList.\n\n*`public Response doAction(BusinessObject request, @HeaderParam(\"\
      abcd\") String abcd, @QueryParam(\"defg\") String defg);`* \n Request payload\
      \ placed in IN message body, replacing the original\nMessageContentsList. Both\
      \ request params mapped as IN message headers\nwith names abcd and defg.\n\n\
      *`public Response doAction(@HeaderParam(\"abcd\") String abcd, @QueryParam(\"\
      defg\") String defg);`* \n Both request params mapped as IN message headers\
      \ with names abcd and\ndefg. The original MessageContentsList is preserved,\
      \ even though it only\ncontains the 2 parameters.\n\n*`public Response doAction(@Multipart(value=\"\
      body1\") BusinessObject request, @Multipart(value=\"body2\") BusinessObject\
      \ request2);`* \n The first parameter is transferred as a header with name body1,\
      \ and the\nsecond one is mapped as header body2. The original MessageContentsList\n\
      is preserved as the IN message body.\n\n*`public Response doAction(InputStream\
      \ abcd);`* \n The InputStream is unwrapped from the MessageContentsList and\
      \ preserved\nas the IN message body.\n\n*`public Response doAction(DataHandler\
      \ abcd);`* \n The DataHandler is unwrapped from the MessageContentsList and\
      \ preserved\nas the IN message body.\n\n[[CXFRS-MoreexamplesoftheSimpleBindingStyle]]\n\
      More examples of the Simple Binding Style\n+++++++++++++++++++++++++++++++++++++++++\n\
      \nGiven a JAX-RS resource class with this method:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \    @POST @Path(\"/customers/{type}\")\n    public Response newCustomer(Customer\
      \ customer, @PathParam(\"type\") String type, @QueryParam(\"active\") @DefaultValue(\"\
      true\") boolean active) {\n        return null;\n    }\n------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nServiced by the following route:\n\n[source,java]\n--------------------------------------------------------------------------------------------\n\
      \    from(\"cxfrs:bean:rsServer?bindingStyle=SimpleConsumer\")\n        .recipientList(simple(\"\
      direct:${header.operationName}\"));\n\n    from(\"direct:newCustomer\")\n  \
      \      .log(\"Request: type=${header.type}, active=${header.active}, customerData=${body}\"\
      );\n--------------------------------------------------------------------------------------------\n\
      \nThe following HTTP request with XML payload (given that the Customer DTO\n\
      is JAXB-annotated):\n\n[source,xml]\n-------------------------------------\n\
      POST /customers/gold?active=true\n\nPayload:\n<Customer>\n  <fullName>Raul Kripalani</fullName>\n\
      \  <country>Spain</country>\n  <project>Apache Camel</project>\n</Customer>\n\
      -------------------------------------\n\nWill print the message:\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------\n\
      Request: type=gold, active=true, customerData=<Customer.toString() representation>\n\
      ----------------------------------------------------------------------------------\n\
      \nFor more examples on how to process requests and write responses can be\n\
      found\nhttps://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/simplebinding/[here].\n\
      \n[[CXFRS-ConsumingaRESTRequest-DefaultBindingStyle]]\nConsuming a REST Request\
      \ - Default Binding Style\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe??https://cwiki.apache.org/CXF20DOC/JAX-RS[CXF JAXRS front end]\nimplements\
      \ the https://jsr311.java.net/[JAX-RS (JSR-311) API], so we can\nexport the\
      \ resources classes as a REST service. And we leverage the\nhttp://cwiki.apache.org/confluence/display/CXF20DOC/Invokers[CXF\
      \ Invoker\nAPI] to turn a REST request into a normal Java object method\ninvocation.\
      \ +\n Unlike the link:restlet.html[Camel Restlet]??component, you don't need\n\
      to specify the URI template within your endpoint, CXF takes care of the\nREST\
      \ request URI to resource class method mapping according to the\nJSR-311 specification.\
      \ All you need to do in Camel is delegate this\nmethod request to a right processor\
      \ or endpoint.\n\nHere is an example of a CXFRS route...\n\nAnd the corresponding\
      \ resource class used to configure the endpoint...\n\nINFO:*Note about resource\
      \ classes*\n\nBy default, JAX-RS resource classes are *only*used to configure\
      \ JAX-RS\nproperties. Methods will *not* be executed during routing of messages\
      \ to\nthe endpoint. Instead, it is the responsibility of the route to do all\n\
      processing.\n\nNote that starting from Camel 2.15 it is also sufficient to provide\
      \ an\ninterface only as opposed to a no-op service implementation class for\n\
      the default mode.\n\nStarting from Camel 2.15, if a *performInvocation* option\
      \ is enabled,\nthe service implementation will be invoked first, the response\
      \ will be\nset on the Camel exchange and the route execution will continue as\n\
      usual. This can be useful for integrating the existing JAX-RS implementations\
      \ into Camel routes and\nfor post-processing JAX-RS Responses in custom processors.\n\
      \n[[CXFRS-HowtoinvoketheRESTservicethroughcamel-cxfrsproducer]]\nHow to invoke\
      \ the REST service through camel-cxfrs producer\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe??https://cwiki.apache.org/CXF20DOC/JAX-RS[CXF JAXRS front end]\nimplements\n\
      https://cwiki.apache.org/CXF20DOC/JAX-RS+Client+API#JAX-RSClientAPI-Proxy-basedAPI[a\n\
      proxy-based client API], with this API you can invoke the remote REST\nservice\
      \ through a proxy. The??`camel-cxfrs` producer is based on this\nhttps://cwiki.apache.org/CXF20DOC/JAX-RS+Client+API#JAX-RSClientAPI-Proxy-basedAPI[proxy\n\
      API]. +\n You just need to specify the operation name in the message header\
      \ and\nprepare the parameter in the message body, the camel-cxfrs??producer\
      \ will\ngenerate right REST request for you.\n\nHere is an example:\n\nThe??https://cwiki.apache.org/CXF20DOC/JAX-RS[CXF\
      \ JAXRS front end] also\nprovides\nhttps://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Client+API#JAX-RSClientAPI-CXFWebClientAPI[a\n\
      http centric client API].??You can also invoke this API from\n`camel-cxfrs`\
      \ producer. You need to specify the\nhttp://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.html#HTTP_PATH[HTTP_PATH]\n\
      and\nthe??http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.html#HTTP_METHOD[HTTP_METHOD]??and\n\
      let the??producer use the http centric client API by using the URI option\n\
      *httpClientAPI* or by setting the message header\nhttp://camel.apache.org/maven/current/camel-cxf/apidocs/org/apache/camel/component/cxf/CxfConstants.html#CAMEL_CXF_RS_USING_HTTP_API[CxfConstants.CAMEL_CXF_RS_USING_HTTP_API].\n\
      You can turn the response object to the type class specified with the\nmessage\n\
      header??http://camel.apache.org/maven/current/camel-cxf/apidocs/org/apache/camel/component/cxf/CxfConstants.html#CAMEL_CXF_RS_RESPONSE_CLASS[CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS].\n\
      \nFrom Camel 2.1, we also support to specify the query parameters from\ncxfrs\
      \ URI for the CXFRS http centric client.\n\nError formatting macro: snippet:\
      \ java.lang.IndexOutOfBoundsException:\nIndex: 20, Size: 20\n\nTo support the\
      \ Dynamical routing, you can override the URI's query\nparameters by using the\
      \ CxfConstants.CAMEL_CXF_RS_QUERY_MAP header to\nset the parameter map for it.\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-dataformat
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: dataformat
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: dataformat
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: dataformat
          spec:
            containers:
            - image: fabric8/connector-dataformat:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: dataformat
        syntax: dataformat:name:operation
        title: Data Format
        description: The dataformat component is used for working with Data Formats as if it was a regular Component supporting Endpoints and URIs.
        label: core,transformation
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.dataformat.DataFormatComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of data format
        operation:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - marshal
          - unmarshal
          deprecated: false
          secret: false
          description: Operation to use either marshal or unmarshal
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[DataFormatComponent-DataFormatComponent]]
      Data Format Component
      ~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *dataformat:* component allows to use link:data-format.html[Data
      Format] as a Camel link:component.html[Component].

      [[DataFormatComponent-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------------
      dataformat:name:(marshal|unmarshal)[?options]
      ---------------------------------------------

      Where *name* is the name of the link:data-format.html[Data Format]. And
      then followed by the operation which must either be `marshal` or
      `unmarshal`. The options is used for configuring the link:data-format.html[Data
      Format] in use. See the link:data-format.html[Data Format] documentation
      for which options it support.

      [[DataFormatComponent-Options]]
      DataFormat Options
      ^^^^^^^^^^^^^^^^^^


      // component options: START
      The Data Format component has no options.
      // component options: END



      // endpoint options: START
      The Data Format component supports 3 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | producer |  | String | *Required* Name of data format
      | operation | producer |  | String | *Required* Operation to use either marshal or unmarshal
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[DataFormatComponent-Samples]]
      Samples
      ^^^^^^^

      For example to use the link:jaxb.html[JAXB] link:data-format.html[Data
      Format] we can do as follows:

      [source,java]
      -------------------------------------------------------------
      from("activemq:My.Queue").
        to("dataformat:jaxb:unmarshal?contextPath=com.acme.model").
        to("mqseries:Another.Queue");
      -------------------------------------------------------------

      And in XML DSL you do:

      [source,xml]
      -----------------------------------------------------------------------
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
          <from uri="activemq:My.Queue"/>
          <to uri="dataformat:jaxb:unmarshal?contextPath=com.acme.model"/>
          <to uri="mqseries:Another.Queue"/>
        </route>
      </camelContext>
      -----------------------------------------------------------------------

      [[DataFormatComponent-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
      * link:data-format.html[Data Format]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-dataset
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: dataset
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: dataset
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: dataset
          spec:
            containers:
            - image: fabric8/connector-dataset:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: dataset
        syntax: dataset:name
        title: Dataset
        description: The dataset component provides a mechanism to easily perform load & soak testing of your system.
        label: core,testing
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.dataset.DataSetComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          required: true
          type: object
          javaType: org.apache.camel.component.dataset.DataSet
          deprecated: false
          secret: false
          description: Name of DataSet to lookup in the registry
        dataSetIndex:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - strict
          - lenient
          - off
          deprecated: false
          secret: false
          defaultValue: lenient
          description: 'Controls the behaviour of the CamelDataSetIndex header. For Consumers:
            - off = the header will not be set - strict/lenient = the header will be set
            For Producers: - off = the header value will not be verified and will not be
            set if it is not present = strict = the header value must be present and will
            be verified = lenient = the header value will be verified if it is present and
            will be set if it is not present'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        initialDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Time period in millis to wait before starting sending messages.
        minRate:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Wait until the DataSet contains at least this number of messages
        preloadSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets how many messages should be preloaded (sent) before the route completes its initialization
        produceDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "3"
          description: Allows a delay to be specified which causes a delay when a message is sent by the consumer (to simulate slow processing)
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        assertPeriod:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets a grace period after which the mock endpoint will re-assert to ensure the preliminary assertion is still valid. This is used for example to assert that exactly a number of messages arrives. For example if link expectedMessageCount(int) was set to 5 then the assertion is satisfied when 5 or more message arrives. To ensure that exactly 5 messages arrives then you would need to wait a little period to ensure no further message arrives. This is what you can use this link setAssertPeriod(long) method for. By default this period is disabled.
        consumeDelay:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Allows a delay to be specified which causes a delay when a message is consumed by the producer (to simulate slow processing)
        expectedCount:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies the expected number of message exchanges that should be
            received by this endpoint. Beware: If you want to expect that 0 messages then
            take extra care as 0 matches when the tests starts so you need to set a assert
            period time to let the test run for a while to make sure there are still no
            messages arrived; for that use link setAssertPeriod(long). An alternative is
            to use NotifyBuilder and use the notifier to know when Camel is done routing
            some messages before you call the link assertIsSatisfied() method on the mocks.
            This allows you to not use a fixed assert period to speedup testing times. If
            you want to assert that exactly n''th message arrives to this mock endpoint
            then see also the link setAssertPeriod(long) method for further details.'
        reportGroup:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: A number that is used to turn on throughput logging based on groups of the size.
        resultMinimumWaitTime:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the minimum expected amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
        resultWaitTime:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the maximum amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
        retainFirst:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies to only retain the first n''th number of received Exchanges.
            This is used when testing with big data to reduce memory consumption by not
            storing copies of every Exchange this mock endpoint receives. Important: When
            using this limitation then the link getReceivedCounter() will still return the
            actual number of received Exchanges. For example if we have received 5000 Exchanges
            and have configured to only retain the first 10 Exchanges then the link getReceivedCounter()
            will still return 5000 but there is only the first 10 Exchanges in the link
            getExchanges() and link getReceivedExchanges() methods. When using this method
            then some of the other expectation methods is not supported for example the
            link expectedBodiesReceived(Object...) sets a expectation on the first number
            of bodies received. You can configure both link setRetainFirst(int) and link
            setRetainLast(int) methods to limit both the first and last received.'
        retainLast:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies to only retain the last n''th number of received Exchanges.
            This is used when testing with big data to reduce memory consumption by not
            storing copies of every Exchange this mock endpoint receives. Important: When
            using this limitation then the link getReceivedCounter() will still return the
            actual number of received Exchanges. For example if we have received 5000 Exchanges
            and have configured to only retain the last 20 Exchanges then the link getReceivedCounter()
            will still return 5000 but there is only the last 20 Exchanges in the link getExchanges()
            and link getReceivedExchanges() methods. When using this method then some of
            the other expectation methods is not supported for example the link expectedBodiesReceived(Object...)
            sets a expectation on the first number of bodies received. You can configure
            both link setRetainFirst(int) and link setRetainLast(int) methods to limit both
            the first and last received.'
        sleepForEmptyTest:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Allows a sleep to be specified to wait to check that this endpoint really is empty when link expectedMessageCount(int) is called with zero
        copyOnExchange:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. Is by default true.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[DataSet-DataSetComponent]]
      DataSet Component
      ~~~~~~~~~~~~~~~~~

      link:testing.html[Testing] of distributed and asynchronous processing is
      notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
      and link:dataset.html[DataSet] endpoints work great with the
      link:testing.html[Camel Testing Framework] to simplify your unit and
      integration testing using
      link:enterprise-integration-patterns.html[Enterprise Integration
      Patterns] and Camel's large range of link:components.html[Components]
      together with the powerful link:bean-integration.html[Bean Integration].

      The DataSet component provides a mechanism to easily perform load & soak
      testing of your system. It works by allowing you to create
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/dataset/DataSet.html[DataSet
      instances] both as a source of messages and as a way to assert that the
      data set is received.

      Camel will use the link:log.html[throughput logger] when sending
      dataset's.

      [[DataSet-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------
      dataset:name[?options]
      ----------------------

      Where *name* is used to find the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/dataset/DataSet.html[DataSet
      instance] in the link:registry.html[Registry]

      Camel ships with a support implementation of
      `org.apache.camel.component.dataset.DataSet`, the
      `org.apache.camel.component.dataset.DataSetSupport` class, that can be
      used as a base for implementing your own DataSet. Camel also ships with
      some implementations that can be used for testing:
      ??`org.apache.camel.component.dataset.SimpleDataSet`,??`org.apache.camel.component.dataset.ListDataSet`
      and??`org.apache.camel.component.dataset.FileDataSet`, all of which
      extend `DataSetSupport`.

      [[DataSet-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Dataset component has no options.
      // component options: END



      // endpoint options: START
      The Dataset component supports 20 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | DataSet | *Required* Name of DataSet to lookup in the registry
      | dataSetIndex | common | lenient | String | Controls the behaviour of the CamelDataSetIndex header. For Consumers: - off = the header will not be set - strict/lenient = the header will be set For Producers: - off = the header value will not be verified and will not be set if it is not present = strict = the header value must be present and will be verified = lenient = the header value will be verified if it is present and will be set if it is not present
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | initialDelay | consumer | 1000 | long | Time period in millis to wait before starting sending messages.
      | minRate | consumer | 0 | int | Wait until the DataSet contains at least this number of messages
      | preloadSize | consumer | 0 | long | Sets how many messages should be preloaded (sent) before the route completes its initialization
      | produceDelay | consumer | 3 | long | Allows a delay to be specified which causes a delay when a message is sent by the consumer (to simulate slow processing)
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | assertPeriod | producer | 0 | long | Sets a grace period after which the mock endpoint will re-assert to ensure the preliminary assertion is still valid. This is used for example to assert that exactly a number of messages arrives. For example if link expectedMessageCount(int) was set to 5 then the assertion is satisfied when 5 or more message arrives. To ensure that exactly 5 messages arrives then you would need to wait a little period to ensure no further message arrives. This is what you can use this link setAssertPeriod(long) method for. By default this period is disabled.
      | consumeDelay | producer | 0 | long | Allows a delay to be specified which causes a delay when a message is consumed by the producer (to simulate slow processing)
      | expectedCount | producer | -1 | int | Specifies the expected number of message exchanges that should be received by this endpoint. Beware: If you want to expect that 0 messages then take extra care as 0 matches when the tests starts so you need to set a assert period time to let the test run for a while to make sure there are still no messages arrived; for that use link setAssertPeriod(long). An alternative is to use NotifyBuilder and use the notifier to know when Camel is done routing some messages before you call the link assertIsSatisfied() method on the mocks. This allows you to not use a fixed assert period to speedup testing times. If you want to assert that exactly n'th message arrives to this mock endpoint then see also the link setAssertPeriod(long) method for further details.
      | reportGroup | producer |  | int | A number that is used to turn on throughput logging based on groups of the size.
      | resultMinimumWaitTime | producer | 0 | long | Sets the minimum expected amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
      | resultWaitTime | producer | 0 | long | Sets the maximum amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
      | retainFirst | producer | -1 | int | Specifies to only retain the first n'th number of received Exchanges. This is used when testing with big data to reduce memory consumption by not storing copies of every Exchange this mock endpoint receives. Important: When using this limitation then the link getReceivedCounter() will still return the actual number of received Exchanges. For example if we have received 5000 Exchanges and have configured to only retain the first 10 Exchanges then the link getReceivedCounter() will still return 5000 but there is only the first 10 Exchanges in the link getExchanges() and link getReceivedExchanges() methods. When using this method then some of the other expectation methods is not supported for example the link expectedBodiesReceived(Object...) sets a expectation on the first number of bodies received. You can configure both link setRetainFirst(int) and link setRetainLast(int) methods to limit both the first and last received.
      | retainLast | producer | -1 | int | Specifies to only retain the last n'th number of received Exchanges. This is used when testing with big data to reduce memory consumption by not storing copies of every Exchange this mock endpoint receives. Important: When using this limitation then the link getReceivedCounter() will still return the actual number of received Exchanges. For example if we have received 5000 Exchanges and have configured to only retain the last 20 Exchanges then the link getReceivedCounter() will still return 5000 but there is only the last 20 Exchanges in the link getExchanges() and link getReceivedExchanges() methods. When using this method then some of the other expectation methods is not supported for example the link expectedBodiesReceived(Object...) sets a expectation on the first number of bodies received. You can configure both link setRetainFirst(int) and link setRetainLast(int) methods to limit both the first and last received.
      | sleepForEmptyTest | producer | 0 | long | Allows a sleep to be specified to wait to check that this endpoint really is empty when link expectedMessageCount(int) is called with zero
      | copyOnExchange | producer (advanced) | true | boolean | Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. Is by default true.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


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

      [[DataSet-ConfiguringDataSet]]
      Configuring DataSet
      ^^^^^^^^^^^^^^^^^^^

      Camel will lookup in the link:registry.html[Registry] for a bean
      implementing the DataSet interface. So you can register your own DataSet
      as:

      [source,xml]
      --------------------------------------------------------
         <bean id="myDataSet" class="com.mycompany.MyDataSet">
            <property name="size" value="100"/>
         </bean>
      --------------------------------------------------------

      [[DataSet-Example]]
      Example
      ^^^^^^^

      For example, to test that a set of messages are sent to a queue and then
      consumed from the queue without losing any messages:

      [source,java]
      ---------------------------------------------------------
      // send the dataset to a queue
      from("dataset:foo").to("activemq:SomeQueue");

      // now lets test that the messages are consumed correctly
      from("activemq:SomeQueue").to("dataset:foo");
      ---------------------------------------------------------

      The above would look in the link:registry.html[Registry] to find the
      *foo* DataSet instance which is used to create the messages.

      Then you create a DataSet implementation, such as using the
      `SimpleDataSet` as described below, configuring things like how big the
      data set is and what the messages look like etc. ??

      ??

      [[DataSet-DataSetSupport(abstractclass)]]
      `DataSetSupport`??(abstract class)
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      The DataSetSupport abstract class is a nice starting point for new
      DataSets, and provides some useful features to derived classes.

      [[DataSet-PropertiesonDataSetSupport]]
      Properties on DataSetSupport
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Property |Type |Default |Description

      |`defaultHeaders` |`Map<String,Object>` |`null` |Specifies the default message body. For SimpleDataSet it is a constant
      payload; though if you want to create custom payloads per message,
      create your own derivation of `DataSetSupport`.

      |`outputTransformer` |`org.apache.camel.Processor` |null |

      |`size` |`long` |`10` |Specifies how many messages to send/consume.

      |`reportCount` |`long` |`-1` |Specifies the number of messages to be received before reporting
      progress. Useful for showing progress of a large load test. If < 0, then
      `size` / 5, if is 0 then `size`, else set to `reportCount` value.
      |=======================================================================

      [[DataSet-SimpleDataSet]]
      `SimpleDataSet`
      ^^^^^^^^^^^^^^^

      The `SimpleDataSet` extends `DataSetSupport`, and adds a default body.

      [[DataSet-AdditionalPropertiesonSimpleDataSet]]
      Additional Properties on SimpleDataSet
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Property |Type |Default |Description

      |`defaultBody` |`Object` |`<hello>world!</hello>` |Specifies the default message body. By default, the `SimpleDataSet`
      produces the same constant payload for each exchange. If you want to
      customize the payload for each exchange, create a Camel `Processor` and
      configure the `SimpleDataSet` to use it by setting the
      `outputTransformer` property.
      |=======================================================================

      [[DataSet-ListDataSet(Camel2.17)]]
      `ListDataSet (Camel 2.17)`
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The List`DataSet`??extends??`DataSetSupport`, and adds a list of default
      bodies.

      [[DataSet-AdditionalPropertiesonListDataSet]]
      Additional Properties on ListDataSet
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Property |Type |Default |Description

      |`defaultBodies` |`List<Object>` |`empty LinkedList<Object>` |Specifies the default message body. By default, the `ListDataSet`
      selects a constant payload from the list of `defaultBodies` using the
      `CamelDataSetIndex`. If you want to customize the payload, create a
      Camel `Processor` and configure the `ListDataSet` to use it by setting
      the `outputTransformer` property.

      |`size` |`long` |the size of the defaultBodies list |Specifies how many messages to send/consume. This value can be different
      from the size of the `defaultBodies` list. If the value is less than the
      size of the `defaultBodies` list, some of the list elements will not be
      used. If the value is greater than the size of the `defaultBodies` list,
      the payload for the exchange will be selected using the modulus of the
      `CamelDataSetIndex` and the size of the `defaultBodies` list (i.e.
      `CamelDataSetIndex % defaultBodies.size()` )
      |=======================================================================

      [[DataSet-FileDataSetCamel2.17]]
      FileDataSet (Camel 2.17)
      ^^^^^^^^^^^^^^^^^^^^^^^^

      The??`SimpleDataSet`??extends `ListDataSet`, and adds support for loading
      the bodies from a file.

      [[DataSet-AdditionalPropertiesonFileDataSet]]
      Additional Properties on FileDataSet
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Property |Type |Default |Description

      |`sourceFile` |`File` |null |Specifies the source file for payloads

      |`delimiter` |`String` |\z |Specifies the delimiter pattern used by a `java.util.Scanner` to split
      the file into multiple payloads.
      |=======================================================================

      [[DataSet-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
      * link:spring-testing.html[Spring Testing]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-direct
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: direct
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: direct
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: direct
          spec:
            containers:
            - image: fabric8/connector-direct:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: direct
        syntax: direct:name
        title: Direct
        description: The direct component provides direct synchronous call to another endpoint from the same CamelContext.
        label: core,endpoint
        deprecated: false
        async: false
        javaType: org.apache.camel.component.direct.DirectComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        block:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If sending a message to a direct endpoint which has no active consumer then we can tell the producer to block and wait for the consumer to become active.
        timeout:
          kind: property
          required: false
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The timeout value to use if block is enabled.
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of direct endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        block:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If sending a message to a direct endpoint which has no active consumer then we can tell the producer to block and wait for the consumer to become active.
        failIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should fail by throwing an exception when sending to a DIRECT endpoint with no active consumers.
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The timeout value to use if block is enabled.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Direct-DirectComponent]]\nDirect Component\n~~~~~~~~~~~~~~~~\n\
      \nThe *direct:* component provides direct, synchronous invocation of any\nconsumers\
      \ when a producer sends a message exchange. +\n This endpoint can be used to\
      \ connect existing routes in the *same*\ncamel context.\n\nTIP: *Asynchronous*\n\
      The link:seda.html[SEDA] component provides asynchronous invocation of\nany\
      \ consumers when a producer sends a message exchange.\n\nTIP:*Connection to\
      \ other camel contexts*\nThe link:vm.html[VM] component provides connections\
      \ between Camel\ncontexts as long they run in the same *JVM*.\n\n[[Direct-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source,text]\n-------------------------\ndirect:someName[?options]\n\
      -------------------------\n\nWhere *someName* can be any string to uniquely\
      \ identify the endpoint\n\n[[Direct-Options]]\nOptions\n^^^^^^^\n\n\n\n// component\
      \ options: START\nThe Direct component supports 2 options which are listed below.\n\
      \n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| block | boolean | If sending a message to\
      \ a direct endpoint which has no active consumer then we can tell the producer\
      \ to block and wait for the consumer to become active.\n| timeout | long | The\
      \ timeout value to use if block is enabled.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The Direct component supports 8 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| name | common |  | String\
      \ | *Required* Name of direct endpoint\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern\
      \ when creating an exchange.\n| block | producer | false | boolean | If sending\
      \ a message to a direct endpoint which has no active consumer then we can tell\
      \ the producer to block and wait for the consumer to become active.\n| failIfNoConsumers\
      \ | producer | false | boolean | Whether the producer should fail by throwing\
      \ an exception when sending to a DIRECT endpoint with no active consumers.\n\
      | timeout | producer | 30000 | long | The timeout value to use if block is enabled.\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[Direct-Samples]]\nSamples\n^^^^^^^\n\
      \nIn the route below we use the direct component to link the two routes\ntogether:\n\
      \n[source,java]\n-------------------------------------------\nfrom(\"activemq:queue:order.in\"\
      )\n    .to(\"bean:orderServer?method=validate\")\n    .to(\"direct:processOrder\"\
      );\n\nfrom(\"direct:processOrder\")\n    .to(\"bean:orderService?method=process\"\
      )\n    .to(\"activemq:queue:order.out\");\n-------------------------------------------\n\
      \nAnd the sample using spring DSL:\n\n[source,xml]\n--------------------------------------------------\n\
      \   <route>\n     <from uri=\"activemq:queue:order.in\"/>\n     <to uri=\"bean:orderService?method=validate\"\
      />\n     <to uri=\"direct:processOrder\"/>\n  </route>\n\n  <route>\n     <from\
      \ uri=\"direct:processOrder\"/>\n     <to uri=\"bean:orderService?method=process\"\
      />\n     <to uri=\"activemq:queue:order.out\"/>\n  </route>    \n--------------------------------------------------\n\
      \nSee also samples from the link:seda.html[SEDA] component, how they can\nbe\
      \ used together.\n\n[[Direct-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n* link:seda.html[SEDA]\n* link:vm.html[VM]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-direct-vm
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: direct-vm
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: direct-vm
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: direct-vm
          spec:
            containers:
            - image: fabric8/connector-direct-vm:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: direct-vm
        syntax: direct-vm:name
        title: Direct VM
        description: The direct-vm component provides direct synchronous call to another endpoint from any CamelContext in the same JVM.
        label: core,endpoint
        deprecated: false
        async: true
        javaType: org.apache.camel.component.directvm.DirectVmComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        block:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If sending a message to a direct endpoint which has no active consumer then we can tell the producer to block and wait for the consumer to become active.
        timeout:
          kind: property
          required: false
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The timeout value to use if block is enabled.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: 'Sets a HeaderFilterStrategy that will only be applied on producer
            endpoints (on both directions: request and response). Default value: none.'
        propagateProperties:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'Whether to propagate or not properties from the producer side to
            the consumer side and viceversa. Default value: true.'
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of direct-vm endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        block:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If sending a message to a direct endpoint which has no active consumer then we can tell the producer to block and wait for the consumer to become active.
        failIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should fail by throwing an exception when sending to a Direct-VM endpoint with no active consumers.
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The timeout value to use if block is enabled.
        headerFilterStrategy:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: 'Sets a HeaderFilterStrategy that will only be applied on producer
            endpoints (on both directions: request and response). Default value: none.'
        propagateProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to propagate or not properties from the producer side to
            the consumer side and viceversa. Default value: true.'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Direct-VM-DirectVMComponent]]\nDirect VM Component\n~~~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.10*\n\nThe *direct-vm:* component provides direct,\
      \ synchronous invocation of\nany consumers in the JVM when a producer sends\
      \ a message exchange. +\n This endpoint can be used to connect existing routes\
      \ in the same camel\ncontext, as well from other camel contexts in the *same*\
      \ JVM.\n\nThis component differs from the link:direct.html[Direct] component\
      \ in\nthat link:direct-vm.html[Direct-VM] supports communication across\nCamelContext\
      \ instances - so you can use this mechanism to communicate\nacross web applications\
      \ (provided that camel-core.jar is on the\nsystem/boot classpath).\n\nAt runtime\
      \ you can swap in new consumers, by stopping the existing\nconsumer(s) and start\
      \ new consumers. +\n But at any given time there can be at most only one active\
      \ consumer for\na given endpoint.\n\nThis component allows also to connect routes\
      \ deployed in different OSGI\nBundles as you can see here after. Even if they\
      \ are running in different\nbundles, the camel routes will use +\n the same\
      \ thread. That autorises to develop applications using\nTransactions - Tx.\n\
      \nimage:direct-vm.data/camel-direct-vm.png[image]\n\n[[Direct-VM-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source,java]\n------------------\ndirect-vm:someName\n\
      ------------------\n\nWhere *someName* can be any string to uniquely identify\
      \ the endpoint\n\n[[Direct-VM-Options]]\nOptions\n^^^^^^^\n\n\n\n// component\
      \ options: START\nThe Direct VM component supports 4 options which are listed\
      \ below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Java Type | Description\n| block | boolean | If sending a message to\
      \ a direct endpoint which has no active consumer then we can tell the producer\
      \ to block and wait for the consumer to become active.\n| timeout | long | The\
      \ timeout value to use if block is enabled.\n| headerFilterStrategy | HeaderFilterStrategy\
      \ | Sets a HeaderFilterStrategy that will only be applied on producer endpoints\
      \ (on both directions: request and response). Default value: none.\n| propagateProperties\
      \ | boolean | Whether to propagate or not properties from the producer side\
      \ to the consumer side and viceversa. Default value: true.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The Direct VM component supports 10 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| name | common |  | String\
      \ | *Required* Name of direct-vm endpoint\n| bridgeErrorHandler | consumer |\
      \ false | boolean | 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/ERROR level and ignored.\n| exceptionHandler | consumer (advanced)\
      \ |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the default exchange pattern when creating an\
      \ exchange.\n| block | producer | false | boolean | If sending a message to\
      \ a direct endpoint which has no active consumer then we can tell the producer\
      \ to block and wait for the consumer to become active.\n| failIfNoConsumers\
      \ | producer | false | boolean | Whether the producer should fail by throwing\
      \ an exception when sending to a Direct-VM endpoint with no active consumers.\n\
      | timeout | producer | 30000 | long | The timeout value to use if block is enabled.\n\
      | headerFilterStrategy | producer (advanced) |  | HeaderFilterStrategy | Sets\
      \ a HeaderFilterStrategy that will only be applied on producer endpoints (on\
      \ both directions: request and response). Default value: none.\n| propagateProperties\
      \ | advanced | false | Boolean | Whether to propagate or not properties from\
      \ the producer side to the consumer side and viceversa. Default value: true.\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[Direct-VM-Samples]]\nSamples\n\
      ^^^^^^^\n\nIn the route below we use the direct component to link the two routes\n\
      together:\n\n[source,java]\n-------------------------------------------\nfrom(\"\
      activemq:queue:order.in\")\n    .to(\"bean:orderServer?method=validate\")\n\
      \    .to(\"direct-vm:processOrder\");\n-------------------------------------------\n\
      \nAnd now in another CamelContext, such as another OSGi bundle\n\n[source,java]\n\
      -------------------------------------------\nfrom(\"direct-vm:processOrder\"\
      )\n    .to(\"bean:orderService?method=process\")\n    .to(\"activemq:queue:order.out\"\
      );\n-------------------------------------------\n\nAnd the sample using spring\
      \ DSL:\n\n[source,xml]\n--------------------------------------------------\n\
      \   <route>\n     <from uri=\"activemq:queue:order.in\"/>\n     <to uri=\"bean:orderService?method=validate\"\
      />\n     <to uri=\"direct-vm:processOrder\"/>\n  </route>\n\n  <route>\n   \
      \  <from uri=\"direct-vm:processOrder\"/>\n     <to uri=\"bean:orderService?method=process\"\
      />\n     <to uri=\"activemq:queue:order.out\"/>\n  </route>    \n--------------------------------------------------\n\
      \n[[Direct-VM-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:direct.html[Direct]\n\
      * link:seda.html[SEDA]\n* link:vm.html[VM]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-disruptor
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: disruptor
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: disruptor
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: disruptor
          spec:
            containers:
            - image: fabric8/connector-disruptor:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: disruptor
        alternativeSchemes: disruptor,disruptor-vm
        syntax: disruptor:name
        title: Disruptor
        description: The disruptor component provides asynchronous SEDA behavior using LMAX Disruptor.
        label: endpoint
        deprecated: false
        async: true
        javaType: org.apache.camel.component.disruptor.DisruptorComponent
        groupId: org.apache.camel
        artifactId: camel-disruptor
        version: 2.18.1
      componentProperties:
        defaultConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To configure the default number of concurrent consumers
        defaultMultipleConsumers:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: To configure the default value for multiple consumers
        defaultProducerType:
          kind: property
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorProducerType
          enum:
          - Single
          - Multi
          deprecated: false
          secret: false
          description: To configure the default value for DisruptorProducerType The default value is Multi.
        defaultWaitStrategy:
          kind: property
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorWaitStrategy
          enum:
          - Blocking
          - Sleeping
          - BusySpin
          - Yielding
          deprecated: false
          secret: false
          description: To configure the default value for DisruptorWaitStrategy The default value is Blocking.
        defaultBlockWhenFull:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: To configure the default value for block when full The default value is true.
        queueSize:
          kind: property
          type: integer
          javaType: int
          deprecated: true
          secret: false
          description: To configure the ring buffer size
        bufferSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To configure the ring buffer size
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of queue
        size:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: 'The maximum capacity of the Disruptors ringbuffer Will be effectively
            increased to the nearest power of two. Notice: Mind if you use this option then
            its the first endpoint being created with the queue name that determines the
            size. To make sure all endpoints use same size then configure the size option
            on all of them or the first endpoint being created.'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent threads processing exchanges.
        multipleConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether multiple consumers are allowed. If enabled you can use Disruptor for Publish-Subscribe messaging. That is you can send a message to the queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
        waitStrategy:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorWaitStrategy
          enum:
          - Blocking
          - Sleeping
          - BusySpin
          - Yielding
          deprecated: false
          secret: false
          defaultValue: Blocking
          description: Defines the strategy used by consumer threads to wait on new exchanges to be published. The options allowed are:Blocking Sleeping BusySpin and Yielding.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        blockWhenFull:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a thread that sends messages to a full Disruptor will block until the ringbuffer's capacity is no longer exhausted. By default the calling thread will block and wait until the message can be accepted. By disabling this option an exception will be thrown stating that the queue is full.
        producerType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorProducerType
          enum:
          - Single
          - Multi
          deprecated: false
          secret: false
          defaultValue: Multi
          description: 'Defines the producers allowed on the Disruptor. The options allowed
            are: Multi to allow multiple producers and Single to enable certain optimizations
            only allowed when one concurrent producer (on one thread or otherwise synchronized)
            is active.'
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout (in milliseconds) before a producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
        waitForTaskToComplete:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.WaitForTaskToComplete
          enum:
          - Never
          - IfReplyExpected
          - Always
          deprecated: false
          secret: false
          defaultValue: IfReplyExpected
          description: 'Option to specify whether the caller should wait for the async task
            to complete or not before continuing. The following three options are supported:
            Always Never or IfReplyExpected. The first two values are self-explanatory.
            The last value IfReplyExpected will only wait if the message is Request Reply
            based.'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Disruptor-DisruptorComponent]]
      Disruptor Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *disruptor:* component provides asynchronous
      http://www.eecs.harvard.edu/~mdw/proj/seda/[SEDA] behavior much as the
      standard SEDA Component, but utilizes a
      https://github.com/LMAX-Exchange/disruptor[Disruptor] instead of a
      http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
      utilized by the standard link:seda.html[SEDA]. Alternatively, a

      *disruptor-vm:* endpoint is supported by this component, providing an
      alternative to the standard link:vm.html[VM]. As with the SEDA
      component, buffers of the *disruptor:* endpoints are only visible within
      a *single* link:camelcontext.html[CamelContext] and no support is
      provided for persistence or recovery. The buffers of the
      **disruptor-vm:** endpoints also provides support for communication
      across CamelContexts instances so you can use this mechanism to
      communicate across web applications (provided that *camel-disruptor.jar*
      is on the *system/boot* classpath).

      The main advantage of choosing to use the Disruptor Component over the
      SEDA or the VM Component is performance in use cases where there is high
      contention between producer(s) and/or multicasted or concurrent
      Consumers. In those cases, significant increases of throughput and
      reduction of latency has been observed. Performance in scenarios without
      contention is comparable to the SEDA and VM Components.

      The Disruptor is implemented with the intention of mimicing the
      behaviour and options of the SEDA and VM Components as much as possible.
      The main differences with the them are the following:

      * The buffer used is always bounded in size (default 1024 exchanges).
      * As a the buffer is always bouded, the default behaviour for the
      Disruptor is to block while the buffer is full instead of throwing an
      exception. This default behaviour may be configured on the component
      (see options).
      * The Disruptor enpoints don't implement the BrowsableEndpoint
      interface. As such, the exchanges currently in the Disruptor can't be
      retrieved, only the amount of exchanges.
      * The Disruptor requires its consumers (multicasted or otherwise) to be
      statically configured. Adding or removing consumers on the fly requires
      complete flushing of all pending exchanges in the Disruptor.
      * As a result of the reconfiguration: Data sent over a Disruptor is
      directly processed and 'gone' if there is at least one consumer, late
      joiners only get new exchanges published after they've joined.
      * The *pollTimeout* option is not supported by the Disruptor Component.
      * When a producer blocks on a full Disruptor, it does not respond to
      thread interrupts.

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

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

      [[Disruptor-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------
       disruptor:someName[?options]
      -----------------------------

      or

      [source,java]
      --------------------------------
       disruptor-vm:someName[?options]
      --------------------------------

      Where **someName** can be any string that uniquely identifies the
      endpoint within the current link:camelcontext.html[CamelContext] (or
      across contexts in case of +
       **disruptor-vm:**). +
       You can append query options to the URI in the following format:

      [source,java]
      ------------------------------
        ?option=value&option=value&???
      ------------------------------

      [[Disruptor-Options]]
      Options
      ^^^^^^^

      All the following options are valid for both the **disruptor:** and
      **disruptor-vm:** components.



      // component options: START
      The Disruptor component supports 7 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | defaultConcurrentConsumers | int | To configure the default number of concurrent consumers
      | defaultMultipleConsumers | boolean | To configure the default value for multiple consumers
      | defaultProducerType | DisruptorProducerType | To configure the default value for DisruptorProducerType The default value is Multi.
      | defaultWaitStrategy | DisruptorWaitStrategy | To configure the default value for DisruptorWaitStrategy The default value is Blocking.
      | defaultBlockWhenFull | boolean | To configure the default value for block when full The default value is true.
      | queueSize | int | To configure the ring buffer size
      | bufferSize | int | To configure the ring buffer size
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Disruptor component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Name of queue
      | size | common | 1024 | int | The maximum capacity of the Disruptors ringbuffer Will be effectively increased to the nearest power of two. Notice: Mind if you use this option then its the first endpoint being created with the queue name that determines the size. To make sure all endpoints use same size then configure the size option on all of them or the first endpoint being created.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent threads processing exchanges.
      | multipleConsumers | consumer | false | boolean | Specifies whether multiple consumers are allowed. If enabled you can use Disruptor for Publish-Subscribe messaging. That is you can send a message to the queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
      | waitStrategy | consumer | Blocking | DisruptorWaitStrategy | Defines the strategy used by consumer threads to wait on new exchanges to be published. The options allowed are:Blocking Sleeping BusySpin and Yielding.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | blockWhenFull | producer | false | boolean | Whether a thread that sends messages to a full Disruptor will block until the ringbuffer's capacity is no longer exhausted. By default the calling thread will block and wait until the message can be accepted. By disabling this option an exception will be thrown stating that the queue is full.
      | producerType | producer | Multi | DisruptorProducerType | Defines the producers allowed on the Disruptor. The options allowed are: Multi to allow multiple producers and Single to enable certain optimizations only allowed when one concurrent producer (on one thread or otherwise synchronized) is active.
      | timeout | producer | 30000 | long | Timeout (in milliseconds) before a producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
      | waitForTaskToComplete | producer | IfReplyExpected | WaitForTaskToComplete | Option to specify whether the caller should wait for the async task to complete or not before continuing. The following three options are supported: Always Never or IfReplyExpected. The first two values are self-explanatory. The last value IfReplyExpected will only wait if the message is Request Reply based.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Disruptor-Waitstrategies]]
      Wait strategies
      ^^^^^^^^^^^^^^^

      The wait strategy effects the type of waiting performed by the consumer
      threads that are currently waiting for the next exchange to be
      published. The following strategies can be chosen:

      [width="100%",cols="10%,45%,45%",options="header",]
      |=======================================================================
      |Name |Description |Advice

      |Blocking | Blocking strategy that uses a lock and condition variable for Consumers
      waiting on a barrier. | This strategy can be used when throughput and low-latency are not as
      important as CPU resource.

      |Sleeping |Sleeping strategy that initially spins, then uses a Thread.yield(), and
      eventually for the minimum number of nanos the OS and JVM will allow
      while the Consumers are waiting on a barrier. |This strategy is a good compromise between performance and CPU resource.
      Latency spikes can occur after quiet periods.

      |BusySpin |Busy Spin strategy that uses a busy spin loop for Consumers waiting on a
      barrier. |This strategy will use CPU resource to avoid syscalls which can
      introduce latency jitter. It is best used when threads can be bound to
      specific CPU cores.

      |Yielding |Yielding strategy that uses a Thread.yield() for Consumers waiting on a
      barrier after an initially spinning. |This strategy is a good compromise between performance and CPU resource
      without incurring significant latency spikes.
      |=======================================================================

      [[Disruptor-UseofRequestReply]]
      Use of Request Reply
      ^^^^^^^^^^^^^^^^^^^^

      The Disruptor component supports using link:request-reply.html[Request
      Reply], where the caller will wait for the Async route to complete. For
      instance:

      [source,java]
      ------------------------------------------------------------------------------
      from("mina:tcp://0.0.0.0:9876?textline=true&sync=true").to("disruptor:input");
      from("disruptor:input").to("bean:processInput").to("bean:createResponse");
      ------------------------------------------------------------------------------

      In the route above, we have a TCP listener on port 9876 that accepts
      incoming requests. The request is routed to the _disruptor:input_
      buffer. As it is a link:request-reply.html[Request Reply] message, we
      wait for the response. When the consumer on the _disruptor:input_ buffer
      is complete, it copies the response to the original message response.

      [[Disruptor-Concurrentconsumers]]
      Concurrent consumers
      ^^^^^^^^^^^^^^^^^^^^

      By default, the Disruptor endpoint uses a single consumer thread, but
      you can configure it to use concurrent consumer threads. So instead of
      thread pools you can use:

      [source,java]
      --------------------------------------------------------------
      from("disruptor:stageName?concurrentConsumers=5").process(...)
      --------------------------------------------------------------

      As for the difference between the two, note a thread pool can
      increase/shrink dynamically at runtime depending on load, whereas the
      number of concurrent consumers is always fixed and supported by the
      Disruptor internally so performance will be higher.

      [[Disruptor-Threadpools]]
      Thread pools
      ^^^^^^^^^^^^

      Be aware that adding a thread pool to a Disruptor endpoint by doing
      something like:

      [source,java]
      --------------------------------------------------
      from("disruptor:stageName").thread(5).process(...)
      --------------------------------------------------

      Can wind up with adding a normal
      http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
      to be used in conjunction with the Disruptor, effectively negating part
      of the performance gains achieved by using the Disruptor. Instead, it is
      advices to directly configure number of threads that process messages on
      a Disruptor endpoint using the concurrentConsumers option.

      [[Disruptor-Sample]]
      Sample
      ^^^^^^

      In the route below we use the Disruptor to send the request to this
      async queue to be able to send a fire-and-forget message for further
      processing in another thread, and return a constant reply in this thread
      to the original caller.

      [source,java]
      -------------------------------------------------
      public void configure() throws Exception {
          from("direct:start")
              // send it to the disruptor that is async
              .to("disruptor:next")
              // return a constant response
              .transform(constant("OK"));

          from("disruptor:next").to("mock:result");
      }
      -------------------------------------------------

      Here we send a Hello World message and expects the reply to be OK.

      [source,java]
      -----------------------------------------------------------------
      Object out = template.requestBody("direct:start", "Hello World");
      assertEquals("OK", out);
      -----------------------------------------------------------------

      The "Hello World" message will be consumed from the Disruptor from
      another thread for further processing. Since this is from a unit test,
      it will be sent to a mock endpoint where we can do assertions in the
      unit test.

      [[Disruptor-UsingmultipleConsumers]]
      Using multipleConsumers
      ^^^^^^^^^^^^^^^^^^^^^^^

      In this example we have defined two consumers and registered them as
      spring beans.

      [source,java]
      -------------------------------------------------------------------------------------------
      <!-- define the consumers as spring beans -->
      <bean id="consumer1" class="org.apache.camel.spring.example.FooEventConsumer"/>

      <bean id="consumer2" class="org.apache.camel.spring.example.AnotherFooEventConsumer"/>

      <camelContext xmlns="http://camel.apache.org/schema/spring">
          <!-- define a shared endpoint which the consumers can refer to instead of using url -->
          <endpoint id="foo" uri="disruptor:foo?multipleConsumers=true"/>
      </camelContext>
      -------------------------------------------------------------------------------------------

      Since we have specified multipleConsumers=true on the Disruptor foo
      endpoint we can have those two or more consumers receive their own copy
      of the message as a kind of pub-sub style messaging. As the beans are
      part of an unit test they simply send the message to a mock endpoint,
      but notice how we can use @Consume to consume from the Disruptor.

      [source,java]
      -------------------------------------------
      public class FooEventConsumer {

          @EndpointInject(uri = "mock:result")
          private ProducerTemplate destination;

          @Consume(ref = "foo")
          public void doSomething(String body) {
              destination.sendBody("foo" + body);
          }

      }
      -------------------------------------------

      [[Disruptor-Extractingdisruptorinformation]]
      Extracting disruptor information
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If needed, information such as buffer size, etc. can be obtained without
      using JMX in this fashion:

      [source,java]
      --------------------------------------------------------------------
      DisruptorEndpoint disruptor = context.getEndpoint("disruptor:xxxx");
      int size = disruptor.getBufferSize();
      --------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-disruptor-vm
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: disruptor-vm
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: disruptor-vm
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: disruptor-vm
          spec:
            containers:
            - image: fabric8/connector-disruptor-vm:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: disruptor-vm
        alternativeSchemes: disruptor,disruptor-vm
        syntax: disruptor-vm:name
        title: Disruptor VM
        description: The disruptor component provides asynchronous SEDA behavior using LMAX Disruptor.
        label: endpoint
        deprecated: false
        async: true
        javaType: org.apache.camel.component.disruptor.vm.DisruptorVmComponent
        groupId: org.apache.camel
        artifactId: camel-disruptor
        version: 2.18.1
      componentProperties:
        defaultConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To configure the default number of concurrent consumers
        defaultMultipleConsumers:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: To configure the default value for multiple consumers
        defaultProducerType:
          kind: property
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorProducerType
          enum:
          - Single
          - Multi
          deprecated: false
          secret: false
          description: To configure the default value for DisruptorProducerType The default value is Multi.
        defaultWaitStrategy:
          kind: property
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorWaitStrategy
          enum:
          - Blocking
          - Sleeping
          - BusySpin
          - Yielding
          deprecated: false
          secret: false
          description: To configure the default value for DisruptorWaitStrategy The default value is Blocking.
        defaultBlockWhenFull:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: To configure the default value for block when full The default value is true.
        queueSize:
          kind: property
          type: integer
          javaType: int
          deprecated: true
          secret: false
          description: To configure the ring buffer size
        bufferSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To configure the ring buffer size
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of queue
        size:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: 'The maximum capacity of the Disruptors ringbuffer Will be effectively
            increased to the nearest power of two. Notice: Mind if you use this option then
            its the first endpoint being created with the queue name that determines the
            size. To make sure all endpoints use same size then configure the size option
            on all of them or the first endpoint being created.'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent threads processing exchanges.
        multipleConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether multiple consumers are allowed. If enabled you can use Disruptor for Publish-Subscribe messaging. That is you can send a message to the queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
        waitStrategy:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorWaitStrategy
          enum:
          - Blocking
          - Sleeping
          - BusySpin
          - Yielding
          deprecated: false
          secret: false
          defaultValue: Blocking
          description: Defines the strategy used by consumer threads to wait on new exchanges to be published. The options allowed are:Blocking Sleeping BusySpin and Yielding.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        blockWhenFull:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a thread that sends messages to a full Disruptor will block until the ringbuffer's capacity is no longer exhausted. By default the calling thread will block and wait until the message can be accepted. By disabling this option an exception will be thrown stating that the queue is full.
        producerType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.disruptor.DisruptorProducerType
          enum:
          - Single
          - Multi
          deprecated: false
          secret: false
          defaultValue: Multi
          description: 'Defines the producers allowed on the Disruptor. The options allowed
            are: Multi to allow multiple producers and Single to enable certain optimizations
            only allowed when one concurrent producer (on one thread or otherwise synchronized)
            is active.'
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout (in milliseconds) before a producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
        waitForTaskToComplete:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.WaitForTaskToComplete
          enum:
          - Never
          - IfReplyExpected
          - Always
          deprecated: false
          secret: false
          defaultValue: IfReplyExpected
          description: 'Option to specify whether the caller should wait for the async task
            to complete or not before continuing. The following three options are supported:
            Always Never or IfReplyExpected. The first two values are self-explanatory.
            The last value IfReplyExpected will only wait if the message is Request Reply
            based.'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Disruptor-DisruptorComponent]]
      Disruptor Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *disruptor:* component provides asynchronous
      http://www.eecs.harvard.edu/~mdw/proj/seda/[SEDA] behavior much as the
      standard SEDA Component, but utilizes a
      https://github.com/LMAX-Exchange/disruptor[Disruptor] instead of a
      http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
      utilized by the standard link:seda.html[SEDA]. Alternatively, a

      *disruptor-vm:* endpoint is supported by this component, providing an
      alternative to the standard link:vm.html[VM]. As with the SEDA
      component, buffers of the *disruptor:* endpoints are only visible within
      a *single* link:camelcontext.html[CamelContext] and no support is
      provided for persistence or recovery. The buffers of the
      **disruptor-vm:** endpoints also provides support for communication
      across CamelContexts instances so you can use this mechanism to
      communicate across web applications (provided that *camel-disruptor.jar*
      is on the *system/boot* classpath).

      The main advantage of choosing to use the Disruptor Component over the
      SEDA or the VM Component is performance in use cases where there is high
      contention between producer(s) and/or multicasted or concurrent
      Consumers. In those cases, significant increases of throughput and
      reduction of latency has been observed. Performance in scenarios without
      contention is comparable to the SEDA and VM Components.

      The Disruptor is implemented with the intention of mimicing the
      behaviour and options of the SEDA and VM Components as much as possible.
      The main differences with the them are the following:

      * The buffer used is always bounded in size (default 1024 exchanges).
      * As a the buffer is always bouded, the default behaviour for the
      Disruptor is to block while the buffer is full instead of throwing an
      exception. This default behaviour may be configured on the component
      (see options).
      * The Disruptor enpoints don't implement the BrowsableEndpoint
      interface. As such, the exchanges currently in the Disruptor can't be
      retrieved, only the amount of exchanges.
      * The Disruptor requires its consumers (multicasted or otherwise) to be
      statically configured. Adding or removing consumers on the fly requires
      complete flushing of all pending exchanges in the Disruptor.
      * As a result of the reconfiguration: Data sent over a Disruptor is
      directly processed and 'gone' if there is at least one consumer, late
      joiners only get new exchanges published after they've joined.
      * The *pollTimeout* option is not supported by the Disruptor Component.
      * When a producer blocks on a full Disruptor, it does not respond to
      thread interrupts.

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

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

      [[Disruptor-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------
       disruptor:someName[?options]
      -----------------------------

      or

      [source,java]
      --------------------------------
       disruptor-vm:someName[?options]
      --------------------------------

      Where **someName** can be any string that uniquely identifies the
      endpoint within the current link:camelcontext.html[CamelContext] (or
      across contexts in case of +
       **disruptor-vm:**). +
       You can append query options to the URI in the following format:

      [source,java]
      ------------------------------
        ?option=value&option=value&???
      ------------------------------

      [[Disruptor-Options]]
      Options
      ^^^^^^^

      All the following options are valid for both the **disruptor:** and
      **disruptor-vm:** components.



      // component options: START
      The Disruptor component supports 7 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | defaultConcurrentConsumers | int | To configure the default number of concurrent consumers
      | defaultMultipleConsumers | boolean | To configure the default value for multiple consumers
      | defaultProducerType | DisruptorProducerType | To configure the default value for DisruptorProducerType The default value is Multi.
      | defaultWaitStrategy | DisruptorWaitStrategy | To configure the default value for DisruptorWaitStrategy The default value is Blocking.
      | defaultBlockWhenFull | boolean | To configure the default value for block when full The default value is true.
      | queueSize | int | To configure the ring buffer size
      | bufferSize | int | To configure the ring buffer size
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Disruptor component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Name of queue
      | size | common | 1024 | int | The maximum capacity of the Disruptors ringbuffer Will be effectively increased to the nearest power of two. Notice: Mind if you use this option then its the first endpoint being created with the queue name that determines the size. To make sure all endpoints use same size then configure the size option on all of them or the first endpoint being created.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent threads processing exchanges.
      | multipleConsumers | consumer | false | boolean | Specifies whether multiple consumers are allowed. If enabled you can use Disruptor for Publish-Subscribe messaging. That is you can send a message to the queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
      | waitStrategy | consumer | Blocking | DisruptorWaitStrategy | Defines the strategy used by consumer threads to wait on new exchanges to be published. The options allowed are:Blocking Sleeping BusySpin and Yielding.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | blockWhenFull | producer | false | boolean | Whether a thread that sends messages to a full Disruptor will block until the ringbuffer's capacity is no longer exhausted. By default the calling thread will block and wait until the message can be accepted. By disabling this option an exception will be thrown stating that the queue is full.
      | producerType | producer | Multi | DisruptorProducerType | Defines the producers allowed on the Disruptor. The options allowed are: Multi to allow multiple producers and Single to enable certain optimizations only allowed when one concurrent producer (on one thread or otherwise synchronized) is active.
      | timeout | producer | 30000 | long | Timeout (in milliseconds) before a producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
      | waitForTaskToComplete | producer | IfReplyExpected | WaitForTaskToComplete | Option to specify whether the caller should wait for the async task to complete or not before continuing. The following three options are supported: Always Never or IfReplyExpected. The first two values are self-explanatory. The last value IfReplyExpected will only wait if the message is Request Reply based.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Disruptor-Waitstrategies]]
      Wait strategies
      ^^^^^^^^^^^^^^^

      The wait strategy effects the type of waiting performed by the consumer
      threads that are currently waiting for the next exchange to be
      published. The following strategies can be chosen:

      [width="100%",cols="10%,45%,45%",options="header",]
      |=======================================================================
      |Name |Description |Advice

      |Blocking | Blocking strategy that uses a lock and condition variable for Consumers
      waiting on a barrier. | This strategy can be used when throughput and low-latency are not as
      important as CPU resource.

      |Sleeping |Sleeping strategy that initially spins, then uses a Thread.yield(), and
      eventually for the minimum number of nanos the OS and JVM will allow
      while the Consumers are waiting on a barrier. |This strategy is a good compromise between performance and CPU resource.
      Latency spikes can occur after quiet periods.

      |BusySpin |Busy Spin strategy that uses a busy spin loop for Consumers waiting on a
      barrier. |This strategy will use CPU resource to avoid syscalls which can
      introduce latency jitter. It is best used when threads can be bound to
      specific CPU cores.

      |Yielding |Yielding strategy that uses a Thread.yield() for Consumers waiting on a
      barrier after an initially spinning. |This strategy is a good compromise between performance and CPU resource
      without incurring significant latency spikes.
      |=======================================================================

      [[Disruptor-UseofRequestReply]]
      Use of Request Reply
      ^^^^^^^^^^^^^^^^^^^^

      The Disruptor component supports using link:request-reply.html[Request
      Reply], where the caller will wait for the Async route to complete. For
      instance:

      [source,java]
      ------------------------------------------------------------------------------
      from("mina:tcp://0.0.0.0:9876?textline=true&sync=true").to("disruptor:input");
      from("disruptor:input").to("bean:processInput").to("bean:createResponse");
      ------------------------------------------------------------------------------

      In the route above, we have a TCP listener on port 9876 that accepts
      incoming requests. The request is routed to the _disruptor:input_
      buffer. As it is a link:request-reply.html[Request Reply] message, we
      wait for the response. When the consumer on the _disruptor:input_ buffer
      is complete, it copies the response to the original message response.

      [[Disruptor-Concurrentconsumers]]
      Concurrent consumers
      ^^^^^^^^^^^^^^^^^^^^

      By default, the Disruptor endpoint uses a single consumer thread, but
      you can configure it to use concurrent consumer threads. So instead of
      thread pools you can use:

      [source,java]
      --------------------------------------------------------------
      from("disruptor:stageName?concurrentConsumers=5").process(...)
      --------------------------------------------------------------

      As for the difference between the two, note a thread pool can
      increase/shrink dynamically at runtime depending on load, whereas the
      number of concurrent consumers is always fixed and supported by the
      Disruptor internally so performance will be higher.

      [[Disruptor-Threadpools]]
      Thread pools
      ^^^^^^^^^^^^

      Be aware that adding a thread pool to a Disruptor endpoint by doing
      something like:

      [source,java]
      --------------------------------------------------
      from("disruptor:stageName").thread(5).process(...)
      --------------------------------------------------

      Can wind up with adding a normal
      http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
      to be used in conjunction with the Disruptor, effectively negating part
      of the performance gains achieved by using the Disruptor. Instead, it is
      advices to directly configure number of threads that process messages on
      a Disruptor endpoint using the concurrentConsumers option.

      [[Disruptor-Sample]]
      Sample
      ^^^^^^

      In the route below we use the Disruptor to send the request to this
      async queue to be able to send a fire-and-forget message for further
      processing in another thread, and return a constant reply in this thread
      to the original caller.

      [source,java]
      -------------------------------------------------
      public void configure() throws Exception {
          from("direct:start")
              // send it to the disruptor that is async
              .to("disruptor:next")
              // return a constant response
              .transform(constant("OK"));

          from("disruptor:next").to("mock:result");
      }
      -------------------------------------------------

      Here we send a Hello World message and expects the reply to be OK.

      [source,java]
      -----------------------------------------------------------------
      Object out = template.requestBody("direct:start", "Hello World");
      assertEquals("OK", out);
      -----------------------------------------------------------------

      The "Hello World" message will be consumed from the Disruptor from
      another thread for further processing. Since this is from a unit test,
      it will be sent to a mock endpoint where we can do assertions in the
      unit test.

      [[Disruptor-UsingmultipleConsumers]]
      Using multipleConsumers
      ^^^^^^^^^^^^^^^^^^^^^^^

      In this example we have defined two consumers and registered them as
      spring beans.

      [source,java]
      -------------------------------------------------------------------------------------------
      <!-- define the consumers as spring beans -->
      <bean id="consumer1" class="org.apache.camel.spring.example.FooEventConsumer"/>

      <bean id="consumer2" class="org.apache.camel.spring.example.AnotherFooEventConsumer"/>

      <camelContext xmlns="http://camel.apache.org/schema/spring">
          <!-- define a shared endpoint which the consumers can refer to instead of using url -->
          <endpoint id="foo" uri="disruptor:foo?multipleConsumers=true"/>
      </camelContext>
      -------------------------------------------------------------------------------------------

      Since we have specified multipleConsumers=true on the Disruptor foo
      endpoint we can have those two or more consumers receive their own copy
      of the message as a kind of pub-sub style messaging. As the beans are
      part of an unit test they simply send the message to a mock endpoint,
      but notice how we can use @Consume to consume from the Disruptor.

      [source,java]
      -------------------------------------------
      public class FooEventConsumer {

          @EndpointInject(uri = "mock:result")
          private ProducerTemplate destination;

          @Consume(ref = "foo")
          public void doSomething(String body) {
              destination.sendBody("foo" + body);
          }

      }
      -------------------------------------------

      [[Disruptor-Extractingdisruptorinformation]]
      Extracting disruptor information
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If needed, information such as buffer size, etc. can be obtained without
      using JMX in this fashion:

      [source,java]
      --------------------------------------------------------------------
      DisruptorEndpoint disruptor = context.getEndpoint("disruptor:xxxx");
      int size = disruptor.getBufferSize();
      --------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-dns
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: dns
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: dns
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: dns
          spec:
            containers:
            - image: fabric8/connector-dns:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: dns
        syntax: dns:dnsType
        title: DNS
        description: To lookup domain information and run DNS queries using DNSJava.
        label: networking
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.dns.DnsComponent
        groupId: org.apache.camel
        artifactId: camel-dns
        version: 2.18.1
      componentProperties: {}
      properties:
        dnsType:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.dns.DnsType
          enum:
          - dig
          - ip
          - lookup
          - wikipedia
          deprecated: false
          secret: false
          description: The type of the lookup.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[DNS-DNS]]
      DNS
      ~~~

      *Available as of Camel 2.7*

      This is an additional component for Camel to run DNS queries, using
      DNSJava. The component is a thin layer on top of
      http://www.xbill.org/dnsjava/[DNSJava]. +
       The component offers the following operations:

      * ip, to resolve a domain by its ip
      * lookup, to lookup information about the domain
      * dig, to run DNS queries

      INFO:*Requires SUN JVM*
      The DNSJava library requires running on the SUN JVM. +
       If you use Apache ServiceMix or Apache Karaf, you'll need to adjust the
      `etc/jre.properties` file, to add `sun.net.spi.nameservice` to the list
      of Java platform packages exported. The server will need restarting
      before this change takes effect.

      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-dns</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[DNS-URIformat]]
      URI format
      ^^^^^^^^^^

      The URI scheme for a DNS component is as follows

      [source,java]
      -------------------------
      dns://operation[?options]
      -------------------------

      This component only supports producers.

      [[DNS-Options]]
      Options
      ^^^^^^^


      // component options: START
      The DNS component has no options.
      // component options: END



      // endpoint options: START
      The DNS component supports 2 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | dnsType | producer |  | DnsType | *Required* The type of the lookup.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[DNS-Headers]]
      Headers
      ^^^^^^^
      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================

      |Header |Type |Operations |Description

      |dns.domain |String |ip |The domain name. Mandatory.

      |dns.name |String |lookup |The name to lookup. Mandatory.

      |dns.type |   | lookup, dig |The type of the lookup. Should match the values of `org.xbill.dns.Type`.
      Optional.

      |dns.class |   | lookup, dig |The DNS class of the lookup. Should match the values of
      `org.xbill.dns.DClass`. Optional.

      |dns.query |String |dig |The query itself. Mandatory.

      |dns.server |String |dig |The server in particular for the query. If none is given, the default
      one specified by the OS will be used. Optional.
      |=======================================================================

      [[DNS-Examples]]
      Examples
      ^^^^^^^^

      [[DNS-IPlookup]]
      IP lookup
      +++++++++

      [source,xml]
      --------------------------------------
              <route id="IPCheck">
                  <from uri="direct:start"/>
                  <to uri="dns:ip"/>
              </route>
      --------------------------------------

      This looks up a domain's IP. For example, www.example.com resolves to
      192.0.32.10. +
       The IP address to lookup must be provided in the header with key
      `"dns.domain"`.

      [[DNS-DNSlookup]]
      DNS lookup
      ++++++++++

      [source,xml]
      --------------------------------------
              <route id="IPCheck">
                  <from uri="direct:start"/>
                  <to uri="dns:lookup"/>
              </route>
      --------------------------------------

      This returns a set of DNS records associated with a domain. +
       The name to lookup must be provided in the header with key
      `"dns.name"`.

      [[DNS-DNSDig]]
      DNS Dig
      +++++++

      Dig is a Unix command-line utility to run DNS queries.

      [source,xml]
      --------------------------------------
              <route id="IPCheck">
                  <from uri="direct:start"/>
                  <to uri="dns:dig"/>
              </route>
      --------------------------------------

      The query must be provided in the header with key `"dns.query"`.

      [[DNS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-docker
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: docker
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: docker
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: docker
          spec:
            containers:
            - image: fabric8/connector-docker:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: docker
        syntax: docker:operation
        title: Docker
        description: The docker component is used for managing Docker containers.
        label: container,cloud,paas
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.docker.DockerComponent
        groupId: org.apache.camel
        artifactId: camel-docker
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.docker.DockerConfiguration
          deprecated: false
          secret: false
          description: To use the shared docker configuration
      properties:
        operation:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.docker.DockerOperation
          enum:
          - events
          - stats
          - auth
          - info
          - ping
          - version
          - imagebuild
          - imagecreate
          - imageinspect
          - imagelist
          - imagepull
          - imagepushimageremove
          - imagesearch
          - imagetag
          - containerattach
          - containercommit
          - containercopyfile
          - containercreate
          - containerdiffinspectcontainer
          - containerkill
          - containerlist
          - containerlog
          - containerpause
          - containerrestart
          - containerremove
          - containerstartcontainerstop
          - containertop
          - containerunpause
          - containerwait
          - execcreate
          - execstart
          deprecated: false
          secret: false
          description: Which operation to use
        email:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Email address associated with the user
        host:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: localhost
          description: Docker host
        port:
          kind: parameter
          group: common
          required: true
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2375"
          description: Docker port
        requestTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Request timeout for response (in seconds)
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        followRedirectFilter:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to follow redirect filter
        loggingFilter:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use logging filter
        maxPerRouteConnections:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Maximum route connections
        maxTotalConnections:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Maximum total connections
        serverAddress:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https://index.docker.io/v1/
          description: Server address for docker registry.
        socket:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Socket connection mode
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        certPath:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Location containing the SSL certificate chain
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to authenticate with
        secure:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Use HTTPS communication
        tlsVerify:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Check TLS
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: User name to authenticate with
    documentation.adoc: |
      [[Docker-CamelDockercomponent]]
      Camel Docker component
      ~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.15*

      Camel component for communicating with Docker.

      The Docker Camel component leverages the
      https://github.com/docker-java/docker-java[docker-java]??via the
      https://docs.docker.com/reference/api/docker_remote_api[Docker Remote
      API].


      [[Docker-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------
      docker://[operation]?[options]
      ------------------------------

      Where *operation* is the specific action to perform on Docker.

      [[Docker-Options]]
      General Options
      ^^^^^^^^^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | DockerConfiguration | To use the shared docker configuration
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The Docker component supports 20 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | operation | common |  | DockerOperation | *Required* Which operation to use
      | email | common |  | String | Email address associated with the user
      | host | common | localhost | String | *Required* Docker host
      | port | common | 2375 | Integer | *Required* Docker port
      | requestTimeout | common |  | Integer | Request timeout for response (in seconds)
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | followRedirectFilter | advanced | false | boolean | Whether to follow redirect filter
      | loggingFilter | advanced | false | boolean | Whether to use logging filter
      | maxPerRouteConnections | advanced | 100 | Integer | Maximum route connections
      | maxTotalConnections | advanced | 100 | Integer | Maximum total connections
      | serverAddress | advanced | https://index.docker.io/v1/ | String | Server address for docker registry.
      | socket | advanced | true | boolean | Socket connection mode
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | certPath | security |  | String | Location containing the SSL certificate chain
      | password | security |  | String | Password to authenticate with
      | secure | security | false | boolean | Use HTTPS communication
      | tlsVerify | security | false | boolean | Check TLS
      | username | security |  | String | User name to authenticate with
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Docker-HeaderStrategy]]
      Header Strategy
      ^^^^^^^^^^^^^^^

      All URI option can be passed as Header properties. Values found in a
      message header take precedence over URI parameters. A header property
      takes the form of a URI option prefixed with *CamelDocker* as shown
      below

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |URI Option |Header Property

      |containerId |CamelDockerContainerId
      |=======================================================================


      [[Docker-Examples]]
      Examples
      ^^^^^^^^

      The following example consumes events from Docker:

      [source,java]
      ----------------------------------------------------------------------
      from("docker://events?host=192.168.59.103&port=2375").to("log:event");
      ----------------------------------------------------------------------

      The following example queries Docker for system wide information

      [source,java]
      -------------------------------------------------------------------
      from("docker://info?host=192.168.59.103&port=2375").to("log:info");
      -------------------------------------------------------------------


      [[Docker-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      To use Docker in your Camel routes you need to add a dependency on
      *camel-docker*, which implements the component.

      If you use Maven you can just add the following to your pom.xml,
      substituting the version number for the latest and greatest release (see
      link:download.html[the download page for the latest versions]).

      [source,java]
      -------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-docker</artifactId>
        <version>x.x.x</version>
      </dependency>
      -------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-dozer
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: dozer
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: dozer
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: dozer
          spec:
            containers:
            - image: fabric8/connector-dozer:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: dozer
        syntax: dozer:name
        title: Dozer
        description: The dozer component provides the ability to map between Java beans using the Dozer mapping library.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.dozer.DozerComponent
        groupId: org.apache.camel
        artifactId: camel-dozer
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A human readable name of the mapping.
        mappingConfiguration:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.converter.dozer.DozerBeanMapperConfiguration
          deprecated: false
          secret: false
          description: The name of a DozerBeanMapperConfiguration bean in the Camel registry which should be used for configuring the Dozer mapping. This is an alternative to the mappingFile option that can be used for fine-grained control over how Dozer is configured. Remember to use a prefix in the value to indicate that the bean is in the Camel registry (e.g. myDozerConfig).
        mappingFile:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: dozerBeanMapping.xml
          description: 'The location of a Dozer configuration file. The file is loaded from
            the classpath by default but you can use file: classpath: or http: to load the
            configuration from a specific location.'
        marshalId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The id of a dataFormat defined within the Camel Context to use for marshalling the mapping output to a non-Java type.
        sourceModel:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Fully-qualified class name for the source type used in the mapping. If specified the input to the mapping is converted to the specified type before being mapped with Dozer.
        targetModel:
          kind: parameter
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Fully-qualified class name for the target type used in the mapping.
        unmarshalId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The id of a dataFormat defined within the Camel Context to use for unmarshalling the mapping input from a non-Java type.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Dozer-Dozer]]\nDozer\n~~~~~\n\nThe??*dozer:*??component\
      \ provides the ability to map between Java beans\nusing the http://camel.apache.org/dozer-type-conversion.html[Dozer]\n\
      mapping framework since *Camel 2.15.0*. ??Camel also supports the ability\n\
      to trigger Dozer mappings\nhttp://camel.apache.org/dozer-type-conversion.html[as\
      \ a type converter].\n??The primary differences between using a Dozer endpoint\
      \ and a Dozer\nconverter are:\n\n* The ability to manage Dozer mapping configuration\
      \ on a per-endpoint\nbasis vs. global configuration via the converter registry.\n\
      * A Dozer endpoint can be configured to marshal/unmarshal input and\noutput\
      \ data using Camel data formats to support a single, any-to-any\ntransformation\
      \ endpoint\n* The Dozer component allows for fine-grained integration and extension\n\
      of Dozer to support additional functionality (e.g. mapping literal\nvalues,\
      \ using expressions for mappings, etc.).\n\nIn order to use the Dozer component,\
      \ Maven users will need to add the\nfollowing dependency to their??`pom.xml`:\n\
      \n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-dozer</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Dozer-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe Dozer component only supports\
      \ producer endpoints.\n\n[source,java]\n--------------------------\ndozer:endpointId[?options]\n\
      --------------------------\n\nWhere??*endpointId*??is a name used to uniquely\
      \ identify the Dozer\nendpoint configuration.??\n\nAn example Dozer endpoint\
      \ URI:\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"direct:orderInput\").\n  to(\"dozer:transformOrder?mappingFile=orderMapping.xml&targetModel=example.XYZOrder\"\
      ).\n  to(\"direct:orderOutput\");\n---------------------------------------------------------------------------------------\n\
      \n[[Dozer-Options]]\nOptions\n^^^^^^^\n\n// component options: START\nThe Dozer\
      \ component has no options.\n// component options: END\n\n// endpoint options:\
      \ START\nThe Dozer component supports 8 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| name | producer |  | String\
      \ | *Required* A human readable name of the mapping.\n| mappingConfiguration\
      \ | producer |  | DozerBeanMapperConfiguration | The name of a DozerBeanMapperConfiguration\
      \ bean in the Camel registry which should be used for configuring the Dozer\
      \ mapping. This is an alternative to the mappingFile option that can be used\
      \ for fine-grained control over how Dozer is configured. Remember to use a prefix\
      \ in the value to indicate that the bean is in the Camel registry (e.g. myDozerConfig).\n\
      | mappingFile | producer | dozerBeanMapping.xml | String | The location of a\
      \ Dozer configuration file. The file is loaded from the classpath by default\
      \ but you can use file: classpath: or http: to load the configuration from a\
      \ specific location.\n| marshalId | producer |  | String | The id of a dataFormat\
      \ defined within the Camel Context to use for marshalling the mapping output\
      \ to a non-Java type.\n| sourceModel | producer |  | String | Fully-qualified\
      \ class name for the source type used in the mapping. If specified the input\
      \ to the mapping is converted to the specified type before being mapped with\
      \ Dozer.\n| targetModel | producer |  | String | *Required* Fully-qualified\
      \ class name for the target type used in the mapping.\n| unmarshalId | producer\
      \ |  | String | The id of a dataFormat defined within the Camel Context to use\
      \ for unmarshalling the mapping input from a non-Java type.\n| synchronous |\
      \ advanced | false | boolean | Sets whether synchronous processing should be\
      \ strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n[[Dozer-UsingDataFormatswithDozer]]\n\
      Using Data Formats with Dozer\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nDozer does not\
      \ support non-Java sources and targets for mappings, so it\ncannot, for example,\
      \ map an XML document to a Java object on its own.\n??Luckily, Camel has extensive\
      \ support for marshalling between Java and a\nwide variety of formats using\n\
      http://camel.apache.org/data-format.html[data formats]. ??The Dozer\ncomponent\
      \ takes advantage of this support by allowing you to specify\nthat input and\
      \ output data should be passed through a data format prior\nto processing via\
      \ Dozer. ??You can always do this on your own outside the\ncall to Dozer, but\
      \ supporting it directly in the Dozer component allows\nyou to use a single\
      \ endpoints to configure any-to-any transformation\nwithin Camel.\n\nAs an example,\
      \ let's say you wanted to map between an XML data structure\nand a JSON data\
      \ structure using the Dozer component. ??If you had the\nfollowing data formats\
      \ defined in a Camel Context:\n\n[source,xml]\n-----------------------------------------------\n\
      <dataFormats>\n  <json library=\"Jackson\" id=\"myjson\"/>\n  <jaxb contextPath=\"\
      org.example\" id=\"myjaxb\"/>\n</dataFormats>\n-----------------------------------------------\n\
      \nYou could then configure a Dozer endpoint to unmarshal the input XML\nusing\
      \ a JAXB data format and marshal the mapping output using Jackson.\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------------------------------\n\
      <endpoint uri=\"dozer:xml2json?marshalId=myjson&amp;unmarshalId=myjaxb&amp;targetModel=org.example.Order\"\
      />\n----------------------------------------------------------------------------------------------------------\n\
      \n[[Dozer-ConfiguringDozer]]\nConfiguring Dozer\n^^^^^^^^^^^^^^^^^\n\nAll Dozer\
      \ endpoints require a Dozer mapping configuration file which\ndefines mappings\
      \ between source and target objects. ??The component will\ndefault to a location\
      \ of META-INF/dozerBeanMapping.xml if the\nmappingFile or mappingConfiguration\
      \ options are not specified on an\nendpoint. ??If you need to supply multiple\
      \ mapping configuration files\nfor a single endpoint or specify additional configuration\
      \ options (e.g.\nevent listeners, custom converters, etc.), then you can use\
      \ an instance\nof??`org.apache.camel.converter.dozer.DozerBeanMapperConfiguration`.\n\
      \n[source,xml]\n------------------------------------------------------------------------------------------\n\
      <bean id=\"mapper\" class=\"org.apache.camel.converter.dozer.DozerBeanMapperConfiguration\"\
      > ??\n  <property name=\"mappingFiles\">\n    <list>\n      <value>mapping1.xml</value>\n\
      \      <value>mapping2.xml</value>\n    </list>\n  </property>\n</bean>\n------------------------------------------------------------------------------------------\n\
      \n[[Dozer-MappingExtensions]]\nMapping Extensions\n^^^^^^^^^^^^^^^^^^\n\nThe\
      \ Dozer component implements a number of extensions to the Dozer\nmapping framework\
      \ as custom converters. ??These converters implement\nmapping functions that\
      \ are not supported directly by Dozer itself.\n\n[[Dozer-VariableMappings]]\n\
      Variable Mappings\n+++++++++++++++++\n\nVariable mappings allow you to map the\
      \ value of a variable definition\nwithin a Dozer configuration into a target\
      \ field instead of using the\nvalue of a source field. ??This is equivalent\
      \ to constant mapping in\nother mapping frameworks, where can you assign a literal\
      \ value to a\ntarget field. ??To use a variable mapping, simply define a variable\n\
      within your mapping configuration and then map from the VariableMapper\nclass\
      \ into your target field of choice:\n\n[source,xml]\n--------------------------------------------------------------------------------------------------------\n\
      <mappings??xmlns=\"http://dozer.sourceforge.net\"??\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\
      \n  xsi:schemaLocation=\"http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd\"\
      >\n  <configuration>\n    <variables>\n      <variable name=\"CUST_ID\">ACME-SALES</variable>\n\
      \    </variables>\n  </configuration>\n  <mapping>\n    <class-a>org.apache.camel.component.dozer.VariableMapper</class-a>\n\
      \    <class-b>org.example.Order</class-b>\n    <field custom-converter-id=\"\
      _variableMapping\" custom-converter-param=\"${CUST_ID}\">\n      <a>literal</a>\n\
      \      <b>custId</b>\n    </field>\n  </mapping>\n</mappings>\n--------------------------------------------------------------------------------------------------------\n\
      \n[[Dozer-CustomMappings]]\nCustom Mappings\n+++++++++++++++\n\nCustom mappings\
      \ allow you to define your own logic for how a source\nfield is mapped to a\
      \ target field. ??They are similar in function to\nDozer customer converters,\
      \ with two notable differences:\n\n* You can have multiple converter methods\
      \ in a single class with custom\nmappings.\n* There is no requirement to implement\
      \ a Dozer-specific interface with\ncustom mappings.\n\nA custom mapping is declared\
      \ by using the built-in '_customMapping'\nconverter in your mapping configuration.\
      \ ??The parameter to this\nconverter has the following syntax:\n\n[source,shell]\n\
      --------------------------\n[class-name][,method-name]\n--------------------------\n\
      \nMethod name is optional - the Dozer component will search for a method\nthat\
      \ matches the input and output types required for a mapping. ??An\nexample custom\
      \ mapping and configuration are provided below.\n\n[source,java]\n--------------------------------------------------\n\
      public class CustomMapper {\n    // All customer ids must be wrapped in \"[\
      \ ]\"\n    public Object mapCustomer(String customerId) {\n        return \"\
      [\" + customerId + \"]\";\n    }\n}??\n--------------------------------------------------\n\
      \n[source,xml]\n--------------------------------------------------------------------------------------------------------\n\
      <mappings??xmlns=\"http://dozer.sourceforge.net\"??\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\
      \n  xsi:schemaLocation=\"http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd\"\
      >\n  <mapping>\n    <class-a>org.example.A</class-a>\n    <class-b>org.example.B</class-b>\n\
      \    <field custom-converter-id=\"_customMapping\" \n        custom-converter-param=\"\
      org.example.CustomMapper,mapCustomer\">\n      <a>header.customerNum</a>\n \
      \     <b>custId</b>\n    </field>\n  </mapping>\n</mappings>\n--------------------------------------------------------------------------------------------------------\n\
      \n[[Dozer-ExpressionMappings]]\nExpression Mappings\n+++++++++++++++++++\n\n\
      Expression mappings allow you to use the powerful\nhttp://camel.apache.org/languages.html[language]\
      \ capabilities of Camel\nto evaluate an expression and assign the result to\
      \ a target field in a\nmapping. ??Any language that Camel supports can be used\
      \ in an expression\nmapping. ??Basic examples of expressions include the ability\
      \ to map a\nCamel message header or exchange property to a target field or to\n\
      concatenate multiple source fields into a target field. ??The syntax of a\n\
      mapping expression is:\n\n[source,shell]\n----------------------- \n[language]:[expression]\n\
      -----------------------\n\nAn example of mapping a message header into a target\
      \ field:\n\n[source,xml]\n--------------------------------------------------------------------------------------------------------------\n\
      <mappings??xmlns=\"http://dozer.sourceforge.net\"??\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\
      \n  xsi:schemaLocation=\"http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd\"\
      >\n  <mapping>\n    <class-a>org.apache.camel.component.dozer.ExpressionMapper</class-a>\n\
      \    <class-b>org.example.B</class-b>\n    <field custom-converter-id=\"_expressionMapping\"\
      \ custom-converter-param=\"simple:\\${header.customerNumber}\">\n      <a>expression</a>\n\
      \      <b>custId</b>\n    </field>\n  </mapping>\n</mappings>\n--------------------------------------------------------------------------------------------------------------\n\
      \nNote that any properties within your expression must be escaped with \"\\\"\
      \nto prevent an error when Dozer attempts to resolve variable values\ndefined\
      \ using the EL.\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-dropbox
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: dropbox
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: dropbox
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: dropbox
          spec:
            containers:
            - image: fabric8/connector-dropbox:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: dropbox
        syntax: dropbox:operation
        title: Dropbox
        description: For uploading downloading and managing files folders groups collaborations etc on dropbox DOT com.
        label: api,file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.dropbox.DropboxComponent
        groupId: org.apache.camel
        artifactId: camel-dropbox
        version: 2.18.1
      componentProperties: {}
      properties:
        operation:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.dropbox.util.DropboxOperation
          enum:
          - put
          - del
          - search
          - get
          - move
          deprecated: false
          secret: false
          description: The specific action (typically is a CRUD action) to perform on Dropbox remote folder.
        accessToken:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access token to make API requests for a specific Dropbox user
        client:
          kind: parameter
          group: common
          type: object
          javaType: com.dropbox.core.DbxClient
          deprecated: false
          secret: false
          description: To use an existing DbxClient instance as DropBox client.
        clientIdentifier:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the app registered to make API requests
        localPath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Folder or file to upload on Dropbox from the local filesystem.
        newRemotePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Destination file or folder
        query:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A space-separated list of sub-strings to search for. A file matches only if it contains all the sub-strings. If this option is not set all files will be matched.
        remotePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Original file or folder to move
        uploadMode:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.dropbox.util.DropboxUploadMode
          enum:
          - add
          - force
          deprecated: false
          secret: false
          description: Which mode to upload. in case of add the new file will be renamed if a file with the same name already exists on dropbox. in case of force if a file with the same name already exists on dropbox this will be overwritten.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Dropbox-CamelDropboxcomponent]]
      Camel Dropbox component
      ~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The *dropbox:* component allows you to treat
      https://www.dropbox.com[Dropbox]??remote folders as a producer or
      consumer of messages. Using the
      http://dropbox.github.io/dropbox-sdk-java/api-docs/v1.7.x/[Dropbox Java
      Core API] (reference version for this component is 1.7.x), this camel
      component has the following features:

      * As a consumer, download files and search files by queries
      * As a producer, download files, move files between remote directories,
      delete files/dir, upload files??and search files by queries

      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-dropbox</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Dropbox-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------
      dropbox://[operation]?[options]
      -------------------------------

      Where *operation* is the specific action (typically is a CRUD action) to
      perform on Dropbox remote folder.

      [[Dropbox-Operations]]
      Operations
      ^^^^^^^^^^

      [width="100%",cols="40%,60%",options="header",]
      |=======================================================================
      |Operation |Description

      |`del` |deletes files or directories on Dropbox

      |`get` |download files from Dropbox

      |`move` |move files from folders on Dropbox

      |`put` |upload files on Dropbox

      |`search` |search files on Dropbox based on string queries
      |=======================================================================

      *Operations* require additional options to work, some are mandatory for
      the specific operation.

      [[Dropbox-Options]]
      Options
      ^^^^^^^

      In order to work with Dropbox API you need to obtain an??*accessToken*
      and a *clientIdentifier.* +
      You can refer to the
      https://www.dropbox.com/developers/core/start/java[Dropbox
      documentation] that explains how to get them.????

      // component options: START
      The Dropbox component has no options.
      // component options: END

      // endpoint options: START
      The Dropbox component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | operation | common |  | DropboxOperation | *Required* The specific action (typically is a CRUD action) to perform on Dropbox remote folder.
      | accessToken | common |  | String | *Required* The access token to make API requests for a specific Dropbox user
      | client | common |  | DbxClient | To use an existing DbxClient instance as DropBox client.
      | clientIdentifier | common |  | String | *Required* Name of the app registered to make API requests
      | localPath | common |  | String | Folder or file to upload on Dropbox from the local filesystem.
      | newRemotePath | common |  | String | Destination file or folder
      | query | common |  | String | A space-separated list of sub-strings to search for. A file matches only if it contains all the sub-strings. If this option is not set all files will be matched.
      | remotePath | common |  | String | Original file or folder to move
      | uploadMode | common |  | DropboxUploadMode | Which mode to upload. in case of add the new file will be renamed if a file with the same name already exists on dropbox. in case of force if a file with the same name already exists on dropbox this will be overwritten.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Dropbox-Deloperation]]
      Del operation
      ^^^^^^^^^^^^^

      Delete files on Dropbox.

      Works only as Camel producer.

      Below are listed the options for this operation:

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Property |Mandatory |Description

      |`remotePath` |`true` |Folder or file to delete on Dropbox
      |=======================================================================

      [[Dropbox-Samples]]
      Samples
      +++++++

      [source,java]
      -------------------------------
      from("direct:start").to("dropbox://del?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1").to("mock:result");

      from("direct:start").to("dropbox://del?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1/file1.tar.gz").to("mock:result");
      -------------------------------

      [[Dropbox-ResultMessageHeaders]]
      Result Message Headers
      ++++++++++++++++++++++

      The following headers are set on message result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Property |Value

      |`DELETED_PATH` |name of the path deleted on dropbox
      |=======================================================================

      [[Dropbox-ResultMessageBody]]
      Result Message Body
      +++++++++++++++++++

      The following objects are set on message body result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Object type |Description

      |`String` |name of the path deleted on dropbox
      |=======================================================================

      [[Dropbox-Getoperation]]
      Get (download) operation
      ^^^^^^^^^^^^^^^^^^^^^^^^

      Download files from Dropbox.

      Works as Camel producer or Camel consumer.

      Below are listed the options for this operation:

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Property |Mandatory |Description

      |`remotePath` |`true` |Folder or file to download from Dropbox
      |=======================================================================

      [[Dropbox-Samples.1]]
      Samples
      +++++++

      [source,java]
      -------------------------------
      from("direct:start").to("dropbox://get?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1/file1.tar.gz").to("file:///home/kermit/?fileName=file1.tar.gz");

      from("direct:start").to("dropbox://get?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1").to("mock:result");

      from("dropbox://get?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1").to("file:///home/kermit/");
      -------------------------------

      [[Dropbox-ResultMessageHeaders.1]]
      Result Message Headers
      ++++++++++++++++++++++

      The following headers are set on message result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Property |Value

      |`DOWNLOADED_FILE` |in case of single file download, path of the remote file downloaded

      |`DOWNLOADED_FILES` |in case of multiple files download, path of the remote files downloaded
      |=======================================================================

      [[Dropbox-ResultMessageBody.1]]
      Result Message Body
      +++++++++++++++++++

      The following objects are set on message body result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Object type |Description

      |`ByteArrayOutputStream` |in case of single file download, stream representing the file downloaded

      |`Map<String, ByteArrayOutputStream>` |in case of multiple files download, a map with as key the path of the
      remote file downloaded and as value the stream representing the file
      downloaded
      |=======================================================================

      [[Dropbox-Moveoperation]]
      Move operation
      ^^^^^^^^^^^^^^

      Move files on Dropbox between one folder to another.

      Works only as Camel producer.

      Below are listed the options for this operation:

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Property |Mandatory |Description

      |`remotePath` |`true` |Original file or folder to move

      |`newRemotePath` |`true` |Destination file or folder
      |=======================================================================

      [[Dropbox-Samples.2]]
      Samples
      +++++++

      [source,java]
      -------------------------------
      from("direct:start").to("dropbox://move?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1&newRemotePath=/root/folder2").to("mock:result");
      -------------------------------

      [[Dropbox-ResultMessageHeaders.2]]
      Result Message Headers
      ++++++++++++++++++++++

      The following headers are set on message result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Property |Value

      |`MOVED_PATH` |name of the path moved on dropbox
      |=======================================================================

      [[Dropbox-ResultMessageBody.2]]
      Result Message Body
      +++++++++++++++++++

      The following objects are set on message body result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Object type |Description

      |`String` |name of the path moved on dropbox
      |=======================================================================

      [[Dropbox-Putoperation]]
      Put (upload) operation
      ^^^^^^^^^^^^^^^^^^^^^^

      Upload files on Dropbox.

      Works as Camel producer.

      Below are listed the options for this operation:

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Property |Mandatory |Description

      |`uploadMode` |`true` |add or force this option specifies how a file should be saved on
      dropbox: in case of "add" the new file will be renamed if a file with the same
      name already exists on dropbox. In case of "force" if a file with the same name already exists on
      dropbox, this will be overwritten.

      |`localPath` |`true` |Folder or file to upload on Dropbox from the local filesystem .

      |`remotePath` |`false` |Folder destination on Dropbox. If the property is not set, the component
      will upload the file on a remote path equal to the local path.
      |=======================================================================

      [[Dropbox-Samples.3]]
      Samples
      +++++++

      [source,java]
      -------------------------------
      from("direct:start").to("dropbox://put?accessToken=XXX&clientIdentifier=XXX&uploadMode=add&localPath=/root/folder1").to("mock:result");

      from("direct:start").to("dropbox://put?accessToken=XXX&clientIdentifier=XXX&uploadMode=add&localPath=/root/folder1&remotePath=/root/folder2").to("mock:result");
      -------------------------------

      [[Dropbox-ResultMessageHeaders.3]]
      Result Message Headers
      ++++++++++++++++++++++

      The following headers are set on message result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Property |Value

      |`UPLOADED_FILE` |in case of single file upload, path of the remote path uploaded

      |`UPLOADED_FILES` |in case of multiple files upload, string with the remote paths uploaded
      |=======================================================================

      [[Dropbox-ResultMessageBody.3]]
      Result Message Body
      +++++++++++++++++++

      The following objects are set on message body result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Object type |Description

      |`String` |in case of single file upload, result of the upload operation, OK or KO

      |`Map<String, DropboxResultCode>` |in case of multiple files upload, a map with as key the path of the
      remote file uploaded and as value the result of the upload operation, OK
      or KO
      |=======================================================================

      [[Dropbox-Searchoperation]]
      Search operation
      ^^^^^^^^^^^^^^^^

      Search inside a remote Dropbox folder including its sub directories.

      Works as Camel producer and as Camel consumer.

      Below are listed the options for this operation:

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Property |Mandatory |Description

      |`remotePath` |`true` |Folder on Dropbox where to search in.

      |`query` |`false` |A space-separated list of sub-strings to search for. A file matches only
      if it contains all the sub-strings. If this option is not set, all files
      will be matched.
      |=======================================================================

      [[Dropbox-Samples.4]]
      Samples
      +++++++

      [source,java]
      -------------------------------
      from("dropbox://search?accessToken=XXX&clientIdentifier=XXX&remotePath=/XXX&query=XXX").to("mock:result");

      from("direct:start").to("dropbox://search?accessToken=XXX&clientIdentifier=XXX&remotePath=/XXX").to("mock:result");
      -------------------------------

      [[Dropbox-ResultMessageHeaders.4]]
      Result Message Headers
      ++++++++++++++++++++++

      The following headers are set on message result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Property |Value

      |`FOUNDED_FILES` |list of file path founded
      |=======================================================================

      [[Dropbox-ResultMessageBody.4]]
      Result Message Body
      +++++++++++++++++++

      The following objects are set on message body result:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Object type |Description

      |`List<DbxEntry>` |list of file path founded. For more information on this object refer to
      Dropbox documentation,
      |=======================================================================

      link:http://dropbox.github.io/dropbox-sdk-java/api-docs/v1.7.x/com/dropbox/core/DbxEntry.html[http://dropbox.github.io/dropbox-sdk-java/api-docs/v1.7.x/com/dropbox/core/DbxEntry.html]

      ??
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ehcache
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ehcache
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ehcache
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ehcache
          spec:
            containers:
            - image: fabric8/connector-ehcache:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ehcache
        syntax: ehcache:cacheName
        title: Ehcache
        description: The ehcache component enables you to perform caching operations using Ehcache as cache implementation.
        label: cache,datagrid,clustering
        deprecated: false
        async: false
        javaType: org.apache.camel.component.ehcache.EhcacheComponent
        groupId: org.apache.camel
        artifactId: camel-ehcache
        version: 2.18.1
      componentProperties: {}
      properties:
        cacheName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: the cache name
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Ehcache-EhcacheComponent]]\nEhcache Component\n~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.18.x*\n\nThe *ehcache*??component enables you to\
      \ perform caching operations using\nEhcache 3 as the Cache Implementation.\n\
      \nThis component supports producer and event based consumer endpoints.\n\nThe\
      \ Cache consumer is an event based consumer and can be used to listen\nand respond\
      \ to specific cache activities.??\n\nMaven users will need to add the following\
      \ dependency to\ntheir??`pom.xml`??for this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-ehcache</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Ehcache-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-----------------------------\n\
      ehcache://cacheName[?options]\n-----------------------------\n\nYou can append\
      \ query options to the URI in the following\nformat,??`?option=value&option=#beanRef&...`\n\
      \n[[Ehcache-Options]]\nOptions\n^^^^^^^\n\n\n// component options: START\nThe\
      \ Ehcache component has no options.\n// component options: END\n\n\n\n// endpoint\
      \ options: START\nThe Ehcache component supports 5 endpoint options which are\
      \ listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| cacheName | common | \
      \ | String | *Required* the cache name\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[Ehcache-MessageHeadersCamel]]\n\
      Message Headers Camel??\n++++++++++++++++++++++\n\n??\n[width=\"100%\",cols=\"\
      10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|CamelEhcacheAction |`String` |The operation to\
      \ be perfomed on the cache, valid options are:\n\n* CLEAR\n* PUT\n* PUT_ALL\n\
      * PUT_IF_ABSENT\n* GET\n* GET_ALL\n* REMOVE\n* REMOVE_ALL\n* REPLACE\n\n|CamelEhcacheActionHasResult\
      \ |Boolean |Set to true if the action has a result\n\n|CamelEhcacheActionSucceeded\
      \ |`Boolean` |Set to true if the actionsuccedded\n\n|CamelEhcacheKey |Object\
      \ |The cache key used for an action\n\n|CamelEhcacheKeys |Set<Object> |A list\
      \ of keys, used in\n\n* PUT_ALL\n* GET_ALL\n* REMOVE_ALL\n\n|CamelEhcacheValue\
      \ |Object |The value to put in the cache or the result of an operation\n\n|CamelEhcacheOldValue\
      \ |Object |The old value associated to a key for actions like PUT_IF_ABSENT\
      \ or the\nObject used for comparison for actions like REPLACE\n\n|CamelEhcacheEventType\
      \ |EventType |The type of event received\n|=======================================================================\n\
      \n[[Ehcache-Ehcachebasedidempotentrepositoryexample:]]\nEhcache based idempotent\
      \ repository example:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n[source,java]\n\
      ------------------------------------------------------------------------------------------------\n\
      CacheManager manager = CacheManagerBuilder.newCacheManager(new XmlConfiguration(\"\
      ehcache.xml\"));\nEhcacheIdempotentRepository repo = new EhcacheIdempotentRepository(manager,\
      \ \"idempotent-cache\");\n \nfrom(\"direct:in\")\n    .idempotentConsumer(header(\"\
      messageId\"), idempotentRepo)\n    .to(\"mock:out\");\n------------------------------------------------------------------------------------------------\n\
      \n??\n\n[[Ehcache-Ehcachebasedaggregationrepositoryexample:]]\nEhcache based\
      \ aggregation repository example:\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[source,java]\n---------------------------------------------------------------------------------------------------------------------------------\n\
      public class EhcacheAggregationRepositoryRoutesTest extends CamelTestSupport\
      \ {\n    private static final String ENDPOINT_MOCK = \"mock:result\";\n    private\
      \ static final String ENDPOINT_DIRECT = \"direct:one\";\n    private static\
      \ final int[] VALUES = generateRandomArrayOfInt(10, 0, 30);\n    private static\
      \ final int SUM = IntStream.of(VALUES).reduce(0, (a, b) -> a + b);\n    private\
      \ static final String CORRELATOR = \"CORRELATOR\";\n\n    @EndpointInject(uri\
      \ = ENDPOINT_MOCK)\n    private MockEndpoint mock;\n\n    @Produce(uri = ENDPOINT_DIRECT)\n\
      \    private ProducerTemplate producer;\n\n    @Test\n    public void checkAggregationFromOneRoute()\
      \ throws Exception {\n        mock.expectedMessageCount(VALUES.length);\n  \
      \      mock.expectedBodiesReceived(SUM);\n\n        IntStream.of(VALUES).forEach(\n\
      \            i -> producer.sendBodyAndHeader(i, CORRELATOR, CORRELATOR)\n  \
      \      );\n\n        mock.assertIsSatisfied();\n    }\n\n    private Exchange\
      \ aggregate(Exchange oldExchange, Exchange newExchange) {\n        if (oldExchange\
      \ == null) {\n            return newExchange;\n        } else {\n          \
      \  Integer n = newExchange.getIn().getBody(Integer.class);\n            Integer\
      \ o = oldExchange.getIn().getBody(Integer.class);\n            Integer v = (o\
      \ == null ? 0 : o) + (n == null ? 0 : n);\n\n            oldExchange.getIn().setBody(v,\
      \ Integer.class);\n\n            return oldExchange;\n        }\n    }\n\n \
      \   @Override\n    protected RoutesBuilder createRouteBuilder() throws Exception\
      \ {\n        return new RouteBuilder() {\n            @Override\n          \
      \  public void configure() throws Exception {\n                from(ENDPOINT_DIRECT)\n\
      \                    .routeId(\"AggregatingRouteOne\")\n                   \
      \ .aggregate(header(CORRELATOR))\n                    .aggregationRepository(createAggregateRepository())\n\
      \                    .aggregationStrategy(EhcacheAggregationRepositoryRoutesTest.this::aggregate)\n\
      \                    .completionSize(VALUES.length)\n                      \
      \  .to(\"log:org.apache.camel.component.ehcache.processor.aggregate.level=INFO&showAll=true&mulltiline=true\"\
      )\n                        .to(ENDPOINT_MOCK);\n            }\n        };\n\
      \    }\n\n    protected EhcacheAggregationRepository createAggregateRepository()\
      \ throws Exception {\n        CacheManager cacheManager = CacheManagerBuilder.newCacheManager(new\
      \ XmlConfiguration(\"ehcache.xml\"));\n        cacheManager.init();\n\n    \
      \    EhcacheAggregationRepository repository = new EhcacheAggregationRepository();\n\
      \        repository.setCacheManager(cacheManager);\n        repository.setCacheName(\"\
      aggregate\");\n\n        return repository;\n    }\n}\n---------------------------------------------------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ejb
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ejb
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ejb
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ejb
          spec:
            containers:
            - image: fabric8/connector-ejb:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ejb
        syntax: ejb:beanName
        title: EJB
        description: The ejb component is for invoking EJB Java beans from Camel.
        label: endpoint,java
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.ejb.EjbComponent
        groupId: org.apache.camel
        artifactId: camel-ejb
        version: 2.18.1
      componentProperties:
        context:
          kind: property
          type: object
          javaType: javax.naming.Context
          deprecated: false
          secret: false
          description: The Context to use for looking up the EJBs
        properties:
          kind: property
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: Properties for creating javax.naming.Context if a context has not been configured.
      properties:
        beanName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the bean to invoke
        method:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the method to invoke on the bean
        cache:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled Camel will cache the result of the first Registry look-up. Cache can be enabled if the bean in the Registry is defined as a singleton scope.
        multiParameterArray:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          defaultValue: false
          description: 'How to treat the parameters which are passed from the message body.true
            means the message body should be an array of parameters. Note: This option is
            used internally by Camel and is not intended for end users to use.'
        parameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: bean.
          multiValue: true
          deprecated: false
          secret: false
          description: Used for configuring additional properties on the bean
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[EJB-EJBComponent]]\nEJB Component\n~~~~~~~~~~~~~\n\n*Available\
      \ as of Camel 2.4*\n\nThe *ejb:* component binds EJBs to Camel message exchanges.\n\
      \nMaven users will need to add the following dependency to their `pom.xml`\n\
      for this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-ejb</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[EJB-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n---------------------\n\
      ejb:ejbName[?options]\n---------------------\n\nWhere *ejbName* can be any string\
      \ which is used to look up the EJB in\nthe Application Server JNDI link:registry.html[Registry]\n\
      \n[[EJB-Options]]\nOptions\n^^^^^^^\n\n\n\n// component options: START\nThe\
      \ EJB component supports 2 options which are listed below.\n\n\n\n{% raw %}\n\
      [width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| context | Context | The Context to use for\
      \ looking up the EJBs\n| properties | Properties | Properties for creating javax.naming.Context\
      \ if a context has not been configured.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The EJB component supports 6 endpoint options which are listed below:\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| beanName | producer |\
      \  | String | *Required* Sets the name of the bean to invoke\n| method | producer\
      \ |  | String | Sets the name of the method to invoke on the bean\n| cache |\
      \ advanced | false | boolean | If enabled Camel will cache the result of the\
      \ first Registry look-up. Cache can be enabled if the bean in the Registry is\
      \ defined as a singleton scope.\n| multiParameterArray | advanced | false |\
      \ boolean | How to treat the parameters which are passed from the message body.true\
      \ means the message body should be an array of parameters. Note: This option\
      \ is used internally by Camel and is not intended for end users to use.\n| parameters\
      \ | advanced |  | Map | Used for configuring additional properties on the bean\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[EJB-BeanBinding]]\nBean Binding\n\
      ^^^^^^^^^^^^\n\nHow bean methods to be invoked are chosen (if they are not specified\n\
      explicitly through the *method* parameter) and how parameter values are\nconstructed\
      \ from the link:message.html[Message] are all defined by the\nlink:bean-binding.html[Bean\
      \ Binding] mechanism which is used throughout\nall of the various link:bean-integration.html[Bean\
      \ Integration]\nmechanisms in Camel.\n\n[[EJB-Examples]]\nExamples\n^^^^^^^^\n\
      \nIn the following examples we use the Greater EJB which is defined as\nfollows:\n\
      \n*GreaterLocal.java*\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      public interface GreaterLocal {\n \n    String hello(String name);\n \n    String\
      \ bye(String name);\n \n}\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nAnd the implementation\n\n*GreaterImpl.java*\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      @Stateless\npublic class GreaterImpl implements GreaterLocal {\n \n    public\
      \ String hello(String name) {\n        return \"Hello \" + name;\n    }\n \n\
      \    public String bye(String name) {\n        return \"Bye \" + name;\n   \
      \ }\n \n}\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[EJB-UsingJavaDSL]]\nUsing Java DSL\n++++++++++++++\n\nIn this example we\
      \ want to invoke the `hello` method on the EJB. Since\nthis example is based\
      \ on an unit test using Apache OpenEJB we have to\nset a `JndiContext` on the\
      \ link:ejb.html[EJB] component with the OpenEJB\nsettings.\n\n[source,java]\n\
      -------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      @Override\nprotected CamelContext createCamelContext() throws Exception {\n\
      \    CamelContext answer = new DefaultCamelContext();\n \n    // enlist EJB\
      \ component using the JndiContext\n    EjbComponent ejb = answer.getComponent(\"\
      ejb\", EjbComponent.class);\n    ejb.setContext(createEjbContext());\n \n  \
      \  return answer;\n}\n \nprivate static Context createEjbContext() throws NamingException\
      \ {\n    // here we need to define our context factory to use OpenEJB for our\
      \ testing\n    Properties properties = new Properties();\n    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,\
      \ \"org.apache.openejb.client.LocalInitialContextFactory\");\n \n    return\
      \ new InitialContext(properties);\n}\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nThen we are ready to use the EJB in the Camel route:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      from(\"direct:start\")\n    // invoke the greeter EJB using the local interface\
      \ and invoke the hello method\n    .to(\"ejb:GreaterImplLocal?method=hello\"\
      )\n    .to(\"mock:result\");\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n*In a real application server*\n\nIn a real application server you most likely\
      \ do not have to setup a\n`JndiContext` on the link:ejb.html[EJB] component\
      \ as it will create a\ndefault `JndiContext` on the same JVM as the application\
      \ server, which\nusually allows it to access the JNDI registry and lookup the\n\
      link:ejb.html[EJB]s. However if you need to access a application server on a\
      \ remote JVM or\nthe likes, you have to prepare the properties beforehand.\n\
      \n[[EJB-UsingSpringXML]]\nUsing Spring XML\n++++++++++++++++\n\nAnd this is\
      \ the same example using Spring XML instead:\n\nAgain since this is based on\
      \ an unit test we need to setup the\nlink:ejb.html[EJB] component:\n\n[source,XML]\n\
      -------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      <!-- setup Camel EJB component -->\n<bean id=\"ejb\" class=\"org.apache.camel.component.ejb.EjbComponent\"\
      >\n    <property name=\"properties\" ref=\"jndiProperties\"/>\n</bean>\n \n\
      <!-- use OpenEJB context factory -->\n<p:properties id=\"jndiProperties\">\n\
      \    <prop key=\"java.naming.factory.initial\">org.apache.openejb.client.LocalInitialContextFactory</prop>\n\
      </p:properties>\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nBefore we are ready to use link:ejb.html[EJB] in the Camel routes:\n\n[source,XML]\n\
      -------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      <camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n    <route>\n\
      \        <from uri=\"direct:start\"/>\n        <to uri=\"ejb:GreaterImplLocal?method=hello\"\
      />\n        <to uri=\"mock:result\"/>\n    </route>\n</camelContext>\n-------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[EJB-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n* link:bean.html[Bean]\n* link:bean-binding.html[Bean\
      \ Binding]\n* link:bean-integration.html[Bean Integration]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-elasticsearch
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: elasticsearch
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: elasticsearch
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: elasticsearch
          spec:
            containers:
            - image: fabric8/connector-elasticsearch:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: elasticsearch
        syntax: elasticsearch:clusterName
        title: Elasticsearch
        description: The elasticsearch component is used for interfacing with ElasticSearch server.
        label: monitoring,search
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.elasticsearch.ElasticsearchComponent
        groupId: org.apache.camel
        artifactId: camel-elasticsearch
        version: 2.18.1
      componentProperties:
        client:
          kind: property
          type: object
          javaType: org.elasticsearch.client.Client
          deprecated: false
          secret: false
          description: To use an existing configured Elasticsearch client instead of creating a client per endpoint.
      properties:
        clusterName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of cluster or use local for local mode
        clientTransportSniff:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Is the client allowed to sniff the rest of the cluster or not (default true). This setting map to the client.transport.sniff setting.
        consistencyLevel:
          kind: parameter
          group: producer
          type: string
          javaType: org.elasticsearch.action.WriteConsistencyLevel
          enum:
          - DEFAULT
          - ONE
          - QUORUM
          - ALL
          deprecated: false
          secret: false
          defaultValue: DEFAULT
          description: The write consistency level to use with INDEX and BULK operations (can be any of ONE QUORUM ALL or DEFAULT)
        data:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Is the node going to be allowed to allocate data (shards) to it or not. This setting map to the node.data setting.
        indexName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the index to act against
        indexType:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The type of the index to act against
        ip:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The TransportClient remote host ip to use
        operation:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - INDEX
          - UPDATE
          - BULK
          - BULK_INDEX
          - GET_BY_ID
          - MULTIGET
          - DELETE
          - EXISTS
          - SEARCH
          - MULTISEARCH
          deprecated: false
          secret: false
          description: What operation to perform
        pathHome:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: /root//.elasticsearch
          description: The path.home property of ElasticSearch configuration. You need to provide a valid path otherwise the default $user.home/.elasticsearch will be used.
        port:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "9300"
          description: The TransportClient remote port to use (defaults to 9300)
        transportAddresses:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Comma separated list with ip:port formatted remote transport addresses to use. The ip and port options must be left blank for transportAddresses to be considered instead.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[ElasticSearch-ElasticSearchComponent]]
      ElasticSearch Component
      ~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.11*

      The ElasticSearch component allows you to interface with an
      http://elasticsearch.org[ElasticSearch] server.

      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-elasticsearch</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[ElasticSearch-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------
      elasticsearch://clusterName[?options]
      -------------------------------------

      [Tip]
      ====


      if you want to run against a local (in JVM/classloader) ElasticSearch
      server, just set the clusterName value in the URI to "local". See the
      http://www.elasticsearch.org/guide/reference/java-api/client.html[client
      guide] for more details.

      ====

      [[ElasticSearch-EndpointOptions]]
      Endpoint Options
      ^^^^^^^^^^^^^^^^



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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | client | Client | To use an existing configured Elasticsearch client instead of creating a client per endpoint.
      |=======================================================================
      {% endraw %}
      // component options: END





      // endpoint options: START
      The Elasticsearch component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | clusterName | producer |  | String | *Required* Name of cluster or use local for local mode
      | clientTransportSniff | producer | true | Boolean | Is the client allowed to sniff the rest of the cluster or not (default true). This setting map to the client.transport.sniff setting.
      | consistencyLevel | producer | DEFAULT | WriteConsistencyLevel | The write consistency level to use with INDEX and BULK operations (can be any of ONE QUORUM ALL or DEFAULT)
      | data | producer |  | Boolean | Is the node going to be allowed to allocate data (shards) to it or not. This setting map to the node.data setting.
      | indexName | producer |  | String | The name of the index to act against
      | indexType | producer |  | String | The type of the index to act against
      | ip | producer |  | String | The TransportClient remote host ip to use
      | operation | producer |  | String | What operation to perform
      | pathHome | producer | /root//.elasticsearch | String | The path.home property of ElasticSearch configuration. You need to provide a valid path otherwise the default $user.home/.elasticsearch will be used.
      | port | producer | 9300 | int | The TransportClient remote port to use (defaults to 9300)
      | transportAddresses | producer |  | String | Comma separated list with ip:port formatted remote transport addresses to use. The ip and port options must be left blank for transportAddresses to be considered instead.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[ElasticSearch-MessageOperations]]
      Message Operations
      ^^^^^^^^^^^^^^^^^^

      The following ElasticSearch operations are currently supported. Simply
      set an endpoint URI option or exchange header with a key of "operation"
      and a value set to one of the following. Some operations also require
      other parameters or the message body to be set.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |operation |message body |description

      |INDEX |Map, String, byte[] or XContentBuilder content to index |adds content to an index and returns the content's indexId in the body.
      *Camel 2.15,* you can set the indexId by setting the message header with
      the key "indexId".

      |GET_BY_ID |index id of content to retrieve |retrieves the specified index and returns a GetResult object in the body

      |DELETE |index id of content to delete |deletes the specified indexId and returns a DeleteResult object in the
      body

      |BULK_INDEX | a??*List*??or *Collection* of any type that is already accepted
      (XContentBuilder, Map, byte[], String) |*Camel 2.14,*adds content to an index and return a??List of the id??of the
      successfully indexed documents in the body

      |BULK |a??*List*??or *Collection* of any type that is already accepted
      (XContentBuilder, Map, byte[], String) |*Camel 2.15:* Adds content to an index and returns the BulkResponse
      object in the body

      |SEARCH |Map or SearchRequest Object |*Camel 2.15:*??search the content with the map of query string

      |MULTIGET |List of MultigetRequest.Item object |*Camel 2.17:*??retrieves the specified indexes, types etc. in
      MultigetRequest and returns a MultigetResponse object in the body

      |MULTISEARCH |List of SearchRequest object |*Camel 2.17:* search for parameters specified in MultiSearchRequest and
      returns a MultiSearchResponse object in the body

      |EXISTS |Index name as header |*Camel 2.17:* Returns a Boolean object in the body

      |UPDATE |Map, String, byte[] or XContentBuilder content to update |*Camel 2.17:* Updates content to an index and returns the content's
      indexId in the body.
      |=======================================================================

      [[ElasticSearch-IndexExample]]
      Index Example
      ^^^^^^^^^^^^^

      Below is a simple INDEX example

      [source,java]
      -------------------------------------------------------------------------------
      from("direct:index")
      .to("elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet");
      -------------------------------------------------------------------------------

      [source,xml]
      ---------------------------------------------------------------------------------------
      <route>
          <from uri="direct:index" />
          <to uri="elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet"/>
      </route>
      ---------------------------------------------------------------------------------------

      A client would simply need to pass a body message containing a Map to
      the route. The result body contains the indexId created.

      [source,java]
      -------------------------------------------------------------------------
      Map<String, String> map = new HashMap<String, String>();
      map.put("content", "test");
      String indexId = template.requestBody("direct:index", map, String.class);
      -------------------------------------------------------------------------

      [[ElasticSearch-Formoreinformation,seetheseresources]]
      For more information, see these resources
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      http://elasticsearch.org[ElasticSearch Main Site]

      http://www.elasticsearch.org/guide/reference/java-api/[ElasticSearch
      Java API]

      [[ElasticSearch-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-elsql
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: elsql
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: elsql
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: elsql
          spec:
            containers:
            - image: fabric8/connector-elsql:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: elsql
        syntax: elsql:elsqlName:resourceUri
        title: ElSQL
        description: The elsql component is an extension to the existing SQL Component that uses ElSql to define the SQL queries.
        label: database,sql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.elsql.ElsqlComponent
        groupId: org.apache.camel
        artifactId: camel-elsql
        version: 2.18.1
      componentProperties:
        databaseVendor:
          kind: property
          type: string
          javaType: org.apache.camel.component.elsql.ElSqlDatabaseVendor
          enum:
          - Default
          - Postgres
          - HSql
          - MySql
          - Oracle
          - SqlServer2008
          - Veritca
          deprecated: false
          secret: false
          description: To use a vendor specific com.opengamma.elsql.ElSqlConfig
        dataSource:
          kind: property
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: Sets the DataSource to use to communicate with the database.
        elSqlConfig:
          kind: property
          type: object
          javaType: com.opengamma.elsql.ElSqlConfig
          deprecated: false
          secret: false
          description: To use a specific configured ElSqlConfig. It may be better to use the databaseVendor option instead.
        resourceUri:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The resource file which contains the elsql SQL statements to use.
            You can specify multiple resources separated by comma. The resources are loaded
            on the classpath by default you can prefix with file: to load from file system.
            Notice you can set this option on the component and then you do not have to
            configure this on the endpoint.'
      properties:
        elsqlName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the elsql to use (is NAMED in the elsql file)
        resourceUri:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The resource file which contains the elsql SQL statements to use.
            You can specify multiple resources separated by comma. The resources are loaded
            on the classpath by default you can prefix with file: to load from file system.
            Notice you can set this option on the component and then you do not have to
            configure this on the endpoint.'
        allowNamedParameters:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow using named parameters in the queries.
        databaseVendor:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.elsql.ElSqlDatabaseVendor
          enum:
          - Default
          - Postgres
          - HSql
          - MySql
          - Oracle
          - SqlServer2008
          - Veritca
          deprecated: false
          secret: false
          description: To use a vendor specific com.opengamma.elsql.ElSqlConfig
        dataSource:
          kind: parameter
          group: common
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: Sets the DataSource to use to communicate with the database.
        dataSourceRef:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: Sets the reference to a DataSource to lookup from the registry to use for communicating with the database.
        elSqlConfig:
          kind: parameter
          group: common
          type: object
          javaType: com.opengamma.elsql.ElSqlConfig
          deprecated: false
          secret: false
          description: To use a specific configured ElSqlConfig. It may be better to use the databaseVendor option instead.
        outputClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the full package and class name to use as conversion when outputType=SelectOne.
        outputHeader:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Store the query result in a header instead of the message body. By default outputHeader == null and the query result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the query result and the original message body is preserved.
        outputType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.sql.SqlOutputType
          enum:
          - SelectOne
          - SelectList
          - StreamList
          deprecated: false
          secret: false
          defaultValue: SelectList
          description: Make the output of consumer or producer to SelectList as List of Map or SelectOne as single Java object in the following way:a) If the query has only single column then that JDBC Column object is returned. (such as SELECT COUNT( ) FROM PROJECT will return a Long object.b) If the query has more than one column then it will return a Map of that result.c) If the outputClass is set then it will convert the query result into an Java bean object by calling all the setters that match the column names.It will assume your class has a default constructor to create instance with.d) If the query resulted in more than one rows it throws an non-unique result exception.StreamList streams the result of the query using an Iterator. This can be used with the Splitter EIP in streaming mode to process the ResultSet in streaming fashion.
        separator:
          kind: parameter
          group: common
          type: string
          javaType: char
          deprecated: false
          secret: false
          defaultValue: ','
          description: The separator to use when parameter values is taken from message body (if the body is a String type) to be inserted at placeholders.Notice if you use named parameters then a Map type is used instead. The default value is comma
        breakBatchOnConsumeFail:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to break batch if onConsume failed.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        expectedUpdateCount:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets an expected update count to validate when using onConsume.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the maximum number of messages to poll
        onConsume:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing each row then this query can be executed if the Exchange was processed successfully for example to mark the row as processed. The query can have parameter.
        onConsumeBatchComplete:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing the entire batch this query can be executed to bulk update rows etc. The query cannot have parameters.
        onConsumeFailed:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing each row then this query can be executed if the Exchange failed for example to mark the row as failed. The query can have parameter.
        routeEmptyResultSet:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether empty resultset should be allowed to be sent to the next hop. Defaults to false. So the empty resultset will be filtered out.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        transacted:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables or disables transaction. If enabled then if processing an exchange failed then the consumerbreak out processing any further exchanges to cause a rollback eager.
        useIterator:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets how resultset should be delivered to route. Indicates delivery as either a list or individual object. defaults to true.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        processingStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.sql.SqlProcessingStrategy
          deprecated: false
          secret: false
          description: Allows to plugin to use a custom org.apache.camel.component.sql.SqlProcessingStrategy to execute queries when the consumer has processed the rows/batch.
        noop:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set will ignore the results of the SQL query and use the existing IN message as the OUT message for the continuation of processing
        useMessageBodyForSql:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use the message body as the SQL and then headers for parameters. If this option is enabled then the SQL in the uri is not used.
        alwaysPopulateStatement:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled then the populateStatement method from org.apache.camel.component.sql.SqlPrepareStatementStrategy is always invoked also if there is no expected parameters to be prepared. When this is false then the populateStatement is only invoked if there is 1 or more expected parameters to be set; for example this avoids reading the message body/headers for SQL queries with no parameters.
        parametersCount:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: If set greater than zero then Camel will use this count value of parameters to replace instead of querying via JDBC metadata API. This is useful if the JDBC vendor could not return correct parameters count then user may override instead.
        placeholder:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '#'
          description: Specifies a character that will be replaced to in SQL query. Notice that it is simple String.replaceAll() operation and no SQL parsing is involved (quoted strings will also change).
        prepareStatementStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sql.SqlPrepareStatementStrategy
          deprecated: false
          secret: false
          description: Allows to plugin to use a custom org.apache.camel.component.sql.SqlPrepareStatementStrategy to control preparation of the query and prepared statement.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        templateOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: template.
          multiValue: true
          deprecated: false
          secret: false
          description: Configures the Spring JdbcTemplate with the key/values from the Map
        usePlaceholder:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[ElSql-ElSqlComponent]]
      ElSql Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      The *elsql:* component is an extension to the existing
      link:sql-component.html[SQL Component] that uses
      https://github.com/OpenGamma/ElSql[ElSql] to define the SQL queries.??

      This component uses `spring-jdbc` behind the scenes for the actual SQL
      handling.

      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-elsql</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [Info]
      ====
      This component can be used as a
      http://camel.apache.org/transactional-client.html[Transactional Client].
      ====

      The SQL component uses the following endpoint URI notation:

      [source,java]
      -----------------------------------
      sql:elSqlName:resourceUri[?options]
      -----------------------------------

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

      The parameters to the SQL queries are named parameters in the elsql
      mapping files, and maps to corresponding keys from the Camel message,??in
      the given precedence:

      1. *Camel 2.16.1:*??from message body if??link:simple.html[Simple]
      expression.

      2. from message body if its a `java.util.Map`3. from message headers

      If a named parameter cannot be resolved, then an exception is thrown.

      [[ElSql-Options]]
      Options
      ^^^^^^^

      // component options: START
      The ElSQL component supports 4 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | databaseVendor | ElSqlDatabaseVendor | To use a vendor specific com.opengamma.elsql.ElSqlConfig
      | dataSource | DataSource | Sets the DataSource to use to communicate with the database.
      | elSqlConfig | ElSqlConfig | To use a specific configured ElSqlConfig. It may be better to use the databaseVendor option instead.
      | resourceUri | String | The resource file which contains the elsql SQL statements to use. You can specify multiple resources separated by comma. The resources are loaded on the classpath by default you can prefix with file: to load from file system. Notice you can set this option on the component and then you do not have to configure this on the endpoint.
      |=======================================================================
      {% endraw %}
      // component options: END

      // endpoint options: START
      The ElSQL component supports 48 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | elsqlName | common |  | String | *Required* The name of the elsql to use (is NAMED in the elsql file)
      | resourceUri | common |  | String | The resource file which contains the elsql SQL statements to use. You can specify multiple resources separated by comma. The resources are loaded on the classpath by default you can prefix with file: to load from file system. Notice you can set this option on the component and then you do not have to configure this on the endpoint.
      | allowNamedParameters | common | true | boolean | Whether to allow using named parameters in the queries.
      | databaseVendor | common |  | ElSqlDatabaseVendor | To use a vendor specific com.opengamma.elsql.ElSqlConfig
      | dataSource | common |  | DataSource | Sets the DataSource to use to communicate with the database.
      | dataSourceRef | common |  | String | Sets the reference to a DataSource to lookup from the registry to use for communicating with the database.
      | elSqlConfig | common |  | ElSqlConfig | To use a specific configured ElSqlConfig. It may be better to use the databaseVendor option instead.
      | outputClass | common |  | String | Specify the full package and class name to use as conversion when outputType=SelectOne.
      | outputHeader | common |  | String | Store the query result in a header instead of the message body. By default outputHeader == null and the query result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the query result and the original message body is preserved.
      | outputType | common | SelectList | SqlOutputType | Make the output of consumer or producer to SelectList as List of Map or SelectOne as single Java object in the following way:a) If the query has only single column then that JDBC Column object is returned. (such as SELECT COUNT( ) FROM PROJECT will return a Long object.b) If the query has more than one column then it will return a Map of that result.c) If the outputClass is set then it will convert the query result into an Java bean object by calling all the setters that match the column names.It will assume your class has a default constructor to create instance with.d) If the query resulted in more than one rows it throws an non-unique result exception.StreamList streams the result of the query using an Iterator. This can be used with the Splitter EIP in streaming mode to process the ResultSet in streaming fashion.
      | separator | common | , | char | The separator to use when parameter values is taken from message body (if the body is a String type) to be inserted at placeholders.Notice if you use named parameters then a Map type is used instead. The default value is comma
      | breakBatchOnConsumeFail | consumer | false | boolean | Sets whether to break batch if onConsume failed.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | expectedUpdateCount | consumer | -1 | int | Sets an expected update count to validate when using onConsume.
      | maxMessagesPerPoll | consumer |  | int | Sets the maximum number of messages to poll
      | onConsume | consumer |  | String | After processing each row then this query can be executed if the Exchange was processed successfully for example to mark the row as processed. The query can have parameter.
      | onConsumeBatchComplete | consumer |  | String | After processing the entire batch this query can be executed to bulk update rows etc. The query cannot have parameters.
      | onConsumeFailed | consumer |  | String | After processing each row then this query can be executed if the Exchange failed for example to mark the row as failed. The query can have parameter.
      | routeEmptyResultSet | consumer | false | boolean | Sets whether empty resultset should be allowed to be sent to the next hop. Defaults to false. So the empty resultset will be filtered out.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | transacted | consumer | false | boolean | Enables or disables transaction. If enabled then if processing an exchange failed then the consumerbreak out processing any further exchanges to cause a rollback eager.
      | useIterator | consumer | true | boolean | Sets how resultset should be delivered to route. Indicates delivery as either a list or individual object. defaults to true.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | processingStrategy | consumer (advanced) |  | SqlProcessingStrategy | Allows to plugin to use a custom org.apache.camel.component.sql.SqlProcessingStrategy to execute queries when the consumer has processed the rows/batch.
      | noop | producer | false | boolean | If set will ignore the results of the SQL query and use the existing IN message as the OUT message for the continuation of processing
      | useMessageBodyForSql | producer | false | boolean | Whether to use the message body as the SQL and then headers for parameters. If this option is enabled then the SQL in the uri is not used.
      | alwaysPopulateStatement | producer (advanced) | false | boolean | If enabled then the populateStatement method from org.apache.camel.component.sql.SqlPrepareStatementStrategy is always invoked also if there is no expected parameters to be prepared. When this is false then the populateStatement is only invoked if there is 1 or more expected parameters to be set; for example this avoids reading the message body/headers for SQL queries with no parameters.
      | parametersCount | producer (advanced) |  | int | If set greater than zero then Camel will use this count value of parameters to replace instead of querying via JDBC metadata API. This is useful if the JDBC vendor could not return correct parameters count then user may override instead.
      | placeholder | advanced | # | String | Specifies a character that will be replaced to in SQL query. Notice that it is simple String.replaceAll() operation and no SQL parsing is involved (quoted strings will also change).
      | prepareStatementStrategy | advanced |  | SqlPrepareStatementStrategy | Allows to plugin to use a custom org.apache.camel.component.sql.SqlPrepareStatementStrategy to control preparation of the query and prepared statement.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | templateOptions | advanced |  | Map | Configures the Spring JdbcTemplate with the key/values from the Map
      | usePlaceholder | advanced | true | boolean | Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[ElSql-Resultofthequery]]
      Result of the query
      ^^^^^^^^^^^^^^^^^^^

      For `select` operations, the result is an instance of
      `List<Map<String, Object>>` type, as returned by the
      JdbcTemplate.queryForList() method. For `update` operations, the result
      is the number of updated rows, returned as an `Integer`.

      By default, the result is placed in the message body.?? If the
      outputHeader parameter is set, the result is placed in the header.?? This
      is an alternative to using a full message enrichment pattern to add
      headers, it provides a concise syntax for querying a sequence or some
      other small value into a header.?? It is convenient to use outputHeader
      and outputType together:

      [[ElSql-Headervalues]]
      Header values
      ^^^^^^^^^^^^^

      When performing `update` operations, the SQL Component stores the update
      count in the following message headers:

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

      |`CamelSqlUpdateCount` |The number of rows updated for `update` operations, returned as an
      `Integer` object.

      |`CamelSqlRowCount` |The number of rows returned for `select` operations, returned as an
      `Integer` object.
      |=======================================================================

      [[ElSql-Sample]]
      Sample
      ++++++

      In the given route below, we want to get all the projects from the
      projects table. Notice the SQL query has 2 named parameters, :#lic and
      :#min.

      Camel will then lookup for these parameters from the message body or
      message headers. Notice in the example above we set two headers with
      constant value +
       for the named parameters:

      [source,java]
      -----------------------------------------------
         from("direct:projects")
           .setHeader("lic", constant("ASF"))
           .setHeader("min", constant(123))
           .to("elsql:projects:com/foo/orders.elsql")
      -----------------------------------------------

      And the https://github.com/OpenGamma/ElSql[elsql] mapping file

      [source,java]
      ------------------------------------
      @NAME(projects)
        SELECT *
        FROM projects
        WHERE license = :lic AND id > :min
        ORDER BY id
      ------------------------------------

      Though if the message body is a `java.util.Map` then the named
      parameters will be taken from the body.

      [source,java]
      -----------------------------------------------
         from("direct:projects")
           .to("elsql:projects:com/foo/orders.elsql")
      -----------------------------------------------

      In from Camel 2.16.1 onwards you can use Simple expressions as well,
      which allows to use an OGNL like notation on the message body, where it
      assumes to have??`getLicense` and??`getMinimum` methods:

      [source,java]
      ------------------------------------------------------------
      @NAME(projects)
        SELECT *
        FROM projects
        WHERE license = :${body.license} AND id > :${body.minimum}
        ORDER BY id
      ------------------------------------------------------------

      [[ElSql-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:sql-component.html[SQL Component]
      * link:mybatis.html[MyBatis]
      * link:jdbc.html[JDBC]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-etcd
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: etcd
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: etcd
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: etcd
          spec:
            containers:
            - image: fabric8/connector-etcd:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: etcd
        syntax: etcd:namespace/path
        title: etcd
        description: The camel etcd component allows you to work with Etcd a distributed A distributed reliable key-value store.
        label: etcd
        deprecated: false
        async: false
        javaType: org.apache.camel.component.etcd.EtcdComponent
        groupId: org.apache.camel
        artifactId: camel-etcd
        version: 2.18.1
      componentProperties: {}
      properties:
        namespace:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.etcd.EtcdNamespace
          enum:
          - keys
          - stats
          - watch
          deprecated: false
          secret: false
          description: The API namespace to use
        path:
          kind: path
          group: common
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The path the enpoint refers to
        recursive:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To apply an action recursively.
        servicePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: /services/
          description: The path to look for for service discovery
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: To set the maximum time an action could take to complete.
        uris:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: http://localhost:2379,http://localhost:4001
          description: To set the URIs the client connects.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyExchangeOnTimeout:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To send an empty message in case of timeout watching for a key.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fromIndex:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: The index to watch from
        timeToLive:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To set the lifespan of a key in milliseconds.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password to use for basic authentication.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        userName:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The user name to use for basic authentication.
    documentation.adoc: |+
      +[[Etcd-Etcd]]
      +Etcd












      // endpoint options: START
      The etcd component supports 16 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | namespace | common |  | EtcdNamespace | *Required* The API namespace to use
      | path | common |  | String | The path the enpoint refers to
      | recursive | common | false | boolean | To apply an action recursively.
      | servicePath | common | /services/ | String | The path to look for for service discovery
      | timeout | common |  | Long | To set the maximum time an action could take to complete.
      | uris | common | http://localhost:2379,http://localhost:4001 | String | To set the URIs the client connects.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyExchangeOnTimeout | consumer | false | boolean | To send an empty message in case of timeout watching for a key.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fromIndex | consumer (advanced) | 0 | Long | The index to watch from
      | timeToLive | producer |  | Integer | To set the lifespan of a key in milliseconds.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | password | security |  | String | The password to use for basic authentication.
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | userName | security |  | String | The user name to use for basic authentication.
      |=======================================================================
      {% endraw %}
      // endpoint options: END














      // component options: START
      The etcd component has no options.
      // component options: END


- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-eventadmin
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: eventadmin
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: eventadmin
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: eventadmin
          spec:
            containers:
            - image: fabric8/connector-eventadmin:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: eventadmin
        syntax: eventadmin:topic
        title: OSGi EventAdmin
        description: The eventadmin component can be used in an OSGi environment to receive OSGi EventAdmin events and process them.
        label: eventbus
        deprecated: false
        async: false
        javaType: org.apache.camel.component.eventadmin.EventAdminComponent
        groupId: org.apache.camel
        artifactId: camel-eventadmin
        version: 2.18.1
      componentProperties:
        bundleContext:
          kind: property
          type: object
          javaType: org.osgi.framework.BundleContext
          deprecated: false
          secret: false
          description: The OSGi BundleContext is automatic injected by Camel
      properties:
        topic:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of topic to listen or send to
        send:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use 'send' or 'synchronous' deliver. Default false (async delivery)
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[EventAdmin-EventAdmincomponent]]
      EventAdmin component
      ~~~~~~~~~~~~~~~~~~~~

      *Available in Camel 2.6*

      The `eventadmin` component can be used in an OSGi environment to receive
      OSGi EventAdmin events and process them.

      [[EventAdmin-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users need to add the following dependency to their `pom.xml`

      [source,xml]
      -------------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-eventadmin</artifactId>
        <version>${camel-version}</version>
      </dependency>
      -------------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.6.0 or higher).

      [[EventAdmin-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,xml]
      --------------------------
      eventadmin:topic[?options]
      --------------------------

      where `topic` is the name of the topic to listen too.

      [[EventAdmin-URIoptions]]
      URI options
      ^^^^^^^^^^^

      // component options: START
      The OSGi EventAdmin component supports 1 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | bundleContext | BundleContext | The OSGi BundleContext is automatic injected by Camel
      |=======================================================================
      {% endraw %}
      // component options: END

      // endpoint options: START
      The OSGi EventAdmin component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | topic | common |  | String | Name of topic to listen or send to
      | send | common | false | boolean | Whether to use 'send' or 'synchronous' deliver. Default false (async delivery)
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[EventAdmin-Messageheaders]]
      Message headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Message |Description
      |=======================================================================

      [[EventAdmin-Messagebody]]
      Message body
      ^^^^^^^^^^^^

      The `in` message body will be set to the received Event.

      [[EventAdmin-Exampleusage]]
      Example usage
      ^^^^^^^^^^^^^

      [source,xml]
      ------------------------------
      <route>
          <from uri="eventadmin:*"/>
          <to uri="stream:out"/>
      </route>
      ------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-exec
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: exec
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: exec
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: exec
          spec:
            containers:
            - image: fabric8/connector-exec:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: exec
        syntax: exec:executable
        title: Exec
        description: The exec component can be used to execute OS system commands.
        label: system
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.exec.ExecComponent
        groupId: org.apache.camel
        artifactId: camel-exec
        version: 2.18.1
      componentProperties: {}
      properties:
        executable:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the executable to be executed. The executable must not be empty or null.
        args:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The arguments may be one or many whitespace-separated tokens.
        binding:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.exec.ExecBinding
          deprecated: false
          secret: false
          description: A reference to a org.apache.commons.exec.ExecBinding in the Registry.
        commandExecutor:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.exec.ExecCommandExecutor
          deprecated: false
          secret: false
          description: A reference to a org.apache.commons.exec.ExecCommandExecutor in the Registry that customizes the command execution. The default command executor utilizes the commons-exec library which adds a shutdown hook for every executed command.
        outFile:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of a file created by the executable that should be considered as its output. If no outFile is set the standard output (stdout) of the executable will be used instead.
        timeout:
          kind: parameter
          group: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The timeout in milliseconds after which the executable should be terminated. If execution has not completed within the timeout the component will send a termination request.
        useStderrOnEmptyStdout:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: A boolean indicating that when stdout is empty this component will populate the Camel Message Body with stderr. This behavior is disabled (false) by default.
        workingDir:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The directory in which the command should be executed. If null the working directory of the current process will be used.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Exec-Execcomponent]]
      Exec component
      ~~~~~~~~~~~~~~

      *Available in Camel 2.3*

      The `exec` component can be used to execute system commands.

      [[Exec-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users need to add the following dependency to their `pom.xml`

      [source,xml]
      -------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-exec</artifactId>
        <version>${camel-version}</version>
      </dependency>
      -------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.3.0 or higher).

      [[Exec-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,xml]
      ---------------------------
      exec://executable[?options]
      ---------------------------

      where `executable` is the name, or file path, of the system command that
      will be executed. If executable name is used (e.g. `exec:java`), the
      executable must in the system path.

      [[Exec-URIoptions]]
      URI options
      ^^^^^^^^^^^

      // component options: START
      The Exec component has no options.
      // component options: END

      // endpoint options: START
      The Exec component supports 9 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | executable | producer |  | String | *Required* Sets the executable to be executed. The executable must not be empty or null.
      | args | producer |  | String | The arguments may be one or many whitespace-separated tokens.
      | binding | producer |  | ExecBinding | A reference to a org.apache.commons.exec.ExecBinding in the Registry.
      | commandExecutor | producer |  | ExecCommandExecutor | A reference to a org.apache.commons.exec.ExecCommandExecutor in the Registry that customizes the command execution. The default command executor utilizes the commons-exec library which adds a shutdown hook for every executed command.
      | outFile | producer |  | String | The name of a file created by the executable that should be considered as its output. If no outFile is set the standard output (stdout) of the executable will be used instead.
      | timeout | producer |  | long | The timeout in milliseconds after which the executable should be terminated. If execution has not completed within the timeout the component will send a termination request.
      | useStderrOnEmptyStdout | producer | false | boolean | A boolean indicating that when stdout is empty this component will populate the Camel Message Body with stderr. This behavior is disabled (false) by default.
      | workingDir | producer |  | String | The directory in which the command should be executed. If null the working directory of the current process will be used.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Exec-Messageheaders]]
      Message headers
      ^^^^^^^^^^^^^^^

      The supported headers are defined in
      `org.apache.camel.component.exec.ExecBinding`.

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Name |Type |Message |Description

      |`ExecBinding.EXEC_COMMAND_EXECUTABLE` |`String` |`in` |The name of the system command that will be executed. Overrides
      `executable` in the URI.

      |`ExecBinding.EXEC_COMMAND_ARGS` |`java.util.List<String>` |`in` |Command-line arguments to pass to the executed process. The arguments
      are used literally - no quoting is applied. Overrides any existing
      `args` in the URI.

      |`ExecBinding.EXEC_COMMAND_ARGS` |`String`| `in` |*Camel 2.5:* The arguments of the executable as a Single string where
      each argument is whitespace separated (see `args` in URI option). The
      arguments are used literally, no quoting is applied. Overrides any
      existing `args` in the URI.

      |`ExecBinding.EXEC_COMMAND_OUT_FILE` |`String` |`in` |The name of a file, created by the executable, that should be considered
      as its output. Overrides any existing `outFile` in the URI.

      |`ExecBinding.EXEC_COMMAND_TIMEOUT` |`long` |`in` |The timeout, in milliseconds, after which the executable should be
      terminated. Overrides any existing `timeout` in the URI.

      |`ExecBinding.EXEC_COMMAND_WORKING_DIR` |`String` |`in` |The directory in which the command should be executed. Overrides any
      existing `workingDir` in the URI.

      |`ExecBinding.EXEC_EXIT_VALUE` |`int` |`out` |The value of this header is the _exit value_ of the executable. Non-zero
      exit values typically indicate abnormal termination. Note that the exit
      value is OS-dependent.

      |`ExecBinding.EXEC_STDERR` |`java.io.InputStream` |`out` |The value of this header points to the standard error stream (stderr) of
      the executable. If no stderr is written, the value is `null`.

      |`ExecBinding.EXEC_USE_STDERR_ON_EMPTY_STDOUT` |`boolean` |`in` |Indicates that when `stdout` is empty, this component will populate the
      Camel Message Body with `stderr`. This behavior is disabled (`false`) by
      default.
      |=======================================================================

      [[Exec-Messagebody]]
      Message body
      ^^^^^^^^^^^^

      If the `Exec` component receives an `in` message body that is
      convertible to `java.io.InputStream`, it is used to feed input to the
      executable via its stdin. After execution,
      http://camel.apache.org/exchange.html[the message body] is the result of
      the execution,- that is, an
      `org.apache.camel.components.exec.ExecResult` instance containing the
      stdout, stderr, exit value, and out file. This component supports the
      following `ExecResult` http://camel.apache.org/type-converter.html[type
      converters] for convenience:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |From |To

      |`ExecResult` |`java.io.InputStream`

      |`ExecResult` |`String`

      |`ExecResult` |`byte []`

      |`ExecResult` |`org.w3c.dom.Document`
      |=======================================================================

      If an out file is specified (in the endpoint via `outFile` or the
      message headers via `ExecBinding.EXEC_COMMAND_OUT_FILE`), converters
      will return the content of the out file. If no out file is used, then
      this component will convert the stdout of the process to the target
      type. For more details, please refer to the link:exec.html[usage
      examples] below.

      [[Exec-Usageexamples]]
      Usage examples
      ^^^^^^^^^^^^^^

      [[Exec-Executingwordcount]]
      Executing word count (Linux)
      ++++++++++++++++++++++++++++

      The example below executes `wc` (word count, Linux) to count the words
      in file `/usr/share/dict/words`. The word count (output) is written to
      the standard output stream of `wc`.

      [source,java]
      --------------------------------------------------------------------------------------
      from("direct:exec")
      .to("exec:wc?args=--words /usr/share/dict/words")
      .process(new Processor() {
           public void process(Exchange exchange) throws Exception {
             // By default, the body is ExecResult instance
             assertIsInstanceOf(ExecResult.class, exchange.getIn().getBody());
             // Use the Camel Exec String type converter to convert the ExecResult to String
             // In this case, the stdout is considered as output
             String wordCountOutput = exchange.getIn().getBody(String.class);
             // do something with the word count
           }
      });
      --------------------------------------------------------------------------------------

      [[Exec-Executingjava]]
      Executing `java`
      ++++++++++++++++

      The example below executes `java` with 2 arguments: `-server` and
      `-version`, provided that `java` is in the system path.

      [source,java]
      --------------------------------------
      from("direct:exec")
      .to("exec:java?args=-server -version")
      --------------------------------------

      The example below executes `java` in `c:\temp` with 3 arguments:
      `-server`, `-version` and the sytem property `user.name`.

      [source,java]
      ----------------------------------------------------------------------------------------------------
      from("direct:exec")
      .to("exec:c:/program files/jdk/bin/java?args=-server -version -Duser.name=Camel&workingDir=c:/temp")
      ----------------------------------------------------------------------------------------------------

      [[Exec-ExecutingAntscripts]]
      Executing Ant scripts
      +++++++++++++++++++++

      The following example executes http://ant.apache.org/[Apache Ant]
      (Windows only) with the build file `CamelExecBuildFile.xml`, provided
      that `ant.bat` is in the system path, and that `CamelExecBuildFile.xml`
      is in the current directory.

      [source,java]
      --------------------------------------------------
      from("direct:exec")
      .to("exec:ant.bat?args=-f CamelExecBuildFile.xml")
      --------------------------------------------------

      In the next example, the `ant.bat` command redirects its output to
      `CamelExecOutFile.txt` with `-l`. The file `CamelExecOutFile.txt` is
      used as the out file with `outFile=CamelExecOutFile.txt`. The example
      assumes that `ant.bat` is in the system path, and that
      `CamelExecBuildFile.xml` is in the current directory.

      [source,java]
      -------------------------------------------------------------------------------------------------------
      from("direct:exec")
      .to("exec:ant.bat?args=-f CamelExecBuildFile.xml -l CamelExecOutFile.txt&outFile=CamelExecOutFile.txt")
      .process(new Processor() {
           public void process(Exchange exchange) throws Exception {
              InputStream outFile = exchange.getIn().getBody(InputStream.class);
              assertIsInstanceOf(InputStream.class, outFile);
              // do something with the out file here
           }
        });
      -------------------------------------------------------------------------------------------------------

      [[Exec-Executingecho]]
      Executing `echo` (Windows)
      ++++++++++++++++++++++++++

      Commands such as `echo` and `dir` can be executed only with the command
      interpreter of the operating system. This example shows how to execute
      such a command - `echo` - in Windows.

      [source,java]
      ----------------------------------------------------------
      from("direct:exec").to("exec:cmd?args=/C echo echoString")
      ----------------------------------------------------------

      [[Exec-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-facebook
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: facebook
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: facebook
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: facebook
          spec:
            containers:
            - image: fabric8/connector-facebook:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: facebook
        syntax: facebook:methodName
        title: Facebook
        description: The Facebook component provides access to all of the Facebook APIs accessible using Facebook4J.
        label: social
        deprecated: false
        async: false
        javaType: org.apache.camel.component.facebook.FacebookComponent
        groupId: org.apache.camel
        artifactId: camel-facebook
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.facebook.config.FacebookConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
      properties:
        methodName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: What operation to perform
        achievementURL:
          kind: parameter
          group: common
          type: string
          javaType: java.net.URL
          deprecated: false
          secret: false
          description: The unique URL of the achievement
        albumId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The album ID
        albumUpdate:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.AlbumUpdate
          deprecated: false
          secret: false
          description: The facebook Album to be created or updated
        appId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ID of the Facebook Application
        center:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.GeoLocation
          deprecated: false
          secret: false
          description: Location latitude and longitude
        checkinId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The checkin ID
        checkinUpdate:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.CheckinUpdate
          deprecated: true
          secret: false
          description: The checkin to be created. Deprecated instead create a Post with an attached location
        clientURL:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Facebook4J API client URL
        clientVersion:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Facebook4J client API version
        commentId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The comment ID
        commentUpdate:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.CommentUpdate
          deprecated: false
          secret: false
          description: The facebook Comment to be created or updated
        debugEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables deubg output. Effective only with the embedded logger
        description:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The description text
        distance:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Distance in meters
        domainId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The domain ID
        domainName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The domain name
        domainNames:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: The domain names
        eventId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The event ID
        eventUpdate:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.EventUpdate
          deprecated: false
          secret: false
          description: The event to be created or updated
        friendId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The friend ID
        friendlistId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The friend list ID
        friendlistName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The friend list Name
        friendUserId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The friend user ID
        groupId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The group ID
        gzipEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Use Facebook GZIP encoding
        httpConnectionTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "20000"
          description: Http connection timeout in milliseconds
        httpDefaultMaxPerRoute:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2"
          description: HTTP maximum connections per route
        httpMaxTotalConnections:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "20"
          description: HTTP maximum total connections
        httpReadTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "120000"
          description: Http read timeout in milliseconds
        httpRetryCount:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Number of HTTP retries
        httpRetryIntervalSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "5"
          description: HTTP retry interval in seconds
        httpStreamingReadTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "40000"
          description: HTTP streaming read timeout in milliseconds
        ids:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: The ids of users
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        includeRead:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Enables notifications that the user has already read in addition to unread ones
        isHidden:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Whether hidden
        jsonStoreEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true raw JSON forms will be stored in DataObjectFactory
        link:
          kind: parameter
          group: common
          type: string
          javaType: java.net.URL
          deprecated: false
          secret: false
          description: Link URL
        linkId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Link ID
        locale:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Locale
          deprecated: false
          secret: false
          description: Desired FQL locale
        mbeanEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true Facebook4J mbean will be registerd
        message:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The message text
        messageId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The message ID
        metric:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The metric name
        milestoneId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The milestone id
        name:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Test user name must be of the form 'first last'
        noteId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The note ID
        notificationId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The notification ID
        objectId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The insight object ID
        offerId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The offer id
        optionDescription:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The question's answer option description
        pageId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The page id
        permissionName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The permission name
        permissions:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Test user permissions in the format perm1perm2...
        photoId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The photo ID
        pictureId:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The picture id
        pictureId2:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The picture2 id
        pictureSize:
          kind: parameter
          group: common
          type: string
          javaType: facebook4j.PictureSize
          enum:
          - square
          - small
          - normal
          - large
          deprecated: false
          secret: false
          description: The picture size
        placeId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The place ID
        postId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The post ID
        postUpdate:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.PostUpdate
          deprecated: false
          secret: false
          description: The post to create or update
        prettyDebugEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Prettify JSON debug output if set to true
        queries:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          deprecated: false
          secret: false
          description: FQL queries
        query:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: FQL query or search terms for search endpoints
        questionId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The question id
        reading:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.Reading
          deprecated: false
          secret: false
          description: Optional reading parameters. See Reading Options(reading)
        readingOptions:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: reading.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure Reading using key/value pairs from the Map.
        restBaseURL:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https://graph.facebook.com/
          description: API base URL
        scoreValue:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The numeric score with value
        size:
          kind: parameter
          group: common
          type: string
          javaType: facebook4j.PictureSize
          enum:
          - square
          - small
          - normal
          - large
          deprecated: false
          secret: false
          description: The picture size one of large normal small or square
        source:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.Media
          deprecated: false
          secret: false
          description: The media content from either a java.io.File or java.io.Inputstream
        subject:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The note of the subject
        tabId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The tab id
        tagUpdate:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.TagUpdate
          deprecated: false
          secret: false
          description: Photo tag information
        testUser1:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.TestUser
          deprecated: false
          secret: false
          description: Test user 1
        testUser2:
          kind: parameter
          group: common
          type: object
          javaType: facebook4j.TestUser
          deprecated: false
          secret: false
          description: Test user 2
        testUserId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ID of the test user
        title:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The title text
        toUserId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ID of the user to tag
        toUserIds:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: The IDs of the users to tag
        userId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Facebook user ID
        userId1:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ID of a user 1
        userId2:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ID of a user 2
        userIds:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: The IDs of users to invite to event
        userLocale:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The test user locale
        useSSL:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Use SSL
        videoBaseURL:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https://graph-video.facebook.com/
          description: Video API base URL
        videoId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The video ID
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        httpProxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HTTP proxy server host name
        httpProxyPassword:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HTTP proxy server password
        httpProxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: HTTP proxy server port
        httpProxyUser:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HTTP proxy server user name
        oAuthAccessToken:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The user access token
        oAuthAccessTokenURL:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https://graph.facebook.com/oauth/access_token
          description: OAuth access token URL
        oAuthAppId:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The application Id
        oAuthAppSecret:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The application Secret
        oAuthAuthorizationURL:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https://www.facebook.com/dialog/oauth
          description: OAuth authorization URL
        oAuthPermissions:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Default OAuth permissions. Comma separated permission names. See https://developers.facebook.com/docs/reference/login/permissions for the detail
    documentation.adoc: |
      [[Facebook-FacebookComponent]]
      Facebook Component
      ~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The Facebook component provides access to all of the Facebook APIs
      accessible using http://facebook4j.org/en/index.html[Facebook4J]. It
      allows producing messages to retrieve, add, and delete posts, likes,
      comments, photos, albums, videos, photos, checkins, locations, links,
      etc. It also supports APIs that allow polling for posts, users,
      checkins, groups, locations, etc.

      Facebook requires the use of OAuth for all client application
      authentication. In order to use camel-facebook with your account, you'll
      need to create a new application within Facebook at
      https://developers.facebook.com/apps[https://developers.facebook.com/apps]
      and grant the application access to your account. The Facebook
      application's id and secret will allow access to Facebook APIs which do
      not require a current user. A user access token is required for APIs
      that require a logged in user. More information on obtaining a user
      access token can be found at
      https://developers.facebook.com/docs/facebook-login/access-tokens/[https://developers.facebook.com/docs/facebook-login/access-tokens/].

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

      [source,java]
      -----------------------------------------------
          <dependency>
              <groupId>org.apache.camel</groupId>
              <artifactId>camel-facebook</artifactId>
              <version>${camel-version}</version>
          </dependency>
      -----------------------------------------------

      [[Facebook-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------
        facebook://[endpoint]?[options]
      ---------------------------------

      [[Facebook-FacebookComponent.1]]
      FacebookComponent
      ^^^^^^^^^^^^^^^^^

      The facebook component can be configured with the Facebook account
      settings below, which are mandatory. The values can be provided to the
      component using the bean property *configuration* of type
      *org.apache.camel.component.facebook.config.FacebookConfiguration*. The
      *oAuthAccessToken* option may be ommited but that will only allow access
      to application APIs.




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | FacebookConfiguration | To use the shared configuration
      |=======================================================================
      {% endraw %}
      // component options: END





      // endpoint options: START
      The Facebook component supports 103 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | methodName | common |  | String | *Required* What operation to perform
      | achievementURL | common |  | URL | The unique URL of the achievement
      | albumId | common |  | String | The album ID
      | albumUpdate | common |  | AlbumUpdate | The facebook Album to be created or updated
      | appId | common |  | String | The ID of the Facebook Application
      | center | common |  | GeoLocation | Location latitude and longitude
      | checkinId | common |  | String | The checkin ID
      | checkinUpdate | common |  | CheckinUpdate | The checkin to be created. Deprecated instead create a Post with an attached location
      | clientURL | common |  | String | Facebook4J API client URL
      | clientVersion | common |  | String | Facebook4J client API version
      | commentId | common |  | String | The comment ID
      | commentUpdate | common |  | CommentUpdate | The facebook Comment to be created or updated
      | debugEnabled | common | false | Boolean | Enables deubg output. Effective only with the embedded logger
      | description | common |  | String | The description text
      | distance | common |  | Integer | Distance in meters
      | domainId | common |  | String | The domain ID
      | domainName | common |  | String | The domain name
      | domainNames | common |  | List | The domain names
      | eventId | common |  | String | The event ID
      | eventUpdate | common |  | EventUpdate | The event to be created or updated
      | friendId | common |  | String | The friend ID
      | friendlistId | common |  | String | The friend list ID
      | friendlistName | common |  | String | The friend list Name
      | friendUserId | common |  | String | The friend user ID
      | groupId | common |  | String | The group ID
      | gzipEnabled | common | true | Boolean | Use Facebook GZIP encoding
      | httpConnectionTimeout | common | 20000 | Integer | Http connection timeout in milliseconds
      | httpDefaultMaxPerRoute | common | 2 | Integer | HTTP maximum connections per route
      | httpMaxTotalConnections | common | 20 | Integer | HTTP maximum total connections
      | httpReadTimeout | common | 120000 | Integer | Http read timeout in milliseconds
      | httpRetryCount | common | 0 | Integer | Number of HTTP retries
      | httpRetryIntervalSeconds | common | 5 | Integer | HTTP retry interval in seconds
      | httpStreamingReadTimeout | common | 40000 | Integer | HTTP streaming read timeout in milliseconds
      | ids | common |  | List | The ids of users
      | inBody | common |  | String | Sets the name of a parameter to be passed in the exchange In Body
      | includeRead | common |  | Boolean | Enables notifications that the user has already read in addition to unread ones
      | isHidden | common |  | Boolean | Whether hidden
      | jsonStoreEnabled | common | false | Boolean | If set to true raw JSON forms will be stored in DataObjectFactory
      | link | common |  | URL | Link URL
      | linkId | common |  | String | Link ID
      | locale | common |  | Locale | Desired FQL locale
      | mbeanEnabled | common | false | Boolean | If set to true Facebook4J mbean will be registerd
      | message | common |  | String | The message text
      | messageId | common |  | String | The message ID
      | metric | common |  | String | The metric name
      | milestoneId | common |  | String | The milestone id
      | name | common |  | String | Test user name must be of the form 'first last'
      | noteId | common |  | String | The note ID
      | notificationId | common |  | String | The notification ID
      | objectId | common |  | String | The insight object ID
      | offerId | common |  | String | The offer id
      | optionDescription | common |  | String | The question's answer option description
      | pageId | common |  | String | The page id
      | permissionName | common |  | String | The permission name
      | permissions | common |  | String | Test user permissions in the format perm1perm2...
      | photoId | common |  | String | The photo ID
      | pictureId | common |  | Integer | The picture id
      | pictureId2 | common |  | Integer | The picture2 id
      | pictureSize | common |  | PictureSize | The picture size
      | placeId | common |  | String | The place ID
      | postId | common |  | String | The post ID
      | postUpdate | common |  | PostUpdate | The post to create or update
      | prettyDebugEnabled | common | false | Boolean | Prettify JSON debug output if set to true
      | queries | common |  | Map | FQL queries
      | query | common |  | String | FQL query or search terms for search endpoints
      | questionId | common |  | String | The question id
      | reading | common |  | Reading | Optional reading parameters. See Reading Options(reading)
      | readingOptions | common |  | Map | To configure Reading using key/value pairs from the Map.
      | restBaseURL | common | https://graph.facebook.com/ | String | API base URL
      | scoreValue | common |  | Integer | The numeric score with value
      | size | common |  | PictureSize | The picture size one of large normal small or square
      | source | common |  | Media | The media content from either a java.io.File or java.io.Inputstream
      | subject | common |  | String | The note of the subject
      | tabId | common |  | String | The tab id
      | tagUpdate | common |  | TagUpdate | Photo tag information
      | testUser1 | common |  | TestUser | Test user 1
      | testUser2 | common |  | TestUser | Test user 2
      | testUserId | common |  | String | The ID of the test user
      | title | common |  | String | The title text
      | toUserId | common |  | String | The ID of the user to tag
      | toUserIds | common |  | List | The IDs of the users to tag
      | userId | common |  | String | The Facebook user ID
      | userId1 | common |  | String | The ID of a user 1
      | userId2 | common |  | String | The ID of a user 2
      | userIds | common |  | List | The IDs of users to invite to event
      | userLocale | common |  | String | The test user locale
      | useSSL | common | true | Boolean | Use SSL
      | videoBaseURL | common | https://graph-video.facebook.com/ | String | Video API base URL
      | videoId | common |  | String | The video ID
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | httpProxyHost | proxy |  | String | HTTP proxy server host name
      | httpProxyPassword | proxy |  | String | HTTP proxy server password
      | httpProxyPort | proxy |  | Integer | HTTP proxy server port
      | httpProxyUser | proxy |  | String | HTTP proxy server user name
      | oAuthAccessToken | security |  | String | The user access token
      | oAuthAccessTokenURL | security | https://graph.facebook.com/oauth/access_token | String | OAuth access token URL
      | oAuthAppId | security |  | String | The application Id
      | oAuthAppSecret | security |  | String | The application Secret
      | oAuthAuthorizationURL | security | https://www.facebook.com/dialog/oauth | String | OAuth authorization URL
      | oAuthPermissions | security |  | String | Default OAuth permissions. Comma separated permission names. See https://developers.facebook.com/docs/reference/login/permissions for the detail
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Facebook-ProducerEndpoints:]]
      Producer Endpoints:
      ^^^^^^^^^^^^^^^^^^^

      Producer endpoints can use endpoint names and options from the table
      below. Endpoints can also use the short name without the *get* or
      *search* prefix, except *checkin* due to ambiguity between *getCheckin*
      and *searchCheckin*. Endpoint options that are not mandatory are denoted
      by [].

      Producer endpoints can also use a special option **inBody** that in turn
      should contain the name of the endpoint option whose value will be
      contained in the Camel Exchange In message. For example, the facebook
      endpoint in the following route retrieves activities for the user id
      value in the incoming message body.

      [source,java]
      --------------------------------------------------------------------
          from("direct:test").to("facebook://activities?inBody=userId")...
      --------------------------------------------------------------------

      Any of the endpoint options can be provided in either the endpoint URI,
      or dynamically in a message header. The message header name must be of
      the format
      *CamelFacebook.https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=option&linkCreation=true&fromPageId=34020899[option]*.
      For example, the *userId* option value in the previous route could
      alternately be provided in the message header *CamelFacebook.userId*.
      Note that the inBody option overrides message header, e.g. the endpoint
      option *inBody=user* would override a *CamelFacebook.userId* header.

      Endpoints that return a String return an Id for the created or modified
      entity, e.g. *addAlbumPhoto* returns the new album Id. Endpoints that
      return a boolean, return true for success and false otherwise. In case
      of Facebook API errors the endpoint will throw a RuntimeCamelException
      with a facebook4j.FacebookException cause.

      [[Facebook-ConsumerEndpoints:]]
      Consumer Endpoints:
      ^^^^^^^^^^^^^^^^^^^

      Any of the producer endpoints that take a
      https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=reading&linkCreation=true&fromPageId=34020899[reading#reading]
      parameter can be used as a consumer endpoint. The polling consumer uses
      the *since* and *until* fields to get responses within the polling
      interval. In addition to other reading fields, an initial *since* value
      can be provided in the endpoint for the first poll.

      Rather than the endpoints returning a List (or
      *facebook4j.ResponseList*) through a single route exchange,
      camel-facebook creates one route exchange per returned object. As an
      example, if *"facebook://home"* results in five posts, the route will be
      executed five times (once for each Post).

      [[Facebook-ReadingOptions]]
      Reading Options
      ^^^^^^^^^^^^^^^

      The *reading* option of type *facebook4j.Reading* adds support for
      reading parameters, which allow selecting specific fields, limits the
      number of results, etc. For more information see
      https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=Graph+API&linkCreation=true&fromPageId=34020899[Graph
      API#reading] -
      https://developers.facebook.com/docs/reference/api/#reading[Facebook
      Developers].

      It is also used by consumer endpoints to poll Facebook data to avoid
      sending duplicate messages across polls.

      The reading option can be a reference or value of type
      *facebook4j.Reading*, or can be specified using the following reading
      options in either the endpoint URI or exchange header with
      *CamelFacebook.* prefix.

      [[Facebook-Messageheader]]
      Message header
      ^^^^^^^^^^^^^^

      Any of the
      https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=URI+options&linkCreation=true&fromPageId=34020899[URI
      options#urioptions] can be provided in a message header for producer
      endpoints with *CamelFacebook.* prefix.

      [[Facebook-Messagebody]]
      Message body
      ^^^^^^^^^^^^

      All result message bodies utilize objects provided by the Facebook4J
      API. Producer endpoints can specify the option name for incoming message
      body in the *inBody* endpoint parameter.

      For endpoints that return an array, or *facebook4j.ResponseList*, or
      *java.util.List*, a consumer endpoint will map every elements in the
      list to distinct messages.

      [[Facebook-Usecases]]
      Use cases
      ^^^^^^^^^

      To create a post within your Facebook profile, send this producer a
      facebook4j.PostUpdate body.

      [source,java]
      ----------------------------------------------------
          from("direct:foo")
              .to("facebook://postFeed/inBody=postUpdate);
      ----------------------------------------------------

      To poll, every 5 sec (You can set the??link:polling-consumer.html[polling
      consumer]??options by adding a prefix of "consumer"), all statuses on
      your home feed:

      [source,java]
      -----------------------------------------------
          from("facebook://home?consumer.delay=5000")
              .to("bean:blah");
      -----------------------------------------------

      Searching using a producer with dynamic options from header.

      In the bar header we have the Facebook search string we want to execute
      in public posts, so we need to assign this value to the
      CamelFacebook.query header.

      [source,java]
      --------------------------------------------------------
          from("direct:foo")
              .setHeader("CamelFacebook.query", header("bar"))
              .to("facebook://posts");
      --------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-file
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: file
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: file
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: file
          spec:
            containers:
            - image: fabric8/connector-file:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: file
        syntax: file:directoryName
        title: File
        description: The file component is used for reading or writing files.
        label: core,file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.file.FileComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        directoryName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: The starting directory
        charset:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
        doneFileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Producer: If provided then Camel will write a 2nd done file when
            the original file has been written. The done file will be empty. This option
            configures what file name to use. Either you can specify a fixed name. Or you
            can use dynamic placeholders. The done file will always be written in the same
            folder as the original file. Consumer: If provided Camel will only consume files
            if a done file exists. This option configures what file name to use. Either
            you can specify a fixed name. Or you can use dynamic placeholders.The done file
            is always expected in the same folder as the original file. Only $file.name
            and $file.name.noext is supported as dynamic placeholders.'
        fileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Use Expression such as File Language to dynamically set the filename.
            For consumers it''s used as a filename filter. For producers it''s used to evaluate
            the filename to write. If an expression is set it take precedence over the CamelFileName
            header. (Note: The header itself can also be an Expression). The expression
            options support both String and Expression types. If the expression is a String
            type it is always evaluated using the File Language. If the expression is an
            Expression type the specified Expression type is used - this allows you for
            instance to use OGNL expressions. For the consumer you can use it to filter
            filenames so you can for instance consume today''s file using the File Language
            syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName
            header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName
            is a header that is used only once and makes it easier as this avoids to temporary
            store CamelFileName and have to restore it afterwards.'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file will be deleted after it is processed successfully.
        moveFailed:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the move failure expression based on Simple language. For example
            to move files into a .error subdirectory use: .error. Note: When moving the
            files to the fail location Camel will handle the error and will not pick up
            the file again.'
        noop:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
        preMove:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
        recursive:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If a directory will look for files in all the sub-directories as well.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        directoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        extendedAttributes:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To define which file attributes of interest. Like posix:permissionsposix:ownerbasic:lastAccessTime
            it supports basic wildcard like posix: basic:lastAccessTime'
        inProgressRepository:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
        localWorkDirectory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
        onCompletionExceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. In other words the error occurred while the polling was gathering information for instance access to a file network failed so Camel cannot access it to scan for files. The default implementation will log the caused exception at WARN level and ignore it.
        probeContentType:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to enable probing of the content type. If enable then the consumer uses link FilesprobeContentType(java.nio.file.Path) to determine the content-type of the file and store that as a header with key link ExchangeFILE_CONTENT_TYPE on the Message.
        processStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.file.GenericFileProcessStrategy<T>
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
        startingDirectoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
        fileExist:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.file.GenericFileExist
          enum:
          - Override
          - Append
          - Fail
          - Ignore
          - Move
          - TryRename
          deprecated: false
          secret: false
          defaultValue: Override
          description: What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
        flatten:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
        moveExisting:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Expression (such as File Language) used to compute file name to
            use when fileExist=Move is configured. To move files into a backup subdirectory
            just enter backup. This option only supports the following File Language tokens:
            file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext
            and file:parent. Notice the file:parent is not supported by the FTP component
            as the FTP component can only move any existing files to a relative directory
            based on current dir as base.'
        tempFileName:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
        tempPrefix:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
        chmod:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the file permissions which is sent by the producer the chmod value must be between 000 and 777; If there is a leading digit like in 0755 we will ignore it.
        chmodDirectory:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the directory permissions used when the producer creates missing directories the chmod value must be between 000 and 777; If there is a leading digit like in 0755 we will ignore it.
        eagerDeleteTargetFile:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
        forceWrites:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to force syncing writes to the file system. You can turn this off if you do not want this level of guarantee for example if writing to logs / audit logs etc; this would yield better performance.
        keepLastModified:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Will keep the last modified timestamp from the source file (if any).
            Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This
            header can contain either a java.util.Date or long with the timestamp. If the
            timestamp exists and the option is enabled it will set this timestamp on the
            written file. Note: This option only applies to the file producer. You cannot
            use this option with any of the ftp producers.'
        autoCreate:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "131072"
          description: Write buffer sized in bytes.
        copyAndDeleteOnRenameFail:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to fallback and do a copy and delete file in case the file could not be renamed directly. This option is not available for the FTP component.
        renameUsingCopy:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Perform rename operations using a copy and delete strategy. This is primarily used in environments where the regular rename operation is unreliable (e.g. across different file systems or networks). This option takes precedence over the copyAndDeleteOnRenameFail parameter that will automatically fall back to the copy and delete strategy but only after additional delays.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        antExclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
        antFilterCaseSensitive:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets case sensitive flag on ant fiter
        antInclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
        eagerMaxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
        exclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        filter:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.component.file.GenericFileFilter<T>
          deprecated: false
          secret: false
          description: Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
        filterDirectory:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
        filterFile:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
        idempotent:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
        idempotentKey:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To use a custom idempotent key. By default the absolute path of
            the file is used. You can use the File Language for example to use the file
            name and file size you can do: idempotentKey=$file:name-$file:size'
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
        include:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        maxDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum depth to traverse when recursively processing a directory.
        maxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'To define a maximum messages to gather per poll. By default no maximum
            is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the
            server that there are thousands of files. Set a value of 0 or negative to disabled
            it. Notice: If this option is in use then the File and FTP components will limit
            before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500
            then only the first 500 files will be picked up and then sorted. You can use
            the eagerMaxMessagesPerPoll option and set this to false to allow to scan all
            files first and then sort afterwards.'
        minDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
        move:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
        exclusiveReadLockStrategy:
          kind: parameter
          group: lock
          label: consumer,lock
          type: object
          javaType: org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<T>
          deprecated: false
          secret: false
          description: Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
        readLock:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: java.lang.String
          enum:
          - none
          - markerFile
          - fileLock
          - rename
          - changed
          - idempotent
          deprecated: false
          secret: false
          description: 'Used by consumer to only poll the files if it has exclusive read-lock
            on the file (i.e. the file is not in-progress or being written). Camel will
            wait until the file lock is granted. This option provides the build in strategies:
            none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock)
            and then holds a lock on it. This option is not available for the FTP component
            changed - Changed is using file length/modification timestamp to detect whether
            the file is currently being copied or not. Will at least use 1 sec to determine
            this so this option cannot consume files as fast as the others but can be more
            reliable as the JDK IO API cannot always determine whether a file is currently
            being used by another process. The option readLockCheckInterval can be used
            to set the check frequency. fileLock - is for using java.nio.channels.FileLock.
            This option is not avail for the FTP component. This approach should be avoided
            when accessing a remote file system via a mount/share unless that file system
            supports distributed file locks. rename - rename is for using a try to rename
            the file as a test if we can get exclusive read-lock. idempotent - (only for
            file component) idempotent is for using a idempotentRepository as the read-lock.
            This allows to use read locks that supports clustering if the idempotent repository
            implementation supports that. Notice: The various read locks is not all suited
            to work in clustered mode where concurrent consumers on different nodes is competing
            for the same files on a shared file system. The markerFile using a close to
            atomic operation to create the empty marker file but its not guaranteed to work
            in a cluster. The fileLock may work better but then the file system need to
            support distributed file locks and so on. Using the idempotent read lock can
            support clustering if the idempotent repository supports clustering such as
            Hazelcast Component or Infinispan.'
        readLockCheckInterval:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: 'Interval in millis for the read-lock if supported by the read lock.
            This interval is used for sleeping between attempts to acquire the read lock.
            For example when using the changed read lock you can set a higher interval period
            to cater for slow writes. The default of 1 sec. may be too fast if the producer
            is very slow writing the file. Notice: For FTP the default readLockCheckInterval
            is 5000. The readLockTimeout value must be higher than readLockCheckInterval
            but a rule of thumb is to have a timeout that is at least 2 or more times higher
            than the readLockCheckInterval. This is needed to ensure that amble time is
            allowed for the read lock process to try to grab the lock before the timeout
            was hit.'
        readLockDeleteOrphanLockFiles:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
        readLockLoggingLevel:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: 'Logging level used when a read lock could not be acquired. By default
            a WARN is logged. You can change this level for example to OFF to not have any
            logging. This option is only applicable for readLock of types: changed fileLock
            rename.'
        readLockMarkerFile:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
        readLockMinAge:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
        readLockMinLength:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1"
          description: This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
        readLockRemoveOnCommit:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
        readLockRemoveOnRollback:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
        readLockTimeout:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: 'Optional timeout in millis for the read-lock if supported by the
            read-lock. If the read-lock could not be granted and the timeout triggered then
            Camel will skip the file. At next poll Camel will try the file again and this
            time maybe the read-lock could be granted. Use a value of 0 or lower to indicate
            forever. Currently fileLock changed and rename support the timeout. Notice:
            For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout
            value must be higher than readLockCheckInterval but a rule of thumb is to have
            a timeout that is at least 2 or more times higher than the readLockCheckInterval.
            This is needed to ensure that amble time is allowed for the read lock process
            to try to grab the lock before the timeout was hit.'
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. The default value is 500. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. This option allows you to share a thread pool among multiple consumers.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: 'Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler
            to use as the scheduler for firing when the polling consumer runs. The default
            implementation uses the ScheduledExecutorService and there is a Quartz2 and
            Spring based which supports CRON expressions. Notice: If using a custom scheduler
            then the options for initialDelay useFixedDelay timeUnit and scheduledExecutorService
            may not be in use. Use the text quartz2 to refer to use the Quartz2 scheduler;
            and use the text spring to use the Spring based; and use the text myScheduler
            to refer to a custom scheduler by its id in the Registry. See Quartz2 page for
            an example.'
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        shuffle:
          kind: parameter
          group: sort
          label: consumer,sort
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To shuffle the list of files (sort in random order)
        sortBy:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
        sorter:
          kind: parameter
          group: sort
          label: consumer,sort
          type: object
          javaType: java.util.Comparator<org.apache.camel.component.file.GenericFile<T>>
          deprecated: false
          secret: false
          description: Pluggable sorter as a java.util.Comparator class.
    documentation.adoc: "[[File2-FileComponent]]\nFile Component\n~~~~~~~~~~~~~~\n\
      \nThe File component provides access to file systems, allowing files to be\n\
      processed by any other Camel link:components.html[Components] or\nmessages from\
      \ other components to be saved to disk.\n\n[[File2-URIformat]]\nURI format\n\
      ^^^^^^^^^^\n\n[source,java]\n----------------------------\nfile:directoryName[?options]\n\
      ----------------------------\n\nor\n\n[source,java]\n------------------------------\n\
      file://directoryName[?options]\n------------------------------\n\nWhere *directoryName*\
      \ represents the underlying file directory.\n\nYou can append query options\
      \ to the URI in the following format,\n`?option=value&option=value&...`\n\n\
      *Only directories*\n\nCamel supports only endpoints configured with a starting\
      \ directory. So\nthe *directoryName* must be a directory. +\n If you want to\
      \ consume a single file only, you can use the *fileName*\noption, e.g. by setting\
      \ `fileName=thefilename`. +\n Also, the starting directory must not contain\
      \ dynamic expressions with\n$\\{ } placeholders. Again use the `fileName` option\
      \ to specify the\ndynamic part of the filename.\n\nWARNING:*Avoid reading files\
      \ currently being written by another\napplication*\n\nBeware the JDK File IO\
      \ API is a bit limited in detecting whether another\napplication is currently\
      \ writing/copying a file. And the implementation\ncan be different depending\
      \ on OS platform as well. This could lead to\nthat Camel thinks the file is\
      \ not locked by another process and start\nconsuming it. Therefore you have\
      \ to do you own investigation what suites\nyour environment. To help with this\
      \ Camel provides different `readLock`\noptions and `doneFileName` option that\
      \ you can use. See also the section\n_Consuming files from folders where others\
      \ drop files directly_.\n\n[[File2-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\
      [[File2-Options]]\nFile2 Options\n+++++++++++++\n\n\n// component options: START\n\
      The File component has no options.\n// component options: END\n\n\n\n\n// endpoint\
      \ options: START\nThe File component supports 81 endpoint options which are\
      \ listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| directoryName | common\
      \ |  | File | *Required* The starting directory\n| charset | common |  | String\
      \ | This option is used to specify the encoding of the file. You can use this\
      \ on the consumer to specify the encodings of the files which allow Camel to\
      \ know the charset it should load the file content in case the file content\
      \ is being accessed. Likewise when writing a file you can use this option to\
      \ specify which charset to write the file as well.\n| doneFileName | common\
      \ |  | String | Producer: If provided then Camel will write a 2nd done file\
      \ when the original file has been written. The done file will be empty. This\
      \ option configures what file name to use. Either you can specify a fixed name.\
      \ Or you can use dynamic placeholders. The done file will always be written\
      \ in the same folder as the original file. Consumer: If provided Camel will\
      \ only consume files if a done file exists. This option configures what file\
      \ name to use. Either you can specify a fixed name. Or you can use dynamic placeholders.The\
      \ done file is always expected in the same folder as the original file. Only\
      \ $file.name and $file.name.noext is supported as dynamic placeholders.\n| fileName\
      \ | common |  | String | Use Expression such as File Language to dynamically\
      \ set the filename. For consumers it's used as a filename filter. For producers\
      \ it's used to evaluate the filename to write. If an expression is set it take\
      \ precedence over the CamelFileName header. (Note: The header itself can also\
      \ be an Expression). The expression options support both String and Expression\
      \ types. If the expression is a String type it is always evaluated using the\
      \ File Language. If the expression is an Expression type the specified Expression\
      \ type is used - this allows you for instance to use OGNL expressions. For the\
      \ consumer you can use it to filter filenames so you can for instance consume\
      \ today's file using the File Language syntax: mydata-$date:now:yyyyMMdd.txt.\
      \ The producers support the CamelOverruleFileName header which takes precedence\
      \ over any existing CamelFileName header; the CamelOverruleFileName is a header\
      \ that is used only once and makes it easier as this avoids to temporary store\
      \ CamelFileName and have to restore it afterwards.\n| bridgeErrorHandler | consumer\
      \ | false | boolean | 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/ERROR level and ignored.\n| delete | consumer | false |\
      \ boolean | If true the file will be deleted after it is processed successfully.\n\
      | moveFailed | consumer |  | String | Sets the move failure expression based\
      \ on Simple language. For example to move files into a .error subdirectory use:\
      \ .error. Note: When moving the files to the fail location Camel will handle\
      \ the error and will not pick up the file again.\n| noop | consumer | false\
      \ | boolean | If true the file is not moved or deleted in any way. This option\
      \ is good for readonly data or for ETL type requirements. If noop=true Camel\
      \ will set idempotent=true as well to avoid consuming the same files over and\
      \ over again.\n| preMove | consumer |  | String | Expression (such as File Language)\
      \ used to dynamically set the filename when moving it before processing. For\
      \ example to move in-progress files into the order directory set this value\
      \ to order.\n| recursive | consumer | false | boolean | If a directory will\
      \ look for files in all the sub-directories as well.\n| sendEmptyMessageWhenIdle\
      \ | consumer | false | boolean | If the polling consumer did not poll any files\
      \ you can enable this option to send an empty message (no body) instead.\n|\
      \ directoryMustExist | consumer (advanced) | false | boolean | Similar to startingDirectoryMustExist\
      \ but this applies during polling recursive sub directories.\n| exceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern\
      \ when creating an exchange.\n| extendedAttributes | consumer (advanced) | \
      \ | String | To define which file attributes of interest. Like posix:permissionsposix:ownerbasic:lastAccessTime\
      \ it supports basic wildcard like posix: basic:lastAccessTime\n| inProgressRepository\
      \ | consumer (advanced) |  | String> | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository.\
      \ The in-progress repository is used to account the current in progress files\
      \ being consumed. By default a memory based repository is used.\n| localWorkDirectory\
      \ | consumer (advanced) |  | String | When consuming a local work directory\
      \ can be used to store the remote file content directly in local files to avoid\
      \ loading the content into memory. This is beneficial if you consume a very\
      \ big remote file and thus can conserve memory.\n| onCompletionExceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To use a custom org.apache.camel.spi.ExceptionHandler\
      \ to handle any thrown exceptions that happens during the file on completion\
      \ process where the consumer does either a commit or rollback. The default implementation\
      \ will log any exception at WARN level and ignore.\n| pollStrategy | consumer\
      \ (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel. In other words the error occurred while the polling\
      \ was gathering information for instance access to a file network failed so\
      \ Camel cannot access it to scan for files. The default implementation will\
      \ log the caused exception at WARN level and ignore it.\n| probeContentType\
      \ | consumer (advanced) | false | boolean | Whether to enable probing of the\
      \ content type. If enable then the consumer uses link FilesprobeContentType(java.nio.file.Path)\
      \ to determine the content-type of the file and store that as a header with\
      \ key link ExchangeFILE_CONTENT_TYPE on the Message.\n| processStrategy | consumer\
      \ (advanced) |  | GenericFileProcessStrategy<T> | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy\
      \ allowing you to implement your own readLock option or similar. Can also be\
      \ used when special conditions must be met before a file can be consumed such\
      \ as a special ready file exists. If this option is set then the readLock option\
      \ does not apply.\n| startingDirectoryMustExist | consumer (advanced) | false\
      \ | boolean | Whether the starting directory must exist. Mind that the autoCreate\
      \ option is default enabled which means the starting directory is normally auto\
      \ created if it doesn't exist. You can disable autoCreate and enable this to\
      \ ensure the starting directory must exist. Will thrown an exception if the\
      \ directory doesn't exist.\n| fileExist | producer | Override | GenericFileExist\
      \ | What to do if a file already exists with the same name. Override which is\
      \ the default replaces the existing file. Append - adds content to the existing\
      \ file. Fail - throws a GenericFileOperationException indicating that there\
      \ is already an existing file. Ignore - silently ignores the problem and does\
      \ not override the existing file but assumes everything is okay. Move - option\
      \ requires to use the moveExisting option to be configured as well. The option\
      \ eagerDeleteTargetFile can be used to control what to do if an moving the file\
      \ and there exists already an existing file otherwise causing the move operation\
      \ to fail. The Move option will move any existing files before writing the target\
      \ file. TryRename Camel is only applicable if tempFileName option is in use.\
      \ This allows to try renaming the file from the temporary name to the actual\
      \ name without doing any exists check.This check may be faster on some file\
      \ systems and especially FTP servers.\n| flatten | producer | false | boolean\
      \ | Flatten is used to flatten the file name path to strip any leading paths\
      \ so it's just the file name. This allows you to consume recursively into sub-directories\
      \ but when you eg write the files to another directory they will be written\
      \ in a single directory. Setting this to true on the producer enforces that\
      \ any file name in CamelFileName header will be stripped for any leading paths.\n\
      | moveExisting | producer |  | String | Expression (such as File Language) used\
      \ to compute file name to use when fileExist=Move is configured. To move files\
      \ into a backup subdirectory just enter backup. This option only supports the\
      \ following File Language tokens: file:name file:name.ext file:name.noext file:onlyname\
      \ file:onlyname.noext file:ext and file:parent. Notice the file:parent is not\
      \ supported by the FTP component as the FTP component can only move any existing\
      \ files to a relative directory based on current dir as base.\n| tempFileName\
      \ | producer |  | String | The same as tempPrefix option but offering a more\
      \ fine grained control on the naming of the temporary filename as it uses the\
      \ File Language.\n| tempPrefix | producer |  | String | This option is used\
      \ to write the file using a temporary name and then after the write is complete\
      \ rename it to the real name. Can be used to identify files being written and\
      \ also avoid consumers (not using exclusive read locks) reading in progress\
      \ files. Is often used by FTP when uploading big files.\n| allowNullBody | producer\
      \ (advanced) | false | boolean | Used to specify if a null body is allowed during\
      \ file writing. If set to true then an empty file will be created when set to\
      \ false and attempting to send a null body to the file component a GenericFileWriteException\
      \ of 'Cannot write null body to file.' will be thrown. If the fileExist option\
      \ is set to 'Override' then the file will be truncated and if set to append\
      \ the file will remain unchanged.\n| chmod | producer (advanced) |  | String\
      \ | Specify the file permissions which is sent by the producer the chmod value\
      \ must be between 000 and 777; If there is a leading digit like in 0755 we will\
      \ ignore it.\n| chmodDirectory | producer (advanced) |  | String | Specify the\
      \ directory permissions used when the producer creates missing directories the\
      \ chmod value must be between 000 and 777; If there is a leading digit like\
      \ in 0755 we will ignore it.\n| eagerDeleteTargetFile | producer (advanced)\
      \ | true | boolean | Whether or not to eagerly delete any existing target file.\
      \ This option only applies when you use fileExists=Override and the tempFileName\
      \ option as well. You can use this to disable (set it to false) deleting the\
      \ target file before the temp file is written. For example you may write big\
      \ files and want the target file to exists during the temp file is being written.\
      \ This ensure the target file is only deleted until the very last moment just\
      \ before the temp file is being renamed to the target filename. This option\
      \ is also used to control whether to delete any existing files when fileExist=Move\
      \ is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails\
      \ false then an exception will be thrown if an existing file existed if its\
      \ true then the existing file is deleted before the move operation.\n| forceWrites\
      \ | producer (advanced) | true | boolean | Whether to force syncing writes to\
      \ the file system. You can turn this off if you do not want this level of guarantee\
      \ for example if writing to logs / audit logs etc; this would yield better performance.\n\
      | keepLastModified | producer (advanced) | false | boolean | Will keep the last\
      \ modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED\
      \ header to located the timestamp. This header can contain either a java.util.Date\
      \ or long with the timestamp. If the timestamp exists and the option is enabled\
      \ it will set this timestamp on the written file. Note: This option only applies\
      \ to the file producer. You cannot use this option with any of the ftp producers.\n\
      | autoCreate | advanced | true | boolean | Automatically create missing directories\
      \ in the file's pathname. For the file consumer that means creating the starting\
      \ directory. For the file producer it means the directory the files should be\
      \ written to.\n| bufferSize | advanced | 131072 | int | Write buffer sized in\
      \ bytes.\n| copyAndDeleteOnRenameFail | advanced | true | boolean | Whether\
      \ to fallback and do a copy and delete file in case the file could not be renamed\
      \ directly. This option is not available for the FTP component.\n| renameUsingCopy\
      \ | advanced | false | boolean | Perform rename operations using a copy and\
      \ delete strategy. This is primarily used in environments where the regular\
      \ rename operation is unreliable (e.g. across different file systems or networks).\
      \ This option takes precedence over the copyAndDeleteOnRenameFail parameter\
      \ that will automatically fall back to the copy and delete strategy but only\
      \ after additional delays.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n| antExclude | filter |  |\
      \ String | Ant style filter exclusion. If both antInclude and antExclude are\
      \ used antExclude takes precedence over antInclude. Multiple exclusions may\
      \ be specified in comma-delimited format.\n| antFilterCaseSensitive | filter\
      \ | true | boolean | Sets case sensitive flag on ant fiter\n| antInclude | filter\
      \ |  | String | Ant style filter inclusion. Multiple inclusions may be specified\
      \ in comma-delimited format.\n| eagerMaxMessagesPerPoll | filter | true | boolean\
      \ | Allows for controlling whether the limit from maxMessagesPerPoll is eager\
      \ or not. If eager then the limit is during the scanning of files. Where as\
      \ false would scan all files and then perform sorting. Setting this option to\
      \ false allows for sorting all files first and then limit the poll. Mind that\
      \ this requires a higher memory usage as all file details are in memory to perform\
      \ the sorting.\n| exclude | filter |  | String | Is used to exclude files if\
      \ filename matches the regex pattern (matching is case in-senstive). Notice\
      \ if you use symbols such as plus sign and others you would need to configure\
      \ this using the RAW() syntax if configuring this as an endpoint uri. See more\
      \ details at configuring endpoint uris\n| filter | filter |  | GenericFileFilter<T>\
      \ | Pluggable filter as a org.apache.camel.component.file.GenericFileFilter\
      \ class. Will skip files if filter returns false in its accept() method.\n|\
      \ filterDirectory | filter |  | String | Filters the directory based on Simple\
      \ language. For example to filter on current date you can use a simple date\
      \ pattern such as $date:now:yyyMMdd\n| filterFile | filter |  | String | Filters\
      \ the file based on Simple language. For example to filter on file size you\
      \ can use $file:size 5000\n| idempotent | filter | false | Boolean | Option\
      \ to use the Idempotent Consumer EIP pattern to let Camel skip already processed\
      \ files. Will by default use a memory based LRUCache that holds 1000 entries.\
      \ If noop=true then idempotent will be enabled as well to avoid consuming the\
      \ same files over and over again.\n| idempotentKey | filter |  | String | To\
      \ use a custom idempotent key. By default the absolute path of the file is used.\
      \ You can use the File Language for example to use the file name and file size\
      \ you can do: idempotentKey=$file:name-$file:size\n| idempotentRepository |\
      \ filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository\
      \ which by default use MemoryMessageIdRepository if none is specified and idempotent\
      \ is true.\n| include | filter |  | String | Is used to include files if filename\
      \ matches the regex pattern (matching is case in-senstive). Notice if you use\
      \ symbols such as plus sign and others you would need to configure this using\
      \ the RAW() syntax if configuring this as an endpoint uri. See more details\
      \ at configuring endpoint uris\n| maxDepth | filter | 2147483647 | int | The\
      \ maximum depth to traverse when recursively processing a directory.\n| maxMessagesPerPoll\
      \ | filter |  | int | To define a maximum messages to gather per poll. By default\
      \ no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting\
      \ up the server that there are thousands of files. Set a value of 0 or negative\
      \ to disabled it. Notice: If this option is in use then the File and FTP components\
      \ will limit before any sorting. For example if you have 100000 files and use\
      \ maxMessagesPerPoll=500 then only the first 500 files will be picked up and\
      \ then sorted. You can use the eagerMaxMessagesPerPoll option and set this to\
      \ false to allow to scan all files first and then sort afterwards.\n| minDepth\
      \ | filter |  | int | The minimum depth to start processing when recursively\
      \ processing a directory. Using minDepth=1 means the base directory. Using minDepth=2\
      \ means the first sub directory.\n| move | filter |  | String | Expression (such\
      \ as Simple Language) used to dynamically set the filename when moving it after\
      \ processing. To move files into a .done subdirectory just enter .done.\n| exclusiveReadLockStrategy\
      \ | lock |  | GenericFileExclusiveReadLockStrategy<T> | Pluggable read-lock\
      \ as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy\
      \ implementation.\n| readLock | lock |  | String | Used by consumer to only\
      \ poll the files if it has exclusive read-lock on the file (i.e. the file is\
      \ not in-progress or being written). Camel will wait until the file lock is\
      \ granted. This option provides the build in strategies: none - No read lock\
      \ is in use markerFile - Camel creates a marker file (fileName.camelLock) and\
      \ then holds a lock on it. This option is not available for the FTP component\
      \ changed - Changed is using file length/modification timestamp to detect whether\
      \ the file is currently being copied or not. Will at least use 1 sec to determine\
      \ this so this option cannot consume files as fast as the others but can be\
      \ more reliable as the JDK IO API cannot always determine whether a file is\
      \ currently being used by another process. The option readLockCheckInterval\
      \ can be used to set the check frequency. fileLock - is for using java.nio.channels.FileLock.\
      \ This option is not avail for the FTP component. This approach should be avoided\
      \ when accessing a remote file system via a mount/share unless that file system\
      \ supports distributed file locks. rename - rename is for using a try to rename\
      \ the file as a test if we can get exclusive read-lock. idempotent - (only for\
      \ file component) idempotent is for using a idempotentRepository as the read-lock.\
      \ This allows to use read locks that supports clustering if the idempotent repository\
      \ implementation supports that. Notice: The various read locks is not all suited\
      \ to work in clustered mode where concurrent consumers on different nodes is\
      \ competing for the same files on a shared file system. The markerFile using\
      \ a close to atomic operation to create the empty marker file but its not guaranteed\
      \ to work in a cluster. The fileLock may work better but then the file system\
      \ need to support distributed file locks and so on. Using the idempotent read\
      \ lock can support clustering if the idempotent repository supports clustering\
      \ such as Hazelcast Component or Infinispan.\n| readLockCheckInterval | lock\
      \ | 1000 | long | Interval in millis for the read-lock if supported by the read\
      \ lock. This interval is used for sleeping between attempts to acquire the read\
      \ lock. For example when using the changed read lock you can set a higher interval\
      \ period to cater for slow writes. The default of 1 sec. may be too fast if\
      \ the producer is very slow writing the file. Notice: For FTP the default readLockCheckInterval\
      \ is 5000. The readLockTimeout value must be higher than readLockCheckInterval\
      \ but a rule of thumb is to have a timeout that is at least 2 or more times\
      \ higher than the readLockCheckInterval. This is needed to ensure that amble\
      \ time is allowed for the read lock process to try to grab the lock before the\
      \ timeout was hit.\n| readLockDeleteOrphanLockFiles | lock | true | boolean\
      \ | Whether or not read lock with marker files should upon startup delete any\
      \ orphan read lock files which may have been left on the file system if Camel\
      \ was not properly shutdown (such as a JVM crash). If turning this option to\
      \ false then any orphaned lock file will cause Camel to not attempt to pickup\
      \ that file this could also be due another node is concurrently reading files\
      \ from the same shared directory.\n| readLockLoggingLevel | lock | WARN | LoggingLevel\
      \ | Logging level used when a read lock could not be acquired. By default a\
      \ WARN is logged. You can change this level for example to OFF to not have any\
      \ logging. This option is only applicable for readLock of types: changed fileLock\
      \ rename.\n| readLockMarkerFile | lock | true | boolean | Whether to use marker\
      \ file with the changed rename or exclusive read lock types. By default a marker\
      \ file is used as well to guard against other processes picking up the same\
      \ files. This behavior can be turned off by setting this option to false. For\
      \ example if you do not want to write marker files to the file systems by the\
      \ Camel application.\n| readLockMinAge | lock | 0 | long | This option applied\
      \ only for readLock=change. This option allows to specify a minimum age the\
      \ file must be before attempting to acquire the read lock. For example use readLockMinAge=300s\
      \ to require the file is at last 5 minutes old. This can speedup the changed\
      \ read lock as it will only attempt to acquire files which are at least that\
      \ given age.\n| readLockMinLength | lock | 1 | long | This option applied only\
      \ for readLock=changed. This option allows you to configure a minimum file length.\
      \ By default Camel expects the file to contain data and thus the default value\
      \ is 1. You can set this option to zero to allow consuming zero-length files.\n\
      | readLockRemoveOnCommit | lock | false | boolean | This option applied only\
      \ for readLock=idempotent. This option allows to specify whether to remove the\
      \ file name entry from the idempotent repository when processing the file is\
      \ succeeded and a commit happens. By default the file is not removed which ensures\
      \ that any race-condition do not occur so another active node may attempt to\
      \ grab the file. Instead the idempotent repository may support eviction strategies\
      \ that you can configure to evict the file name entry after X minutes - this\
      \ ensures no problems with race conditions.\n| readLockRemoveOnRollback | lock\
      \ | true | boolean | This option applied only for readLock=idempotent. This\
      \ option allows to specify whether to remove the file name entry from the idempotent\
      \ repository when processing the file failed and a rollback happens. If this\
      \ option is false then the file name entry is confirmed (as if the file did\
      \ a commit).\n| readLockTimeout | lock | 10000 | long | Optional timeout in\
      \ millis for the read-lock if supported by the read-lock. If the read-lock could\
      \ not be granted and the timeout triggered then Camel will skip the file. At\
      \ next poll Camel will try the file again and this time maybe the read-lock\
      \ could be granted. Use a value of 0 or lower to indicate forever. Currently\
      \ fileLock changed and rename support the timeout. Notice: For FTP the default\
      \ readLockTimeout value is 20000 instead of 10000. The readLockTimeout value\
      \ must be higher than readLockCheckInterval but a rule of thumb is to have a\
      \ timeout that is at least 2 or more times higher than the readLockCheckInterval.\
      \ This is needed to ensure that amble time is allowed for the read lock process\
      \ to try to grab the lock before the timeout was hit.\n| backoffErrorThreshold\
      \ | scheduler |  | int | The number of subsequent error polls (failed due some\
      \ error) that should happen before the backoffMultipler should kick-in.\n| backoffIdleThreshold\
      \ | scheduler |  | int | The number of subsequent idle polls that should happen\
      \ before the backoffMultipler should kick-in.\n| backoffMultiplier | scheduler\
      \ |  | int | To let the scheduled polling consumer backoff if there has been\
      \ a number of subsequent idles/errors in a row. The multiplier is then the number\
      \ of polls that will be skipped before the next actual attempt is happening\
      \ again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold\
      \ must also be configured.\n| delay | scheduler | 500 | long | Milliseconds\
      \ before the next poll. The default value is 500. You can also specify time\
      \ values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds)\
      \ and 1h (1 hour).\n| greedy | scheduler | false | boolean | If greedy is enabled\
      \ then the ScheduledPollConsumer will run immediately again if the previous\
      \ run polled 1 or more messages.\n| initialDelay | scheduler | 1000 | long |\
      \ Milliseconds before the first poll starts. The default value is 1000. You\
      \ can also specify time values using units such as 60s (60 seconds) 5m30s (5\
      \ minutes and 30 seconds) and 1h (1 hour).\n| runLoggingLevel | scheduler |\
      \ TRACE | LoggingLevel | The consumer logs a start/complete log line when it\
      \ polls. This option allows you to configure the logging level for that.\n|\
      \ scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows\
      \ for configuring a custom/shared thread pool to use for the consumer. By default\
      \ each consumer has its own single threaded thread pool. This option allows\
      \ you to share a thread pool among multiple consumers.\n| scheduler | scheduler\
      \ | none | ScheduledPollConsumerScheduler | Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler\
      \ to use as the scheduler for firing when the polling consumer runs. The default\
      \ implementation uses the ScheduledExecutorService and there is a Quartz2 and\
      \ Spring based which supports CRON expressions. Notice: If using a custom scheduler\
      \ then the options for initialDelay useFixedDelay timeUnit and scheduledExecutorService\
      \ may not be in use. Use the text quartz2 to refer to use the Quartz2 scheduler;\
      \ and use the text spring to use the Spring based; and use the text myScheduler\
      \ to refer to a custom scheduler by its id in the Registry. See Quartz2 page\
      \ for an example.\n| schedulerProperties | scheduler |  | Map | To configure\
      \ additional properties when using a custom scheduler or any of the Quartz2\
      \ Spring based scheduler.\n| startScheduler | scheduler | true | boolean | Whether\
      \ the scheduler should be auto started.\n| timeUnit | scheduler | MILLISECONDS\
      \ | TimeUnit | Time unit for initialDelay and delay options.\n| useFixedDelay\
      \ | scheduler | true | boolean | Controls if fixed delay or fixed rate is used.\
      \ See ScheduledExecutorService in JDK for details.\n| shuffle | sort | false\
      \ | boolean | To shuffle the list of files (sort in random order)\n| sortBy\
      \ | sort |  | String | Built-in sort by using the File Language. Supports nested\
      \ sorts so you can have a sort by file name and as a 2nd group sort by modified\
      \ date.\n| sorter | sort |  | GenericFile<T>> | Pluggable sorter as a java.util.Comparator\
      \ class.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[File2-Defaultbehaviorforfileproducer]]\n\
      Default behavior for file producer\n++++++++++++++++++++++++++++++++++\n\n*\
      \ By default it will override any existing file, if one exist with the\nsame\
      \ name.\n\n[[File2-MoveandDeleteoperations]]\nMove and Delete operations\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nAny move or delete operations is executed after (post command) the\nrouting\
      \ has completed; so during processing of the `Exchange` the file\nis still located\
      \ in the inbox folder.\n\nLets illustrate this with an example:\n\n[source,java]\n\
      -----------------------------------------------------------\n    from(\"file://inbox?move=.done\"\
      ).to(\"bean:handleOrder\");\n-----------------------------------------------------------\n\
      \nWhen a file is dropped in the `inbox` folder, the file consumer notices\n\
      this and creates a new `FileExchange` that is routed to the\n`handleOrder` bean.\
      \ The bean then processes the `File` object. At this\npoint in time the file\
      \ is still located in the `inbox` folder. After the\nbean completes, and thus\
      \ the route is completed, the file consumer will\nperform the move operation\
      \ and move the file to the `.done` sub-folder.\n\nThe *move* and the??*preMove*\
      \ options are considered as a directory name\n(though if you use an expression\
      \ such as link:file-language.html[File\nLanguage], or link:simple.html[Simple]\
      \ then the result of the expression\nevaluation is the file name to be used\
      \ - eg if you set\n\n[source,java]\n-----------------------------------\nmove=../backup/copy-of-${file:name}\n\
      -----------------------------------\n\nthen that's using the link:file-language.html[File\
      \ Language] which we\nuse return the file name to be used), which can be either\
      \ relative or\nabsolute. If relative, the directory is created as a sub-folder\
      \ from\nwithin the folder where the file was consumed.\n\nBy default, Camel\
      \ will move consumed files to the `.camel` sub-folder\nrelative to the directory\
      \ where the file was consumed.\n\nIf you want to delete the file after processing,\
      \ the route should be:\n\n[source,java]\n-------------------------------------------------------------\n\
      \    from(\"file://inobox?delete=true\").to(\"bean:handleOrder\");\n-------------------------------------------------------------\n\
      \nWe have introduced a *pre* move operation to move files *before* they\nare\
      \ processed. This allows you to mark which files have been scanned as\nthey\
      \ are moved to this sub folder before being processed.\n\n[source,java]\n-------------------------------------------------------------------\n\
      \    from(\"file://inbox?preMove=inprogress\").to(\"bean:handleOrder\");\n-------------------------------------------------------------------\n\
      \nYou can combine the *pre* move and the regular move:\n\n[source,java]\n------------------------------------------------------------------------------\n\
      \    from(\"file://inbox?preMove=inprogress&move=.done\").to(\"bean:handleOrder\"\
      );\n------------------------------------------------------------------------------\n\
      \nSo in this situation, the file is in the `inprogress` folder when being\n\
      processed and after it's processed, it's moved to the `.done` folder.\n\n[[File2-FinegrainedcontroloverMoveandPreMoveoption]]\n\
      Fine grained control over Move and PreMove option\n+++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nThe *move* and *preMove* options\nare??link:expression.html[Expression]-based,\
      \ so we have the full power of\nthe link:file-language.html[File Language] to\
      \ do advanced configuration\nof the directory and name pattern. +\n Camel will,\
      \ in fact, internally convert the directory name you enter\ninto a link:file-language.html[File\
      \ Language] expression. So when we\nenter `move=.done` Camel will convert this\
      \ into:\n`${``file:parent``}/.done/${``file:onlyname`}. This is only done if\n\
      Camel detects that you have not provided a $\\{ } in the option value\nyourself.\
      \ So when you enter a $\\{ } Camel will *not* convert it and thus\nyou have\
      \ the full power.\n\nSo if we want to move the file into a backup folder with\
      \ today's date as\nthe pattern, we can do:\n\n[source,java]\n---------------------------------------------\n\
      move=backup/${date:now:yyyyMMdd}/${file:name}\n---------------------------------------------\n\
      \n[[File2-AboutmoveFailed]]\nAbout moveFailed\n++++++++++++++++\n\nThe `moveFailed`\
      \ option allows you to move files that *could not* be\nprocessed succesfully\
      \ to another location such as a error folder of your\nchoice. For example to\
      \ move the files in an error folder with a\ntimestamp you can use\n`moveFailed=/error/${``file:name.noext``}-${date:now:yyyyMMddHHmmssSSS}.${``file:ext`}.\n\
      \nSee more examples at link:file-language.html[File Language]\n\n[[File2-MessageHeaders]]\n\
      Message Headers\n^^^^^^^^^^^^^^^\n\nThe following headers are supported by this\
      \ component:\n\n[[File2-Fileproduceronly]]\nFile producer only\n++++++++++++++++++\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Description\n\n|`CamelFileName` |Specifies the name of the file to\
      \ write (relative to the endpoint\ndirectory). This name can be a `String`;\
      \ a `String` with a\nlink:file-language.html[File Language] or link:simple.html[Simple]\n\
      expression; or an link:expression.html[Expression] object. If it's\n`null` then\
      \ Camel will auto-generate a filename based on the message\nunique ID.\n\n|`CamelFileNameProduced`\
      \ |The actual absolute filepath (path + name) for the output file that was\n\
      written. This header is set by Camel and its purpose is providing\nend-users\
      \ with the name of the file that was written.\n\n|`CamelOverruleFileName` |*Camel\
      \ 2.11:* Is used for overruling `CamelFileName` header and use the\nvalue instead\
      \ (but only once, as the producer will remove this header\nafter writing the\
      \ file). The value can be only be a String. Notice that\nif the option `fileName`\
      \ has been configured, then this is still being\nevaluated.\n|=======================================================================\n\
      \n[[File2-Fileconsumeronly]]\nFile consumer only\n++++++++++++++++++\n\n[width=\"\
      100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Description\n\n|`CamelFileName` |Name of the consumed file as a relative\
      \ file path with offset from the\nstarting directory configured on the endpoint.\n\
      \n|`CamelFileNameOnly` |Only the file name (the name with no leading paths).\n\
      \n|`CamelFileAbsolute` |A `boolean` option specifying whether the consumed file\
      \ denotes an\nabsolute path or not. Should normally be `false` for relative\
      \ paths.\nAbsolute paths should normally not be used but we added to the move\n\
      option to allow moving files to absolute paths. But can be used\nelsewhere as\
      \ well.\n\n|`CamelFileAbsolutePath` |The absolute path to the file. For relative\
      \ files this path holds the\nrelative path instead.\n\n|`CamelFilePath` |The\
      \ file path. For relative files this is the starting directory + the\nrelative\
      \ filename. For absolute files this is the absolute path.\n\n|`CamelFileRelativePath`\
      \ |The relative path.\n\n|`CamelFileParent` |The parent path.\n\n|`CamelFileLength`\
      \ |A `long` value containing the file size.\n\n|`CamelFileLastModified` |A `Long`\
      \ value containing the last modified timestamp of the file. In\n*Camel 2.10.3\
      \ and older* the type is `Date`.\n|=======================================================================\n\
      \n[[File2-BatchConsumer]]\nBatch Consumer\n^^^^^^^^^^^^^^\n\nThis component\
      \ implements the link:batch-consumer.html[Batch Consumer].\n\n[[File2-ExchangeProperties,fileconsumeronly]]\n\
      Exchange Properties, file consumer only\n+++++++++++++++++++++++++++++++++++++++\n\
      \nAs the file consumer implements the??`BatchConsumer` it supports batching\n\
      the files it polls. By batching we mean that Camel will add the\nfollowing additional\
      \ properties to the link:exchange.html[Exchange], so\nyou know the number of\
      \ files polled, the current index, and whether the\nbatch is already completed.\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Property |Description\n\n|`CamelBatchSize` |The total number of files that\
      \ was polled in this batch.\n\n|`CamelBatchIndex` |The current index of the\
      \ batch. Starts from 0.\n\n|`CamelBatchComplete` |A `boolean` value indicating\
      \ the last link:exchange.html[Exchange] in\nthe batch. Is only `true` for the\
      \ last entry.\n|=======================================================================\n\
      \nThis allows you for instance to know how many files exist in this batch\n\
      and for instance let the link:aggregator2.html[Aggregator2] aggregate\nthis\
      \ number of files.\n\n[[File2-Usingcharset]]\nUsing charset\n^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.9.3* +\n The charset option allows for configuring\
      \ an encoding of the files on\nboth the consumer and producer endpoints. For\
      \ example if you read utf-8\nfiles, and want to convert the files to iso-8859-1,\
      \ you can do:\n\n[source,java]\n---------------------------------------\nfrom(\"\
      file:inbox?charset=utf-8\")\n  .to(\"file:outbox?charset=iso-8859-1\")\n---------------------------------------\n\
      \nYou can also use the `convertBodyTo` in the route. In the example below\n\
      we have still input files in utf-8 format, but we want to convert the\nfile\
      \ content to a byte array in iso-8859-1 format. And then let a bean\nprocess\
      \ the data. Before writing the content to the outbox folder using\nthe current\
      \ charset.\n\n[source,java]\n--------------------------------------------\n\
      from(\"file:inbox?charset=utf-8\")\n  .convertBodyTo(byte[].class, \"iso-8859-1\"\
      )\n  .to(\"bean:myBean\")\n  .to(\"file:outbox\");\n--------------------------------------------\n\
      \nIf you omit the charset on the consumer endpoint, then Camel does not\nknow\
      \ the charset of the file, and would by default use \"UTF-8\". However\nyou\
      \ can configure a JVM system property to override and use a different\ndefault\
      \ encoding with the key `org.apache.camel.default.charset`.\n\nIn the example\
      \ below this could be a problem if the files is not in\nUTF-8 encoding, which\
      \ would be the default encoding for read the\nfiles. +\n In this example when\
      \ writing the files, the content has already been\nconverted to a byte array,\
      \ and thus would write the content directly as\nis (without any further encodings).\n\
      \n[source,java]\n--------------------------------------------\nfrom(\"file:inbox\"\
      )\n  .convertBodyTo(byte[].class, \"iso-8859-1\")\n  .to(\"bean:myBean\")\n\
      \  .to(\"file:outbox\");\n--------------------------------------------\n\nYou\
      \ can also override and control the encoding dynamic when writing\nfiles, by\
      \ setting a property on the exchange with the key\n`Exchange.CHARSET_NAME`.\
      \ For example in the route below we set the\nproperty with a value from a message\
      \ header.\n\n[source,java]\n------------------------------------------------------------------\n\
      from(\"file:inbox\")\n  .convertBodyTo(byte[].class, \"iso-8859-1\")\n  .to(\"\
      bean:myBean\")\n  .setProperty(Exchange.CHARSET_NAME, header(\"someCharsetHeader\"\
      ))\n  .to(\"file:outbox\");\n------------------------------------------------------------------\n\
      \nWe suggest to keep things simpler, so if you pickup files with the same\n\
      encoding, and want to write the files in a specific encoding, then favor\nto\
      \ use the `charset` option on the endpoints.\n\nNotice that if you have explicit\
      \ configured a `charset` option on the\nendpoint, then that configuration is\
      \ used, regardless of the\n`Exchange.CHARSET_NAME` property.\n\nIf you have\
      \ some issues then you can enable DEBUG logging on\n`org.apache.camel.component.file`,\
      \ and Camel logs when it reads/write a\nfile using a specific charset. +\n For\
      \ example the route below will log the following:\n\n[source,java]\n---------------------------------------\n\
      from(\"file:inbox?charset=utf-8\")\n  .to(\"file:outbox?charset=iso-8859-1\"\
      )\n---------------------------------------\n\nAnd the logs:\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------------------------------------------------------------\n\
      DEBUG GenericFileConverter           - Read file /Users/davsclaus/workspace/camel/camel-core/target/charset/input/input.txt\
      \ with charset utf-8\nDEBUG FileOperations                 - Using Reader to\
      \ write file: target/charset/output.txt with charset: iso-8859-1\n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[File2-Commongotchaswithfolderandfilenames]]\nCommon gotchas with folder\
      \ and filenames\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen Camel is producing\
      \ files (writing files) there are a few gotchas\naffecting how to set a filename\
      \ of your choice. By default, Camel will\nuse the message ID as the filename,\
      \ and since the message ID is normally\na unique generated ID, you will end\
      \ up with filenames such as:\n`ID-MACHINENAME-2443-1211718892437-1-0`. If such\
      \ a filename is not\ndesired, then you must provide a filename in the `CamelFileName`\
      \ message\nheader. The constant, `Exchange.FILE_NAME`, can also be used.\n\n\
      The sample code below produces files using the message ID as the\nfilename:\n\
      \n[source,java]\n------------------------------------------------\nfrom(\"direct:report\"\
      ).to(\"file:target/reports\");\n------------------------------------------------\n\
      \nTo use `report.txt` as the filename you have to do:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------\n\
      from(\"direct:report\").setHeader(Exchange.FILE_NAME, constant(\"report.txt\"\
      )).to( \"file:target/reports\");\n-------------------------------------------------------------------------------------------------------\n\
      \n... the same as above, but with `CamelFileName`:\n\n[source,java]\n----------------------------------------------------------------------------------------------------\n\
      from(\"direct:report\").setHeader(\"CamelFileName\", constant(\"report.txt\"\
      )).to( \"file:target/reports\");\n----------------------------------------------------------------------------------------------------\n\
      \nAnd a syntax where we set the filename on the endpoint with the\n*fileName*\
      \ URI option.\n\n[source,java]\n---------------------------------------------------------------------\n\
      from(\"direct:report\").to(\"file:target/reports/?fileName=report.txt\");\n\
      ---------------------------------------------------------------------\n\n[[File2-FilenameExpression]]\n\
      Filename Expression\n^^^^^^^^^^^^^^^^^^^\n\nFilename can be set either using\
      \ the *expression* option or as a\nstring-based link:file-language.html[File\
      \ Language] expression in the\n`CamelFileName` header. See the link:file-language.html[File\
      \ Language]\nfor syntax and samples.\n\n[[File2-Consumingfilesfromfolderswhereothersdropfilesdirectly]]\n\
      Consuming files from folders where others drop files directly\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nBeware if you consume files from a folder where other applications write\n\
      files to directly. Take a look at the different readLock options to see\nwhat\
      \ suits your use cases. The best approach is however to write to\nanother folder\
      \ and after the write move the file in the drop folder.\nHowever if you write\
      \ files directly to the drop folder then the option\nchanged could better detect\
      \ whether a file is currently being\nwritten/copied as it uses a file changed\
      \ algorithm to see whether the\nfile size / modification changes over a period\
      \ of time. The other\nreadLock options rely on Java File API that sadly is not\
      \ always very\ngood at detecting this. You may also want to look at the doneFileName\n\
      option, which uses a marker file (done file) to signal when a file is\ndone\
      \ and ready to be consumed.\n\n[[File2-Usingdonefiles]]\nUsing done files\n\
      ^^^^^^^^^^^^^^^^\n\n*Available as of Camel 2.6*\n\nSee also section _writing\
      \ done files_ below.\n\nIf you want only to consume files when a done file exists,\
      \ then you can\nuse the `doneFileName` option on the endpoint.\n\n[source,java]\n\
      -----------------------------------\nfrom(\"file:bar?doneFileName=done\");\n\
      -----------------------------------\n\nWill only consume files from the bar\
      \ folder, if a done _file_ exists in\nthe same directory as the target files.\
      \ Camel will automatically delete\nthe _done file_ when it's done consuming\
      \ the files. From Camel *2.9.3*\nonwards Camel will not automatically delete\
      \ the _done file_ if\n`noop=true` is configured.\n\nHowever it is more common\
      \ to have one _done file_ per target file. This\nmeans there is a 1:1 correlation.\
      \ To do this you must use dynamic\nplaceholders in the `doneFileName` option.\
      \ Currently Camel supports the\nfollowing two dynamic tokens: `file:name` and\
      \ `file:name.noext` which\nmust be enclosed in $\\{ }. The consumer only supports\
      \ the static part of\nthe _done file_ name as either prefix or suffix (not both).\n\
      \n[source,java]\n------------------------------------------------\nfrom(\"file:bar?doneFileName=${file:name}.done\"\
      );\n------------------------------------------------\n\nIn this example only\
      \ files will be polled if there exists a done file\nwith the name _file name_.done.\
      \ For example\n\n* `hello.txt` - is the file to be consumed\n* `hello.txt.done`\
      \ - is the associated done file\n\nYou can also use a prefix for the done file,\
      \ such as:\n\n[source,java]\n-------------------------------------------------\n\
      from(\"file:bar?doneFileName=ready-${file:name}\");\n-------------------------------------------------\n\
      \n* `hello.txt` - is the file to be consumed\n* `ready-hello.txt` - is the associated\
      \ done file\n\n[[File2-Writingdonefiles]]\nWriting done files\n^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.6*\n\nAfter you have written a file you may want\
      \ to write an additional _done_\n_file_ as a kind of marker, to indicate to\
      \ others that the file is\nfinished and has been written. To do that you can\
      \ use the `doneFileName`\noption on the file producer endpoint.\n\n[source,java]\n\
      ----------------------------------\n.to(\"file:bar?doneFileName=done\");\n----------------------------------\n\
      \nWill simply create a file named `done` in the same directory as the\ntarget\
      \ file.\n\nHowever it is more common to have one done file per target file.\
      \ This\nmeans there is a 1:1 correlation. To do this you must use dynamic\n\
      placeholders in the `doneFileName` option. Currently Camel supports the\nfollowing\
      \ two dynamic tokens: `file:name` and `file:name.noext` which\nmust be enclosed\
      \ in $\\{ }.\n\n[source,java]\n-----------------------------------------------\n\
      .to(\"file:bar?doneFileName=done-${file:name}\");\n-----------------------------------------------\n\
      \nWill for example create a file named `done-foo.txt` if the target file\nwas\
      \ `foo.txt` in the same directory as the target file.\n\n[source,java]\n-----------------------------------------------\n\
      .to(\"file:bar?doneFileName=${file:name}.done\");\n-----------------------------------------------\n\
      \nWill for example create a file named `foo.txt.done` if the target file\nwas\
      \ `foo.txt` in the same directory as the target file.\n\n[source,java]\n-----------------------------------------------------\n\
      .to(\"file:bar?doneFileName=${file:name.noext}.done\");\n-----------------------------------------------------\n\
      \nWill for example create a file named `foo.done` if the target file was\n`foo.txt`\
      \ in the same directory as the target file.\n\n[[File2-Samples]]\nSamples\n\
      ^^^^^^^\n\n[[File2-Readfromadirectoryandwritetoanotherdirectory]]\nRead from\
      \ a directory and write to another directory\n++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n-----------------------------------------------------------\n\
      from(\"file://inputdir/?delete=true\").to(\"file://outputdir\")\n-----------------------------------------------------------\n\
      \n[[File2-Readfromadirectoryandwritetoanotherdirectoryusingaoverruledynamicname]]\n\
      Read from a directory and write to another directory using a overrule dynamic\
      \ name\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n---------------------------------------------------------------------------------------------\n\
      from(\"file://inputdir/?delete=true\").to(\"file://outputdir?overruleFile=copy-of-${file:name}\"\
      )\n---------------------------------------------------------------------------------------------\n\
      \nListen on a directory and create a message for each file dropped there.\n\
      Copy the contents to the `outputdir` and delete the file in the\n`inputdir`.\n\
      \n[[File2-Readingrecursivelyfromadirectoryandwritingtoanother]]\nReading recursively\
      \ from a directory and writing to another\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n--------------------------------------------------------------------------\n\
      from(\"file://inputdir/?recursive=true&delete=true\").to(\"file://outputdir\"\
      )\n--------------------------------------------------------------------------\n\
      \nListen on a directory and create a message for each file dropped there.\n\
      Copy the contents to the `outputdir` and delete the file in the\n`inputdir`.\
      \ Will scan recursively into sub-directories. Will lay out the\nfiles in the\
      \ same directory structure in the `outputdir` as the\n`inputdir`, including\
      \ any sub-directories.\n\n[source,java]\n--------------------\ninputdir/foo.txt\n\
      inputdir/sub/bar.txt\n--------------------\n\nWill result in the following output\
      \ layout:\n\n[source,java]\n---------------------\noutputdir/foo.txt\noutputdir/sub/bar.txt\n\
      ---------------------\n\n[[File2-Usingflatten]]\nUsing flatten\n\nIf you want\
      \ to store the files in the outputdir directory in the same\ndirectory, disregarding\
      \ the source directory layout (e.g. to flatten out\nthe path), you just add\
      \ the `flatten=true` option on the file producer\nside:\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"file://inputdir/?recursive=true&delete=true\").to(\"file://outputdir?flatten=true\"\
      )\n---------------------------------------------------------------------------------------\n\
      \nWill result in the following output layout:\n\n[source,java]\n-----------------\n\
      outputdir/foo.txt\noutputdir/bar.txt\n-----------------\n\n[[File2-Readingfromadirectoryandthedefaultmoveoperation]]\n\
      Reading from a directory and the default move operation\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nCamel will by default move any processed file into a `.camel`\nsubdirectory\
      \ in the directory the file was consumed from.\n\n[source,java]\n--------------------------------------------------------------------------\n\
      from(\"file://inputdir/?recursive=true&delete=true\").to(\"file://outputdir\"\
      )\n--------------------------------------------------------------------------\n\
      \nAffects the layout as follows: +\n *before*\n\n[source,java]\n--------------------\n\
      inputdir/foo.txt\ninputdir/sub/bar.txt\n--------------------\n\n*after*\n\n\
      [source,java]\n---------------------------\ninputdir/.camel/foo.txt\ninputdir/sub/.camel/bar.txt\n\
      outputdir/foo.txt\noutputdir/sub/bar.txt\n---------------------------\n\n[[File2-Readfromadirectoryandprocessthemessageinjava]]\n\
      Read from a directory and process the message in java\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n-----------------------------------------------------------\n\
      from(\"file://inputdir/\").process(new Processor() {\n  public void process(Exchange\
      \ exchange) throws Exception {\n    Object body = exchange.getIn().getBody();\n\
      \    // do some business logic with the input body\n  }\n});\n-----------------------------------------------------------\n\
      \nThe body will be a `File` object that points to the file that was just\ndropped\
      \ into the `inputdir` directory.\n\n[[File2-Writingtofiles]]\nWriting to files\n\
      ++++++++++++++++\n\nCamel is of course also able to write files, i.e. produce\
      \ files. In the\nsample below we receive some reports on the SEDA queue that\
      \ we process\nbefore they are being written to a directory.\n\n[[File2-WritetosubdirectoryusingExchange.FILE_NAME]]\n\
      Write to subdirectory using `Exchange.FILE_NAME`\n++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nUsing a single route, it is possible to write a file to any number of\nsubdirectories.\
      \ If you have a route setup as such:\n\n[source,xml]\n-----------------------------------\n\
      \  <route>\n    <from uri=\"bean:myBean\"/>\n    <to uri=\"file:/rootDirectory\"\
      />\n  </route>\n-----------------------------------\n\nYou can have `myBean`\
      \ set the header `Exchange.FILE_NAME` to values such\nas:\n\n[source,java]\n\
      --------------------------------------------------------------\nExchange.FILE_NAME\
      \ = hello.txt => /rootDirectory/hello.txt\nExchange.FILE_NAME = foo/bye.txt\
      \ => /rootDirectory/foo/bye.txt\n--------------------------------------------------------------\n\
      \nThis allows you to have a single route to write files to multiple\ndestinations.\n\
      \n[[File2-Writingfilethroughthetemporarydirectoryrelativetothefinaldestination]]\n\
      Writing file through the temporary directory relative to the final destination\n\
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nSometime you need to temporarily write the files to some directory\nrelative\
      \ to the destination directory. Such situation usually happens\nwhen some external\
      \ process with limited filtering capabilities is\nreading from the directory\
      \ you are writing to. In the example below\nfiles will be written to the?? `/var/myapp/filesInProgress`\
      \ directory and\nafter data transfer is done, they will be atomically moved\
      \ to\nthe`??/var/myapp/finalDirectory `directory.\n\n[source,java]\n-------------------------------------------------------------------------\n\
      from(\"direct:start\").\n  to(\"file:///var/myapp/finalDirectory?tempPrefix=/../filesInProgress/\"\
      );\n-------------------------------------------------------------------------\n\
      \n[[File2-Usingexpressionforfilenames]]\nUsing expression for filenames\n++++++++++++++++++++++++++++++\n\
      \nIn this sample we want to move consumed files to a backup folder using\ntoday's\
      \ date as a sub-folder name:\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      from(\"file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}\").to(\"...\"\
      );\n-----------------------------------------------------------------------------\n\
      \nSee link:file-language.html[File Language] for more samples.\n\n[[File2-Avoidingreadingthesamefilemorethanonceidempotentconsumer]]\n\
      Avoiding reading the same file more than once (idempotent consumer)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nCamel supports link:idempotent-consumer.html[Idempotent Consumer]\ndirectly\
      \ within the component so it will skip already processed files.\nThis feature\
      \ can be enabled by setting the `idempotent=true` option.\n\n[source,java]\n\
      -----------------------------------------------\nfrom(\"file://inbox?idempotent=true\"\
      ).to(\"...\");\n-----------------------------------------------\n\nCamel uses\
      \ the absolute file name as the idempotent key, to detect\nduplicate files.\
      \ From *Camel 2.11* onwards you can customize this key by\nusing an expression\
      \ in the idempotentKey option. For example to use both\nthe name and the file\
      \ size as the key\n\n[source,xml]\n------------------------------------------------------------------------------------------\n\
      \  <route>\n    <from uri=\"file://inbox?idempotent=true&amp;idempotentKey=${file:name}-${file:size}\"\
      />\n    <to uri=\"bean:processInbox\"/>\n  </route>\n------------------------------------------------------------------------------------------\n\
      \nBy default Camel uses a in memory based store for keeping track of\nconsumed\
      \ files, it uses a least recently used cache holding up to 1000\nentries. You\
      \ can plugin your own implementation of this store by using\nthe `idempotentRepository`\
      \ option using the `#` sign in the value to\nindicate it's a referring to a\
      \ bean in the link:registry.html[Registry]\nwith the specified `id`.\n\n[source,xml]\n\
      --------------------------------------------------------------------------------\n\
      \   <!-- define our store as a plain spring bean -->\n   <bean id=\"myStore\"\
      \ class=\"com.mycompany.MyIdempotentStore\"/>\n\n  <route>\n    <from uri=\"\
      file://inbox?idempotent=true&amp;idempotentRepository=#myStore\"/>\n    <to\
      \ uri=\"bean:processInbox\"/>\n  </route>\n--------------------------------------------------------------------------------\n\
      \nCamel will log at `DEBUG` level if it skips a file because it has been\nconsumed\
      \ before:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------\n\
      DEBUG FileConsumer is idempotent and the file has been consumed before. Will\
      \ skip this file: target\\idempotent\\report.txt\n-------------------------------------------------------------------------------------------------------------------------\n\
      \n[[File2-Usingafilebasedidempotentrepository]]\nUsing a file based idempotent\
      \ repository\n++++++++++++++++++++++++++++++++++++++++\n\nIn this section we\
      \ will use the file based idempotent repository\n`org.apache.camel.processor.idempotent.FileIdempotentRepository`\
      \ instead\nof the in-memory based that is used as default. +\n This repository\
      \ uses a 1st level cache to avoid reading the file\nrepository. It will only\
      \ use the file repository to store the content of\nthe 1st level cache. Thereby\
      \ the repository can survive server restarts.\nIt will load the content of the\
      \ file into the 1st level cache upon\nstartup. The file structure is very simple\
      \ as it stores the key in\nseparate lines in the file. By default, the file\
      \ store has a size limit\nof 1mb. When the file grows larger Camel will truncate\
      \ the file store,\nrebuilding the content by flushing the 1st level cache into\
      \ a fresh\nempty file.\n\nWe configure our repository using Spring XML creating\
      \ our file\nidempotent repository and define our file consumer to use our repository\n\
      with the `idempotentRepository` using `#` sign to indicate\nlink:registry.html[Registry]\
      \ lookup:\n\n[[File2-UsingaJPAbasedidempotentrepository]]\nUsing a JPA based\
      \ idempotent repository\n+++++++++++++++++++++++++++++++++++++++\n\nIn this\
      \ section we will use the JPA based idempotent repository instead\nof the in-memory\
      \ based that is used as default.\n\nFirst we need a persistence-unit in `META-INF/persistence.xml`\
      \ where we\nneed to use the class\n`org.apache.camel.processor.idempotent.jpa.MessageProcessed`\
      \ as model.\n\n[source,xml]\n---------------------------------------------------------------------------------\n\
      <persistence-unit name=\"idempotentDb\" transaction-type=\"RESOURCE_LOCAL\"\
      >\n  <class>org.apache.camel.processor.idempotent.jpa.MessageProcessed</class>\n\
      \ \n  <properties>\n    <property name=\"openjpa.ConnectionURL\" value=\"jdbc:derby:target/idempotentTest;create=true\"\
      />\n    <property name=\"openjpa.ConnectionDriverName\" value=\"org.apache.derby.jdbc.EmbeddedDriver\"\
      />\n    <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema\"\
      />\n    <property name=\"openjpa.Log\" value=\"DefaultLevel=WARN, Tool=INFO\"\
      />\n    <property name=\"openjpa.Multithreaded\" value=\"true\"/>\n  </properties>\n\
      </persistence-unit>\n---------------------------------------------------------------------------------\n\
      \nNext, we can create our JPA idempotent repository in the spring\nXML file\
      \ as well:\n\n[source,xml]\n---------------------------------------------------------------------------------\n\
      <!-- we define our jpa based idempotent repository we want to use in the file\
      \ consumer -->\n<bean id=\"jpaStore\" class=\"org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository\"\
      >\n    <!-- Here we refer to the entityManagerFactory -->\n    <constructor-arg\
      \ index=\"0\" ref=\"entityManagerFactory\"/>\n    <!-- This 2nd parameter is\
      \ the name  (= a category name).\n         You can have different repositories\
      \ with different names -->\n    <constructor-arg index=\"1\" value=\"FileConsumer\"\
      />\n</bean>\n---------------------------------------------------------------------------------\n\
      \nAnd yes then we just need to refer to the *jpaStore* bean in the file\nconsumer\
      \ endpoint using the `idempotentRepository` using the `#` syntax\noption:\n\n\
      [source,xml]\n---------------------------------------------------------------------------------\n\
      \  <route>\n    <from uri=\"file://inbox?idempotent=true&amp;idempotentRepository=#jpaStore\"\
      />\n    <to uri=\"bean:processInbox\"/>\n  </route>\n---------------------------------------------------------------------------------\n\
      \n[[File2-Filterusingorg.apache.camel.component.file.GenericFileFilter]]\nFilter\
      \ using org.apache.camel.component.file.GenericFileFilter\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nCamel supports pluggable filtering strategies. You can then configure\nthe\
      \ endpoint with such a filter to skip certain files being processed.\n\nIn the\
      \ sample we have built our own filter that skips files starting\nwith `skip`\
      \ in the filename:\n\nAnd then we can configure our route using the *filter*\
      \ attribute to\nreference our filter (using `#` notation) that we have defined\
      \ in the\nspring XML file:\n\n[source,xml]\n----------------------------------------------------------\n\
      \  <!-- define our filter as a plain spring bean -->\n  <bean id=\"myFilter\"\
      \ class=\"com.mycompany.MyFileFilter\"/>\n  \n <route>\n    <from uri=\"file://inbox?filter=#myFilter\"\
      />\n    <to uri=\"bean:processInbox\"/>\n  </route>\n----------------------------------------------------------\n\
      \n[[File2-FilteringusingANTpathmatcher]]\nFiltering using ANT path matcher\n\
      ++++++++++++++++++++++++++++++++\n\nTIP:*New options from Camel 2.10 onwards*\n\
      There are now `antInclude` and `antExclude` options to make it easy to\nspecify\
      \ ANT style include/exclude without having to define the filter.\nSee the URI\
      \ options above for more information.\n\nThe ANT path matcher is shipped out-of-the-box\
      \ in the *camel-spring*\njar. So you need to depend on *camel-spring* if you\
      \ are using Maven. +\n The reasons is that we leverage Spring's\nhttp://static.springframework.org/spring/docs/2.5.x/api/org/springframework/util/AntPathMatcher.html[AntPathMatcher]\n\
      to do the actual matching.\n\nThe file paths is matched with the following rules:\n\
      \n* `?` matches one character\n* `*` matches zero or more characters\n* `**`\
      \ matches zero or more directories in a path\n\nThe sample below demonstrates\
      \ how to use it:\n\n[[File2-SortingusingComparator]]\nSorting using Comparator\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^\n\nCamel supports pluggable sorting strategies. This\
      \ strategy it to use the\nbuild in `java.util.Comparator` in Java. You can then\
      \ configure the\nendpoint with such a comparator and have Camel sort the files\
      \ before\nbeing processed.\n\nIn the sample we have built our own comparator\
      \ that just sorts by file\nname:\n\nAnd then we can configure our route using\
      \ the *sorter* option to\nreference to our sorter (`mySorter`) we have defined\
      \ in the spring XML\nfile:\n\n[source,xml]\n-----------------------------------------------------------\n\
      \   <!-- define our sorter as a plain spring bean -->\n   <bean id=\"mySorter\"\
      \ class=\"com.mycompany.MyFileSorter\"/>\n\n  <route>\n    <from uri=\"file://inbox?sorter=#mySorter\"\
      />\n    <to uri=\"bean:processInbox\"/>\n  </route>\n-----------------------------------------------------------\n\
      \nTIP:*URI options can reference beans using the # syntax*\nIn the Spring DSL\
      \ route above notice that we can refer to beans in the\nlink:registry.html[Registry]\
      \ by prefixing the id with `#`. So writing\n`sorter=#mySorter`, will instruct\
      \ Camel to go look in the\nlink:registry.html[Registry] for a bean with the\
      \ ID, `mySorter`.\n\n[[File2-SortingusingsortBy]]\nSorting using sortBy\n^^^^^^^^^^^^^^^^^^^^\n\
      \nCamel supports pluggable sorting strategies. This strategy it to use the\n\
      link:file-language.html[File Language] to configure the sorting. The\n`sortBy`\
      \ option is configured as follows:\n\n[source,java]\n----------------------------------\n\
      sortBy=group 1;group 2;group 3;...\n----------------------------------\n\nWhere\
      \ each group is separated with semi colon. In the simple situations\nyou just\
      \ use one group, so a simple example could be:\n\n[source,java]\n----------------\n\
      sortBy=file:name\n----------------\n\nThis will sort by file name, you can reverse\
      \ the order by prefixing\n`reverse:` to the group, so the sorting is now Z..A:\n\
      \n[source,java]\n------------------------\nsortBy=reverse:file:name\n------------------------\n\
      \nAs we have the full power of link:file-language.html[File Language] we\ncan\
      \ use some of the other parameters, so if we want to sort by file size\nwe do:\n\
      \n[source,java]\n------------------\nsortBy=file:length\n------------------\n\
      \nYou can configure to ignore the case, using `ignoreCase:` for string\ncomparison,\
      \ so if you want to use file name sorting but to ignore the\ncase then we do:\n\
      \n[source,java]\n---------------------------\nsortBy=ignoreCase:file:name\n\
      ---------------------------\n\nYou can combine ignore case and reverse, however\
      \ reverse must be\nspecified first:\n\n[source,java]\n-----------------------------------\n\
      sortBy=reverse:ignoreCase:file:name\n-----------------------------------\n\n\
      In the sample below we want to sort by last modified file, so we do:\n\n[source,java]\n\
      --------------------\nsortBy=file:modified\n--------------------\n\nAnd then\
      \ we want to group by name as a 2nd option so files with same\nmodifcation is\
      \ sorted by name:\n\n[source,java]\n------------------------------\nsortBy=file:modified;file:name\n\
      ------------------------------\n\nNow there is an issue here, can you spot it?\
      \ Well the modified timestamp\nof the file is too fine as it will be in milliseconds,\
      \ but what if we\nwant to sort by date only and then subgroup by name? +\n Well\
      \ as we have the true power of link:file-language.html[File\nLanguage] we can\
      \ use??its date command that supports patterns. So this\ncan be solved as:\n\
      \n[source,java]\n-----------------------------------\nsortBy=date:file:yyyyMMdd;file:name\n\
      -----------------------------------\n\nYeah, that is pretty powerful, oh by\
      \ the way you can also use reverse\nper group, so we could reverse the file\
      \ names:\n\n[source,java]\n-------------------------------------------\nsortBy=date:file:yyyyMMdd;reverse:file:name\n\
      -------------------------------------------\n\n[[File2-UsingGenericFileProcessStrategy]]\n\
      Using GenericFileProcessStrategy\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe option\
      \ `processStrategy` can be used to use a custom\n`GenericFileProcessStrategy`\
      \ that allows you to implement your own\n_begin_, _commit_ and _rollback_ logic.\
      \ +\n For instance lets assume a system writes a file in a folder you should\n\
      consume. But you should not start consuming the file before another\n_ready_\
      \ file has been written as well.\n\nSo by implementing our own `GenericFileProcessStrategy`\
      \ we can implement\nthis as:\n\n* In the `begin()` method we can test whether\
      \ the special _ready_ file\nexists. The begin method returns a `boolean` to\
      \ indicate if we can\nconsume the file or not.\n* In the `abort()` method (Camel\
      \ 2.10) special logic can be executed in\ncase the `begin` operation returned\
      \ `false`, for example to cleanup\nresources etc.\n* in the `commit()` method\
      \ we can move the actual file and also delete\nthe _ready_ file.\n\n[[File2-Usingfilter]]\n\
      Using filter\n^^^^^^^^^^^^\n\nThe `filter` option allows you to implement a\
      \ custom filter in Java code\nby implementing the `org.apache.camel.component.file.GenericFileFilter`\n\
      interface. This interface has an `accept` method that returns a boolean.\nReturn\
      \ `true` to include the file, and `false` to skip the file. From\nCamel 2.10\
      \ onwards, there is a `isDirectory` method on `GenericFile`\nwhether the file\
      \ is a directory. This allows you to filter unwanted\ndirectories, to avoid\
      \ traversing down unwanted directories.\n\nFor example to skip any directories\
      \ which starts with `\"skip\"` in the\nname, can be implemented as follows:\n\
      \n[[File2-HowtousetheCamelerrorhandlertodealwithexceptionstriggeredoutsidetheroutingengine]]\n\
      How to use the Camel error handler to deal with exceptions triggered outside\
      \ the routing engine\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe file and ftp consumers, will by default try to pickup files. Only if\n\
      that is successful then a Camel link:exchange.html[Exchange] can be\ncreated\
      \ and passed in the Camel routing engine. +\n When the link:exchange.html[Exchange]\
      \ is processed by the routing\nengine, then the Camel link:error-handling-in-camel.html[Error\
      \ Handling]\ntakes over (eg the onException / errorHandler in the routes). +\n\
      \ However outside the scope of the routing engine, any exceptions\nhandling\
      \ is component specific. Camel offers a\n`org.apache.camel.spi.ExceptionHandler`\
      \ that allows components +\n to use that as a pluggable hook for end users to\
      \ use their own\nimplementation. Camel offers a default `LoggingExceptionHandler`\
      \ that\nwill log the exception at ERROR/WARN level. +\n For the file and ftp\
      \ components this would be the case. However if you\nwant to bridge the `ExceptionHandler`\
      \ so it uses the Camel\nlink:error-handling-in-camel.html[Error Handling], then\
      \ +\n you need to implement a custom `ExceptionHandler` that will handle the\n\
      exception by creating a Camel link:exchange.html[Exchange] and send it\nto the\
      \ routing engine; then the error handling of the routing engine can\nget triggered.\n\
      \nHere is such an example based upon an unit test.\n\nFirst we have a custom\
      \ `ExceptionHandler` where you can see we deal with\nthe exception by sending\
      \ it to a Camel link:endpoint.html[Endpoint]\nnamed \"direct:file-error\":\n\
      \n*MyExceptionHandler*\n\nThen we have a Camel route that uses the Camel routing\
      \ error handler,\nwhich is the `onException` where we handle any IOException\
      \ being\nthrown. +\n We then send the message to the same \"direct:file-error\"\
      \ endpoint,\nwhere we handle it by transforming it to a message, and then being\
      \ sent\nto a link:mock.html[Mock] endpoint. +\n This is just for testing purpose.\
      \ You can handle the exception in any\ncustom way you want, such as using a\
      \ link:bean.html[Bean] or sending an\nemail etc.\n\nNotice how we configure\
      \ our custom `MyExceptionHandler` by using the\n`consumer.exceptionHandler`\
      \ option to refer to `#myExceptionHandler`\nwhich is a id of the bean registered\
      \ in the\nlink:registry.html[Registry]. If using Spring XML or OSGi Blueprint,\n\
      then that would be a <bean id=\"myExceptionHandler\"\nclass=\"com.foo.MyExceptionHandler\"\
      />:\n\n*Camel route with routing engine error handling*\n\nThe source code for\
      \ this example can be seen\nhttps://svn.apache.org/repos/asf/camel/trunk/camel-core/src/test/java/org/apache/camel/component/file/FileConsumerCustomExceptionHandlerTest.java[here]\n\
      \n[[File2-Usingconsumer.bridgeErrorHandler]]\nUsing consumer.bridgeErrorHandler\n\
      +++++++++++++++++++++++++++++++++\n\n*Available as of Camel 2.10*\n\nIf you\
      \ want to use the Camel link:error-handler.html[Error Handler] to\ndeal with\
      \ any exception occurring in the file consumer, then you can\nenable the `consumer.bridgeErrorHandler`\
      \ option as shown below:\n\n*Using consumer.bridgeErrorHandler*\n\nSo all you\
      \ have to do is to enable this option, and the error handler in\nthe route will\
      \ take it from there. [Info]\n\n*Important when using\nconsumer.bridgeErrorHandler*\n\
      \nWhen using consumer.bridgeErrorHandler, then\nlink:intercept.html[interceptors],\
      \ link:oncompletion.html[OnCompletion]s\ndoes *not* apply. The link:exchange.html[Exchange]\
      \ is processed directly\nby the Camel link:error-handler.html[Error Handler],\
      \ and does not allow\nprior actions such as interceptors, onCompletion to take\
      \ action.\n\n[[File2-Debuglogging]]\nDebug logging\n^^^^^^^^^^^^^\n\nThis component\
      \ has log level *TRACE* that can be helpful if you have\nproblems.\n\n[[File2-SeeAlso]]\n\
      See Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n* link:file-language.html[File Language]\n* link:ftp2.html[FTP]\n* link:polling-consumer.html[Polling\
      \ Consumer]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-flatpack
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: flatpack
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: flatpack
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: flatpack
          spec:
            containers:
            - image: fabric8/connector-flatpack:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: flatpack
        syntax: flatpack:type:resourceUri
        title: Flatpack
        description: The flatpack component supports fixed width and delimited file parsing via the FlatPack library.
        label: transformation
        deprecated: false
        async: false
        javaType: org.apache.camel.component.flatpack.FlatpackComponent
        groupId: org.apache.camel
        artifactId: camel-flatpack
        version: 2.18.1
      componentProperties: {}
      properties:
        type:
          kind: path
          group: common
          required: false
          type: string
          javaType: org.apache.camel.component.flatpack.FlatpackType
          enum:
          - fixed
          - delim
          deprecated: false
          secret: false
          description: Whether to use fixed or delimiter
        resourceUri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: URL for loading the flatpack mapping file from classpath or file system
        allowShortLines:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Allows for lines to be shorter than expected and ignores the extra characters
        delimiter:
          kind: parameter
          group: common
          type: string
          javaType: char
          deprecated: false
          secret: false
          defaultValue: ','
          description: The default character delimiter for delimited files.
        ignoreExtraColumns:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Allows for lines to be longer than expected and ignores the extra characters
        ignoreFirstRecord:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the first line is ignored for delimited files (for the column headers).
        splitRows:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets the Component to send each row as a separate exchange once parsed
        textQualifier:
          kind: parameter
          group: common
          type: string
          javaType: char
          deprecated: false
          secret: false
          description: The text qualifier for delimited files.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[Flatpack-FlatpackComponent]]
      Flatpack Component
      ~~~~~~~~~~~~~~~~~~

      The Flatpack component supports fixed width and delimited file parsing
      via the http://flatpack.sourceforge.net[FlatPack library]. +
       *Notice:* This component only supports consuming from flatpack files to
      Object model. You can not (yet) write from Object model to flatpack
      format.

      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-flatpack</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Flatpack-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------------------------
      flatpack:[delim|fixed]:flatPackConfig.pzmap.xml[?options]
      ---------------------------------------------------------

      Or for a delimited file handler with no configuration file just use

      [source,java]
      ---------------------------
      flatpack:someName[?options]
      ---------------------------

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

      [[Flatpack-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      // component options: START
      The Flatpack component has no options.
      // component options: END

      // endpoint options: START
      The Flatpack component supports 27 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | type | common |  | FlatpackType | Whether to use fixed or delimiter
      | resourceUri | common |  | String | *Required* URL for loading the flatpack mapping file from classpath or file system
      | allowShortLines | common | false | boolean | Allows for lines to be shorter than expected and ignores the extra characters
      | delimiter | common | , | char | The default character delimiter for delimited files.
      | ignoreExtraColumns | common | false | boolean | Allows for lines to be longer than expected and ignores the extra characters
      | ignoreFirstRecord | common | true | boolean | Whether the first line is ignored for delimited files (for the column headers).
      | splitRows | common | true | boolean | Sets the Component to send each row as a separate exchange once parsed
      | textQualifier | common |  | char | The text qualifier for delimited files.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Flatpack-Examples]]
      Examples
      ^^^^^^^^

      * `flatpack:fixed:foo.pzmap.xml` creates a fixed-width endpoint using
      the `foo.pzmap.xml` file configuration.
      * `flatpack:delim:bar.pzmap.xml` creates a delimited endpoint using the
      `bar.pzmap.xml` file configuration.
      * `flatpack:foo` creates a delimited endpoint called `foo` with no file
      configuration.

      [[Flatpack-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel will store the following headers on the IN message:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Header |Description

      |`camelFlatpackCounter` |The current row index. For `splitRows=false` the counter is the total
      number of rows.
      |=======================================================================

      [[Flatpack-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      The component delivers the data in the IN message as a
      `org.apache.camel.component.flatpack.DataSetList` object that has
      converters for `java.util.Map` or `java.util.List`. +
       Usually you want the `Map` if you process one row at a time
      (`splitRows=true`). Use `List` for the entire content
      (`splitRows=false`), where each element in the list is a `Map`. +
       Each `Map` contains the key for the column name and its corresponding
      value.

      For example to get the firstname from the sample below:

      [source,java]
      ------------------------------------------------
        Map row = exchange.getIn().getBody(Map.class);
        String firstName = row.get("FIRSTNAME");
      ------------------------------------------------

      However, you can also always get it as a `List` (even for
      `splitRows=true`). The same example:

      [source,java]
      ---------------------------------------------------
        List data = exchange.getIn().getBody(List.class);
        Map row = (Map)data.get(0);
        String firstName = row.get("FIRSTNAME");
      ---------------------------------------------------

      [[Flatpack-HeaderandTrailerrecords]]
      Header and Trailer records
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The header and trailer notions in Flatpack are supported. However, you
      *must* use fixed record IDs:

      * `header` for the header record (must be lowercase)
      * `trailer` for the trailer record (must be lowercase)

      The example below illustrates this fact that we have a header and a
      trailer. You can omit one or both of them if not needed.

      [source,xml]
      ---------------------------------------------------------------------------
          <RECORD id="header" startPosition="1" endPosition="3" indicator="HBT">
              <COLUMN name="INDICATOR" length="3"/>
              <COLUMN name="DATE" length="8"/>
          </RECORD>

          <COLUMN name="FIRSTNAME" length="35" />
          <COLUMN name="LASTNAME" length="35" />
          <COLUMN name="ADDRESS" length="100" />
          <COLUMN name="CITY" length="100" />
          <COLUMN name="STATE" length="2" />
          <COLUMN name="ZIP" length="5" />

          <RECORD id="trailer" startPosition="1" endPosition="3" indicator="FBT">
              <COLUMN name="INDICATOR" length="3"/>
              <COLUMN name="STATUS" length="7"/>
          </RECORD>
      ---------------------------------------------------------------------------

      [[Flatpack-Usingtheendpoint]]
      Using the endpoint
      ^^^^^^^^^^^^^^^^^^

      A common use case is sending a file to this endpoint for further
      processing in a separate route. For example:

      [source,xml]
      -----------------------------------------------------------------------
        <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
          <route>
            <from uri="file://someDirectory"/>
            <to uri="flatpack:foo"/>
          </route>

          <route>
            <from uri="flatpack:foo"/>
            ...
          </route>
        </camelContext>
      -----------------------------------------------------------------------

      You can also convert the payload of each message created to a `Map` for
      easy link:bean-integration.html[Bean Integration]

      [[Flatpack-FlatpackDataFormat]]
      Flatpack DataFormat
      ~~~~~~~~~~~~~~~~~~~

      The link:flatpack.html[Flatpack] component ships with the Flatpack data
      format that can be used to format between fixed width or delimited text
      messages to a `List` of rows as `Map`.

      * marshal = from `List<Map<String, Object>>` to `OutputStream` (can be
      converted to `String`)
      * unmarshal = from `java.io.InputStream` (such as a `File` or `String`)
      to a `java.util.List` as an
      `org.apache.camel.component.flatpack.DataSetList` instance. +
       The result of the operation will contain all the data. If you need to
      process each row one by one you can split the exchange, using
      link:splitter.html[Splitter].

      *Notice:* The Flatpack library does currently not support header and
      trailers for the marshal operation.

      [[Flatpack-Options]]
      Options
      ^^^^^^^

      The data format has the following options:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Option |Default |Description

      |`definition` |`null` |The flatpack pzmap configuration file. Can be omitted in simpler
      situations, but its preferred to use the pzmap.

      |`fixed` |`false` |Delimited or fixed.

      |`ignoreFirstRecord` |`true` |Whether the first line is ignored for delimited files (for the column
      headers).

      |`textQualifier` |`"` |If the text is qualified with a char such as `"`.

      |`delimiter` |`,` |The delimiter char (could be `;` `,` or similar)

      |`parserFactory` |`null` |Uses the default Flatpack parser factory.

      |`allowShortLines` |`false` |*Camel 2.9.7 and 2.10.5 onwards*: Allows for lines to be shorter than
      expected and ignores the extra characters.

      |`ignoreExtraColumns` |`false` |*Camel 2.9.7 and 2.10.5 onwards*: Allows for lines to be longer than
      expected and ignores the extra characters.
      |=======================================================================

      [[Flatpack-Usage]]
      Usage
      ^^^^^

      To use the data format, simply instantiate an instance and invoke the
      marshal or unmarshal operation in the route builder:

      [source,java]
      ---------------------------------------------------------------------------
        FlatpackDataFormat fp = new FlatpackDataFormat();
        fp.setDefinition(new ClassPathResource("INVENTORY-Delimited.pzmap.xml"));
        ...
        from("file:order/in").unmarshal(df).to("seda:queue:neworder");
      ---------------------------------------------------------------------------

      The sample above will read files from the `order/in` folder and
      unmarshal the input using the Flatpack configuration file
      `INVENTORY-Delimited.pzmap.xml` that configures the structure of the
      files. The result is a `DataSetList` object we store on the SEDA queue.

      [source,java]
      -----------------------------------------------------------------------------------
      FlatpackDataFormat df = new FlatpackDataFormat();
      df.setDefinition(new ClassPathResource("PEOPLE-FixedLength.pzmap.xml"));
      df.setFixed(true);
      df.setIgnoreFirstRecord(false);

      from("seda:people").marshal(df).convertBodyTo(String.class).to("jms:queue:people");
      -----------------------------------------------------------------------------------

      In the code above we marshal the data from a Object representation as a
      `List` of rows as `Maps`. The rows as `Map` contains the column name as
      the key, and the the corresponding value. This structure can be created
      in Java code from e.g. a processor. We marshal the data according to the
      Flatpack format and convert the result as a `String` object and store it
      on a JMS queue.

      [[Flatpack-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      To use Flatpack in your camel routes you need to add the a dependency on
      *camel-flatpack* which implements this data format.

      If you use maven you could just add the following to your pom.xml,
      substituting the version number for the latest & greatest release (see
      link:download.html[the download page for the latest versions]).

      [source,java]
      -----------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-flatpack</artifactId>
        <version>x.x.x</version>
      </dependency>
      -----------------------------------------

      [[Flatpack-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-flink
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: flink
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: flink
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: flink
          spec:
            containers:
            - image: fabric8/connector-flink:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: flink
        syntax: flink:endpointType
        title: Apache Flink
        description: The flink component can be used to send DataSet jobs to Apache Flink cluster.
        label: hadoop
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.flink.FlinkComponent
        groupId: org.apache.camel
        artifactId: camel-flink
        version: 2.18.1
      componentProperties:
        dataSet:
          kind: property
          type: object
          javaType: org.apache.flink.api.java.DataSet
          deprecated: false
          secret: false
          description: DataSet to compute against.
        dataStream:
          kind: property
          type: object
          javaType: org.apache.flink.streaming.api.datastream.DataStream
          deprecated: false
          secret: false
          description: DataStream to compute against.
        dataSetCallback:
          kind: property
          type: object
          javaType: org.apache.camel.component.flink.DataSetCallback
          deprecated: false
          secret: false
          description: Function performing action against a DataSet.
        dataStreamCallback:
          kind: property
          type: object
          javaType: org.apache.camel.component.flink.DataStreamCallback
          deprecated: false
          secret: false
          description: Function performing action against a DataStream.
      properties:
        endpointType:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.flink.EndpointType
          enum:
          - dataset
          - datastream
          deprecated: false
          secret: false
          description: Type of the endpoint (dataset datastream).
        collect:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Indicates if results should be collected or counted.
        dataSet:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.flink.api.java.DataSet
          deprecated: false
          secret: false
          description: DataSet to compute against.
        dataSetCallback:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.flink.DataSetCallback
          deprecated: false
          secret: false
          description: Function performing action against a DataSet.
        dataStream:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.flink.streaming.api.datastream.DataStream
          deprecated: false
          secret: false
          description: DataStream to compute against.
        dataStreamCallback:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.flink.DataStreamCallback
          deprecated: false
          secret: false
          description: Function performing action against a DataStream.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[camel-flink-CamelFlinkComponent]]
      Camel Flink Component
      ~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18*

      This documentation page covers the https://flink.apache.org[Apache Flink]
      component for the Apache Camel. The??*camel-flink*??component provides a
      bridge between Camel connectors and Flink tasks. +
      This Camel Flink connector provides a way to route message from various
      transports, dynamically choosing a flink task to execute, use incoming
      message as input data for the task and finally deliver the results back to
      the Camel pipeline.

      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-flink</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[camel-flink-URIFormat]]
      URI Format
      ^^^^^^^^^^

      Currently, the Flink Component supports only Producers. One can create DataSet, DataStream jobs.

      [source,java]
      -------------------------------------------------
      flink:dataset?dataset=#myDataSet&dataSetCallback=#dataSetCallback
      flink:datastream?datastream=#myDataStream&dataStreamCallback=#dataStreamCallback
      -------------------------------------------------

      [[Flink-FlinkEndpointOptions]]
      FlinkEndpoint Options



      // endpoint options: START
      The Apache Flink component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | endpointType | producer |  | EndpointType | *Required* Type of the endpoint (dataset datastream).
      | collect | producer | true | boolean | Indicates if results should be collected or counted.
      | dataSet | producer |  | DataSet | DataSet to compute against.
      | dataSetCallback | producer |  | DataSetCallback | Function performing action against a DataSet.
      | dataStream | producer |  | DataStream | DataStream to compute against.
      | dataStreamCallback | producer |  | DataStreamCallback | Function performing action against a DataStream.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Flink-FlinkComponentOptions]]
      FlinkComponent Options
      ^^^^^^^^^^^^^^^^^^^^




      // component options: START
      The Apache Flink component supports 4 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | dataSet | DataSet | DataSet to compute against.
      | dataStream | DataStream | DataStream to compute against.
      | dataSetCallback | DataSetCallback | Function performing action against a DataSet.
      | dataStreamCallback | DataStreamCallback | Function performing action against a DataStream.
      |=======================================================================
      {% endraw %}
      // component options: END





      Flink DataSet Callback
      ^^^^^^^^^^^^^^^^^^^^^^

      [source,java]
      -----------------------------------
      @Bean
      public DataSetCallback<Long> dataSetCallback() {
          return new DataSetCallback<Long>() {
              public Long onDataSet(DataSet dataSet, Object... objects) {
                  try {
                       dataSet.print();
                       return new Long(0);
                  } catch (Exception e) {
                       return new Long(-1);
                  }
              }
          };
      }
      -----------------------------------

      Flink DataStream Callback
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      [source,java]
      ---------------------------
      @Bean
      public VoidDataStreamCallback dataStreamCallback() {
          return new VoidDataStreamCallback() {
              @Override
              public void doOnDataStream(DataStream dataStream, Object... objects) throws Exception {
                  dataStream.flatMap(new Splitter()).print();

                  environment.execute("data stream test");
              }
          };
      }
      ---------------------------

      Camel-Flink Producer call
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      [source,java]
      -----------------------------------
      CamelContext camelContext = new SpringCamelContext(context);

      String pattern = "foo";

      try {
          ProducerTemplate template = camelContext.createProducerTemplate();
          camelContext.start();
          Long count = template.requestBody("flink:dataSet?dataSet=#myDataSet&dataSetCallback=#countLinesContaining", pattern, Long.class);
          } finally {
              camelContext.stop();
          }
      -----------------------------------

      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-fop
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: fop
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: fop
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: fop
          spec:
            containers:
            - image: fabric8/connector-fop:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: fop
        syntax: fop:outputType
        title: FOP
        description: The fop component allows you to render a message into different output formats using Apache FOP.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.fop.FopComponent
        groupId: org.apache.camel
        artifactId: camel-fop
        version: 2.18.1
      componentProperties: {}
      properties:
        outputType:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.fop.FopOutputType
          enum:
          - pdf
          - ps
          - pcl
          - png
          - jpeg
          - svg
          - xml
          - mif
          - rtf
          - txt
          deprecated: false
          secret: false
          description: The primary output format is PDF but other output formats are also supported.
        fopFactory:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.fop.apps.FopFactory
          deprecated: false
          secret: false
          description: Allows to use a custom configured or implementation of org.apache.fop.apps.FopFactory.
        userConfigURL:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The location of a configuration file which can be loaded from classpath or file system.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[FOP-FOPComponent]]
      FOP Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.10*

      The FOP component allows you to render a message into different output
      formats using http://xmlgraphics.apache.org/fop/index.html[Apache FOP].

      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-fop</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[FOP-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------
      fop://outputFormat?[options]
      ----------------------------

      [[FOP-OutputFormats]]
      Output Formats
      ^^^^^^^^^^^^^^

      The primary output format is PDF but other output
      http://xmlgraphics.apache.org/fop/0.95/output.html[formats] are also
      supported:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |name |outputFormat |description

      |PDF |application/pdf |Portable Document Format

      |PS |application/postscript |Adobe Postscript

      |PCL |application/x-pcl |Printer Control Language

      |PNG |image/png |PNG images

      |JPEG |image/jpeg |JPEG images

      |SVG |image/svg+xml |Scalable Vector Graphics

      |XML |application/X-fop-areatree |Area tree representation

      |MIF |application/mif |FrameMaker's MIF

      |RTF |application/rtf |Rich Text Format

      |TXT |text/plain |Text
      |=======================================================================

      The complete list of valid output formats can be found
      http://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/util/MimeConstants.java[here]

      [[FOP-EndpointOptions]]
      Endpoint Options
      ^^^^^^^^^^^^^^^^

      // component options: START
      The FOP component has no options.
      // component options: END



      // endpoint options: START
      The FOP component supports 4 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | outputType | producer |  | FopOutputType | *Required* The primary output format is PDF but other output formats are also supported.
      | fopFactory | producer |  | FopFactory | Allows to use a custom configured or implementation of org.apache.fop.apps.FopFactory.
      | userConfigURL | producer |  | String | The location of a configuration file which can be loaded from classpath or file system.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      The location of a configuration file with the following
      http://xmlgraphics.apache.org/fop/1.0/configuration.html[structure].
      From *Camel 2.12* onwards the file is loaded from the classpath by
      default. You can use `file:`, or `classpath:` as prefix to load the
      resource from file or classpath. In previous releases the file is always
      loaded from file system.

      fopFactory

      ??

      Allows to use a custom configured or implementation of
      `org.apache.fop.apps.FopFactory`.

      [[FOP-MessageOperations]]
      Message Operations
      ^^^^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |name |default value |description

      |CamelFop.Output.Format |  | Overrides the output format for that message

      |CamelFop.Encrypt.userPassword |  | PDF user password

      |CamelFop.Encrypt.ownerPassword |  | PDF owner passoword

      |CamelFop.Encrypt.allowPrint | true |Allows printing the PDF

      |CamelFop.Encrypt.allowCopyContent |true |Allows copying content of the PDF

      |CamelFop.Encrypt.allowEditContent |true |Allows editing content of the PDF

      |CamelFop.Encrypt.allowEditAnnotations |true |Allows editing annotation of the PDF

      |CamelFop.Render.producer |Apache FOP |Metadata element for the system/software that produces the document

      |CamelFop.Render.creator |  | Metadata element for the user that created the document

      |CamelFop.Render.creationDate |  | Creation Date

      |CamelFop.Render.author |  | Author of the content of the document

      |CamelFop.Render.title |  | Title of the document

      |CamelFop.Render.subject |  | Subject of the document

      |CamelFop.Render.keywords |  | Set of keywords applicable to this document
      |=======================================================================

      [[FOP-Example]]
      Example
      ^^^^^^^

      Below is an example route that renders PDFs from xml data and xslt
      template and saves the PDF files in target folder:

      [source,java]
      ---------------------------------
      from("file:source/data/xml")
          .to("xslt:xslt/template.xsl")
          .to("fop:application/pdf")
          .to("file:target/data");
      ---------------------------------

      For more information, see these resources...

      [[FOP-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-freemarker
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: freemarker
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: freemarker
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: freemarker
          spec:
            containers:
            - image: fabric8/connector-freemarker:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: freemarker
        syntax: freemarker:resourceUri
        title: Freemarker
        description: Transforms the message using a FreeMarker template.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.freemarker.FreemarkerComponent
        groupId: org.apache.camel
        artifactId: camel-freemarker
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: freemarker.template.Configuration
          deprecated: false
          secret: false
          description: To use an existing freemarker.template.Configuration instance as the configuration.
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        configuration:
          kind: parameter
          group: producer
          type: object
          javaType: freemarker.template.Configuration
          deprecated: false
          secret: false
          description: Sets the Freemarker configuration to use
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        encoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the encoding to be used for loading the template file.
        templateUpdateDelay:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Number of seconds the loaded template resource will remain in the cache.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[FreeMarker-FreeMarker]]
      FreeMarker
      ~~~~~~~~~~

      The *freemarker:* component allows for processing a message using a
      http://freemarker.org/[FreeMarker] template. This can be ideal when
      using link:templating.html[Templating] to generate responses for
      requests.

      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-freemarker</artifactId>
          <version>x.x.x</version> <!-- use the same version as your Camel core version -->
      </dependency>
      -------------------------------------------------------------------------------------

      [[FreeMarker-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------
      freemarker:templateName[?options]
      ---------------------------------

      Where *templateName* is the classpath-local URI of the template to
      invoke; or the complete URL of the remote template (eg:
      file://folder/myfile.ftl[file://folder/myfile.ftl]).

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

      [[FreeMarker-Options]]
      Options
      ^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | Configuration | To use an existing freemarker.template.Configuration instance as the configuration.
      |=======================================================================
      {% endraw %}
      // component options: END





      // endpoint options: START
      The Freemarker component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | configuration | producer |  | Configuration | Sets the Freemarker configuration to use
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
      | encoding | producer |  | String | Sets the encoding to be used for loading the template file.
      | templateUpdateDelay | producer |  | int | Number of seconds the loaded template resource will remain in the cache.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[FreeMarker-Headers]]
      Headers
      ^^^^^^^

      Headers set during the FreeMarker evaluation are returned to the message
      and added as headers. This provides a mechanism for the FreeMarker
      component to return values to the Message.

      An example: Set the header value of `fruit` in the FreeMarker template:

      [source,java]
      --------------------------------------
      ${request.setHeader('fruit', 'Apple')}
      --------------------------------------

      The header, `fruit`, is now accessible from the `message.out.headers`.

      [[FreeMarker-FreeMarkerContext]]
      FreeMarker Context
      ^^^^^^^^^^^^^^^^^^

      Camel will provide exchange information in the FreeMarker context (just
      a `Map`). The `Exchange` is transferred as:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |key |value

      |`exchange` |The `Exchange` itself.

      |`exchange.properties` |The `Exchange` properties.

      |`headers` |The headers of the In message.

      |`camelContext` |The Camel Context.

      |`request` |The In message.

      |`body` |The In message body.

      |`response` |The Out message (only for InOut message exchange pattern).
      |=======================================================================

      From Camel 2.14, you can setup your custom FreeMarker context in the
      message header with the key "*CamelFreemarkerDataModel*" just like this

      [source,java]
      --------------------------------------------------------------------
      Map<String, Object> variableMap = new HashMap<String, Object>();
      variableMap.put("headers", headersMap);
      variableMap.put("body", "Monday");
      variableMap.put("exchange", exchange);
      exchange.getIn().setHeader("CamelFreemarkerDataModel", variableMap);
      --------------------------------------------------------------------

      [[FreeMarker-Hotreloading]]
      Hot reloading
      ^^^^^^^^^^^^^

      The FreeMarker template resource is by default *not* hot reloadable for
      both file and classpath resources (expanded jar). If you set
      `contentCache=false`, then Camel will not cache the resource and hot
      reloading is thus enabled. This scenario can be used in development.

      [[FreeMarker-Dynamictemplates]]
      Dynamic templates
      ^^^^^^^^^^^^^^^^^

      Camel provides two headers by which you can define a different resource
      location for a template or the template content itself. If any of these
      headers is set then Camel uses this over the endpoint configured
      resource. This allows you to provide a dynamic template at runtime.

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Header |Type |Description |Support Version

      |FreemarkerConstants.FREEMARKER_RESOURCE |org.springframework.core.io.Resource |The template resource | <= 2.1

      |FreemarkerConstants.FREEMARKER_RESOURCE_URI |String |A URI for the template resource to use instead of the endpoint
      configured. | >= 2.1

      |FreemarkerConstants.FREEMARKER_TEMPLATE |String |The template to use instead of the endpoint configured. | >= 2.1
      |=======================================================================

      [[FreeMarker-Samples]]
      Samples
      ^^^^^^^

      For example you could use something like:

      [source,java]
      -------------------------------------------
      from("activemq:My.Queue").
        to("freemarker:com/acme/MyResponse.ftl");
      -------------------------------------------

      To use a FreeMarker template to formulate a response for a message for
      InOut message exchanges (where there is a `JMSReplyTo` header).

      If you want to use InOnly and consume the message and send it to another
      destination you could use:

      [source,java]
      -------------------------------------------
      from("activemq:My.Queue").
        to("freemarker:com/acme/MyResponse.ftl").
        to("activemq:Another.Queue");
      -------------------------------------------

      And to disable the content cache, e.g. for development usage where the
      `.ftl` template should be hot reloaded:

      [source,java]
      --------------------------------------------------------------
      from("activemq:My.Queue").
        to("freemarker:com/acme/MyResponse.ftl?contentCache=false").
        to("activemq:Another.Queue");
      --------------------------------------------------------------

      And a file-based resource:

      [source,java]
      ---------------------------------------------------------------------
      from("activemq:My.Queue").
        to("freemarker:file://myfolder/MyResponse.ftl?contentCache=false").
        to("activemq:Another.Queue");
      ---------------------------------------------------------------------

      In *Camel 2.1* it's possible to specify what template the component
      should use dynamically via a header, so for example:

      [source,java]
      ---------------------------------------------------------------------------------------------
      from("direct:in").
        setHeader(FreemarkerConstants.FREEMARKER_RESOURCE_URI).constant("path/to/my/template.ftl").
        to("freemarker:dummy");
      ---------------------------------------------------------------------------------------------

      [[FreeMarker-TheEmailSample]]
      The Email Sample
      ^^^^^^^^^^^^^^^^

      In this sample we want to use FreeMarker templating for an order
      confirmation email. The email template is laid out in FreeMarker as:

      [source,java]
      ----------------------------------------------
      Dear ${headers.lastName}, ${headers.firstName}

      Thanks for the order of ${headers.item}.

      Regards Camel Riders Bookstore
      ${body}
      ----------------------------------------------

      And the java code:

      [[FreeMarker-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ftp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ftp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ftp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ftp
          spec:
            containers:
            - image: fabric8/connector-ftp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ftp
        extendsScheme: file
        syntax: ftp:host:port/directoryName
        alternativeSyntax: ftp:username:password@host:port/directoryName
        title: FTP
        description: The ftp component is used for uploading or downloading files from FTP servers.
        label: file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.file.remote.FtpComponent
        groupId: org.apache.camel
        artifactId: camel-ftp
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the FTP server
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port of the FTP server
        directoryName:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The starting directory
        binary:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies the file transfer mode BINARY or ASCII. Default is ASCII (false).
        charset:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
        disconnect:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
        doneFileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Producer: If provided then Camel will write a 2nd done file when
            the original file has been written. The done file will be empty. This option
            configures what file name to use. Either you can specify a fixed name. Or you
            can use dynamic placeholders. The done file will always be written in the same
            folder as the original file. Consumer: If provided Camel will only consume files
            if a done file exists. This option configures what file name to use. Either
            you can specify a fixed name. Or you can use dynamic placeholders.The done file
            is always expected in the same folder as the original file. Only $file.name
            and $file.name.noext is supported as dynamic placeholders.'
        fileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Use Expression such as File Language to dynamically set the filename.
            For consumers it''s used as a filename filter. For producers it''s used to evaluate
            the filename to write. If an expression is set it take precedence over the CamelFileName
            header. (Note: The header itself can also be an Expression). The expression
            options support both String and Expression types. If the expression is a String
            type it is always evaluated using the File Language. If the expression is an
            Expression type the specified Expression type is used - this allows you for
            instance to use OGNL expressions. For the consumer you can use it to filter
            filenames so you can for instance consume today''s file using the File Language
            syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName
            header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName
            is a header that is used only once and makes it easier as this avoids to temporary
            store CamelFileName and have to restore it afterwards.'
        passiveMode:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets passive mode connections. Default is active mode connections.
        separator:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.file.remote.RemoteFileConfiguration.PathSeparator
          deprecated: false
          secret: false
          defaultValue: UNIX
          description: Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name
        fastExistsCheck:
          kind: parameter
          group: common (advanced)
          label: common,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set this option to be true camel-ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly if the option is false camel-ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server has a lot of files.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file will be deleted after it is processed successfully.
        moveFailed:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the move failure expression based on Simple language. For example
            to move files into a .error subdirectory use: .error. Note: When moving the
            files to the fail location Camel will handle the error and will not pick up
            the file again.'
        noop:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
        preMove:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
        recursive:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If a directory will look for files in all the sub-directories as well.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        streamDownload:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets the download method to use when not using a local working directory. If set to true the remote files are streamed to the route as they are read. When set to false the remote files are loaded into memory before being sent into the route.
        directoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
        download:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the FTP consumer should download the file. If this option is set to false then the message body will be null but the consumer will still trigger a Camel Exchange that has details about the file such as file name file size etc. It's just that the file will not be downloaded.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        ignoreFileNotFoundOrPermissionError:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to ignore when trying to download a file which does not exist or due to permission error. By default when a file does not exists or insufficient permission then an exception is thrown. Setting this option to true allows to ignore that instead.
        inProgressRepository:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
        localWorkDirectory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
        onCompletionExceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        processStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.file.GenericFileProcessStrategy<T>
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
        receiveBufferSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "32768"
          description: The receive (download) buffer size Used only by FTPClient
        startingDirectoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
        useList:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command and therefore you can set this option to false.
        fileExist:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.file.GenericFileExist
          enum:
          - Override
          - Append
          - Fail
          - Ignore
          - Move
          - TryRename
          deprecated: false
          secret: false
          defaultValue: Override
          description: What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
        flatten:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
        moveExisting:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Expression (such as File Language) used to compute file name to
            use when fileExist=Move is configured. To move files into a backup subdirectory
            just enter backup. This option only supports the following File Language tokens:
            file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext
            and file:parent. Notice the file:parent is not supported by the FTP component
            as the FTP component can only move any existing files to a relative directory
            based on current dir as base.'
        tempFileName:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
        tempPrefix:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
        disconnectOnBatchComplete:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
        eagerDeleteTargetFile:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
        keepLastModified:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Will keep the last modified timestamp from the source file (if any).
            Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This
            header can contain either a java.util.Date or long with the timestamp. If the
            timestamp exists and the option is enabled it will set this timestamp on the
            written file. Note: This option only applies to the file producer. You cannot
            use this option with any of the ftp producers.'
        sendNoop:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid which allows to silently re-connect to be able to upload the file. However if this causes problems you can turn this option off.
        activePortRange:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Set the client side port range in active mode. The syntax is: minPort-maxPort
            Both port numbers are inclusive eg 10000-19999 to include all 1xxxx ports.'
        autoCreate:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "131072"
          description: Write buffer sized in bytes.
        connectTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
        ftpClient:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.net.ftp.FTPClient
          deprecated: false
          secret: false
          description: To use a custom instance of FTPClient
        ftpClientConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.net.ftp.FTPClientConfig
          deprecated: false
          secret: false
          description: To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use.
        ftpClientConfigParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: ftpClientConfig.
          multiValue: true
          deprecated: false
          secret: false
          description: Used by FtpComponent to provide additional parameters for the FTPClientConfig
        ftpClientParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: ftpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: Used by FtpComponent to provide additional parameters for the FTPClient
        maximumReconnectAttempts:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior.
        reconnectDelay:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Delay in millis Camel will wait before performing a reconnect attempt.
        siteCommand:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: |-
            Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character (
            ).
        soTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the so timeout Used only by FTPClient
        stepwise:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether we should stepwise change directories while traversing file structures when downloading files or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        throwExceptionOnConnectFailed:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should an exception be thrown if connection failed (exhausted) By default exception is not thrown and a WARN is logged. You can use this to enable exception being thrown and handle the thrown exception from the org.apache.camel.spi.PollingConsumerPollStrategy rollback method.
        timeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Sets the data timeout for waiting for reply Used only by FTPClient
        antExclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
        antFilterCaseSensitive:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets case sensitive flag on ant fiter
        antInclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
        eagerMaxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
        exclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        filter:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.component.file.GenericFileFilter<T>
          deprecated: false
          secret: false
          description: Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
        filterDirectory:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
        filterFile:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
        idempotent:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
        idempotentKey:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To use a custom idempotent key. By default the absolute path of
            the file is used. You can use the File Language for example to use the file
            name and file size you can do: idempotentKey=$file:name-$file:size'
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
        include:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        maxDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum depth to traverse when recursively processing a directory.
        maxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'To define a maximum messages to gather per poll. By default no maximum
            is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the
            server that there are thousands of files. Set a value of 0 or negative to disabled
            it. Notice: If this option is in use then the File and FTP components will limit
            before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500
            then only the first 500 files will be picked up and then sorted. You can use
            the eagerMaxMessagesPerPoll option and set this to false to allow to scan all
            files first and then sort afterwards.'
        minDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
        move:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
        exclusiveReadLockStrategy:
          kind: parameter
          group: lock
          label: consumer,lock
          type: object
          javaType: org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<T>
          deprecated: false
          secret: false
          description: Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
        readLock:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: java.lang.String
          enum:
          - none
          - markerFile
          - fileLock
          - rename
          - changed
          - idempotent
          deprecated: false
          secret: false
          description: 'Used by consumer to only poll the files if it has exclusive read-lock
            on the file (i.e. the file is not in-progress or being written). Camel will
            wait until the file lock is granted. This option provides the build in strategies:
            none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock)
            and then holds a lock on it. This option is not available for the FTP component
            changed - Changed is using file length/modification timestamp to detect whether
            the file is currently being copied or not. Will at least use 1 sec to determine
            this so this option cannot consume files as fast as the others but can be more
            reliable as the JDK IO API cannot always determine whether a file is currently
            being used by another process. The option readLockCheckInterval can be used
            to set the check frequency. fileLock - is for using java.nio.channels.FileLock.
            This option is not avail for the FTP component. This approach should be avoided
            when accessing a remote file system via a mount/share unless that file system
            supports distributed file locks. rename - rename is for using a try to rename
            the file as a test if we can get exclusive read-lock. idempotent - (only for
            file component) idempotent is for using a idempotentRepository as the read-lock.
            This allows to use read locks that supports clustering if the idempotent repository
            implementation supports that. Notice: The various read locks is not all suited
            to work in clustered mode where concurrent consumers on different nodes is competing
            for the same files on a shared file system. The markerFile using a close to
            atomic operation to create the empty marker file but its not guaranteed to work
            in a cluster. The fileLock may work better but then the file system need to
            support distributed file locks and so on. Using the idempotent read lock can
            support clustering if the idempotent repository supports clustering such as
            Hazelcast Component or Infinispan.'
        readLockCheckInterval:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: 'Interval in millis for the read-lock if supported by the read lock.
            This interval is used for sleeping between attempts to acquire the read lock.
            For example when using the changed read lock you can set a higher interval period
            to cater for slow writes. The default of 1 sec. may be too fast if the producer
            is very slow writing the file. Notice: For FTP the default readLockCheckInterval
            is 5000. The readLockTimeout value must be higher than readLockCheckInterval
            but a rule of thumb is to have a timeout that is at least 2 or more times higher
            than the readLockCheckInterval. This is needed to ensure that amble time is
            allowed for the read lock process to try to grab the lock before the timeout
            was hit.'
        readLockDeleteOrphanLockFiles:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
        readLockLoggingLevel:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: 'Logging level used when a read lock could not be acquired. By default
            a WARN is logged. You can change this level for example to OFF to not have any
            logging. This option is only applicable for readLock of types: changed fileLock
            rename.'
        readLockMarkerFile:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
        readLockMinAge:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
        readLockMinLength:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1"
          description: This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
        readLockRemoveOnCommit:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
        readLockRemoveOnRollback:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
        readLockTimeout:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: 'Optional timeout in millis for the read-lock if supported by the
            read-lock. If the read-lock could not be granted and the timeout triggered then
            Camel will skip the file. At next poll Camel will try the file again and this
            time maybe the read-lock could be granted. Use a value of 0 or lower to indicate
            forever. Currently fileLock changed and rename support the timeout. Notice:
            For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout
            value must be higher than readLockCheckInterval but a rule of thumb is to have
            a timeout that is at least 2 or more times higher than the readLockCheckInterval.
            This is needed to ensure that amble time is allowed for the read lock process
            to try to grab the lock before the timeout was hit.'
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        shuffle:
          kind: parameter
          group: sort
          label: consumer,sort
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To shuffle the list of files (sort in random order)
        sortBy:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
        sorter:
          kind: parameter
          group: sort
          label: consumer,sort
          type: object
          javaType: java.util.Comparator<org.apache.camel.component.file.GenericFile<T>>
          deprecated: false
          secret: false
          description: Pluggable sorter as a java.util.Comparator class.
        account:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Account to use for login
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use for login
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use for login
    documentation.adoc: |+
      [[FTPComponent]]
      FTP/SFTP/FTPS Component
      ~~~~~~~~~~~~~~~~~~~~~~~

      This component provides access to remote file systems over the FTP and
      SFTP protocols.

      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-ftp</artifactId>
          <version>x.x.x</version>See the documentation of the Apache Commons
          <!-- use the same version as your Camel core version -->
      </dependency>
      -----------------------------------------------------------------------

      [Info]
      ====
      More options

      See link:file2.html[File] for more options as all the options from
      link:file2.html[File] is inherited.

      ====

      [Info]
      ====
      Absolute paths

      Absolute path is *not* supported.

      *Camel 2.16* will translate absolute path to relative by trimming all
      leading slashes from `directoryname`. There'll be WARN message printed
      in the logs.

      ====

      [Tip]
      ====
      Consuming from remote FTP server

      Make sure you read the section titled _Default when consuming files_
      further below for details related to consuming files.

      ====

      [[FTP2-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------------------------
      ftp://[username@]hostname[:port]/directoryname[?options]
      sftp://[username@]hostname[:port]/directoryname[?options]
      ftps://[username@]hostname[:port]/directoryname[?options]
      ---------------------------------------------------------

      Where *directoryname* represents the underlying directory. The directory
      name is a relative path. Absolute path's is *not* supported. The
      relative path can contain nested folders, such as /inbox/us.

      For Camel versions before *Camel 2.16*, the directoryName??*must* exist
      already as this component does not support the??`autoCreate` option
      (which the file component does). The reason is that its the FTP
      administrator (FTP server) task to properly setup user accounts, and
      home directories with the right file permissions etc.

      For *Camel 2.16*,??`autoCreate` option is supported. When consumer
      starts, before polling is scheduled, there's additional FTP operation
      performed to create the directory configured for endpoint. The default
      value for `autoCreate` is??`true`.

      If no *username* is provided, then `anonymous` login is attempted using
      no password. +
       If no *port* number is provided, Camel will provide default values
      according to the protocol (ftp = 21, sftp = 22, ftps = 2222).

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

      This component uses two different libraries for the actual FTP work. FTP
      and FTPS uses http://commons.apache.org/net/[Apache Commons Net] while
      SFTP uses http://www.jcraft.com/jsch/[JCraft JSCH].

      The FTPS component is only available in Camel 2.2 or newer. +
       FTPS (also known as FTP Secure) is an extension to FTP that adds
      support for the Transport Layer Security (TLS) and the Secure Sockets
      Layer (SSL) cryptographic protocols.

      [[FTP2-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      The options below are exclusive for the FTP component.

      [Info]
      ====
      More options

      See link:file2.html[File] for more options as all the options from
      link:file2.html[File] is inherited.

      ====

      // component options: START
      The FTP component has no options.
      // component options: END









      // endpoint options: START
      The FTP component supports 104 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Hostname of the FTP server
      | port | common |  | int | Port of the FTP server
      | directoryName | common |  | String | The starting directory
      | binary | common | false | boolean | Specifies the file transfer mode BINARY or ASCII. Default is ASCII (false).
      | charset | common |  | String | This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
      | disconnect | common | false | boolean | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
      | doneFileName | common |  | String | Producer: If provided then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided Camel will only consume files if a done file exists. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders.The done file is always expected in the same folder as the original file. Only $file.name and $file.name.noext is supported as dynamic placeholders.
      | fileName | common |  | String | Use Expression such as File Language to dynamically set the filename. For consumers it's used as a filename filter. For producers it's used to evaluate the filename to write. If an expression is set it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type it is always evaluated using the File Language. If the expression is an Expression type the specified Expression type is used - this allows you for instance to use OGNL expressions. For the consumer you can use it to filter filenames so you can for instance consume today's file using the File Language syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName is a header that is used only once and makes it easier as this avoids to temporary store CamelFileName and have to restore it afterwards.
      | passiveMode | common | false | boolean | Sets passive mode connections. Default is active mode connections.
      | separator | common | UNIX | PathSeparator | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name
      | fastExistsCheck | common (advanced) | false | boolean | If set this option to be true camel-ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly if the option is false camel-ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server has a lot of files.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delete | consumer | false | boolean | If true the file will be deleted after it is processed successfully.
      | moveFailed | consumer |  | String | Sets the move failure expression based on Simple language. For example to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again.
      | noop | consumer | false | boolean | If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
      | preMove | consumer |  | String | Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
      | recursive | consumer | false | boolean | If a directory will look for files in all the sub-directories as well.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | streamDownload | consumer | false | boolean | Sets the download method to use when not using a local working directory. If set to true the remote files are streamed to the route as they are read. When set to false the remote files are loaded into memory before being sent into the route.
      | directoryMustExist | consumer (advanced) | false | boolean | Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
      | download | consumer (advanced) | false | boolean | Whether the FTP consumer should download the file. If this option is set to false then the message body will be null but the consumer will still trigger a Camel Exchange that has details about the file such as file name file size etc. It's just that the file will not be downloaded.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | ignoreFileNotFoundOrPermissionError | consumer (advanced) | false | boolean | Whether to ignore when trying to download a file which does not exist or due to permission error. By default when a file does not exists or insufficient permission then an exception is thrown. Setting this option to true allows to ignore that instead.
      | inProgressRepository | consumer (advanced) |  | String> | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
      | localWorkDirectory | consumer (advanced) |  | String | When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
      | onCompletionExceptionHandler | consumer (advanced) |  | ExceptionHandler | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | processStrategy | consumer (advanced) |  | GenericFileProcessStrategy<T> | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
      | receiveBufferSize | consumer (advanced) | 32768 | int | The receive (download) buffer size Used only by FTPClient
      | startingDirectoryMustExist | consumer (advanced) | false | boolean | Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
      | useList | consumer (advanced) | true | boolean | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command and therefore you can set this option to false.
      | fileExist | producer | Override | GenericFileExist | What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
      | flatten | producer | false | boolean | Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
      | moveExisting | producer |  | String | Expression (such as File Language) used to compute file name to use when fileExist=Move is configured. To move files into a backup subdirectory just enter backup. This option only supports the following File Language tokens: file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext and file:parent. Notice the file:parent is not supported by the FTP component as the FTP component can only move any existing files to a relative directory based on current dir as base.
      | tempFileName | producer |  | String | The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
      | tempPrefix | producer |  | String | This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
      | allowNullBody | producer (advanced) | false | boolean | Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
      | disconnectOnBatchComplete | producer (advanced) | false | boolean | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
      | eagerDeleteTargetFile | producer (advanced) | true | boolean | Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
      | keepLastModified | producer (advanced) | false | boolean | Will keep the last modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is enabled it will set this timestamp on the written file. Note: This option only applies to the file producer. You cannot use this option with any of the ftp producers.
      | sendNoop | producer (advanced) | true | boolean | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid which allows to silently re-connect to be able to upload the file. However if this causes problems you can turn this option off.
      | activePortRange | advanced |  | String | Set the client side port range in active mode. The syntax is: minPort-maxPort Both port numbers are inclusive eg 10000-19999 to include all 1xxxx ports.
      | autoCreate | advanced | true | boolean | Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
      | bufferSize | advanced | 131072 | int | Write buffer sized in bytes.
      | connectTimeout | advanced | 10000 | int | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
      | ftpClient | advanced |  | FTPClient | To use a custom instance of FTPClient
      | ftpClientConfig | advanced |  | FTPClientConfig | To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use.
      | ftpClientConfigParameters | advanced |  | Map | Used by FtpComponent to provide additional parameters for the FTPClientConfig
      | ftpClientParameters | advanced |  | Map | Used by FtpComponent to provide additional parameters for the FTPClient
      | maximumReconnectAttempts | advanced |  | int | Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior.
      | reconnectDelay | advanced |  | long | Delay in millis Camel will wait before performing a reconnect attempt.
      | siteCommand | advanced |  | String | Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character (\n).
      | soTimeout | advanced | 300000 | int | Sets the so timeout Used only by FTPClient
      | stepwise | advanced | true | boolean | Sets whether we should stepwise change directories while traversing file structures when downloading files or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | throwExceptionOnConnectFailed | advanced | false | boolean | Should an exception be thrown if connection failed (exhausted) By default exception is not thrown and a WARN is logged. You can use this to enable exception being thrown and handle the thrown exception from the org.apache.camel.spi.PollingConsumerPollStrategy rollback method.
      | timeout | advanced | 30000 | int | Sets the data timeout for waiting for reply Used only by FTPClient
      | antExclude | filter |  | String | Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
      | antFilterCaseSensitive | filter | true | boolean | Sets case sensitive flag on ant fiter
      | antInclude | filter |  | String | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
      | eagerMaxMessagesPerPoll | filter | true | boolean | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
      | exclude | filter |  | String | Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
      | filter | filter |  | GenericFileFilter<T> | Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
      | filterDirectory | filter |  | String | Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
      | filterFile | filter |  | String | Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
      | idempotent | filter | false | Boolean | Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
      | idempotentKey | filter |  | String | To use a custom idempotent key. By default the absolute path of the file is used. You can use the File Language for example to use the file name and file size you can do: idempotentKey=$file:name-$file:size
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
      | include | filter |  | String | Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
      | maxDepth | filter | 2147483647 | int | The maximum depth to traverse when recursively processing a directory.
      | maxMessagesPerPoll | filter |  | int | To define a maximum messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disabled it. Notice: If this option is in use then the File and FTP components will limit before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500 then only the first 500 files will be picked up and then sorted. You can use the eagerMaxMessagesPerPoll option and set this to false to allow to scan all files first and then sort afterwards.
      | minDepth | filter |  | int | The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
      | move | filter |  | String | Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
      | exclusiveReadLockStrategy | lock |  | GenericFileExclusiveReadLockStrategy<T> | Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
      | readLock | lock |  | String | Used by consumer to only poll the files if it has exclusive read-lock on the file (i.e. the file is not in-progress or being written). Camel will wait until the file lock is granted. This option provides the build in strategies: none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock) and then holds a lock on it. This option is not available for the FTP component changed - Changed is using file length/modification timestamp to detect whether the file is currently being copied or not. Will at least use 1 sec to determine this so this option cannot consume files as fast as the others but can be more reliable as the JDK IO API cannot always determine whether a file is currently being used by another process. The option readLockCheckInterval can be used to set the check frequency. fileLock - is for using java.nio.channels.FileLock. This option is not avail for the FTP component. This approach should be avoided when accessing a remote file system via a mount/share unless that file system supports distributed file locks. rename - rename is for using a try to rename the file as a test if we can get exclusive read-lock. idempotent - (only for file component) idempotent is for using a idempotentRepository as the read-lock. This allows to use read locks that supports clustering if the idempotent repository implementation supports that. Notice: The various read locks is not all suited to work in clustered mode where concurrent consumers on different nodes is competing for the same files on a shared file system. The markerFile using a close to atomic operation to create the empty marker file but its not guaranteed to work in a cluster. The fileLock may work better but then the file system need to support distributed file locks and so on. Using the idempotent read lock can support clustering if the idempotent repository supports clustering such as Hazelcast Component or Infinispan.
      | readLockCheckInterval | lock | 1000 | long | Interval in millis for the read-lock if supported by the read lock. This interval is used for sleeping between attempts to acquire the read lock. For example when using the changed read lock you can set a higher interval period to cater for slow writes. The default of 1 sec. may be too fast if the producer is very slow writing the file. Notice: For FTP the default readLockCheckInterval is 5000. The readLockTimeout value must be higher than readLockCheckInterval but a rule of thumb is to have a timeout that is at least 2 or more times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the read lock process to try to grab the lock before the timeout was hit.
      | readLockDeleteOrphanLockFiles | lock | true | boolean | Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
      | readLockLoggingLevel | lock | WARN | LoggingLevel | Logging level used when a read lock could not be acquired. By default a WARN is logged. You can change this level for example to OFF to not have any logging. This option is only applicable for readLock of types: changed fileLock rename.
      | readLockMarkerFile | lock | true | boolean | Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
      | readLockMinAge | lock | 0 | long | This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
      | readLockMinLength | lock | 1 | long | This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
      | readLockRemoveOnCommit | lock | false | boolean | This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
      | readLockRemoveOnRollback | lock | true | boolean | This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
      | readLockTimeout | lock | 10000 | long | Optional timeout in millis for the read-lock if supported by the read-lock. If the read-lock could not be granted and the timeout triggered then Camel will skip the file. At next poll Camel will try the file again and this time maybe the read-lock could be granted. Use a value of 0 or lower to indicate forever. Currently fileLock changed and rename support the timeout. Notice: For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout value must be higher than readLockCheckInterval but a rule of thumb is to have a timeout that is at least 2 or more times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the read lock process to try to grab the lock before the timeout was hit.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | shuffle | sort | false | boolean | To shuffle the list of files (sort in random order)
      | sortBy | sort |  | String | Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
      | sorter | sort |  | GenericFile<T>> | Pluggable sorter as a java.util.Comparator class.
      | account | security |  | String | Account to use for login
      | password | security |  | String | Password to use for login
      | username | security |  | String | Username to use for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END










      [Info]
      ====
      FTPS component default trust store

      When using the `ftpClient.` properties related to SSL with the FTPS
      component, the trust store accept all certificates. If you only want
      trust selective certificates, you have to configure the trust store with
      the `ftpClient.trustStore.xxx` options or by configuring a custom
      `ftpClient`.

      When using `sslContextParameters`, the trust store is managed by the
      configuration of the provided SSLContextParameters instance.

      ====

      You can configure additional options on the `ftpClient` and
      `ftpClientConfig` from the URI directly by using the `ftpClient.` or
      `ftpClientConfig.` prefix.

      For example to set the `setDataTimeout` on the `FTPClient` to 30 seconds
      you can do:

      [source,java]
      --------------------------------------------------------------------------------------
      from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
      --------------------------------------------------------------------------------------

      You can mix and match and have use both prefixes, for example to
      configure date format or timezones.

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------
      from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000&ftpClientConfig.serverLanguageCode=fr").to("bean:foo");
      ----------------------------------------------------------------------------------------------------------------------------

      You can have as many of these options as you like.

      See the documentation of the Apache Commons FTP FTPClientConfig for
      possible options and more details.??And as well for Apache Commons FTP
      FTPClient.

      If you do not like having many and long configuration in the url you can
      refer to the `ftpClient` or `ftpClientConfig` to use by letting Camel
      lookup in the link:registry.html[Registry] for it.

      For example:

      [source,java]
      --------------------------------------------------------------------------
         <bean id="myConfig" class="org.apache.commons.net.ftp.FTPClientConfig">
             <property name="lenientFutureDates" value="true"/>
             <property name="serverLanguageCode" value="fr"/>
         </bean>
      --------------------------------------------------------------------------

      And then let Camel lookup this bean when you use the # notation in the
      url.

      [source,java]
      ------------------------------------------------------------------------------------
      from("ftp://foo@myserver?password=secret&ftpClientConfig=#myConfig").to("bean:foo");
      ------------------------------------------------------------------------------------

      [[FTP2-MoreURIoptions]]
      More URI options
      ^^^^^^^^^^^^^^^^

      [Info]
      ====


      See link:file2.html[File2] as all the options there also applies for
      this component.

      ====

      [[FTP2-Examples]]
      Examples
      ^^^^^^^^

      `ftp://someone@someftpserver.com/public/upload/images/holiday2008?password=secret&binary=true` +

      `ftp://someoneelse@someotherftpserver.co.uk:12049/reports/2008/password=secret&binary=false` +
       `ftp://publicftpserver.com/download`

      [Warning]
      ====
      FTP Consumer does not support concurrency

      The FTP consumer (with the same endpoint) does not support concurrency
      (the backing FTP client is not thread safe). +
       You can use multiple FTP consumers to poll from different endpoints. It
      is only a single endpoint that does not support concurrent consumers.

      The FTP producer does *not* have this issue, it supports concurrency.

      ====

      [Tip]
      ====
      More information

      This component is an extension of the link:file2.html[File] component.
      So there are more samples and details on the link:file2.html[File]
      component page.

      ====

      [[FTP2-Defaultwhenconsumingfiles]]
      Default when consuming files
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The link:ftp2.html[FTP] consumer will by default leave the consumed
      files untouched on the remote FTP server. You have to configure it
      explicitly if you want it to delete the files or move them to another
      location. For example you can use `delete=true` to delete the files, or
      use `move=.done` to move the files into a hidden done sub directory.

      The regular link:file2.html[File] consumer is different as it will by
      default move files to a `.camel` sub directory. The reason Camel does
      *not* do this by default for the FTP consumer is that it may lack
      permissions by default to be able to move or delete files.

      [[FTP2-limitations]]
      limitations
      +++++++++++

      The option *readLock* can be used to force Camel *not* to consume files
      that is currently in the progress of being written. However, this option
      is turned off by default, as it requires that the user has write access.
      See the options table at link:file2.html[File2] for more details about
      read locks. +
       There are other solutions to avoid consuming files that are currently
      being written over FTP; for instance, you can write to a temporary
      destination and move the file after it has been written.

      When moving files using `move` or `preMove` option the files are
      restricted to the FTP_ROOT folder. That prevents you from moving files
      outside the FTP area. If you want to move files to another area you can
      use soft links and move files into a soft linked folder.

      [[FTP2-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The following message headers can be used to affect the behavior of the
      component

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Header |Description

      |`CamelFileName` |Specifies the output file name (relative to the endpoint directory) to
      be used for the output message when sending to the endpoint. If this is
      not present and no expression either, then a generated message ID is
      used as the filename instead.

      |`CamelFileNameProduced` |The actual filepath (path + name) for the output file that was written.
      This header is set by Camel and its purpose is providing end-users the
      name of the file that was written.

      |`CamelFileIndex` |Current index out of total number of files being consumed in this batch.

      |`CamelFileSize` |Total number of files being consumed in this batch.

      |`CamelFileHost` |The remote hostname.

      |`CamelFileLocalWorkPath` |Path to the local work file, if local work directory is used.
      |=======================================================================

      In addition the FTP/FTPS consumer and producer will enrich the Camel
      `Message` with the following headers

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Header |Description

      |`CamelFtpReplyCode` |*Camel 2.11.1:* The FTP client reply code (the type is a integer)

      |`CamelFtpReplyString` | *Camel 2.11.1:* The FTP client reply string
      |=======================================================================

      [[FTP2-Abouttimeouts]]
      About timeouts
      ^^^^^^^^^^^^^^

      The two set of libraries (see top) has different API for setting
      timeout. You can use the `connectTimeout` option for both of them to set
      a timeout in millis to establish a network connection. An individual
      `soTimeout` can also be set on the FTP/FTPS, which corresponds to using
      `ftpClient.soTimeout`. Notice SFTP will automatically use
      `connectTimeout` as its `soTimeout`. The `timeout` option only applies
      for FTP/FTSP as the data timeout, which corresponds to the
      `ftpClient.dataTimeout` value. All timeout values are in millis.

      [[FTP2-UsingLocalWorkDirectory]]
      Using Local Work Directory
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      Camel supports consuming from remote FTP servers and downloading the
      files directly into a local work directory. This avoids reading the
      entire remote file content into memory as it is streamed directly into
      the local file using `FileOutputStream`.

      Camel will store to a local file with the same name as the remote file,
      though with `.inprogress` as extension while the file is being
      downloaded. Afterwards, the file is renamed to remove the `.inprogress`
      suffix. And finally, when the link:exchange.html[Exchange] is complete
      the local file is deleted.

      So if you want to download files from a remote FTP server and store it
      as files then you need to route to a file endpoint such as:

      [source,java]
      ------------------------------------------------------------------------------------------------
      from("ftp://someone@someserver.com?password=secret&localWorkDirectory=/tmp").to("file://inbox");
      ------------------------------------------------------------------------------------------------

      [Tip]
      ====
       *Optimization by renaming work file*

      The route above is ultra efficient as it avoids reading the entire file
      content into memory. It will download the remote file directly to a
      local file stream. The `java.io.File` handle is then used as the
      link:exchange.html[Exchange] body. The file producer leverages this fact
      and can work directly on the work file `java.io.File` handle and perform
      a `java.io.File.rename` to the target filename. As Camel knows it's a
      local work file, it can optimize and use a rename instead of a file
      copy, as the work file is meant to be deleted anyway.

      ====

      [[FTP2-Stepwisechangingdirectories]]
      Stepwise changing directories
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Camel link:ftp2.html[FTP] can operate in two modes in terms of
      traversing directories when consuming files (eg downloading) or
      producing files (eg uploading)

      * stepwise
      * not stepwise

      You may want to pick either one depending on your situation and security
      issues. Some Camel end users can only download files if they use
      stepwise, while others can only download if they do not. At least you
      have the choice to pick (from Camel 2.6 onwards).

      In Camel 2.0 - 2.5 there is only one mode and it is:

      * before 2.5 not stepwise
      * 2.5 stepwise

      From Camel 2.6 onwards there is now an option `stepwise` you can use to
      control the behavior.

      Note that stepwise changing of directory will in most cases only work
      when the user is confined to it's home directory and when the home
      directory is reported as `"/"`.

      The difference between the two of them is best illustrated with an
      example. Suppose we have the following directory structure on the remote
      FTP server we need to traverse and download files:

      [source,java]
      --------------
      /
      /one
      /one/two
      /one/two/sub-a
      /one/two/sub-b
      --------------

      And that we have a file in each of sub-a (a.txt) and sub-b (b.txt)
      folder.

      [[FTP2-Usingstepwise]]
      Using stepwise=true (default mode)
      ++++++++++++++++++++++++++++++++++

      [source,java]
      ----------------------------------------------------------
      TYPE A
      200 Type set to A
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      SYST
      215 UNIX emulated by FileZilla
      PORT 127,0,0,1,17,94
      200 Port command successful
      LIST
      150 Opening data channel for directory list.
      226 Transfer OK
      CWD sub-a
      250 CWD successful. "/one/two/sub-a" is current directory.
      PORT 127,0,0,1,17,95
      200 Port command successful
      LIST
      150 Opening data channel for directory list.
      226 Transfer OK
      CDUP
      200 CDUP successful. "/one/two" is current directory.
      CWD sub-b
      250 CWD successful. "/one/two/sub-b" is current directory.
      PORT 127,0,0,1,17,96
      200 Port command successful
      LIST
      150 Opening data channel for directory list.
      226 Transfer OK
      CDUP
      200 CDUP successful. "/one/two" is current directory.
      CWD /
      250 CWD successful. "/" is current directory.
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      PORT 127,0,0,1,17,97
      200 Port command successful
      RETR foo.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      CWD /
      250 CWD successful. "/" is current directory.
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      CWD sub-a
      250 CWD successful. "/one/two/sub-a" is current directory.
      PORT 127,0,0,1,17,98
      200 Port command successful
      RETR a.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      CWD /
      250 CWD successful. "/" is current directory.
      PWD
      257 "/" is current directory.
      CWD one
      250 CWD successful. "/one" is current directory.
      CWD two
      250 CWD successful. "/one/two" is current directory.
      CWD sub-b
      250 CWD successful. "/one/two/sub-b" is current directory.
      PORT 127,0,0,1,17,99
      200 Port command successful
      RETR b.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      CWD /
      250 CWD successful. "/" is current directory.
      QUIT
      221 Goodbye
      disconnected.
      ----------------------------------------------------------

      As you can see when stepwise is enabled, it will traverse the directory
      structure using CD xxx.

      [[FTP2-Notusingstepwise]]
      Using stepwise=false
      ++++++++++++++++++++

      [source,java]
      -------------------------------------------
      230 Logged on
      TYPE A
      200 Type set to A
      SYST
      215 UNIX emulated by FileZilla
      PORT 127,0,0,1,4,122
      200 Port command successful
      LIST one/two
      150 Opening data channel for directory list
      226 Transfer OK
      PORT 127,0,0,1,4,123
      200 Port command successful
      LIST one/two/sub-a
      150 Opening data channel for directory list
      226 Transfer OK
      PORT 127,0,0,1,4,124
      200 Port command successful
      LIST one/two/sub-b
      150 Opening data channel for directory list
      226 Transfer OK
      PORT 127,0,0,1,4,125
      200 Port command successful
      RETR one/two/foo.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      PORT 127,0,0,1,4,126
      200 Port command successful
      RETR one/two/sub-a/a.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      PORT 127,0,0,1,4,127
      200 Port command successful
      RETR one/two/sub-b/b.txt
      150 Opening data channel for file transfer.
      226 Transfer OK
      QUIT
      221 Goodbye
      disconnected.
      -------------------------------------------

      As you can see when not using stepwise, there are no CD operation
      invoked at all.

      [[FTP2-Samples]]
      Samples
      ^^^^^^^

      In the sample below we set up Camel to download all the reports from the
      FTP server once every hour (60 min) as BINARY content and store it as
      files on the local file system.

      And the route using Spring DSL:

      [source,xml]
      ------------------------------------------------------------------------------------------------------
        <route>
           <from uri="ftp://scott@localhost/public/reports?password=tiger&amp;binary=true&amp;delay=60000"/>
           <to uri="file://target/test-reports"/>
        </route>
      ------------------------------------------------------------------------------------------------------

      [[FTP2-ConsumingaremoteFTPSserverimplicitSSLandclientauthentication]]
      Consuming a remote FTPS server (implicit SSL) and client authentication
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------------------------------------------------------
      from("ftps://admin@localhost:2222/public/camel?password=admin&securityProtocol=SSL&isImplicit=true
            &ftpClient.keyStore.file=./src/test/resources/server.jks
            &ftpClient.keyStore.password=password&ftpClient.keyStore.keyPassword=password")
        .to("bean:foo");
      --------------------------------------------------------------------------------------------------

      [[FTP2-ConsumingaremoteFTPSserverexplicitTLSandacustomtruststoreconfiguration]]
      Consuming a remote FTPS server (explicit TLS) and a custom trust store configuration
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------
      from("ftps://admin@localhost:2222/public/camel?password=admin&ftpClient.trustStore.file=./src/test/resources/server.jks&ftpClient.trustStore.password=password")
        .to("bean:foo");
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[FTP2-Filterusingorg.apache.camel.component.file.GenericFileFilter]]
      Filter using `org.apache.camel.component.file.GenericFileFilter`
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Camel supports pluggable filtering strategies. This strategy it to use
      the build in `org.apache.camel.component.file.GenericFileFilter` in
      Java. You can then configure the endpoint with such a filter to skip
      certain filters before being processed.

      In the sample we have built our own filter that only accepts files
      starting with report in the filename.

      And then we can configure our route using the *filter* attribute to
      reference our filter (using `#` notation) that we have defined in the
      spring XML file:

      [source,xml]
      ---------------------------------------------------------------------------------------
         <!-- define our sorter as a plain spring bean -->
         <bean id="myFilter" class="com.mycompany.MyFileFilter"/>

        <route>
          <from uri="ftp://someuser@someftpserver.com?password=secret&amp;filter=#myFilter"/>
          <to uri="bean:processInbox"/>
        </route>
      ---------------------------------------------------------------------------------------

      [[FTP2-FilteringusingANTpathmatcher]]
      Filtering using ANT path matcher
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The ANT path matcher is a filter that is shipped out-of-the-box in the
      *camel-spring* jar. So you need to depend on *camel-spring* if you are
      using Maven. +
       The reason is that we leverage Spring's
      http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/util/AntPathMatcher.html[AntPathMatcher]
      to do the actual matching.

      The file paths are matched with the following rules:

      * `?` matches one character
      * `*` matches zero or more characters
      * `**` matches zero or more directories in a path

      The sample below demonstrates how to use it:

      [[FTP2-UsingaproxywithSFTP]]
      Using a proxy with SFTP
      ^^^^^^^^^^^^^^^^^^^^^^^

      To use an HTTP proxy to connect to your remote host, you can configure
      your route in the following way:

      [source,xml]
      -------------------------------------------------------------------------------------
      <!-- define our sorter as a plain spring bean -->
      <bean id="proxy" class="com.jcraft.jsch.ProxyHTTP">
        <constructor-arg value="localhost"/>
        <constructor-arg value="7777"/>
      </bean>

      <route>
        <from uri="sftp://localhost:9999/root?username=admin&password=admin&proxy=#proxy"/>
        <to uri="bean:processFile"/>
      </route>
      -------------------------------------------------------------------------------------

      You can also assign a user name and password to the proxy, if necessary.
      Please consult the documentation for `com.jcraft.jsch.Proxy` to discover
      all options.

      [[FTP2-SettingpreferredSFTPauthenticationmethod]]
      Setting preferred SFTP authentication method
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If you want to explicitly specify the list of authentication methods
      that should be used by `sftp` component, use `preferredAuthentications`
      option. If for example you would like Camel to attempt to authenticate
      with private/public SSH key and fallback to user/password authentication
      in the case when no public key is available, use the following route
      configuration:

      [source,java]
      -------------------------------------------------------------------------------------------------------------
      from("sftp://localhost:9999/root?username=admin&password=admin&preferredAuthentications=publickey,password").
        to("bean:processFile");
      -------------------------------------------------------------------------------------------------------------

      [[FTP2-Consumingasinglefileusingafixedname]]
      Consuming a single file using a fixed name
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When you want to download a single file and knows the file name, you can
      use `fileName=myFileName.txt` to tell Camel the name of the file to
      download. By default the consumer will still do a FTP LIST command to do
      a directory listing and then filter these files based on the `fileName`
      option. Though in this use-case it may be desirable to turn off the
      directory listing by setting `useList=false`. For example the user
      account used to login to the FTP server may not have permission to do a
      FTP LIST command. So you can turn off this with `useList=false`, and
      then provide the fixed name of the file to download with
      `fileName=myFileName.txt`, then the FTP consumer can still download the
      file. If the file for some reason does not exist, then Camel will by
      default throw an exception, you can turn this off and ignore this by
      setting `ignoreFileNotFoundOrPermissionError=true`.

      For example to have a Camel route that pickup a single file, and delete
      it after use you can do

      [source,java]
      -------------------------------------------------------------------------------------------------------------------------------------------------------------
      from("ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true")
        .to("activemq:queue:report");
      -------------------------------------------------------------------------------------------------------------------------------------------------------------

      Notice that we have use all the options we talked above above.

      You can also use this with `ConsumerTemplate`. For example to download a
      single file (if it exists) and grab the file content as a String type:

      [source,java]
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      String data = template.retrieveBodyNoWait("ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true", String.class);
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[FTP2-Debuglogging]]
      Debug logging
      ^^^^^^^^^^^^^

      This component has log level *TRACE* that can be helpful if you have
      problems.

      [[FTP2-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:file2.html[File2]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ftps
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ftps
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ftps
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ftps
          spec:
            containers:
            - image: fabric8/connector-ftps:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ftps
        extendsScheme: file
        syntax: ftps:host:port/directoryName
        alternativeSyntax: ftps:username:password@host:port/directoryName
        title: FTPS
        description: The ftps (FTP secure SSL/TLS) component is used for uploading or downloading files from FTP servers.
        label: file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.file.remote.FtpsComponent
        groupId: org.apache.camel
        artifactId: camel-ftp
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the FTP server
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port of the FTP server
        directoryName:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The starting directory
        binary:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies the file transfer mode BINARY or ASCII. Default is ASCII (false).
        charset:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
        disconnect:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
        doneFileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Producer: If provided then Camel will write a 2nd done file when
            the original file has been written. The done file will be empty. This option
            configures what file name to use. Either you can specify a fixed name. Or you
            can use dynamic placeholders. The done file will always be written in the same
            folder as the original file. Consumer: If provided Camel will only consume files
            if a done file exists. This option configures what file name to use. Either
            you can specify a fixed name. Or you can use dynamic placeholders.The done file
            is always expected in the same folder as the original file. Only $file.name
            and $file.name.noext is supported as dynamic placeholders.'
        fileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Use Expression such as File Language to dynamically set the filename.
            For consumers it''s used as a filename filter. For producers it''s used to evaluate
            the filename to write. If an expression is set it take precedence over the CamelFileName
            header. (Note: The header itself can also be an Expression). The expression
            options support both String and Expression types. If the expression is a String
            type it is always evaluated using the File Language. If the expression is an
            Expression type the specified Expression type is used - this allows you for
            instance to use OGNL expressions. For the consumer you can use it to filter
            filenames so you can for instance consume today''s file using the File Language
            syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName
            header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName
            is a header that is used only once and makes it easier as this avoids to temporary
            store CamelFileName and have to restore it afterwards.'
        passiveMode:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets passive mode connections. Default is active mode connections.
        separator:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.file.remote.RemoteFileConfiguration.PathSeparator
          deprecated: false
          secret: false
          defaultValue: UNIX
          description: Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name
        fastExistsCheck:
          kind: parameter
          group: common (advanced)
          label: common,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set this option to be true camel-ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly if the option is false camel-ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server has a lot of files.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file will be deleted after it is processed successfully.
        moveFailed:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the move failure expression based on Simple language. For example
            to move files into a .error subdirectory use: .error. Note: When moving the
            files to the fail location Camel will handle the error and will not pick up
            the file again.'
        noop:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
        preMove:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
        recursive:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If a directory will look for files in all the sub-directories as well.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        streamDownload:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets the download method to use when not using a local working directory. If set to true the remote files are streamed to the route as they are read. When set to false the remote files are loaded into memory before being sent into the route.
        directoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
        download:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the FTP consumer should download the file. If this option is set to false then the message body will be null but the consumer will still trigger a Camel Exchange that has details about the file such as file name file size etc. It's just that the file will not be downloaded.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        ignoreFileNotFoundOrPermissionError:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to ignore when trying to download a file which does not exist or due to permission error. By default when a file does not exists or insufficient permission then an exception is thrown. Setting this option to true allows to ignore that instead.
        inProgressRepository:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
        localWorkDirectory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
        onCompletionExceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        processStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.file.GenericFileProcessStrategy<T>
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
        receiveBufferSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "32768"
          description: The receive (download) buffer size Used only by FTPClient
        startingDirectoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
        useList:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command and therefore you can set this option to false.
        fileExist:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.file.GenericFileExist
          enum:
          - Override
          - Append
          - Fail
          - Ignore
          - Move
          - TryRename
          deprecated: false
          secret: false
          defaultValue: Override
          description: What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
        flatten:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
        moveExisting:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Expression (such as File Language) used to compute file name to
            use when fileExist=Move is configured. To move files into a backup subdirectory
            just enter backup. This option only supports the following File Language tokens:
            file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext
            and file:parent. Notice the file:parent is not supported by the FTP component
            as the FTP component can only move any existing files to a relative directory
            based on current dir as base.'
        tempFileName:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
        tempPrefix:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
        disconnectOnBatchComplete:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
        eagerDeleteTargetFile:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
        keepLastModified:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Will keep the last modified timestamp from the source file (if any).
            Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This
            header can contain either a java.util.Date or long with the timestamp. If the
            timestamp exists and the option is enabled it will set this timestamp on the
            written file. Note: This option only applies to the file producer. You cannot
            use this option with any of the ftp producers.'
        sendNoop:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid which allows to silently re-connect to be able to upload the file. However if this causes problems you can turn this option off.
        activePortRange:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Set the client side port range in active mode. The syntax is: minPort-maxPort
            Both port numbers are inclusive eg 10000-19999 to include all 1xxxx ports.'
        autoCreate:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "131072"
          description: Write buffer sized in bytes.
        connectTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
        ftpClient:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.net.ftp.FTPClient
          deprecated: false
          secret: false
          description: To use a custom instance of FTPClient
        ftpClientConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.net.ftp.FTPClientConfig
          deprecated: false
          secret: false
          description: To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use.
        ftpClientConfigParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: ftpClientConfig.
          multiValue: true
          deprecated: false
          secret: false
          description: Used by FtpComponent to provide additional parameters for the FTPClientConfig
        ftpClientParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: ftpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: Used by FtpComponent to provide additional parameters for the FTPClient
        maximumReconnectAttempts:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior.
        reconnectDelay:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Delay in millis Camel will wait before performing a reconnect attempt.
        siteCommand:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: |-
            Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character (
            ).
        soTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the so timeout Used only by FTPClient
        stepwise:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether we should stepwise change directories while traversing file structures when downloading files or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        throwExceptionOnConnectFailed:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should an exception be thrown if connection failed (exhausted) By default exception is not thrown and a WARN is logged. You can use this to enable exception being thrown and handle the thrown exception from the org.apache.camel.spi.PollingConsumerPollStrategy rollback method.
        timeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Sets the data timeout for waiting for reply Used only by FTPClient
        antExclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
        antFilterCaseSensitive:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets case sensitive flag on ant fiter
        antInclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
        eagerMaxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
        exclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        filter:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.component.file.GenericFileFilter<T>
          deprecated: false
          secret: false
          description: Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
        filterDirectory:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
        filterFile:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
        idempotent:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
        idempotentKey:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To use a custom idempotent key. By default the absolute path of
            the file is used. You can use the File Language for example to use the file
            name and file size you can do: idempotentKey=$file:name-$file:size'
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
        include:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        maxDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum depth to traverse when recursively processing a directory.
        maxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'To define a maximum messages to gather per poll. By default no maximum
            is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the
            server that there are thousands of files. Set a value of 0 or negative to disabled
            it. Notice: If this option is in use then the File and FTP components will limit
            before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500
            then only the first 500 files will be picked up and then sorted. You can use
            the eagerMaxMessagesPerPoll option and set this to false to allow to scan all
            files first and then sort afterwards.'
        minDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
        move:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
        exclusiveReadLockStrategy:
          kind: parameter
          group: lock
          label: consumer,lock
          type: object
          javaType: org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<T>
          deprecated: false
          secret: false
          description: Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
        readLock:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: java.lang.String
          enum:
          - none
          - markerFile
          - fileLock
          - rename
          - changed
          - idempotent
          deprecated: false
          secret: false
          description: 'Used by consumer to only poll the files if it has exclusive read-lock
            on the file (i.e. the file is not in-progress or being written). Camel will
            wait until the file lock is granted. This option provides the build in strategies:
            none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock)
            and then holds a lock on it. This option is not available for the FTP component
            changed - Changed is using file length/modification timestamp to detect whether
            the file is currently being copied or not. Will at least use 1 sec to determine
            this so this option cannot consume files as fast as the others but can be more
            reliable as the JDK IO API cannot always determine whether a file is currently
            being used by another process. The option readLockCheckInterval can be used
            to set the check frequency. fileLock - is for using java.nio.channels.FileLock.
            This option is not avail for the FTP component. This approach should be avoided
            when accessing a remote file system via a mount/share unless that file system
            supports distributed file locks. rename - rename is for using a try to rename
            the file as a test if we can get exclusive read-lock. idempotent - (only for
            file component) idempotent is for using a idempotentRepository as the read-lock.
            This allows to use read locks that supports clustering if the idempotent repository
            implementation supports that. Notice: The various read locks is not all suited
            to work in clustered mode where concurrent consumers on different nodes is competing
            for the same files on a shared file system. The markerFile using a close to
            atomic operation to create the empty marker file but its not guaranteed to work
            in a cluster. The fileLock may work better but then the file system need to
            support distributed file locks and so on. Using the idempotent read lock can
            support clustering if the idempotent repository supports clustering such as
            Hazelcast Component or Infinispan.'
        readLockCheckInterval:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: 'Interval in millis for the read-lock if supported by the read lock.
            This interval is used for sleeping between attempts to acquire the read lock.
            For example when using the changed read lock you can set a higher interval period
            to cater for slow writes. The default of 1 sec. may be too fast if the producer
            is very slow writing the file. Notice: For FTP the default readLockCheckInterval
            is 5000. The readLockTimeout value must be higher than readLockCheckInterval
            but a rule of thumb is to have a timeout that is at least 2 or more times higher
            than the readLockCheckInterval. This is needed to ensure that amble time is
            allowed for the read lock process to try to grab the lock before the timeout
            was hit.'
        readLockDeleteOrphanLockFiles:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
        readLockLoggingLevel:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: 'Logging level used when a read lock could not be acquired. By default
            a WARN is logged. You can change this level for example to OFF to not have any
            logging. This option is only applicable for readLock of types: changed fileLock
            rename.'
        readLockMarkerFile:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
        readLockMinAge:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
        readLockMinLength:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1"
          description: This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
        readLockRemoveOnCommit:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
        readLockRemoveOnRollback:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
        readLockTimeout:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: 'Optional timeout in millis for the read-lock if supported by the
            read-lock. If the read-lock could not be granted and the timeout triggered then
            Camel will skip the file. At next poll Camel will try the file again and this
            time maybe the read-lock could be granted. Use a value of 0 or lower to indicate
            forever. Currently fileLock changed and rename support the timeout. Notice:
            For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout
            value must be higher than readLockCheckInterval but a rule of thumb is to have
            a timeout that is at least 2 or more times higher than the readLockCheckInterval.
            This is needed to ensure that amble time is allowed for the read lock process
            to try to grab the lock before the timeout was hit.'
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        shuffle:
          kind: parameter
          group: sort
          label: consumer,sort
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To shuffle the list of files (sort in random order)
        sortBy:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
        sorter:
          kind: parameter
          group: sort
          label: consumer,sort
          type: object
          javaType: java.util.Comparator<org.apache.camel.component.file.GenericFile<T>>
          deprecated: false
          secret: false
          description: Pluggable sorter as a java.util.Comparator class.
        account:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Account to use for login
        disableSecureDataChannelDefaults:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Use this option to disable default options when using secure data channel. This allows you to be in full control what the execPbsz and execProt setting should be used. Default is false
        execPbsz:
          kind: parameter
          group: security
          label: security
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: When using secure data channel you can set the exec protection buffer size
        execProt:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The exec protection level PROT command. C - Clear S - Safe(SSL protocol only) E - Confidential(SSL protocol only) P - Private
        ftpClientKeyStoreParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: ftpClient.keyStore.
          multiValue: true
          deprecated: false
          secret: false
          description: Set the key store parameters
        ftpClientTrustStoreParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: ftpClient.trustStore.
          multiValue: true
          deprecated: false
          secret: false
          description: Set the trust store parameters
        isImplicit:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set the security mode(Implicit/Explicit). true - Implicit Mode / False - Explicit Mode
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use for login
        securityProtocol:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLS
          description: Set the underlying security protocol.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Gets the JSSE configuration that overrides any settings in link FtpsEndpointftpClientKeyStoreParameters link ftpClientTrustStoreParameters and link FtpsConfigurationgetSecurityProtocol().
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use for login
    documentation.adoc: |+
      [[FTPSComponent]]
      FTPS Component
      ~~~~~~~~~~~~~~

      This component provides access to remote file systems over the FTP and
      SFTP protocols.

      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-ftp</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      -----------------------------------------------------------------------

      For more information you can look at link:ftp.html[FTP component]

      [[FTPS-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      The options below are exclusive for the FTPS component.

      // component options: START
      The FTPS component has no options.
      // component options: END


      // endpoint options: START
      The FTPS component supports 112 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Hostname of the FTP server
      | port | common |  | int | Port of the FTP server
      | directoryName | common |  | String | The starting directory
      | binary | common | false | boolean | Specifies the file transfer mode BINARY or ASCII. Default is ASCII (false).
      | charset | common |  | String | This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
      | disconnect | common | false | boolean | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
      | doneFileName | common |  | String | Producer: If provided then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided Camel will only consume files if a done file exists. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders.The done file is always expected in the same folder as the original file. Only $file.name and $file.name.noext is supported as dynamic placeholders.
      | fileName | common |  | String | Use Expression such as File Language to dynamically set the filename. For consumers it's used as a filename filter. For producers it's used to evaluate the filename to write. If an expression is set it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type it is always evaluated using the File Language. If the expression is an Expression type the specified Expression type is used - this allows you for instance to use OGNL expressions. For the consumer you can use it to filter filenames so you can for instance consume today's file using the File Language syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName is a header that is used only once and makes it easier as this avoids to temporary store CamelFileName and have to restore it afterwards.
      | passiveMode | common | false | boolean | Sets passive mode connections. Default is active mode connections.
      | separator | common | UNIX | PathSeparator | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name
      | fastExistsCheck | common (advanced) | false | boolean | If set this option to be true camel-ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly if the option is false camel-ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server has a lot of files.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delete | consumer | false | boolean | If true the file will be deleted after it is processed successfully.
      | moveFailed | consumer |  | String | Sets the move failure expression based on Simple language. For example to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again.
      | noop | consumer | false | boolean | If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
      | preMove | consumer |  | String | Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
      | recursive | consumer | false | boolean | If a directory will look for files in all the sub-directories as well.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | streamDownload | consumer | false | boolean | Sets the download method to use when not using a local working directory. If set to true the remote files are streamed to the route as they are read. When set to false the remote files are loaded into memory before being sent into the route.
      | directoryMustExist | consumer (advanced) | false | boolean | Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
      | download | consumer (advanced) | false | boolean | Whether the FTP consumer should download the file. If this option is set to false then the message body will be null but the consumer will still trigger a Camel Exchange that has details about the file such as file name file size etc. It's just that the file will not be downloaded.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | ignoreFileNotFoundOrPermissionError | consumer (advanced) | false | boolean | Whether to ignore when trying to download a file which does not exist or due to permission error. By default when a file does not exists or insufficient permission then an exception is thrown. Setting this option to true allows to ignore that instead.
      | inProgressRepository | consumer (advanced) |  | String> | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
      | localWorkDirectory | consumer (advanced) |  | String | When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
      | onCompletionExceptionHandler | consumer (advanced) |  | ExceptionHandler | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | processStrategy | consumer (advanced) |  | GenericFileProcessStrategy<T> | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
      | receiveBufferSize | consumer (advanced) | 32768 | int | The receive (download) buffer size Used only by FTPClient
      | startingDirectoryMustExist | consumer (advanced) | false | boolean | Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
      | useList | consumer (advanced) | true | boolean | Whether to allow using LIST command when downloading a file. Default is true. In some use cases you may want to download a specific file and are not allowed to use the LIST command and therefore you can set this option to false.
      | fileExist | producer | Override | GenericFileExist | What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
      | flatten | producer | false | boolean | Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
      | moveExisting | producer |  | String | Expression (such as File Language) used to compute file name to use when fileExist=Move is configured. To move files into a backup subdirectory just enter backup. This option only supports the following File Language tokens: file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext and file:parent. Notice the file:parent is not supported by the FTP component as the FTP component can only move any existing files to a relative directory based on current dir as base.
      | tempFileName | producer |  | String | The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
      | tempPrefix | producer |  | String | This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
      | allowNullBody | producer (advanced) | false | boolean | Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
      | disconnectOnBatchComplete | producer (advanced) | false | boolean | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
      | eagerDeleteTargetFile | producer (advanced) | true | boolean | Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
      | keepLastModified | producer (advanced) | false | boolean | Will keep the last modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is enabled it will set this timestamp on the written file. Note: This option only applies to the file producer. You cannot use this option with any of the ftp producers.
      | sendNoop | producer (advanced) | true | boolean | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid which allows to silently re-connect to be able to upload the file. However if this causes problems you can turn this option off.
      | activePortRange | advanced |  | String | Set the client side port range in active mode. The syntax is: minPort-maxPort Both port numbers are inclusive eg 10000-19999 to include all 1xxxx ports.
      | autoCreate | advanced | true | boolean | Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
      | bufferSize | advanced | 131072 | int | Write buffer sized in bytes.
      | connectTimeout | advanced | 10000 | int | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
      | ftpClient | advanced |  | FTPClient | To use a custom instance of FTPClient
      | ftpClientConfig | advanced |  | FTPClientConfig | To use a custom instance of FTPClientConfig to configure the FTP client the endpoint should use.
      | ftpClientConfigParameters | advanced |  | Map | Used by FtpComponent to provide additional parameters for the FTPClientConfig
      | ftpClientParameters | advanced |  | Map | Used by FtpComponent to provide additional parameters for the FTPClient
      | maximumReconnectAttempts | advanced |  | int | Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior.
      | reconnectDelay | advanced |  | long | Delay in millis Camel will wait before performing a reconnect attempt.
      | siteCommand | advanced |  | String | Sets optional site command(s) to be executed after successful login. Multiple site commands can be separated using a new line character (\n).
      | soTimeout | advanced | 300000 | int | Sets the so timeout Used only by FTPClient
      | stepwise | advanced | true | boolean | Sets whether we should stepwise change directories while traversing file structures when downloading files or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | throwExceptionOnConnectFailed | advanced | false | boolean | Should an exception be thrown if connection failed (exhausted) By default exception is not thrown and a WARN is logged. You can use this to enable exception being thrown and handle the thrown exception from the org.apache.camel.spi.PollingConsumerPollStrategy rollback method.
      | timeout | advanced | 30000 | int | Sets the data timeout for waiting for reply Used only by FTPClient
      | antExclude | filter |  | String | Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
      | antFilterCaseSensitive | filter | true | boolean | Sets case sensitive flag on ant fiter
      | antInclude | filter |  | String | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
      | eagerMaxMessagesPerPoll | filter | true | boolean | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
      | exclude | filter |  | String | Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
      | filter | filter |  | GenericFileFilter<T> | Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
      | filterDirectory | filter |  | String | Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
      | filterFile | filter |  | String | Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
      | idempotent | filter | false | Boolean | Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
      | idempotentKey | filter |  | String | To use a custom idempotent key. By default the absolute path of the file is used. You can use the File Language for example to use the file name and file size you can do: idempotentKey=$file:name-$file:size
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
      | include | filter |  | String | Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
      | maxDepth | filter | 2147483647 | int | The maximum depth to traverse when recursively processing a directory.
      | maxMessagesPerPoll | filter |  | int | To define a maximum messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disabled it. Notice: If this option is in use then the File and FTP components will limit before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500 then only the first 500 files will be picked up and then sorted. You can use the eagerMaxMessagesPerPoll option and set this to false to allow to scan all files first and then sort afterwards.
      | minDepth | filter |  | int | The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
      | move | filter |  | String | Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
      | exclusiveReadLockStrategy | lock |  | GenericFileExclusiveReadLockStrategy<T> | Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
      | readLock | lock |  | String | Used by consumer to only poll the files if it has exclusive read-lock on the file (i.e. the file is not in-progress or being written). Camel will wait until the file lock is granted. This option provides the build in strategies: none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock) and then holds a lock on it. This option is not available for the FTP component changed - Changed is using file length/modification timestamp to detect whether the file is currently being copied or not. Will at least use 1 sec to determine this so this option cannot consume files as fast as the others but can be more reliable as the JDK IO API cannot always determine whether a file is currently being used by another process. The option readLockCheckInterval can be used to set the check frequency. fileLock - is for using java.nio.channels.FileLock. This option is not avail for the FTP component. This approach should be avoided when accessing a remote file system via a mount/share unless that file system supports distributed file locks. rename - rename is for using a try to rename the file as a test if we can get exclusive read-lock. idempotent - (only for file component) idempotent is for using a idempotentRepository as the read-lock. This allows to use read locks that supports clustering if the idempotent repository implementation supports that. Notice: The various read locks is not all suited to work in clustered mode where concurrent consumers on different nodes is competing for the same files on a shared file system. The markerFile using a close to atomic operation to create the empty marker file but its not guaranteed to work in a cluster. The fileLock may work better but then the file system need to support distributed file locks and so on. Using the idempotent read lock can support clustering if the idempotent repository supports clustering such as Hazelcast Component or Infinispan.
      | readLockCheckInterval | lock | 1000 | long | Interval in millis for the read-lock if supported by the read lock. This interval is used for sleeping between attempts to acquire the read lock. For example when using the changed read lock you can set a higher interval period to cater for slow writes. The default of 1 sec. may be too fast if the producer is very slow writing the file. Notice: For FTP the default readLockCheckInterval is 5000. The readLockTimeout value must be higher than readLockCheckInterval but a rule of thumb is to have a timeout that is at least 2 or more times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the read lock process to try to grab the lock before the timeout was hit.
      | readLockDeleteOrphanLockFiles | lock | true | boolean | Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
      | readLockLoggingLevel | lock | WARN | LoggingLevel | Logging level used when a read lock could not be acquired. By default a WARN is logged. You can change this level for example to OFF to not have any logging. This option is only applicable for readLock of types: changed fileLock rename.
      | readLockMarkerFile | lock | true | boolean | Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
      | readLockMinAge | lock | 0 | long | This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
      | readLockMinLength | lock | 1 | long | This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
      | readLockRemoveOnCommit | lock | false | boolean | This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
      | readLockRemoveOnRollback | lock | true | boolean | This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
      | readLockTimeout | lock | 10000 | long | Optional timeout in millis for the read-lock if supported by the read-lock. If the read-lock could not be granted and the timeout triggered then Camel will skip the file. At next poll Camel will try the file again and this time maybe the read-lock could be granted. Use a value of 0 or lower to indicate forever. Currently fileLock changed and rename support the timeout. Notice: For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout value must be higher than readLockCheckInterval but a rule of thumb is to have a timeout that is at least 2 or more times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the read lock process to try to grab the lock before the timeout was hit.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | shuffle | sort | false | boolean | To shuffle the list of files (sort in random order)
      | sortBy | sort |  | String | Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
      | sorter | sort |  | GenericFile<T>> | Pluggable sorter as a java.util.Comparator class.
      | account | security |  | String | Account to use for login
      | disableSecureDataChannelDefaults | security | false | boolean | Use this option to disable default options when using secure data channel. This allows you to be in full control what the execPbsz and execProt setting should be used. Default is false
      | execPbsz | security |  | Long | When using secure data channel you can set the exec protection buffer size
      | execProt | security |  | String | The exec protection level PROT command. C - Clear S - Safe(SSL protocol only) E - Confidential(SSL protocol only) P - Private
      | ftpClientKeyStoreParameters | security |  | Map | Set the key store parameters
      | ftpClientTrustStoreParameters | security |  | Map | Set the trust store parameters
      | isImplicit | security | false | boolean | Set the security mode(Implicit/Explicit). true - Implicit Mode / False - Explicit Mode
      | password | security |  | String | Password to use for login
      | securityProtocol | security | TLS | String | Set the underlying security protocol.
      | sslContextParameters | security |  | SSLContextParameters | Gets the JSSE configuration that overrides any settings in link FtpsEndpointftpClientKeyStoreParameters link ftpClientTrustStoreParameters and link FtpsConfigurationgetSecurityProtocol().
      | username | security |  | String | Username to use for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ganglia
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ganglia
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ganglia
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ganglia
          spec:
            containers:
            - image: fabric8/connector-ganglia:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ganglia
        syntax: ganglia:host:port
        title: Ganglia
        description: The ganglia component is used for sending metrics to the Ganglia monitoring system.
        label: monitoring
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.ganglia.GangliaComponent
        groupId: org.apache.camel
        artifactId: camel-ganglia
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.ganglia.GangliaConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
      properties:
        host:
          kind: path
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 239.2.11.71
          description: Host name for Ganglia server
        port:
          kind: path
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8649"
          description: Port for Ganglia server
        dmax:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Minumum time in seconds before Ganglia will purge the metric value if it expires. Set to 0 and the value will remain in Ganglia indefinitely until a gmond agent restart.
        groupName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: java
          description: The group that the metric belongs to.
        metricName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: metric
          description: The name to use for the metric.
        mode:
          kind: parameter
          group: producer
          type: object
          javaType: info.ganglia.gmetric4j.gmetric.GMetric.UDPAddressingMode
          deprecated: false
          secret: false
          defaultValue: MULTICAST
          description: Send the UDP metric packets using MULTICAST or UNICAST
        prefix:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Prefix the metric name with this string and an underscore.
        slope:
          kind: parameter
          group: producer
          type: string
          javaType: info.ganglia.gmetric4j.gmetric.GMetricSlope
          enum:
          - ZERO
          - POSITIVE
          - NEGATIVE
          - BOTH
          deprecated: false
          secret: false
          defaultValue: BOTH
          description: The slope
        spoofHostname:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Spoofing information IP:hostname
        tmax:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "60"
          description: Maximum time in seconds that the value can be considered current. After this Ganglia considers the value to have expired.
        ttl:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5"
          description: If using multicast set the TTL of the packets
        type:
          kind: parameter
          group: producer
          type: string
          javaType: info.ganglia.gmetric4j.gmetric.GMetricType
          enum:
          - STRING
          - INT8
          - UINT8
          - INT16
          - UINT16
          - INT32
          - UINT32
          - FLOAT
          - DOUBLE
          deprecated: false
          secret: false
          defaultValue: STRING
          description: The type of value
        units:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Any unit of measurement that qualifies the metric e.g. widgets litres bytes. Do not include a prefix such as k (kilo) or m (milli) other tools may scale the units later. The value should be unscaled.
        wireFormat31x:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Use the wire format of Ganglia 3.1.0 and later versions. Set this to false to use Ganglia 3.0.x or earlier.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Ganglia-Gangliacomponent]]
      Ganglia component
      ~~~~~~~~~~~~~~~~~

      [[Ganglia-AvailableasofCamel2.15.0]]
      Available as of Camel 2.15.0
      ++++++++++++++++++++++++++++

      Provides a mechanism to send a value (the message body) as a metric to
      the http://ganglia.info[Ganglia] monitoring system.?? Uses the gmetric4j
      library.?? Can be used in conjunction with standard
      http://ganglia.info[Ganglia] and
      https://github.com/ganglia/jmxetric[JMXetric] for monitoring metrics
      from the OS, JVM and business processes through a single platform.

      You should have a Ganglia gmond agent running on the machine where your
      JVM runs.?? The gmond sends a heartbeat to the Ganglia infrastructure,
      camel-ganglia can't send the heartbeat itself currently.

      On most Linux systems (Debian, Ubuntu, Fedora and RHEL/CentOS with EPEL)
      you can just install the Ganglia agent package and it runs automatically
      using multicast configuration.?? You can configure it to use regular UDP
      unicast if you prefer.

      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-ganglia</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Ganglia-URIformat]]
      URI format
      ~~~~~~~~~~

      [source,java]
      ------------------------------
      ganglia:address:port[?options]
      ------------------------------

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

      [[Ganglia-GangliacomponentandendpointURIoptions]]
      Ganglia component and endpoint URI options
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~





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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | GangliaConfiguration | To use the shared configuration
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The Ganglia component supports 15 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | producer | 239.2.11.71 | String | Host name for Ganglia server
      | port | producer | 8649 | int | Port for Ganglia server
      | dmax | producer | 0 | int | Minumum time in seconds before Ganglia will purge the metric value if it expires. Set to 0 and the value will remain in Ganglia indefinitely until a gmond agent restart.
      | groupName | producer | java | String | The group that the metric belongs to.
      | metricName | producer | metric | String | The name to use for the metric.
      | mode | producer | MULTICAST | UDPAddressingMode | Send the UDP metric packets using MULTICAST or UNICAST
      | prefix | producer |  | String | Prefix the metric name with this string and an underscore.
      | slope | producer | BOTH | GMetricSlope | The slope
      | spoofHostname | producer |  | String | Spoofing information IP:hostname
      | tmax | producer | 60 | int | Maximum time in seconds that the value can be considered current. After this Ganglia considers the value to have expired.
      | ttl | producer | 5 | int | If using multicast set the TTL of the packets
      | type | producer | STRING | GMetricType | The type of value
      | units | producer |  | String | Any unit of measurement that qualifies the metric e.g. widgets litres bytes. Do not include a prefix such as k (kilo) or m (milli) other tools may scale the units later. The value should be unscaled.
      | wireFormat31x | producer | true | boolean | Use the wire format of Ganglia 3.1.0 and later versions. Set this to false to use Ganglia 3.0.x or earlier.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Ganglia-Messagebody]]
      Message body
      ~~~~~~~~~~~~

      Any value (such as a string or numeric type) in the body is sent to the
      Ganglia system.

      [[Ganglia-ReturnvalueAndResponse]]
      Return value / response
      ~~~~~~~~~~~~~~~~~~~~~~~

      Ganglia sends metrics using unidirectional UDP or multicast.?? There is
      no response or change to the message body.

      [[Ganglia-Examples]]
      Examples
      ~~~~~~~~

      [[Ganglia-SendingaStringmetric]]
      Sending a String metric
      ^^^^^^^^^^^^^^^^^^^^^^^

      The message body will be converted to a String and sent as a metric
      value.?? Unlike numeric metrics, String values can't be charted but
      Ganglia makes them available for reporting.?? The os_version string at
      the top of every Ganglia host page is an example of a String metric.

      [source,java]
      ------------------------------------------------------------------------
      from("direct:string.for.ganglia")
          .setHeader(GangliaConstants.METRIC_NAME, simple("my_string_metric"))
          .setHeader(GangliaConstants.METRIC_TYPE, GMetricType.STRING)
          .to("direct:ganglia.tx");

      from("direct:ganglia.tx")
          .to("ganglia:239.2.11.71:8649?mode=MULTICAST&prefix=test");
      ------------------------------------------------------------------------

      [[Ganglia-Sendinganumericmetric]]
      Sending a numeric metric
      ^^^^^^^^^^^^^^^^^^^^^^^^

      [source,java]
      ------------------------------------------------------------------------
      from("direct:value.for.ganglia")
          .setHeader(GangliaConstants.METRIC_NAME, simple("widgets_in_stock"))
          .setHeader(GangliaConstants.METRIC_TYPE, GMetricType.UINT32)
          .setHeader(GangliaConstants.METRIC_UNITS, simple("widgets"))
          .to("direct:ganglia.tx");

      from("direct:ganglia.tx")
          .to("ganglia:239.2.11.71:8649?mode=MULTICAST&prefix=test");
      ------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-geocoder
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: geocoder
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: geocoder
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: geocoder
          spec:
            containers:
            - image: fabric8/connector-geocoder:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: geocoder
        syntax: geocoder:address:latlng
        title: Geocoder
        description: The geocoder component is used for looking up geocodes (latitude and longitude) for a given address or reverse lookup.
        label: api,location
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.geocoder.GeoCoderComponent
        groupId: org.apache.camel
        artifactId: camel-geocoder
        version: 2.18.1
      componentProperties: {}
      properties:
        address:
          kind: path
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The geo address which should be prefixed with address:'
        latlng:
          kind: path
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The geo latitude and longitude which should be prefixed with latlng:'
        clientId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use google premium with this client id
        clientKey:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use google premium with this client key
        headersOnly:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to only enrich the Exchange with headers and leave the body as-is.
        language:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: en
          description: The language to use.
        httpClientConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.geocoder.http.HttpClientConfigurer
          deprecated: false
          secret: false
          description: Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
        httpConnectionManager:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.httpclient.HttpConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpConnectionManager to manage connections
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        proxyAuthDomain:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Domain for proxy NTML authentication
        proxyAuthHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Optional host for proxy NTML authentication
        proxyAuthMethod:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        proxyAuthPassword:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for proxy authentication
        proxyAuthUsername:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for proxy authentication
        proxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The proxy port number
    documentation.adoc: |
      [[Geocoder-GeocoderComponent]]
      Geocoder Component
      ~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *geocoder:* component is used for looking up geocodes (latitude and
      longitude) for a given address, or reverse lookup. The component uses
      the https://code.google.com/p/geocoder-java/[Java API for Google
      Geocoder] library.

      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-geocoder</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Geocoder-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------------------
      geocoder:address:name[?options]
      geocoder:latlng:latitude,longitude[?options]
      --------------------------------------------

      [[Geocoder-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Geocoder component has no options.
      // component options: END




      // endpoint options: START
      The Geocoder component supports 16 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | address | producer |  | String | The geo address which should be prefixed with address:
      | latlng | producer |  | String | The geo latitude and longitude which should be prefixed with latlng:
      | clientId | producer |  | String | To use google premium with this client id
      | clientKey | producer |  | String | To use google premium with this client key
      | headersOnly | producer | false | boolean | Whether to only enrich the Exchange with headers and leave the body as-is.
      | language | producer | en | String | The language to use.
      | httpClientConfigurer | advanced |  | HttpClientConfigurer | Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
      | httpConnectionManager | advanced |  | HttpConnectionManager | To use a custom HttpConnectionManager to manage connections
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | proxyAuthDomain | proxy |  | String | Domain for proxy NTML authentication
      | proxyAuthHost | proxy |  | String | Optional host for proxy NTML authentication
      | proxyAuthMethod | proxy |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | proxyAuthPassword | proxy |  | String | Password for proxy authentication
      | proxyAuthUsername | proxy |  | String | Username for proxy authentication
      | proxyHost | proxy |  | String | The proxy host name
      | proxyPort | proxy |  | Integer | The proxy port number
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Geocoder-Exchangedataformat]]
      Exchange data format
      ^^^^^^^^^^^^^^^^^^^^

      Camel will deliver the body as a
      `com.google.code.geocoder.model.GeocodeResponse` type. +
       And if the address is `"current"` then the response is a String type
      with a JSON representation of the current location.

      If the option `headersOnly` is set to `true` then the message body is
      left as-is, and only headers will be added to the
      link:exchange.html[Exchange].

      [[Geocoder-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |Header |Description

      |`CamelGeoCoderStatus` |Mandatory. Status code from the geocoder library. If status is
      `GeocoderStatus.OK` then additional headers is enriched

      |`CamelGeoCoderAddress` |The formatted address

      |`CamelGeoCoderLat` |The latitude of the location.

      |`CamelGeoCoderLng` |The longitude of the location.

      |`CamelGeoCoderLatlng` |The latitude and longitude of the location. Separated by comma.

      |`CamelGeoCoderCity` |The city long name.

      |`CamelGeoCoderRegionCode` |The region code.

      |`CamelGeoCoderRegionName` |The region name.

      |`CamelGeoCoderCountryLong` |The country long name.

      |`CamelGeoCoderCountryShort` |The country short name.
      |=======================================================================

      Notice not all headers may be provided depending on available data and
      mode in use (address vs latlng).

      [[Geocoder-Samples]]
      Samples
      ^^^^^^^

      In the example below we get the latitude and longitude for Paris, France

      [source,java]
      -----------------------------------------
        from("direct:start")
          .to("geocoder:address:Paris, France")
      -----------------------------------------

      If you provide a header with the `CamelGeoCoderAddress` then that
      overrides the endpoint configuration, so to get the location of
      Copenhagen, Denmark we can send a message with a headers as shown:

      [source,java]
      ------------------------------------------------------------------------------------------------------
      template.sendBodyAndHeader("direct:start", "Hello", GeoCoderConstants.ADDRESS, "Copenhagen, Denmark");
      ------------------------------------------------------------------------------------------------------

      To get the address for a latitude and longitude we can do:

      [source,java]
      ---------------------------------------------------------------------------------------------------------------------------------------------------
        from("direct:start")
          .to("geocoder:latlng:40.714224,-73.961452")
          .log("Location ${header.CamelGeocoderAddress} is at lat/lng: ${header.CamelGeocoderLatlng} and in country ${header.CamelGeoCoderCountryShort}")
      ---------------------------------------------------------------------------------------------------------------------------------------------------

      Which will log

      [source,java]
      --------------------------------------------------------------------------------------------------------------
      Location 285 Bedford Avenue, Brooklyn, NY 11211, USA is at lat/lng: 40.71412890,-73.96140740 and in country US
      --------------------------------------------------------------------------------------------------------------

      To get the current location you can use "current" as the address as
      shown:

      [source,java]
      -----------------------------------
        from("direct:start")
          .to("geocoder:address:current")
      -----------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-git
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: git
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: git
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: git
          spec:
            containers:
            - image: fabric8/connector-git:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: git
        syntax: git:localPath
        title: Git
        description: The git component is used for working with git repositories.
        label: file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.git.GitComponent
        groupId: org.apache.camel
        artifactId: camel-git
        version: 2.18.1
      componentProperties: {}
      properties:
        localPath:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Local repository path
        branchName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The branch name to work on
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Remote repository password
        remoteName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The remote repository name to use in particular operation like pull
        remotePath:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The remote repository path
        tagName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The tag name to work on
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Remote repository username
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        type:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.git.consumer.GitType
          enum:
          - commit
          - tag
          - branch
          deprecated: false
          secret: false
          description: The consumer type
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - clone
          - init
          - add
          - remove
          - commit
          - commitAll
          - createBranch
          - deleteBranch
          - createTag
          - deleteTag
          - status
          - log
          - push
          - pull
          - showBranches
          - cherryPick
          deprecated: false
          secret: false
          description: The operation to do on the repository
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Git-GitComponent]]
      Git Component
      ~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      The??*git:*??component allows you to work with a generic Git repository.??

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

      *URI Format*

      [source,java]
      -----------------------------------
      git://localRepositoryPath[?options]
      -----------------------------------

      [[Git-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      The producer allows to do operations on a specific repository. +
      The consumer allows consuming commits, tags and branches on a specific
      repository.


      // component options: START
      The Git component has no options.
      // component options: END




      // endpoint options: START
      The Git component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | localPath | common |  | String | *Required* Local repository path
      | branchName | common |  | String | The branch name to work on
      | password | common |  | String | Remote repository password
      | remoteName | common |  | String | The remote repository name to use in particular operation like pull
      | remotePath | common |  | String | The remote repository path
      | tagName | common |  | String | The tag name to work on
      | username | common |  | String | Remote repository username
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | type | consumer |  | GitType | The consumer type
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | operation | producer |  | String | The operation to do on the repository
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Git-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,20%,50%",options="header",]
      |=======================================================================
      |Name |Default Value |Type |Context |Description

      |CamelGitOperation |`null` |String |Producer |The operation to do on a repository, if not specified as endpoint option

      |CamelGitFilename |`null` |String |Producer |The file name in an add operation

      |CamelGitCommitMessage |`null` |String |Producer |The commit message related in a commit operation

      |CamelGitCommitUsername |`null` |String |Producer |The commit username in a commit operation

      |CamelGitCommitEmail |`null` |String |Producer |The commit email in a commit operation

      |CamelGitCommitId |`null` |String |Producer |The commit id
      |=======================================================================

      [[Git-ProducerExample]]
      Producer Example
      ^^^^^^^^^^^^^^^^

      Below is an example route of a producer that add a file test.java to a
      local repository, commit it with a specific message on master branch and
      then push it to remote repository.

      [source,java]
      --------------------------------------------------------------------------------------------------------------------
      from("direct:start")
              .setHeader(GitConstants.GIT_FILE_NAME, constant("test.java"))
              .to("git:///tmp/testRepo?operation=add")
              .setHeader(GitConstants.GIT_COMMIT_MESSAGE, constant("first commit"))
              .to("git:///tmp/testRepo?operation=commit")
              .to("git:///tmp/testRepo?operation=push&remotePath=https://foo.com/test/test.git&username=xxx&password=xxx")
      --------------------------------------------------------------------------------------------------------------------

      [[Git-ConsumerExample]]
      Consumer Example
      ^^^^^^^^^^^^^^^^

      Below is an example route of a consumer that consumes commit:

      [source,java]
      ---------------------------------------
      from("git:///tmp/testRepo?type=commit")
                              .to(....)
      ---------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-github
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: github
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: github
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: github
          spec:
            containers:
            - image: fabric8/connector-github:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: github
        syntax: github:type/branchName
        title: GitHub
        description: The github component is used for integrating Camel with github.
        label: api,file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.github.GitHubComponent
        groupId: org.apache.camel
        artifactId: camel-github
        version: 2.18.1
      componentProperties: {}
      properties:
        type:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.github.GitHubType
          enum:
          - CLOSEPULLREQUEST
          - PULLREQUESTCOMMENT
          - COMMIT
          - PULLREQUEST
          - TAG
          - PULLREQUESTSTATE
          - PULLREQUESTFILES
          - GETCOMMITFILE
          - CREATEISSUE
          deprecated: false
          secret: false
          description: What git operation to execute
        branchName:
          kind: path
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of branch
        oauthToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: GitHub OAuth token required unless username & password are provided
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: GitHub password required unless oauthToken is provided
        repoName:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: GitHub repository name
        repoOwner:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: GitHub repository owner (organization)
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: GitHub username required unless oauthToken is provided
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        encoding:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use the given encoding when getting a git commit file
        state:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - error
          - failure
          - pending
          - success
          deprecated: false
          secret: false
          description: To set git commit status state
        targetUrl:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To set git commit status target url
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[GitHub-GitHub]]
      GitHub
      ~~~~~~

      *Available as of Camel 2.15*

      The GitHub component interacts with the GitHub API by
      encapsulating??http://org.eclipse.egit.github.core[egit-github]. It
      currently provides polling for new pull requests, pull request comments,
      tags, and commits. ??It is also able to produce comments on pull
      requests, as well as close the pull request entirely.

      Rather than webhooks, this endpoint relies on simple polling. Reasons
      include:

      * Concern for reliability/stability
      * The types of payloads we're polling aren't typically large (plus,
      paging is available in the API)
      * The need to support apps running somewhere not publicly accessible
      where a webhook would fail

      Note that the GitHub API is fairly expansive. ??Therefore, this component
      could be easily expanded to provide additional interactions.

      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-github</artifactId>
          <version>${camel-version}</version>
      </dependency>
      -----------------------------------------

      [[GitHub-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,text]
      ---------------------------
      github://endpoint[?options]
      ---------------------------

      [[GitHub-MandatoryOptions:]]
      Mandatory Options:
      ^^^^^^^^^^^^^^^^^^

      Note that these can be configured directly through the endpoint.


      // component options: START
      The GitHub component has no options.
      // component options: END



      // endpoint options: START
      The GitHub component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | type | common |  | GitHubType | *Required* What git operation to execute
      | branchName | consumer |  | String | Name of branch
      | oauthToken | common |  | String | GitHub OAuth token required unless username & password are provided
      | password | common |  | String | GitHub password required unless oauthToken is provided
      | repoName | common |  | String | *Required* GitHub repository name
      | repoOwner | common |  | String | *Required* GitHub repository owner (organization)
      | username | common |  | String | GitHub username required unless oauthToken is provided
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | encoding | producer |  | String | To use the given encoding when getting a git commit file
      | state | producer |  | String | To set git commit status state
      | targetUrl | producer |  | String | To set git commit status target url
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[GitHub-ConsumerEndpoints:]]
      Consumer Endpoints:
      ^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Endpoint |Context |Body Type

      |pullRequest |polling |org.eclipse.egit.github.core.PullRequest

      |pullRequestComment |polling |org.eclipse.egit.github.core.Comment (comment on the general pull
      request discussion) or org.eclipse.egit.github.core.CommitComment
      (inline comment on a pull request diff)

      |tag |polling |org.eclipse.egit.github.core.RepositoryTag

      |commit |polling |org.eclipse.egit.github.core.RepositoryCommit
      |=======================================================================

      [[GitHub-ProducerEndpoints:]]
      Producer Endpoints:
      ^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="20%,20%,60%",options="header",]
      |=======================================================================
      |Endpoint |Body |Message Headers

      |pullRequestComment |String (comment text) | - GitHubPullRequest (integer) (REQUIRED): Pull request number.

      - GitHubInResponseTo (integer): Required if responding to another inline
      comment on the pull request diff. If left off, a general comment on the
      pull request discussion is assumed.

      |closePullRequest |none | - GitHubPullRequest (integer) (REQUIRED): Pull request number.

      |createIssue (From Camel 2.18) |String (issue body text) | - GitHubIssueTitle (String) (REQUIRED): Issue Title.
      |=======================================================================
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-google-calendar
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: google-calendar
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: google-calendar
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: google-calendar
          spec:
            containers:
            - image: fabric8/connector-google-calendar:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: google-calendar
        syntax: google-calendar:apiName/methodName
        title: Google Calendar
        description: The google-calendar component provides access to Google Calendar.
        label: api,cloud
        deprecated: false
        async: false
        javaType: org.apache.camel.component.google.calendar.GoogleCalendarComponent
        groupId: org.apache.camel
        artifactId: camel-google-calendar
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.google.calendar.GoogleCalendarConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
        clientFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.google.calendar.GoogleCalendarClientFactory
          deprecated: false
          secret: false
          description: To use the GoogleCalendarClientFactory as factory for creating the client. Will by default use BatchGoogleCalendarClientFactory
      properties:
        apiName:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.google.calendar.internal.GoogleCalendarApiName
          enum:
          - ACL
          - LIST
          - CALENDARS
          - CHANNELS
          - COLORS
          - FREEBUSY
          - EVENTS
          - SETTINGS
          deprecated: false
          secret: false
          description: What kind of operation to perform
        methodName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - calendarImport
          - clear
          - delete
          - get
          - insert
          - instances
          - list
          - move
          - patch
          - query
          - quickAdd
          - stop
          - update
          - watch
          deprecated: false
          secret: false
          description: What sub operation to use for the selected operation
        accessToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage.
        applicationName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Google calendar application name. Example would be camel-google-calendar/1.0
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Client ID of the calendar application
        clientSecret:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Client secret of the calendar application
        emailAddress:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The emailAddress of the Google Service Account.
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        p12FileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the p12 file which has the private key to use with the Google Service Account.
        refreshToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 refresh token. Using this the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.
        scopes:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          defaultValue: https://www.googleapis.com/auth/calendar
          description: Specifies the level of permissions you want a calendar application to have to a user account. See https://developers.google.com/google-apps/calendar/auth for more info.
        user:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The email address of the user the application is trying to impersonate in the service account flow
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[GoogleCalendar-GoogleCalendarComponent]]\nGoogleCalendar\
      \ Component\n~~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.15*\n\n[[GoogleCalendar-ComponentDescription]]\n\
      Component Description\n^^^^^^^^^^^^^^^^^^^^^\n\nThe Google Calendar component\
      \ provides access\nto??http://google.com/calendar[Google Calendar]??via\nthe??https://developers.google.com/google-apps/calendar/v3/reference/[Google\n\
      Calendar Web APIs].\n\nGoogle Calendar uses\nthe??https://developers.google.com/accounts/docs/OAuth2[OAuth\
      \ 2.0\nprotocol]??for authenticating a Google account and authorizing access\
      \ to\nuser data. Before you can use this component, you will need\nto??https://developers.google.com/google-apps/calendar/auth[create\
      \ an\naccount and generate OAuth credentials]. Credentials comprise of a\nclientId,\
      \ clientSecret, and a refreshToken. A handy resource for\ngenerating a long-lived??refreshToken\
      \ is\nthe??https://developers.google.com/oauthplayground[OAuth playground].\n\
      \nMaven users will need to add the following dependency to their pom.xml\nfor\
      \ this component:\n\n----------------------------------------------------------\n\
      \    <dependency>\n            <groupId>org.apache.camel</groupId>\n       \
      \     <artifactId>camel-google-calendar</artifactId>\n            <version>2.15.0</version>\n\
      \    </dependency>\n        \n----------------------------------------------------------\n\
      \n[[GoogleCalendar-options]]\n1. Google Calendar Options\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n\n\n\n// component options: START\nThe Google Calendar component supports\
      \ 2 options which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | GoogleCalendarConfiguration\
      \ | To use the shared configuration\n| clientFactory | GoogleCalendarClientFactory\
      \ | To use the GoogleCalendarClientFactory as factory for creating the client.\
      \ Will by default use BatchGoogleCalendarClientFactory\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Google Calendar component supports 16 endpoint options which are\
      \ listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| apiName | common |  |\
      \ GoogleCalendarApiName | *Required* What kind of operation to perform\n| methodName\
      \ | common |  | String | *Required* What sub operation to use for the selected\
      \ operation\n| accessToken | common |  | String | OAuth 2 access token. This\
      \ typically expires after an hour so refreshToken is recommended for long term\
      \ usage.\n| applicationName | common |  | String | Google calendar application\
      \ name. Example would be camel-google-calendar/1.0\n| clientId | common |  |\
      \ String | Client ID of the calendar application\n| clientSecret | common |\
      \  | String | Client secret of the calendar application\n| emailAddress | common\
      \ |  | String | The emailAddress of the Google Service Account.\n| inBody |\
      \ common |  | String | Sets the name of a parameter to be passed in the exchange\
      \ In Body\n| p12FileName | common |  | String | The name of the p12 file which\
      \ has the private key to use with the Google Service Account.\n| refreshToken\
      \ | common |  | String | OAuth 2 refresh token. Using this the Google Calendar\
      \ component can obtain a new accessToken whenever the current one expires -\
      \ a necessity if the application is long-lived.\n| scopes | common | https://www.googleapis.com/auth/calendar\
      \ | List | Specifies the level of permissions you want a calendar application\
      \ to have to a user account. See https://developers.google.com/google-apps/calendar/auth\
      \ for more info.\n| user | common |  | String | The email address of the user\
      \ the application is trying to impersonate in the service account flow\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[GoogleCalendar-URIFormat]]\nURI\
      \ Format\n^^^^^^^^^^\n\nThe GoogleCalendar Component uses the following URI\
      \ format:\n\n------------------------------------------------------------\n\
      \        google-calendar://endpoint-prefix/endpoint?[options]\n    \n------------------------------------------------------------\n\
      \nEndpoint prefix can be one of:\n\n* acl\n* calendars\n* channels\n* colors\n\
      * events\n* freebusy\n* list\n* settings\n\n[[GoogleCalendar-ProducerEndpoints]]\n\
      Producer Endpoints\n^^^^^^^^^^^^^^^^^^\n\nProducer endpoints can use endpoint\
      \ prefixes followed by endpoint names\nand associated options described next.\
      \ A shorthand alias can be used for\nsome endpoints. The endpoint URI MUST contain\
      \ a prefix.\n\nEndpoint options that are not mandatory are denoted by []. When\
      \ there\nare no mandatory options for an endpoint, one of the set of [] options\n\
      MUST be provided. Producer endpoints can also use a special option\n*`inBody`*\
      \ that in turn should contain the name of the endpoint option\nwhose value will\
      \ be contained in the Camel Exchange In message.\n\nAny of the endpoint options\
      \ can be provided in either the endpoint URI,\nor dynamically in a message header.\
      \ The message header name must be of\nthe format `CamelGoogleCalendar.<option>`.\
      \ Note that the `inBody` option\noverrides message header, i.e. the endpoint\
      \ option `inBody=option` would\noverride a `CamelGoogleCalendar.option` header.\n\
      \n\n[[GoogleCalendar-ConsumerEndpoints]]\nConsumer Endpoints\n^^^^^^^^^^^^^^^^^^\n\
      \nAny of the producer endpoints can be used as a consumer endpoint.\nConsumer\
      \ endpoints can use\nhttp://camel.apache.org/polling-consumer.html#PollingConsumer-ScheduledPollConsumerOptions[Scheduled\n\
      Poll Consumer Options] with a `consumer.` prefix to schedule endpoint\ninvocation.\
      \ Consumer endpoints that return an array or collection will\ngenerate one exchange\
      \ per element, and their routes will be executed\nonce for each exchange.\n\n\
      [[GoogleCalendar-MessageHeaders]]\nMessage Headers\n^^^^^^^^^^^^^^^\n\nAny URI\
      \ option can be provided in a message header for producer\nendpoints with a\
      \ `CamelGoogleCalendar.` prefix.\n\n[[GoogleCalendar-MessageBody]]\nMessage\
      \ Body\n^^^^^^^^^^^^\n\nAll result message bodies utilize objects provided by\
      \ the underlying\nAPIs used by the GoogleCalendarComponent. Producer endpoints\
      \ can specify\nthe option name for incoming message body in the `inBody` endpoint\
      \ URI\nparameter. For endpoints that return an array or collection, a consumer\n\
      endpoint will map every element to distinct messages. ?? ????\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-google-drive
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: google-drive
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: google-drive
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: google-drive
          spec:
            containers:
            - image: fabric8/connector-google-drive:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: google-drive
        syntax: google-drive:apiName/methodName
        title: Google Drive
        description: The google-drive component provides access to Google Drive file storage service.
        label: api,cloud,file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.google.drive.GoogleDriveComponent
        groupId: org.apache.camel
        artifactId: camel-google-drive
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.google.drive.GoogleDriveConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
        clientFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.google.drive.GoogleDriveClientFactory
          deprecated: false
          secret: false
          description: To use the GoogleCalendarClientFactory as factory for creating the client. Will by default use BatchGoogleDriveClientFactory
      properties:
        apiName:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.google.drive.internal.GoogleDriveApiName
          enum:
          - drive-about
          - drive-apps
          - drive-changes
          - drive-channels
          - drive-children
          - drive-comments
          - drive-files
          - drive-parents
          - drive-permissions
          - drive-properties
          - drive-realtime
          - drive-replies
          - drive-revisions
          deprecated: false
          secret: false
          description: What kind of operation to perform
        methodName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - copy
          - delete
          - get
          - getIdForEmail
          - insert
          - list
          - patch
          - stop
          - touch
          - trash
          - untrash
          - update
          - watch
          deprecated: false
          secret: false
          description: What sub operation to use for the selected operation
        accessToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage.
        applicationName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Google drive application name. Example would be camel-google-drive/1.0
        clientFactory:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.google.drive.GoogleDriveClientFactory
          deprecated: false
          secret: false
          description: To use the GoogleCalendarClientFactory as factory for creating the client. Will by default use BatchGoogleDriveClientFactory
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Client ID of the drive application
        clientSecret:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Client secret of the drive application
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        refreshToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 refresh token. Using this the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.
        scopes:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: Specifies the level of permissions you want a drive application to have to a user account. See https://developers.google.com/drive/web/scopes for more info.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[GoogleDrive-GoogleDriveComponent]]\nGoogleDrive Component\n\
      ~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.14*\n\nThe Google Drive component\
      \ provides access to the\nhttp://drive.google.com[Google Drive file storage\
      \ service] via the\nhttps://developers.google.com/drive/v2/reference[Google\
      \ Drive Web APIs].\n\nGoogle Drive uses\nthe??https://developers.google.com/accounts/docs/OAuth2[OAuth\
      \ 2.0\nprotocol]??for authenticating a Google account and authorizing access\
      \ to\nuser data. Before you can use this component, you will need to\nhttps://developers.google.com/drive/web/auth/web-server[create\
      \ an\naccount and generate OAuth credentials]. Credentials comprise of a\nclientId,\
      \ clientSecret, and a refreshToken. A handy resource for\ngenerating a long-lived??refreshToken\
      \ is the\nhttps://developers.google.com/oauthplayground[OAuth playground].\n\
      \nMaven users will need to add the following dependency to their pom.xml\nfor\
      \ this component:\n\n-------------------------------------------------------\n\
      \    <dependency>\n            <groupId>org.apache.camel</groupId>\n       \
      \     <artifactId>camel-google-drive</artifactId>\n            <version>2.14-SNAPSHOT</version>\n\
      \    </dependency>\n        \n-------------------------------------------------------\n\
      \n[[GoogleDrive-URIFormat]]\nURI Format\n^^^^^^^^^^\n\n'''''\n\nThe GoogleDrive\
      \ Component uses the following URI format:\n\n---------------------------------------------------------\n\
      \        google-drive://endpoint-prefix/endpoint?[options]\n    \n---------------------------------------------------------\n\
      \nEndpoint prefix can be one of:\n\n* drive-about\n* drive-apps\n* drive-changes\n\
      * drive-channels\n* drive-children\n* drive-comments\n* drive-files\n* drive-parents\n\
      * drive-permissions\n* drive-properties\n* drive-realtime\n* drive-replies\n\
      * drive-revisions\n\n[[GoogleDrive-GoogleDriveComponent.1]]\nGoogleDriveComponent\n\
      ^^^^^^^^^^^^^^^^^^^^\n\n\n\n\n\n// component options: START\nThe Google Drive\
      \ component supports 2 options which are listed below.\n\n\n\n{% raw %}\n[width=\"\
      100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | GoogleDriveConfiguration\
      \ | To use the shared configuration\n| clientFactory | GoogleDriveClientFactory\
      \ | To use the GoogleCalendarClientFactory as factory for creating the client.\
      \ Will by default use BatchGoogleDriveClientFactory\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Google Drive component supports 14 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| apiName | common |  |\
      \ GoogleDriveApiName | *Required* What kind of operation to perform\n| methodName\
      \ | common |  | String | *Required* What sub operation to use for the selected\
      \ operation\n| accessToken | common |  | String | OAuth 2 access token. This\
      \ typically expires after an hour so refreshToken is recommended for long term\
      \ usage.\n| applicationName | common |  | String | Google drive application\
      \ name. Example would be camel-google-drive/1.0\n| clientFactory | common |\
      \  | GoogleDriveClientFactory | To use the GoogleCalendarClientFactory as factory\
      \ for creating the client. Will by default use BatchGoogleDriveClientFactory\n\
      | clientId | common |  | String | Client ID of the drive application\n| clientSecret\
      \ | common |  | String | Client secret of the drive application\n| inBody |\
      \ common |  | String | Sets the name of a parameter to be passed in the exchange\
      \ In Body\n| refreshToken | common |  | String | OAuth 2 refresh token. Using\
      \ this the Google Calendar component can obtain a new accessToken whenever the\
      \ current one expires - a necessity if the application is long-lived.\n| scopes\
      \ | common |  | List | Specifies the level of permissions you want a drive application\
      \ to have to a user account. See https://developers.google.com/drive/web/scopes\
      \ for more info.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[GoogleDrive-ProducerEndpoints]]\n\
      Producer Endpoints\n^^^^^^^^^^^^^^^^^^\n\nProducer endpoints can use endpoint\
      \ prefixes followed by endpoint names\nand associated options described next.\
      \ A shorthand alias can be used for\nsome endpoints. The endpoint URI MUST contain\
      \ a prefix.\n\nEndpoint options that are not mandatory are denoted by []. When\
      \ there\nare no mandatory options for an endpoint, one of the set of [] options\n\
      MUST be provided. Producer endpoints can also use a special option\n*`inBody`*\
      \ that in turn should contain the name of the endpoint option\nwhose value will\
      \ be contained in the Camel Exchange In message.\n\nAny of the endpoint options\
      \ can be provided in either the endpoint URI,\nor dynamically in a message header.\
      \ The message header name must be of\nthe format `CamelGoogleDrive.<option>`.\
      \ Note that the `inBody` option\noverrides message header, i.e. the endpoint\
      \ option `inBody=option` would\noverride a `CamelGoogleDrive.option` header.\n\
      \nFor more information on the endpoints and options see API documentation\n\
      at:??https://developers.google.com/drive/v2/reference/[https://developers.google.com/drive/v2/reference/]\n\
      \n[[GoogleDrive-ConsumerEndpoints]]\nConsumer Endpoints\n^^^^^^^^^^^^^^^^^^\n\
      \nAny of the producer endpoints can be used as a consumer endpoint.\nConsumer\
      \ endpoints can use\nhttp://camel.apache.org/polling-consumer.html#PollingConsumer-ScheduledPollConsumerOptions[Scheduled\n\
      Poll Consumer Options] with a `consumer.` prefix to schedule endpoint\ninvocation.\
      \ Consumer endpoints that return an array or collection will\ngenerate one exchange\
      \ per element, and their routes will be executed\nonce for each exchange.\n\n\
      [[GoogleDrive-MessageHeaders]]\nMessage Headers\n^^^^^^^^^^^^^^^\n\nAny URI\
      \ option can be provided in a message header for producer\nendpoints with a\
      \ `CamelGoogleDrive.` prefix.\n\n[[GoogleDrive-MessageBody]]\nMessage Body\n\
      ^^^^^^^^^^^^\n\nAll result message bodies utilize objects provided by the underlying\n\
      APIs used by the GoogleDriveComponent. Producer endpoints can specify\nthe option\
      \ name for incoming message body in the `inBody` endpoint URI\nparameter. For\
      \ endpoints that return an array or collection, a consumer\nendpoint will map\
      \ every element to distinct messages. ?? ????\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-google-mail
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: google-mail
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: google-mail
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: google-mail
          spec:
            containers:
            - image: fabric8/connector-google-mail:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: google-mail
        syntax: google-mail:apiName/methodName
        title: Google Mail
        description: The google-mail component provides access to Google Mail.
        label: api,cloud,mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.google.mail.GoogleMailComponent
        groupId: org.apache.camel
        artifactId: camel-google-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.google.mail.GoogleMailConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
        clientFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.google.mail.GoogleMailClientFactory
          deprecated: false
          secret: false
          description: To use the GoogleCalendarClientFactory as factory for creating the client. Will by default use BatchGoogleMailClientFactory
      properties:
        apiName:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.google.mail.internal.GoogleMailApiName
          enum:
          - THREADS
          - MESSAGES
          - ATTACHMENTS
          - LABELS
          - HISTORY
          - DRAFTS
          - USERS
          deprecated: false
          secret: false
          description: What kind of operation to perform
        methodName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - attachments
          - create
          - delete
          - get
          - getProfile
          - gmailImport
          - insert
          - list
          - modify
          - patch
          - send
          - trash
          - untrash
          - update
          deprecated: false
          secret: false
          description: What sub operation to use for the selected operation
        accessToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 access token. This typically expires after an hour so refreshToken is recommended for long term usage.
        applicationName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Google mail application name. Example would be camel-google-mail/1.0
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Client ID of the mail application
        clientSecret:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Client secret of the mail application
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        refreshToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 refresh token. Using this the Google Calendar component can obtain a new accessToken whenever the current one expires - a necessity if the application is long-lived.
        scopes:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: Specifies the level of permissions you want a mail application to have to a user account. See https://developers.google.com/gmail/api/auth/scopes for more info.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[GoogleMail-GoogleMailComponent]]\nGoogleMail Component\n\
      ~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.15*\n\n[[GoogleMail-ComponentDescription]]\n\
      Component Description\n^^^^^^^^^^^^^^^^^^^^^\n\nThe Google Mail component provides\
      \ access\nto??http://gmail.com/[Gmail]??via\nthe??https://developers.google.com/gmail/api/v1/reference/[Google\
      \ Mail\nWeb APIs].\n\nGoogle Mail uses\nthe??https://developers.google.com/accounts/docs/OAuth2[OAuth\
      \ 2.0\nprotocol]??for authenticating a Google account and authorizing access\
      \ to\nuser data. Before you can use this component, you will need\nto??https://developers.google.com/gmail/api/auth/web-server[create\
      \ an\naccount and generate OAuth credentials]. Credentials comprise of a\nclientId,\
      \ clientSecret, and a refreshToken. A handy resource for\ngenerating a long-lived??refreshToken\
      \ is\nthe??https://developers.google.com/oauthplayground[OAuth playground].\n\
      \nMaven users will need to add the following dependency to their pom.xml\nfor\
      \ this component:\n\n------------------------------------------------------\n\
      \    <dependency>\n            <groupId>org.apache.camel</groupId>\n       \
      \     <artifactId>camel-google-mail</artifactId>\n            <version>2.15-SNAPSHOT</version>\n\
      \    </dependency>\n        \n------------------------------------------------------\n\
      \n[[GoogleMail-URIFormat]]\nURI Format\n^^^^^^^^^^\n\nThe GoogleMail Component\
      \ uses the following URI format:\n\n--------------------------------------------------------\n\
      \        google-mail://endpoint-prefix/endpoint?[options]\n    \n--------------------------------------------------------\n\
      \nEndpoint prefix can be one of:\n\n* attachments\n* drafts\n* history\n* labels\n\
      * messages\n* threads\n* users\n\n[[GoogleMail-GoogleMailComponent.1]]\nGoogleMailComponent\n\
      ^^^^^^^^^^^^^^^^^^^\n\n\n\n\n\n// component options: START\nThe Google Mail\
      \ component supports 2 options which are listed below.\n\n\n\n{% raw %}\n[width=\"\
      100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | GoogleMailConfiguration\
      \ | To use the shared configuration\n| clientFactory | GoogleMailClientFactory\
      \ | To use the GoogleCalendarClientFactory as factory for creating the client.\
      \ Will by default use BatchGoogleMailClientFactory\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Google Mail component supports 13 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| apiName | common |  |\
      \ GoogleMailApiName | *Required* What kind of operation to perform\n| methodName\
      \ | common |  | String | *Required* What sub operation to use for the selected\
      \ operation\n| accessToken | common |  | String | OAuth 2 access token. This\
      \ typically expires after an hour so refreshToken is recommended for long term\
      \ usage.\n| applicationName | common |  | String | Google mail application name.\
      \ Example would be camel-google-mail/1.0\n| clientId | common |  | String |\
      \ Client ID of the mail application\n| clientSecret | common |  | String | Client\
      \ secret of the mail application\n| inBody | common |  | String | Sets the name\
      \ of a parameter to be passed in the exchange In Body\n| refreshToken | common\
      \ |  | String | OAuth 2 refresh token. Using this the Google Calendar component\
      \ can obtain a new accessToken whenever the current one expires - a necessity\
      \ if the application is long-lived.\n| scopes | common |  | List | Specifies\
      \ the level of permissions you want a mail application to have to a user account.\
      \ See https://developers.google.com/gmail/api/auth/scopes for more info.\n|\
      \ bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[GoogleMail-ProducerEndpoints]]\n\
      Producer Endpoints\n^^^^^^^^^^^^^^^^^^\n\nProducer endpoints can use endpoint\
      \ prefixes followed by endpoint names\nand associated options described next.\
      \ A shorthand alias can be used for\nsome endpoints. The endpoint URI MUST contain\
      \ a prefix.\n\nEndpoint options that are not mandatory are denoted by []. When\
      \ there\nare no mandatory options for an endpoint, one of the set of [] options\n\
      MUST be provided. Producer endpoints can also use a special option\n*`inBody`*\
      \ that in turn should contain the name of the endpoint option\nwhose value will\
      \ be contained in the Camel Exchange In message.\n\nAny of the endpoint options\
      \ can be provided in either the endpoint URI,\nor dynamically in a message header.\
      \ The message header name must be of\nthe format `CamelGoogleMail.<option>`.\
      \ Note that the `inBody` option\noverrides message header, i.e. the endpoint\
      \ option `inBody=option` would\noverride a `CamelGoogleMail.option` header.\n\
      \nFor more information on the endpoints and options see API documentation\n\
      at:??https://developers.google.com/gmail/api/v1/reference/[https://developers.google.com/gmail/api/v1/reference/]\n\
      \n[[GoogleMail-ConsumerEndpoints]]\nConsumer Endpoints\n^^^^^^^^^^^^^^^^^^\n\
      \nAny of the producer endpoints can be used as a consumer endpoint.\nConsumer\
      \ endpoints can use\nhttp://camel.apache.org/polling-consumer.html#PollingConsumer-ScheduledPollConsumerOptions[Scheduled\n\
      Poll Consumer Options] with a `consumer.` prefix to schedule endpoint\ninvocation.\
      \ Consumer endpoints that return an array or collection will\ngenerate one exchange\
      \ per element, and their routes will be executed\nonce for each exchange.\n\n\
      [[GoogleMail-MessageHeaders]]\nMessage Headers\n^^^^^^^^^^^^^^^\n\nAny URI option\
      \ can be provided in a message header for producer\nendpoints with a `CamelGoogleMail.`\
      \ prefix.\n\n[[GoogleMail-MessageBody]]\nMessage Body\n^^^^^^^^^^^^\n\nAll result\
      \ message bodies utilize objects provided by the underlying\nAPIs used by the\
      \ GoogleMailComponent. Producer endpoints can specify the\noption name for incoming\
      \ message body in the `inBody` endpoint URI\nparameter. For endpoints that return\
      \ an array or collection, a consumer\nendpoint will map every element to distinct\
      \ messages. ?? ????\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-gora
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: gora
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: gora
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: gora
          spec:
            containers:
            - image: fabric8/connector-gora:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: gora
        syntax: gora:name
        title: Gora
        description: The gora component allows you to work with NoSQL databases using the Apache Gora framework.
        label: database,hadoop,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.gora.GoraComponent
        groupId: org.apache.camel
        artifactId: camel-gora
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Instance name
        dataStoreClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The type of the dataStore
        keyClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The type class of the key
        valueClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The type of the value
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent consumers
        endKey:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: The End Key
        endTime:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The End Time
        fields:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: com.google.common.base.Strings
          deprecated: false
          secret: false
          description: The Fields
        keyRangeFrom:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: The Key Range From
        keyRangeTo:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: The Key Range To
        limit:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The Limit
        startKey:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: The Start Key
        startTime:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The Start Time
        timeRangeFrom:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The Time Range From
        timeRangeTo:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The Time Range To
        timestamp:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The Timestamp
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        flushOnEveryOperation:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Flush on every operation
        hadoopConfiguration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.hadoop.conf.Configuration
          deprecated: false
          secret: false
          description: Hadoop Configuration
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Gora-GoraComponent]]
      Gora Component
      ~~~~~~~~~~~~~~

      *Camel-Gora* is an http://camel.apache.org/[Apache Camel] component that
      allows you to work with NoSQL databases using the
      http://gora.apache.org/[Apache Gora] framework.

      *Available as of Camel 2.14*

      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-gora</artifactId>
      ??<version>x.x.x</version>
      ??<!-- use the same version as your Camel core version -->
      </dependency>
      ---------------------------------------------------------

      [[Gora-ApacheGoraOverview]]
      Apache Gora Overview
      ~~~~~~~~~~~~~~~~~~~~

      The http://gora.apache.org/[Apache Gora] open source framework provides
      an in-memory data model and persistence for big data. Gora supports
      persisting to column stores, key value stores, document stores and
      RDBMSs, and analyzing the data with extensive
      http://hadoop.apache.org/[Apache Hadoop??? MapReduce] support. Gora uses
      the http://www.apache.org/licenses/LICENSE-2.0.html[Apache Software
      License v2.0] and graduated from the Apache Incubator in Janauary 2012
      to become a top-level Apache project.

      Apache Gora currently supports the following datastores:
      http://hbase.apache.org/[Apache HBase],
      http://cassandra.apache.org/[Apache Cassandra],
      http://accumulo.apache.org/[Apache Accumulo],
      http://aws.amazon.com/dynamodb/[Amazon DynamoDB] and SQL databases such
      as http://hsqldb.org/[hsqldb], http://www.mysql.com/[MySQL] and more.

      [[Gora-URIformat]]
      URI format
      ~~~~~~~~~~

      [source,text]
      ---------------------------
      gora:instanceName[?options]
      ---------------------------

      Hbase examples with mandatory options :

      _XML_

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <to uri="gora:foobar?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      _Java DSL_

      [source,java]
      -------------------------------------------------------------------------------------------------------------------------------------------------------------
      to("gora:foobar?keyClass=java.lang.Long&valueClass=org.apache.camel.component.gora.generated.Pageview&dataStoreClass=org.apache.gora.hbase.store.HBaseStore")
      -------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Gora-Configuratiion]]
      Configuratiion
      ~~~~~~~~~~~~~~

      Using camel-gora needs some configuration. This mainly involve to
      configure the _AvroStore_ through the _gora.properties_ file and to
      define the relevant mappings as part of the
      _http://gora.apache.org/current/gora-core.html[gora-core]_ module.

      Extensive information for this configuration can be found in the apache
      http://gora.apache.org/current/index.html[gora documentation] and the
      http://gora.apache.org/current/gora-conf.html[gora-conf] page.

      [[Gora-Options]]
      Options
      ~~~~~~~


      // component options: START
      The Gora component has no options.
      // component options: END





      // endpoint options: START
      The Gora component supports 22 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Instance name
      | dataStoreClass | common |  | String | The type of the dataStore
      | keyClass | common |  | String | The type class of the key
      | valueClass | common |  | String | The type of the value
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent consumers
      | endKey | consumer |  | Object | The End Key
      | endTime | consumer |  | long | The End Time
      | fields | consumer |  | Strings | The Fields
      | keyRangeFrom | consumer |  | Object | The Key Range From
      | keyRangeTo | consumer |  | Object | The Key Range To
      | limit | consumer |  | long | The Limit
      | startKey | consumer |  | Object | The Start Key
      | startTime | consumer |  | long | The Start Time
      | timeRangeFrom | consumer |  | long | The Time Range From
      | timeRangeTo | consumer |  | long | The Time Range To
      | timestamp | consumer |  | long | The Timestamp
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | flushOnEveryOperation | producer | true | boolean | Flush on every operation
      | hadoopConfiguration | advanced |  | Configuration | Hadoop Configuration
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Gora-SupportedGoraOperations]]
      Supported Gora Operations
      ~~~~~~~~~~~~~~~~~~~~~~~~~

      Supported operations include : *put*, *get*, *delete*, *getSchemaName*,
      *deleteSchema*, *createSchema*, *query*, *deleteByQuery*,
      *schemaExists*.

      Some of the operations require arguments while some others no. The
      arguments to operations could be either the _body_ of the _in_ message
      or defined in a header property. Below there is a list with some
      additional info for each operation.

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

      |put |_Inserts the persistent object with the given key._

      |get |_Returns the object corresponding to the given key fetching all the
      fields._

      |delete |_Deletes the object with the given key._

      |getSchemaName |_Returns the schema name given to this DataStore._

      |deleteSchema |_Deletes the underlying schema or table (or similar) in the datastore
      that holds the objects._

      |createSchema |_Creates the optional schema or table (or similar) in the datastore to
      hold the objects._

      |query |_Executes the given query and returns the results._

      |deleteByQuery |_Deletes all the objects matching the query._

      |schemaExists |_Returns whether the schema that holds the data exists in the
      datastore._
      |=======================================================================

      [[Gora-GoraHeaders]]
      Gora Headers
      ^^^^^^^^^^^^

      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |Property |Description

      |GoraOperation |_Used in order to define the operation to execute._

      |GoraKey | _Used in order to define the datum key for the operations need it._
      |=======================================================================

      [[Gora-Usageexamples]]
      Usage examples
      ^^^^^^^^^^^^^^

      *Create Schema* _(XML DSL)_:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <setHeader headerName="GoraOperation">
      ??<constant>CreateSchema</constant>
      </setHeader>
      <to uri="gora:foobar?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      *SchemaExists* _(XML DSL)_:

      [source,xml]
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <setHeader headerName="GoraOperation">
      ??<constant>SchemaExists</constant>
      </setHeader>
      ??<to uri="gora:foobar?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      *Put* _(XML DSL)_:

      [source,xml]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <setHeader headerName="GoraOperation">
      ??<constant>put</constant>
      </setHeader>
      <setHeader headerName="GoraKey">
      ??<constant>22222</constant>
      </setHeader>
      <to uri="gora:foo?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      *Get* _(XML DSL)_:

      [source,xml]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <setHeader headerName="GoraOperation">
      ??<constant>GET</constant>
      </setHeader>
      <setHeader headerName="GoraKey">
      ??<constant>10101</constant>
      </setHeader>
      <to uri="gora:bar?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      *Delete* _(XML DSL)_:

      [source,xml]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <setHeader headerName="GoraOperation">
      ??<constant>DELETE</constant>
      </setHeader>
      <setHeader headerName="GoraKey">
      ??<constant>22222</constant>
      </setHeader>
      <to uri="gora:bar?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      *Query* _(XML DSL)_:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <to uri="gora:foobar?keyClass=java.lang.Long&amp;valueClass=org.apache.camel.component.gora.generated.Pageview&amp;dataStoreClass=org.apache.gora.hbase.store.HBaseStore"/>
      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      The full usage examples in the form of integration tests can be found at
      https://github.com/ipolyzos/camel-gora-examples/[camel-gora-examples]
      repository.

      [[Gora-Moreresources]]
      More resources
      ^^^^^^^^^^^^^^

      For more please information and in depth configuration refer to the
      http://gora.apache.org/current/overview.html[Apache Gora Documentation]
      and the http://gora.apache.org/current/tutorial.html[Apache Gora
      Tutorial].
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-grape
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: grape
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: grape
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: grape
          spec:
            containers:
            - image: fabric8/connector-grape:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: grape
        syntax: grape:defaultCoordinates
        title: Grape
        description: Grape component allows you to fetch, load and manage additional jars when CamelContext is running.
        label: management,deployment
        producerOnly: true
        javaType: org.apache.camel.component.grape.GrapeEndpoint
        groupId: org.apache.camel
        artifactId: camel-grape
        version: 2.18.1
      componentProperties: {}
      properties:
        defaultCoordinates:
          kind: path
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          description: Maven coordinates to use as default to grab if the message body is empty.
        exchangePattern:
          kind: parameter
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          defaultValue: InOnly
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          type: boolean
          javaType: boolean
          deprecated: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Grape-GrapeComponent]]
      Grape Component
      ~~~~~~~~~~~~~~~

      Available as of Camel 2.16??

      http://docs.groovy-lang.org/latest/html/documentation/grape.html[Grape]
      component allows you to fetch, load and manage additional jars when
      `CamelContext` is running. In practice with Camel Grape component you
      can add new components, data formats and beans to your `CamelContext`
      without the restart of the router.


      [[Grape-Options]]
      Grape options
      ^^^^^^^^^^^^^

      // component options: START
      The Grape component has no options.
      // component options: END


      // endpoint options: START
      The Grape component supports 3 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | defaultCoordinates |  |  | String | *Required* Maven coordinates to use as default to grab if the message body is empty.
      | exchangePattern |  | InOnly | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | synchronous |  | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Grape-Settingupclassloader]]
      Setting up class loader
      ^^^^^^^^^^^^^^^^^^^^^^^

      Grape requires using Groovy class loader with the `CamelContext`. You
      can enable Groovy class loading on the existing Camel Context using the
      `GrapeComponent#grapeCamelContext()` method:

      [source,java]
      --------------------------------------------------------------------------------
      import static org.apache.camel.component.grape.GrapeComponent.grapeCamelContext;
      ...
      CamelContext camelContext = grapeCamelContext(new DefaultCamelContext());
      --------------------------------------------------------------------------------

      You can also set up the Groovy class loader used be Camel context by
      yourself:

      [source,java]
      ------------------------------------------------------------------------------------
      camelContext.setApplicationContextClassLoader(new GroovyClassLoader(myClassLoader));
      ------------------------------------------------------------------------------------

      [[Grape-URIformat]]
      URI format
      ^^^^^^^^^^

      Grape component supports only producer endpoints.

      [source,java]
      -----------------------------
      grape:defaultMavenCoordinates
      -----------------------------

      For example the following snippet loads Camel FTP component:

      [source,java]
      ------------------------------------------------
      from("direct:loadCamelFTP").
        to("grape:org.apache.camel/camel-ftp/2.15.2");
      ------------------------------------------------

      You can also specify the Maven coordinates by sending them to the
      endpoint as the exchange body:

      [source,java]
      ----------------------------------------------------------
      from("direct:loadCamelFTP").
        setBody().constant("org.apache.camel/camel-ftp/2.15.2").
        to("grape:defaultMavenCoordinates");
      ----------------------------------------------------------

      [[Grape-AddingtheGrapecomponenttotheproject]]
      Adding the Grape component to the project
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      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-grape</artifactId>
          <version>x.y.z</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Grape-Defaultpayloadtype]]
      Default payload type
      ^^^^^^^^^^^^^^^^^^^^

      By default Camel Grape component operates on the String payloads:

      [source,java]
      ------------------------------------------------------------------------------------------------
      producerTemplate.sendBody("grape:defaultMavenCoordinates", "org.apache.camel/camel-ftp/2.15.2");
      ------------------------------------------------------------------------------------------------

      But of course Camel build-in??link:type-converter.html[type conversion
      API] can perform the automatic data type transformations for you. In the
      example below Camel automatically converts binary payload into the
      String:

      ??

      [source,java]
      -----------------------------------------------------------------------------------------------------------
      producerTemplate.sendBody("grape:defaultMavenCoordinates", "org.apache.camel/camel-ftp/2.15.2".getBytes());
      -----------------------------------------------------------------------------------------------------------

      [[Grape-Headers]]
      Headers
      ^^^^^^^

      The following headers are recognized by the Grape component:

      [width="100%",cols="10%,10%,10%,10%,60%",options="header",]
      |=======================================================================
      |Header |Java constant |Endpoint type |Value type |Description

      |`CamelGrapeCommand` |`GrapeConstants.GRAPE_COMMAND` |Producer |`org.apache.camel.component.grape.GrapeCommand` |The command to be performed by the Grape endpoint. Default to `grab`.
      |=======================================================================

      [[Grape-Loadingcomponentsatruntime]]
      Loading components at runtime
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In order to load the new component at the router runtime, just grab the
      jar containing the given component:

      [source,java]
      -------------------------------------------------------------------------
      ProducerTemplate template = camelContext.createProducerTemplate();
      template.sendBody("grape:grape", "org.apache.camel/camel-stream/2.15.2");
      template.sendBody("stream:out", "msg");
      -------------------------------------------------------------------------

      [[Grape-Loadingprocessorsbeanatruntime]]
      Loading processors??bean??at runtime
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In order to load the new processor??bean ??with your custom business login
      at the router runtime, just grab the jar containing the required bean:

      [source,java]
      -----------------------------------------------------------------------------------------------------------------
      ProducerTemplate template = camelContext.createProducerTemplate();
      template.sendBody("grape:grape", "com.example/my-business-processors/1.0");
      int productId = 1;
      int price = template.requestBody("bean:com.example.PricingBean?method=currentProductPrice", productId, int.class)
      -----------------------------------------------------------------------------------------------------------------

      ??

      [[Grape-LoadingdeployedjarsafterCamelcontextrestart]]
      Loading deployed jars after Camel context restart
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      After you download new jar, you usually would like to have it loaded by
      the Camel again after the restart of the `CamelContext`. It is certainly
      possible, as Grape component keeps track of the jar files you have
      installed. In order to load again the installed jars on the context
      startup, use the??`GrapeEndpoint.loadPatches()`??method in your route:??

      ??

      [source,java]
      -------------------------------------------------------------------------
      import static org.apache.camel.component.grape.GrapeEndpoint.loadPatches;

      ...??
      camelContext.addRoutes(
        new RouteBuilder() {??
          @Override??
          public void configure() throws Exception {??
            loadPatches(camelContext);
      ??
            from("direct:loadCamelFTP").
              to("grape:org.apache.camel/camel-ftp/2.15.2");??
          }
        });
      -------------------------------------------------------------------------

      ??

      [[Grape-Managingtheinstalledjars]]
      Managing the installed jars
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If you would like to check what jars have been installed into the given
      `CamelContext`, send message to the grape endpoint with
      the??`CamelGrapeCommand` header set to `GrapeCommand.listPatches`:

      [source,java]
      ----------------------------------------------------------------------------------------
            from("netty-http4:http://0.0.0.0:80/patches").
              setHeader(GrapeConstats.GRAPE_COMMAND, constant(CamelGrapeCommand.listPatches)).
              to("grape:list");??
      ----------------------------------------------------------------------------------------

      Connecting the to the route defined above using the HTTP client returns
      the list of the jars installed by Grape component:

      [source,java]
      ---------------------------------------
      $ curl http://my-router.com/patches
      grape:org.apache.camel/camel-ftp/2.15.2
      grape:org.apache.camel/camel-jms/2.15.2
      ---------------------------------------

      If you would like to remove the installed jars, so these won't be loaded
      again after the context restart, use the??`GrapeCommand.``clearPatches`
      command:

      [source,java]
      -----------------------------------------------------------------------------------------
            from("netty-http4:http://0.0.0.0:80/patches").
              setHeader(GrapeConstats.GRAPE_COMMAND, constant(CamelGrapeCommand.clearPatches)).
              setBody().constant("Installed patches have been deleted.");??
      -----------------------------------------------------------------------------------------

      [[Grape-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-gridfs
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: gridfs
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: gridfs
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: gridfs
          spec:
            containers:
            - image: fabric8/connector-gridfs:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: gridfs
        syntax: gridfs:connectionBean
        title: MongoDBGridFS
        description: Component for working with MongoDB GridFS.
        label: database,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.gridfs.GridFsComponent
        groupId: org.apache.camel
        artifactId: camel-mongodb-gridfs
        version: 2.18.1
      componentProperties: {}
      properties:
        connectionBean:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of com.mongodb.Mongo to use.
        bucket:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: fs
          description: Sets the name of the GridFS bucket within the database. Default is fs.
        database:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the MongoDB database to target
        readPreference:
          kind: parameter
          group: common
          type: object
          javaType: com.mongodb.ReadPreference
          deprecated: false
          secret: false
          description: Sets a MongoDB ReadPreference on the Mongo connection. Read preferences set directly on the connection will be overridden by this setting. The link com.mongodb.ReadPreferencevalueOf(String) utility method is used to resolve the passed readPreference value. Some examples for the possible values are nearest primary or secondary etc.
        writeConcern:
          kind: parameter
          group: common
          type: string
          javaType: com.mongodb.WriteConcern
          enum:
          - ACKNOWLEDGED
          - W1
          - W2
          - W3
          - UNACKNOWLEDGED
          - JOURNALED
          - MAJORITY
          - SAFE
          deprecated: false
          secret: false
          description: Set the WriteConcern for write operations on MongoDB using the standard ones. Resolved from the fields of the WriteConcern class by calling the link WriteConcernvalueOf(String) method.
        writeConcernRef:
          kind: parameter
          group: common
          type: object
          javaType: com.mongodb.WriteConcern
          deprecated: false
          secret: false
          description: Set the WriteConcern for write operations on MongoDB passing in the bean ref to a custom WriteConcern which exists in the Registry. You can also use standard WriteConcerns by passing in their key. See the link setWriteConcern(String) setWriteConcern method.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Sets the delay between polls within the Consumer. Default is 500ms
        fileAttributeName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel-processed
          description: If the QueryType uses a FileAttribute this sets the name of the attribute that is used. Default is camel-processed.
        initialDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Sets the initialDelay before the consumer will start polling. Default is 1000ms
        persistentTSCollection:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel-timestamps
          description: If the QueryType uses a persistent timestamp this sets the name of the collection within the DB to store the timestamp.
        persistentTSObject:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel-timestamp
          description: If the QueryType uses a persistent timestamp this is the ID of the object in the collection to store the timestamp.
        query:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Additional query parameters (in JSON) that are used to configure the query used for finding files in the GridFsConsumer
        queryStrategy:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.gridfs.GridFsEndpoint.QueryStrategy
          deprecated: false
          secret: false
          defaultValue: TimeStamp
          description: Sets the QueryStrategy that is used for polling for new files. Default is Timestamp
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the operation this endpoint will execute against GridRS.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[MongoDBGridFS-CamelMongoDBGridFScomponent]]
      Camel MongoDB GridFS component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.17*

      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-mongodb-gridfs</artifactId>
          <version>x.y.z</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[MongoDBGridFS-URIformat]]
      URI format
      ~~~~~~~~~~

      [source,java]
      ------------------------------------------------------------------------------
      gridfs:connectionBean?database=databaseName&bucket=bucketName[&moreOptions...]
      ------------------------------------------------------------------------------

      [[MongoDBGridFS-options]]
      MongoDB GridFS options
      ~~~~~~~~~~~~~~~~~~~~~~


      // component options: START
      The MongoDBGridFS component has no options.
      // component options: END




      // endpoint options: START
      The MongoDBGridFS component supports 18 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | connectionBean | common |  | String | *Required* Name of com.mongodb.Mongo to use.
      | bucket | common | fs | String | Sets the name of the GridFS bucket within the database. Default is fs.
      | database | common |  | String | *Required* Sets the name of the MongoDB database to target
      | readPreference | common |  | ReadPreference | Sets a MongoDB ReadPreference on the Mongo connection. Read preferences set directly on the connection will be overridden by this setting. The link com.mongodb.ReadPreferencevalueOf(String) utility method is used to resolve the passed readPreference value. Some examples for the possible values are nearest primary or secondary etc.
      | writeConcern | common |  | WriteConcern | Set the WriteConcern for write operations on MongoDB using the standard ones. Resolved from the fields of the WriteConcern class by calling the link WriteConcernvalueOf(String) method.
      | writeConcernRef | common |  | WriteConcern | Set the WriteConcern for write operations on MongoDB passing in the bean ref to a custom WriteConcern which exists in the Registry. You can also use standard WriteConcerns by passing in their key. See the link setWriteConcern(String) setWriteConcern method.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delay | consumer | 500 | long | Sets the delay between polls within the Consumer. Default is 500ms
      | fileAttributeName | consumer | camel-processed | String | If the QueryType uses a FileAttribute this sets the name of the attribute that is used. Default is camel-processed.
      | initialDelay | consumer | 1000 | long | Sets the initialDelay before the consumer will start polling. Default is 1000ms
      | persistentTSCollection | consumer | camel-timestamps | String | If the QueryType uses a persistent timestamp this sets the name of the collection within the DB to store the timestamp.
      | persistentTSObject | consumer | camel-timestamp | String | If the QueryType uses a persistent timestamp this is the ID of the object in the collection to store the timestamp.
      | query | consumer |  | String | Additional query parameters (in JSON) that are used to configure the query used for finding files in the GridFsConsumer
      | queryStrategy | consumer | TimeStamp | QueryStrategy | Sets the QueryStrategy that is used for polling for new files. Default is Timestamp
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | operation | producer |  | String | Sets the operation this endpoint will execute against GridRS.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[MongoDBGridFS-ConfigurationofdatabaseinSpringXML]]
      Configuration of database in Spring XML
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      The following Spring XML creates a bean defining the connection to a
      MongoDB instance.

      [source,xml]
      ----------------------------------------------------------------------------------------------------------------------------------
      <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
          <bean id="mongoBean" class="com.mongodb.Mongo">
              <constructor-arg name="host" value="${mongodb.host}" />
              <constructor-arg name="port" value="${mongodb.port}" />
          </bean>
      </beans>
      ----------------------------------------------------------------------------------------------------------------------------------

      [[MongoDBGridFS-Sampleroute]]
      Sample route
      ^^^^^^^^^^^^

      The following route defined in Spring XML executes the operation
      link:mongodb-gridfs.html[*findOne*] on a collection.

      *Get a file from GridFS*

      [source,xml]
      ----------------------------------------------------------------------------------
      <route>
        <from uri="direct:start" />
        <!-- using bean 'mongoBean' defined above -->
        <to uri="gridfs:mongoBean?database=${mongodb.database}&amp;operation=findOne" />
        <to uri="direct:result" />
      </route>
      ----------------------------------------------------------------------------------

      ??

      [[MongoDBGridFS-GridFSoperations-producerendpoint]]
      GridFS operations - producer endpoint
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      [[MongoDBGridFS-count]]
      count
      +++++

      Returns the total number of file in the collection, returning an Integer
      as the OUT message body. +
       +

      [source,java]
      ---------------------------------------------------------------------------------
      // from("direct:count").to("gridfs?database=tickets&operation=count");
      Integer result = template.requestBodyAndHeader("direct:count", "irrelevantBody");
      assertTrue("Result is not of type Long", result instanceof Integer);
      ---------------------------------------------------------------------------------

      You can provide a filename header to provide a count of files matching
      that filename.

      [source,java]
      -------------------------------------------------------------------------------
      Map<String, Object> headers = new HashMap<String, Object>();
      headers.put(Exchange.FILE_NAME, "filename.txt");
      Integer count = template.requestBodyAndHeaders("direct:count", query, headers);
      -------------------------------------------------------------------------------

      [[MongoDBGridFS-listAll]]
      listAll
      +++++++

      Returns an Reader that lists all the filenames and their IDs in a tab
      separated stream.

      [source,java]
      ----------------------------------------------------------------------------------
      // from("direct:listAll").to("gridfs?database=tickets&operation=listAll");
      Reader result = template.requestBodyAndHeader("direct:listAll", "irrelevantBody");

      filename1.txt   1252314321
      filename2.txt   2897651254
      ----------------------------------------------------------------------------------

      ??

      [[MongoDBGridFS-findOne]]
      *findOne*
      +++++++++

      Finds a file in the GridFS system and sets the body to an InputStream of
      the content. ?? Also provides the metadata has headers. ??It uses
      Exchange.FILE_NAME from the incoming headers to determine the file to
      find.

      [source,java]
      -------------------------------------------------------------------------------------------------
      // from("direct:findOne").to("gridfs?database=tickets&operation=findOne");
      Map<String, Object> headers = new HashMap<String, Object>();
      headers.put(Exchange.FILE_NAME, "filename.txt");
      InputStream result = template.requestBodyAndHeaders("direct:findOne", "irrelevantBody", headers);
      -------------------------------------------------------------------------------------------------

      ??

      [[MongoDBGridFS-create]]
      create
      ++++++

      Creates a new file in the GridFs database. It uses the
      Exchange.FILE_NAME from the incoming headers for the name and the body
      contents (as an InputStream) as the content.

      [source,java]
      ------------------------------------------------------------------------
      // from("direct:create").to("gridfs?database=tickets&operation=create");
      Map<String, Object> headers = new HashMap<String, Object>();
      headers.put(Exchange.FILE_NAME, "filename.txt");
      InputStream stream = ... the data for the file ...
      template.requestBodyAndHeaders("direct:create", stream, headers);
      ------------------------------------------------------------------------

      [[MongoDBGridFS-remove]]
      remove
      ++++++

      Removes a file from the GridFS database.

      [source,java]
      ------------------------------------------------------------------------
      // from("direct:remove").to("gridfs?database=tickets&operation=remove");
      Map<String, Object> headers = new HashMap<String, Object>();
      headers.put(Exchange.FILE_NAME, "filename.txt");
      template.requestBodyAndHeaders("direct:remove", "", headers);
      ------------------------------------------------------------------------

      [[MongoDBGridFS-GridFSConsumer]]
      GridFS Consumer
      ^^^^^^^^^^^^^^^

      See also

      * http://www.mongodb.org/[MongoDB website]
      * http://en.wikipedia.org/wiki/NoSQL[NoSQL Wikipedia article]
      * http://api.mongodb.org/java/current/[MongoDB Java driver API docs -
      current version]
      *
      http://svn.apache.org/viewvc/camel/trunk/components/camel-mongodb/src/test/[Unit
      tests] for more examples of usage

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-guava-eventbus
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: guava-eventbus
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: guava-eventbus
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: guava-eventbus
          spec:
            containers:
            - image: fabric8/connector-guava-eventbus:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: guava-eventbus
        syntax: guava-eventbus:eventBusRef
        title: Guava EventBus
        description: The guava-eventbus component provides integration bridge between Camel and Google Guava EventBus.
        label: eventbus
        deprecated: false
        async: false
        javaType: org.apache.camel.component.guava.eventbus.GuavaEventBusComponent
        groupId: org.apache.camel
        artifactId: camel-guava-eventbus
        version: 2.18.1
      componentProperties:
        eventBus:
          kind: property
          type: object
          javaType: com.google.common.eventbus.EventBus
          deprecated: false
          secret: false
          description: To use the given Guava EventBus instance
        listenerInterface:
          kind: property
          type: string
          javaType: java.lang.Class<?>
          deprecated: false
          secret: false
          description: The interface with method(s) marked with the Subscribe annotation. Dynamic proxy will be created over the interface so it could be registered as the EventBus listener. Particularly useful when creating multi-event listeners and for handling DeadEvent properly. This option cannot be used together with eventClass option.
      properties:
        eventBusRef:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To lookup the Guava EventBus from the registry with the given name
        eventClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.Class<?>
          deprecated: false
          secret: false
          description: If used on the consumer side of the route will filter events received from the EventBus to the instances of the class and superclasses of eventClass. Null value of this option is equal to setting it to the java.lang.Object i.e. the consumer will capture all messages incoming to the event bus. This option cannot be used together with listenerInterface option.
        listenerInterface:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.Class<?>
          deprecated: false
          secret: false
          description: The interface with method(s) marked with the Subscribe annotation. Dynamic proxy will be created over the interface so it could be registered as the EventBus listener. Particularly useful when creating multi-event listeners and for handling DeadEvent properly. This option cannot be used together with eventClass option.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[GuavaEventBus-GuavaEventBusComponent]]
      Guava EventBus Component
      ~~~~~~~~~~~~~~~~~~~~~~~~

      *Available since Camel 2.10.0*

      The
      http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/eventbus/package-summary.html[Google
      Guava EventBus] allows publish-subscribe-style communication between
      components without requiring the components to explicitly register with
      one another (and thus be aware of each other). The *guava-eventbus:*
      component provides integration bridge between Camel and
      http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/eventbus/package-summary.html[Google
      Guava EventBus] infrastructure. With the latter component, messages
      exchanged with the Guava `EventBus` can be transparently forwarded to
      the Camel routes. EventBus component allows also to route body of Camel
      exchanges to the Guava `EventBus`.

      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-guava-eventbus</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[GuavaEventBus-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------
      guava-eventbus:busName[?options]
      --------------------------------

      Where *busName* represents the name of the
      `com.google.common.eventbus.EventBus` instance located in the Camel
      registry.

      [[GuavaEventBus-Options]]
      Options
      ^^^^^^^





      // component options: START
      The Guava EventBus component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | eventBus | EventBus | To use the given Guava EventBus instance
      | listenerInterface | Class<?> | The interface with method(s) marked with the Subscribe annotation. Dynamic proxy will be created over the interface so it could be registered as the EventBus listener. Particularly useful when creating multi-event listeners and for handling DeadEvent properly. This option cannot be used together with eventClass option.
      |=======================================================================
      {% endraw %}
      // component options: END





      // endpoint options: START
      The Guava EventBus component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | eventBusRef | common |  | String | To lookup the Guava EventBus from the registry with the given name
      | eventClass | common |  | Class<?> | If used on the consumer side of the route will filter events received from the EventBus to the instances of the class and superclasses of eventClass. Null value of this option is equal to setting it to the java.lang.Object i.e. the consumer will capture all messages incoming to the event bus. This option cannot be used together with listenerInterface option.
      | listenerInterface | common |  | Class<?> | The interface with method(s) marked with the Subscribe annotation. Dynamic proxy will be created over the interface so it could be registered as the EventBus listener. Particularly useful when creating multi-event listeners and for handling DeadEvent properly. This option cannot be used together with eventClass option.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[GuavaEventBus-Usage]]
      Usage
      ^^^^^

      Using `guava-eventbus` component on the consumer side of the route will
      capture messages sent to the Guava `EventBus` and forward them to the
      Camel route. Guava EventBus consumer processes incoming messages
      http://camel.apache.org/asynchronous-routing-engine.html[asynchronously].

      [source,java]
      -------------------------------------------------------
      SimpleRegistry registry = new SimpleRegistry();
      EventBus eventBus = new EventBus();
      registry.put("busName", eventBus);
      CamelContext camel = new DefaultCamelContext(registry);

      from("guava-eventbus:busName").to("seda:queue");

      eventBus.post("Send me to the SEDA queue.");
      -------------------------------------------------------

      Using `guava-eventbus` component on the producer side of the route will
      forward body of the Camel exchanges to the Guava `EventBus` instance.

      [source,java]
      ----------------------------------------------------------------------
      SimpleRegistry registry = new SimpleRegistry();
      EventBus eventBus = new EventBus();
      registry.put("busName", eventBus);
      CamelContext camel = new DefaultCamelContext(registry);

      from("direct:start").to("guava-eventbus:busName");

      ProducerTemplate producerTemplate = camel.createProducerTemplate();
      producer.sendBody("direct:start", "Send me to the Guava EventBus.");

      eventBus.register(new Object(){
        @Subscribe
        public void messageHander(String message) {
          System.out.println("Message received from the Camel: " + message);
        }
      });
      ----------------------------------------------------------------------

      [[GuavaEventBus-DeadEventconsiderations]]
      DeadEvent considerations
      ^^^^^^^^^^^^^^^^^^^^^^^^

      Keep in mind that due to the limitations caused by the design of the
      Guava EventBus, you cannot specify event class to be received by the
      listener without creating class annotated with `@Subscribe` method. This
      limitation implies that endpoint with `eventClass` option specified
      actually listens to all possible events (`java.lang.Object`) and filter
      appropriate messages programmatically at runtime. The snipped below
      demonstrates an appropriate excerpt from the Camel code base.

      [source,java]
      ----------------------------------------------------------------------------
      @Subscribe
      public void eventReceived(Object event) {
        if (eventClass == null || eventClass.isAssignableFrom(event.getClass())) {
          doEventReceived(event);
      ...
      ----------------------------------------------------------------------------

      This drawback of this approach is that `EventBus` instance used by Camel
      will never generate `com.google.common.eventbus.DeadEvent`
      notifications. If you want Camel to listen only to the precisely
      specified event (and therefore enable `DeadEvent` support), use
      `listenerInterface` endpoint option. Camel will create dynamic proxy
      over the interface you specify with the latter option and listen only to
      messages specified by the interface handler methods. The example of the
      listener interface with single method handling only `SpecificEvent`
      instances is demonstrated below.

      [source,java]
      ------------------------------------------
      package com.example;

      public interface CustomListener {

        @Subscribe
        void eventReceived(SpecificEvent event);

      }
      ------------------------------------------

      The listener presented above could be used in the endpoint definition as
      follows.

      [source,java]
      ---------------------------------------------------------------------------------------------
      from("guava-eventbus:busName?listenerInterface=com.example.CustomListener").to("seda:queue");
      ---------------------------------------------------------------------------------------------

      [[GuavaEventBus-Consumingmultipletypeofevents]]
      Consuming multiple type of events
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In order to define multiple type of events to be consumed by Guava
      EventBus consumer use `listenerInterface` endpoint option, as listener
      interface could provide multiple methods marked with the `@Subscribe`
      annotation.

      [source,java]
      ------------------------------------------------
      package com.example;

      public interface MultipleEventsListener {

        @Subscribe
        void someEventReceived(SomeEvent event);

        @Subscribe
        void anotherEventReceived(AnotherEvent event);

      }
      ------------------------------------------------

      The listener presented above could be used in the endpoint definition as
      follows.

      [source,java]
      -----------------------------------------------------------------------------------------------------
      from("guava-eventbus:busName?listenerInterface=com.example.MultipleEventsListener").to("seda:queue");
      -----------------------------------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-hazelcast
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: hazelcast
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: hazelcast
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: hazelcast
          spec:
            containers:
            - image: fabric8/connector-hazelcast:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: hazelcast
        syntax: hazelcast:command:cacheName
        title: Hazelcast
        description: The hazelcast component allows you to work with the Hazelcast distributed data grid / cache.
        label: cache,datagrid
        deprecated: false
        async: false
        javaType: org.apache.camel.component.hazelcast.HazelcastComponent
        groupId: org.apache.camel
        artifactId: camel-hazelcast
        version: 2.18.1
      componentProperties:
        hazelcastInstance:
          kind: property
          type: object
          javaType: com.hazelcast.core.HazelcastInstance
          deprecated: false
          secret: false
          description: The hazelcast instance reference which can be used for hazelcast endpoint. If you don't specify the instance reference camel use the default hazelcast instance from the camel-hazelcast instance.
      properties:
        command:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.hazelcast.HazelcastCommand
          enum:
          - map
          - multimap
          - queue
          - topic
          - seda
          - set
          - atomicvalue
          - instance
          - list
          - replicatedmap
          - ringbuffer
          deprecated: false
          secret: false
          description: What operation to perform.
        cacheName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the cache
        defaultOperation:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To specify a default operation to use if no operation header has been provided.
        hazelcastInstance:
          kind: parameter
          group: common
          type: object
          javaType: com.hazelcast.core.HazelcastInstance
          deprecated: false
          secret: false
          description: The hazelcast instance reference which can be used for hazelcast endpoint.
        hazelcastInstanceName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hazelcast instance reference name which can be used for hazelcast endpoint. If you don't specify the instance reference camel use the default hazelcast instance from the camel-hazelcast instance.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        concurrentConsumers:
          kind: parameter
          group: seda
          label: seda
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: To use concurrent consumers polling from the SEDA queue.
        pollTimeout:
          kind: parameter
          group: seda
          label: seda
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout used when consuming from the SEDA queue. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
        transacted:
          kind: parameter
          group: seda
          label: seda
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true then the consumer runs in transaction mode where the messages in the seda queue will only be removed if the transaction commits which happens when the processing is complete.
        transferExchange:
          kind: parameter
          group: seda
          label: seda
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true the whole Exchange will be transfered. If header or body contains not serializable objects they will be skipped.
    documentation.adoc: "[[HazelcastComponent-HazelcastComponent]]\nHazelcast Component\n\
      ~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.7*\n\nThe *hazelcast:* component\
      \ allows you to work with the\nhttp://www.hazelcast.com[Hazelcast] distributed\
      \ data grid / cache.\nHazelcast is a in memory data grid, entirely written in\
      \ Java (single\njar). It offers a great palette of different data stores like\
      \ map, multi\nmap (same key, n values), queue, list and atomic number. The main\
      \ reason\nto use Hazelcast is its simple cluster support. If you have enabled\n\
      multicast on your network you can run a cluster with hundred nodes with\nno\
      \ extra configuration. Hazelcast can simply configured to add\nadditional features\
      \ like n copies between nodes (default is 1), cache\npersistence, network configuration\
      \ (if needed), near cache, enviction\nand so on. For more information consult\
      \ the Hazelcast documentation on\nhttp://www.hazelcast.com/docs.jsp[http://www.hazelcast.com/docs.jsp].\n\
      \nMaven users will need to add the following dependency to their `pom.xml`\n\
      for this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-hazelcast</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[HazelcastComponent-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n\
      -------------------------------------------------------------------------------------------------------------------------\n\
      hazelcast:[ map | multimap | queue | topic | seda | set | atomicvalue | instance\
      \ | list | ringbuffer]:cachename[?options]\n-------------------------------------------------------------------------------------------------------------------------\n\
      \n* Topic support is available as of Camel 2.15.??*\n\n\n* RingBuffer support\
      \ is available as of Camel 2.16.??*\n\n[[HazelcastComponent-Options]]\nOptions\n\
      ^^^^^^^\n\n\n\n\n// component options: START\nThe Hazelcast component supports\
      \ 1 options which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| hazelcastInstance | HazelcastInstance |\
      \ The hazelcast instance reference which can be used for hazelcast endpoint.\
      \ If you don't specify the instance reference camel use the default hazelcast\
      \ instance from the camel-hazelcast instance.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n// endpoint options: START\n\
      The Hazelcast component supports 13 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| command | common |  |\
      \ HazelcastCommand | *Required* What operation to perform.\n| cacheName | common\
      \ |  | String | *Required* The name of the cache\n| defaultOperation | common\
      \ |  | int | To specify a default operation to use if no operation header has\
      \ been provided.\n| hazelcastInstance | common |  | HazelcastInstance | The\
      \ hazelcast instance reference which can be used for hazelcast endpoint.\n|\
      \ hazelcastInstanceName | common |  | String | The hazelcast instance reference\
      \ name which can be used for hazelcast endpoint. If you don't specify the instance\
      \ reference camel use the default hazelcast instance from the camel-hazelcast\
      \ instance.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n| concurrentConsumers\
      \ | seda | 1 | int | To use concurrent consumers polling from the SEDA queue.\n\
      | pollTimeout | seda | 1000 | int | The timeout used when consuming from the\
      \ SEDA queue. When a timeout occurs the consumer can check whether it is allowed\
      \ to continue running. Setting a lower value allows the consumer to react more\
      \ quickly upon shutdown.\n| transacted | seda | false | boolean | If set to\
      \ true then the consumer runs in transaction mode where the messages in the\
      \ seda queue will only be removed if the transaction commits which happens when\
      \ the processing is complete.\n| transferExchange | seda | false | boolean |\
      \ If set to true the whole Exchange will be transfered. If header or body contains\
      \ not serializable objects they will be skipped.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[HazelcastComponent-Sections]]\n\
      Sections\n^^^^^^^^\n\n1.  Usage of link:hazelcast-component.html[#map]\n2. \
      \ Usage of link:hazelcast-component.html[#multimap]\n3.  Usage of link:hazelcast-component.html[#queue]\n\
      4.  Usage of link:hazelcast-component.html[#topic]\n5.  Usage of link:hazelcast-component.html[#list]\n\
      6.  Usage of link:hazelcast-component.html[#seda]\n7.  Usage of link:hazelcast-component.html[atomic\
      \ number]\n8.  Usage of link:hazelcast-component.html[#cluster] support (instance)\n\
      9.  Usage of link:hazelcast-component.html[#replicatedmap]??\n10. Usage of??link:hazelcast-component.html[#ringbuffer]??\n\
      \n[[HazelcastComponent-UsageofMap]]\nUsage of Map\n^^^^^^^^^^^^\n\n[[HazelcastComponent-mapcacheproducer-to-map]]\n\
      Map cache producer - to(\"hazelcast:map:foo\")\n++++++++++++++++++++++++++++++++++++++++++++\n\
      \nIf you want to store a value in a map you can use the map cache\nproducer.\
      \ \n\nThe map cache producer provides follow operations specified by *CamelHazelcastOperationType*\
      \ header:\n\n* put\n* putIfAbsent\n* get\n* getAll\n* keySet\n* containsKey\n\
      * containsValue\n* delete\n* update\n* query\n* clear\n* evict\n* evictAll\n\
      \nAll operations are provide the inside the \"hazelcast.operation.type\" header\
      \ variable. In Java\nDSL you can use the constants from `org.apache.camel.component.hazelcast.HazelcastConstants`.\n\
      \nHeader Variables for the request message:\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n|`CamelHazelcastOperationType` |`String` | as already\
      \ described. \n\n|`CamelHazelcastObjectId` |`String` |the object id to store\
      \ / find your object inside the cache (not needed for the query operation)\n\
      |=======================================================================\n\n\
      *put* and *putIfAbsent* operations provide an eviction mechanism: \n\n[width=\"\
      100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n|`CamelHazelcastObjectTtlValue` |`Integer` | value\
      \ of TTL. \n\n|`CamelHazelcastObjectTtlUnit` |`java.util.concurrent.TimeUnit`\
      \ | value of time unit ( DAYS / HOURS / MINUTES / ....\n|=======================================================================\n\
      \nYou can call the samples with:\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------\n\
      template.sendBodyAndHeader(\"direct:[put|get|update|delete|query|evict]\", \"\
      my-foo\", HazelcastConstants.OBJECT_ID, \"4711\");\n-------------------------------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforput:]]\nSample for *put*:\n\nJava DSL:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------\n\
      from(\"direct:put\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX);\n------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:put\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>put</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:map:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \nSample for *put* with eviction:\n\nJava DSL:\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:put\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION))\n\
      .setHeader(HazelcastConstants.TTL_VALUE, constant(Long.valueOf(1)))\n.setHeader(HazelcastConstants.TTL_UNIT,\
      \ constant(TimeUnit.MINUTES))\n.toF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX);\n\
      ------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:put\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>put</constant>\n\
      \    </setHeader>\n    <setHeader headerName=\"HazelcastConstants.TTL_VALUE\"\
      >\n        <simple resultType=\"java.lang.Long\">1</simple>\n    </setHeader>\n\
      \    <setHeader headerName=\"HazelcastConstants.TTL_UNIT\">\n        <simple\
      \ resultType=\"java.util.concurrent.TimeUnit\">TimeUnit.MINUTES</simple>\n \
      \   </setHeader>\n    <to uri=\"hazelcast:map:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n\n[[HazelcastComponent-Sampleforget:]]\nSample for *get*:\n\nJava DSL:\n\n\
      [source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX)\n.to(\"seda:out\");\n\
      ------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:get\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>get</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:map:foo\" />\n    <to uri=\"seda:out\"\
      \ />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforupdate:]]\nSample for *update*:\n\nJava DSL:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"direct:update\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.UPDATE_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX);\n---------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:update\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>update</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:map:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Samplefordelete:]]\nSample for *delete*:\n\nJava DSL:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"direct:delete\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.DELETE_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX);\n---------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:delete\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>delete</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:map:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforquery]]\nSample for *query*\n\nJava DSL:\n\n\
      [source,java]\n--------------------------------------------------------------------------------------\n\
      from(\"direct:query\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.QUERY_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX)\n.to(\"seda:out\");\n\
      --------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:query\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>query</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:map:foo\" />\n    <to uri=\"seda:out\"\
      \ />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \nFor the query operation Hazelcast offers a SQL like syntax to query your\n\
      distributed map.\n\n[source,java]\n-------------------------------------------------------------------------------\n\
      String q1 = \"bar > 1000\";\ntemplate.sendBodyAndHeader(\"direct:query\", null,\
      \ HazelcastConstants.QUERY, q1);\n-------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-mapcacheconsumer-from-map]]\nMap cache consumer - from(\"\
      hazelcast:map:foo\")\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHazelcast\
      \ provides event listeners on their data grid. If you want to be\nnotified if\
      \ a cache will be manipulated, you can use the map consumer.\nThere're 4 events:\
      \ *put*, *update*, *delete* and *envict*. The event\ntype will be stored in\
      \ the \"*hazelcast.listener.action*\" header\nvariable. The map consumer provides\
      \ some additional information inside\nthese variables:\n\nHeader Variables inside\
      \ the response message:\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\"\
      ,]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastListenerTime` |`Long` |time of the\
      \ event in millis\n\n|`CamelHazelcastListenerType` |`String` |the map consumer\
      \ sets here \"cachelistener\"\n\n|`CamelHazelcastListenerAction` |`String` |type\
      \ of event - here *added*, *updated*, *envicted* and *removed*.\n\n|`CamelHazelcastObjectId`\
      \ |`String` |the oid of the object\n\n|`CamelHazelcastCacheName` |`String` |the\
      \ name of the cache - e.g. \"foo\"\n\n|`CamelHazelcastCacheType` |`String` |the\
      \ type of the cache - here map\n|=======================================================================\n\
      \nThe object value will be stored within *put* and *update* actions inside\n\
      the message body.\n\nHere's a sample:\n\n[source,java]\n--------------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%sfoo\", HazelcastConstants.MAP_PREFIX)\n.log(\"object...\"\
      )\n.choice()\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED))\n\
      \         .log(\"...added\")\n         .to(\"mock:added\")\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ENVICTED))\n\
      \         .log(\"...envicted\")\n         .to(\"mock:envicted\")\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.UPDATED))\n\
      \         .log(\"...updated\")\n         .to(\"mock:updated\")\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.REMOVED))\n\
      \         .log(\"...removed\")\n         .to(\"mock:removed\")\n    .otherwise()\n\
      \         .log(\"fail!\");\n--------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-UsageofMultiMap]]\nUsage of Multi Map\n^^^^^^^^^^^^^^^^^^\n\
      \n[[HazelcastComponent-multimapcacheproducer-to-multimap]]\nmultimap cache producer\
      \ - to(\"hazelcast:multimap:foo\")\n++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nA multimap is a cache where you can store n values to one key. The\nmultimap\
      \ producer provides 4 operations (put, get, removevalue, delete).\n\nHeader\
      \ Variables for the request message:\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastOperationType` |`String` |valid\
      \ values are: put, get, removevalue, delete *From Camel 2.16:* clear.\n\n|`CamelHazelcastObjectId`\
      \ |`String` |the object id to store / find your object inside the cache\n|=======================================================================\n\
      \n[[HazelcastComponent-Sampleforput:.1]]\nSample for *put*:\n\nJava DSL:\n\n\
      [source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:put\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION))\n\
      .to(String.format(\"hazelcast:%sbar\", HazelcastConstants.MULTIMAP_PREFIX));\n\
      ------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:put\" />\n    <log message=\"put..\"/>\n   \
      \     <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>put</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:multimap:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforremovevalue:]]\nSample for *removevalue*:\n\n\
      Java DSL:\n\n[source,java]\n--------------------------------------------------------------------------------------------\n\
      from(\"direct:removevalue\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.REMOVEVALUE_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.MULTIMAP_PREFIX);\n--------------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:removevalue\" />\n    <log message=\"removevalue...\"\
      />\n        <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>removevalue</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:multimap:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \nTo remove a value you have to provide the value you want to remove\ninside\
      \ the message body. If you have a multimap object\n\\{`key: \"4711\" values:\
      \ { \"my-foo\", \"my-bar\"`}} you have to put \"my-foo\"\ninside the message\
      \ body to remove the \"my-foo\" value.\n\n[[HazelcastComponent-Sampleforget:.1]]\n\
      Sample for *get*:\n\nJava DSL:\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.MULTIMAP_PREFIX)\n.to(\"seda:out\"\
      );\n------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:get\" />\n    <log message=\"get..\"/>\n   \
      \     <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>get</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:multimap:foo\" />\n    <to uri=\"\
      seda:out\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Samplefordelete:.1]]\nSample for *delete*:\n\nJava DSL:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"direct:delete\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.DELETE_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.MULTIMAP_PREFIX);\n---------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:delete\" />\n    <log message=\"delete..\"/>\n\
      \        <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>delete</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:multimap:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \nyou can call them in your test class with:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------\n\
      template.sendBodyAndHeader(\"direct:[put|get|removevalue|delete]\", \"my-foo\"\
      , HazelcastConstants.OBJECT_ID, \"4711\");\n------------------------------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-multimapcacheconsumer-from-multimap]]\nmultimap cache\
      \ consumer - from(\"hazelcast:multimap:foo\")\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nFor the multimap cache this component provides the same listeners /\nvariables\
      \ as for the map cache consumer (except the update and enviction\nlistener).\
      \ The only difference is the *multimap* prefix inside the URI.\nHere is a sample:\n\
      \n[source,java]\n--------------------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%sbar\", HazelcastConstants.MULTIMAP_PREFIX)\n.log(\"object...\"\
      )\n.choice()\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED))\n\
      \        .log(\"...added\")\n                .to(\"mock:added\")\n        //.when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ENVICTED))\n\
      \        //        .log(\"...envicted\")\n        //        .to(\"mock:envicted\"\
      )\n        .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.REMOVED))\n\
      \                .log(\"...removed\")\n                .to(\"mock:removed\"\
      )\n        .otherwise()\n                .log(\"fail!\");\n--------------------------------------------------------------------------------------------------\n\
      \nHeader Variables inside the response message:\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastListenerTime` |`Long` |time of the\
      \ event in millis\n\n|`CamelHazelcastListenerType` |`String` |the map consumer\
      \ sets here \"cachelistener\"\n\n|`CamelHazelcastListenerAction` |`String` |type\
      \ of event - here *added* and *removed* (and soon *envicted*)\n\n|`CamelHazelcastObjectId`\
      \ |`String` |the oid of the object\n\n|`CamelHazelcastCacheName` |`String` |the\
      \ name of the cache - e.g. \"foo\"\n\n|`CamelHazelcastCacheType` |`String` |the\
      \ type of the cache - here multimap\n|=======================================================================\n\
      \n[[HazelcastComponent-UsageofQueue]]\nUsage of Queue\n^^^^^^^^^^^^^^\n\n[[HazelcastComponent-Queueproducer]]\n\
      Queue producer ??? to(???hazelcast:queue:foo???)\n++++++++++++++++++++++++++++++++++++++++++\n\
      \nThe queue producer provides 6 operations (add, put, poll, peek, offer,\nremovevalue).\n\
      \n[[HazelcastComponent-Sampleforadd:]]\nSample for *add*:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------\n\
      from(\"direct:add\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.ADD_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.QUEUE_PREFIX);\n------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforput:.2]]\nSample for *put*:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------\n\
      from(\"direct:put\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.QUEUE_PREFIX);\n------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforpoll:]]\nSample for *poll*:\n\n[source,java]\n\
      -------------------------------------------------------------------------------------\n\
      from(\"direct:poll\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.POLL_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.QUEUE_PREFIX);\n-------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforpeek:]]\nSample for *peek*:\n\n[source,java]\n\
      -------------------------------------------------------------------------------------\n\
      from(\"direct:peek\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PEEK_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.QUEUE_PREFIX);\n-------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforoffer:]]\nSample for *offer*:\n\n[source,java]\n\
      --------------------------------------------------------------------------------------\n\
      from(\"direct:offer\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.OFFER_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.QUEUE_PREFIX);\n--------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforremovevalue:.1]]\nSample for *removevalue*:\n\
      \n[source,java]\n--------------------------------------------------------------------------------------------\n\
      from(\"direct:removevalue\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.REMOVEVALUE_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.QUEUE_PREFIX);\n--------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Queueconsumer]]\nQueue consumer ??? from(???hazelcast:queue:foo???)\n\
      ++++++++++++++++++++++++++++++++++++++++++++\n\nThe queue consumer provides\
      \ 2 operations (add, remove).\n\n[source,java]\n-------------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%smm\", HazelcastConstants.QUEUE_PREFIX)\n   .log(\"object...\"\
      )\n   .choice()\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED))\n\
      \            .log(\"...added\")\n        .to(\"mock:added\")\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.REMOVED))\n\
      \        .log(\"...removed\")\n        .to(\"mock:removed\")\n    .otherwise()\n\
      \        .log(\"fail!\");\n-------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-topic]]\n\n[[HazelcastComponent-UsageofTopic]]\nUsage\
      \ of Topic\n^^^^^^^^^^^^^^\n\n[[HazelcastComponent-Topicproducer]]\nTopic producer\
      \ ??? to(???hazelcast:topic:foo???)\n++++++++++++++++++++++++++++++++++++++++++\n\
      \nThe topic producer provides only one operation (publish).\n\n[[HazelcastComponent-Sampleforpublish:]]\n\
      Sample for??*publish*:\n\n[source,java]\n----------------------------------------------------------------------------------------\n\
      from(\"direct:add\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUBLISH_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.PUBLISH_OPERATION);\n----------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Topicconsumer]]\nTopic consumer ??? from(???hazelcast:topic:foo???)\n\
      ++++++++++++++++++++++++++++++++++++++++++++\n\nThe topic consumer provides\
      \ only one operation (received). This\ncomponent is supposed to support multiple\
      \ consumption as it's expected\nwhen it comes to topics so you are free to have\
      \ as much consumers as you\nneed on the same hazelcast topic.\n\n[source,java]\n\
      --------------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%sfoo\", HazelcastConstants.TOPIC_PREFIX)\n  .choice()\n \
      \   .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.RECEIVED))\n\
      \      .log(\"...message received\")\n    .otherwise()\n      .log(\"...this\
      \ should never have happened\")\n--------------------------------------------------------------------------------------------\n\
      \n??\n\n[[HazelcastComponent-UsageofList]]\nUsage of List\n^^^^^^^^^^^^^\n\n\
      [[HazelcastComponent-Listproducer]]\nList producer ??? to(???hazelcast:list:foo???)\n\
      ++++++++++++++++++++++++++++++++++++++++\n\nThe list producer provides 4 operations\
      \ (add, addAll, set, get,\nremovevalue, removeAll, clear).\n\n[[HazelcastComponent-Sampleforadd:.1]]\n\
      Sample for *add*:\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:add\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.ADD_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.LIST_PREFIX);\n------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforget:.2]]\nSample for *get*:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.LIST_PREFIX)\n.to(\"seda:out\"\
      );\n------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforsetvalue:]]\nSample for *setvalue*:\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------\n\
      from(\"direct:set\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.SETVALUE_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.LIST_PREFIX);\n-----------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforremovevalue:.2]]\nSample for *removevalue*:\n\
      \n[source,java]\n--------------------------------------------------------------------------------------------\n\
      from(\"direct:removevalue\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.REMOVEVALUE_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.LIST_PREFIX);\n--------------------------------------------------------------------------------------------\n\
      \nNote that??*CamelHazelcastObjectIndex* header is used for indexing\npurpose.\n\
      \n[[HazelcastComponent-Thelistconsumerprovides2operationsListconsumer]]\nThe\
      \ list consumer provides 2 operations (add, remove).List consumer ??? from(???hazelcast:list:foo???)\n\
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%smm\", HazelcastConstants.LIST_PREFIX)\n    .log(\"object...\"\
      )\n    .choice()\n        .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED))\n\
      \            .log(\"...added\")\n                        .to(\"mock:added\"\
      )\n        .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.REMOVED))\n\
      \            .log(\"...removed\")\n                        .to(\"mock:removed\"\
      )\n                .otherwise()\n                        .log(\"fail!\");\n\
      -----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-UsageofSEDA]]\nUsage of SEDA\n^^^^^^^^^^^^^\n\nSEDA component\
      \ differs from the rest components provided. It implements\na work-queue in\
      \ order to support asynchronous SEDA architectures,\nsimilar to the core \"\
      SEDA\" component.\n\n[[HazelcastComponent-SEDAproducer]]\nSEDA producer ???\
      \ to(???hazelcast:seda:foo???)\n++++++++++++++++++++++++++++++++++++++++\n\n\
      The SEDA producer provides no operations. You only send data to the\nspecified\
      \ queue.\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Default value |Description\n\n|`transferExchange` |`false` | if set to\
      \ true the whole Exchange will be transfered. If\nheader or body contains not\
      \ serializable objects, they will be skipped.\n|=======================================================================\n\
      \nJava DSL :\n\n[source,java]\n--------------------------\nfrom(\"direct:foo\"\
      )\n.to(\"hazelcast:seda:foo\");\n--------------------------\n\nSpring DSL :\n\
      \n[source,java]\n----------------------------------\n<route>\n   <from uri=\"\
      direct:start\" />\n   <to uri=\"hazelcast:seda:foo\" />\n</route>\n----------------------------------\n\
      \n[[HazelcastComponent-SEDAconsumer]]\nSEDA consumer ??? from(???hazelcast:seda:foo???)\n\
      ++++++++++++++++++++++++++++++++++++++++++\n\nThe SEDA consumer provides no\
      \ operations. You only retrieve data from\nthe specified queue.\n\n[width=\"\
      100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Default value |Description\n\n|`pollInterval` |`1000` |The timeout used\
      \ when consuming from the SEDA queue. When a timeout\noccurs, the consumer can\
      \ check whether it is allowed to continue\nrunning. Setting a lower value allows\
      \ the consumer to react more quickly\nupon shutdown. (*deprecated* from Camel\
      \ 2.15 onwards, use pollTimeout\ninstead).\n\n|`pollTimeout` |1000 | The timeout\
      \ used when consuming from the SEDA queue. When\na timeout occurs, the consumer\
      \ can check whether it is allowed to\ncontinue running. Setting a lower value\
      \ allows the consumer to react\nmore quickly upon shutdown.\n\n|`concurrentConsumers`\
      \ |`1` |To use concurrent consumers polling from the SEDA queue.\n\n|`transferExchange`\
      \ |`false`| if set to true the whole Exchange will be transfered. If\nheader\
      \ or body contains not serializable objects, they will be skipped.\n\n|`transacted`\
      \ |`false`| if set to true then the consumer runs in transaction\nmode, where\
      \ the messages in the seda queue will only be removed if the\ntransaction commits,\
      \ which happens when the processing is complete.\n|=======================================================================\n\
      \nJava DSL :\n\n[source,java]\n--------------------------\nfrom(\"hazelcast:seda:foo\"\
      )\n.to(\"mock:result\");\n--------------------------\n\nSpring DSL:\n\n[source,java]\n\
      -----------------------------------\n<route>\n  <from uri=\"hazelcast:seda:foo\"\
      \ />\n  <to uri=\"mock:result\" />\n</route>\n-----------------------------------\n\
      \n[[HazelcastComponent-UsageofAtomicNumber]]\nUsage of Atomic Number\n^^^^^^^^^^^^^^^^^^^^^^\n\
      \n* There is no consumer for this endpoint! *\n\n[[HazelcastComponent-atomicnumberproducer]]\n\
      atomic number producer - to(\"hazelcast:atomicnumber:foo\")\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nAn atomic number is an object that simply provides a grid wide number\n(long).\
      \ The operations for this producer are setvalue (set the number\nwith a given\
      \ value), get, increase (+1), decrease (-1) and destroy.\n\nHeader Variables\
      \ for the request message:\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"\
      header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastOperationType` |`String` |valid\
      \ values are: setvalue, get, increase, decrease, destroy \n|=======================================================================\n\
      \n[[HazelcastComponent-Sampleforset:]]\nSample for *set*:\n\nJava DSL:\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------\n\
      from(\"direct:set\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.SETVALUE_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.ATOMICNUMBER_PREFIX);\n-----------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:set\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>setvalue</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:atomicvalue:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \nProvide the value to set inside the message body (here the value is 10):\n\
      `template.sendBody(\"direct:set\", 10);`\n\n[[HazelcastComponent-Sampleforget:.3]]\n\
      Sample for *get*:\n\nJava DSL:\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.ATOMICNUMBER_PREFIX);\n------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:get\" />\n        <!-- If using version 2.8\
      \ and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>get</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:atomicvalue:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \nYou can get the number with\n`long body = template.requestBody(\"direct:get\"\
      , null, Long.class);`.\n\n[[HazelcastComponent-Sampleforincrement:]]\nSample\
      \ for *increment*:\n\nJava DSL:\n\n[source,java]\n------------------------------------------------------------------------------------------\n\
      from(\"direct:increment\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.INCREMENT_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.ATOMICNUMBER_PREFIX);\n------------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:increment\" />\n        <!-- If using version\
      \ 2.8 and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>increment</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:atomicvalue:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \nThe actual value (after increment) will be provided inside the message\nbody.\n\
      \n[[HazelcastComponent-Samplefordecrement:]]\nSample for *decrement*:\n\nJava\
      \ DSL:\n\n[source,java]\n------------------------------------------------------------------------------------------\n\
      from(\"direct:decrement\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.DECREMENT_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.ATOMICNUMBER_PREFIX);\n------------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:decrement\" />\n        <!-- If using version\
      \ 2.8 and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>decrement</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:atomicvalue:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \nThe actual value (after decrement) will be provided inside the message\nbody.\n\
      \n[[HazelcastComponent-Samplefordestroy]]\nSample for *destroy*\n\nJava DSL:\n\
      \n[source,java]\n----------------------------------------------------------------------------------------\n\
      from(\"direct:destroy\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.DESTROY_OPERATION))\n\
      .toF(\"hazelcast:%sfoo\", HazelcastConstants.ATOMICNUMBER_PREFIX);\n----------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:destroy\" />\n        <!-- If using version\
      \ 2.8 and above set headerName to \"CamelHazelcastOperationType\" -->\n    <setHeader\
      \ headerName=\"hazelcast.operation.type\">\n        <constant>destroy</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:atomicvalue:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-clustersupport]]\ncluster support\n^^^^^^^^^^^^^^^\n\n\
      * This endpoint provides no producer! *\n\n[[HazelcastComponent-instanceconsumer-from]]\n\
      instance consumer - from(\"hazelcast:instance:foo\")\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nHazelcast makes sense in one single \"server node\", but it's extremly\npowerful\
      \ in a clustered environment. The instance consumer fires if a\nnew cache instance\
      \ will join or leave the cluster.\n\nHere's a sample:\n\n[source,java]\n-----------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%sfoo\", HazelcastConstants.INSTANCE_PREFIX)\n.log(\"instance...\"\
      )\n.choice()\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED))\n\
      \        .log(\"...added\")\n        .to(\"mock:added\")\n    .otherwise()\n\
      \        .log(\"...removed\")\n        .to(\"mock:removed\");\n-----------------------------------------------------------------------------------------\n\
      \nEach event provides the following information inside the message header:\n\
      \nHeader Variables inside the response message:\n\n\n[width=\"100%\",cols=\"\
      10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastListenerTime` |`Long` |time of the\
      \ event in millis\n\n|`CamelHazelcastListenerType` |`String` |the map consumer\
      \ sets here \"instancelistener\"\n\n|`CamelHazelcastListenerAction` |`String`\
      \ |type of event - here *added* or *removed*.\n\n|`CamelHazelcastInstanceHost`\
      \ |`String` | host name of the instance\n\n|`CamelHazelcastInstancePort` |`Integer`\
      \ |port number of the instance\n|=======================================================================\n\
      \n[[HazelcastComponent-Usinghazelcastreference]]\nUsing hazelcast reference\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^\n\n[[HazelcastComponent-Byitsname]]\nBy its name\n\
      +++++++++++\n\n[source,xml]\n--------------------------------------------------------------------------------------------------------\n\
      <bean id=\"hazelcastLifecycle\" class=\"com.hazelcast.core.LifecycleService\"\
      \n      factory-bean=\"hazelcastInstance\" factory-method=\"getLifecycleService\"\
      \n      destroy-method=\"shutdown\" />\n\n<bean id=\"config\" class=\"com.hazelcast.config.Config\"\
      >\n    <constructor-arg type=\"java.lang.String\" value=\"HZ.INSTANCE\" />\n\
      </bean>\n\n<bean id=\"hazelcastInstance\" class=\"com.hazelcast.core.Hazelcast\"\
      \ factory-method=\"newHazelcastInstance\">\n    <constructor-arg type=\"com.hazelcast.config.Config\"\
      \ ref=\"config\"/>\n</bean>\n<camelContext xmlns=\"http://camel.apache.org/schema/spring\"\
      >\n    <route id=\"testHazelcastInstanceBeanRefPut\">\n        <from uri=\"\
      direct:testHazelcastInstanceBeanRefPut\"/>\n        <setHeader headerName=\"\
      CamelHazelcastOperationType\">\n            <constant>put</constant>\n     \
      \   </setHeader>\n        <to uri=\"hazelcast:map:testmap?hazelcastInstanceName=HZ.INSTANCE\"\
      />\n    </route>\n\n    <route id=\"testHazelcastInstanceBeanRefGet\">\n   \
      \     <from uri=\"direct:testHazelcastInstanceBeanRefGet\" />\n        <setHeader\
      \ headerName=\"CamelHazelcastOperationType\">\n            <constant>get</constant>\n\
      \        </setHeader>\n        <to uri=\"hazelcast:map:testmap?hazelcastInstanceName=HZ.INSTANCE\"\
      />\n        <to uri=\"seda:out\" />\n    </route>\n</camelContext>\n--------------------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Byinstance]]\nBy instance\n+++++++++++\n\n[source,xml]\n\
      ------------------------------------------------------------------------------\n\
      <bean id=\"hazelcastInstance\" class=\"com.hazelcast.core.Hazelcast\"\n    \
      \  factory-method=\"newHazelcastInstance\" />\n<bean id=\"hazelcastLifecycle\"\
      \ class=\"com.hazelcast.core.LifecycleService\"\n      factory-bean=\"hazelcastInstance\"\
      \ factory-method=\"getLifecycleService\"\n      destroy-method=\"shutdown\"\
      \ />\n\n<camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n   \
      \ <route id=\"testHazelcastInstanceBeanRefPut\">\n        <from uri=\"direct:testHazelcastInstanceBeanRefPut\"\
      />\n        <setHeader headerName=\"CamelHazelcastOperationType\">\n       \
      \     <constant>put</constant>\n        </setHeader>\n        <to uri=\"hazelcast:map:testmap?hazelcastInstance=#hazelcastInstance\"\
      />\n    </route>\n\n    <route id=\"testHazelcastInstanceBeanRefGet\">\n   \
      \     <from uri=\"direct:testHazelcastInstanceBeanRefGet\" />\n        <setHeader\
      \ headerName=\"CamelHazelcastOperationType\">\n            <constant>get</constant>\n\
      \        </setHeader>\n        <to uri=\"hazelcast:map:testmap?hazelcastInstance=#hazelcastInstance\"\
      />\n        <to uri=\"seda:out\" />\n    </route>\n</camelContext>\n------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-PublishinghazelcastinstanceasanOSGIservice]]\nPublishing\
      \ hazelcast instance as an OSGI service\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIf operating in an OSGI container and you would want to use one instance\n\
      of hazelcast across all bundles in the same container. You can publish\nthe\
      \ instance as an OSGI service and bundles using the cache al need is\nto reference\
      \ the service in the hazelcast endpoint.\n\n[[HazelcastComponent-BundleAcreateaninstanceandpublishesitasanOSGIservice]]\n\
      Bundle A create an instance and publishes it as an OSGI service\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n??\n\n[source,xml]\n--------------------------------------------------------------------------------------------------------\n\
      <bean id=\"config\" class=\"com.hazelcast.config.FileSystemXmlConfig\">\n  \
      \  <argument type=\"java.lang.String\" value=\"${hazelcast.config}\"/>\n</bean>\n\
      \n<bean id=\"hazelcastInstance\" class=\"com.hazelcast.core.Hazelcast\" factory-method=\"\
      newHazelcastInstance\">\n    <argument type=\"com.hazelcast.config.Config\"\
      \ ref=\"config\"/>\n</bean>\n\n<!-- publishing the hazelcastInstance as a service\
      \ -->\n<service ref=\"hazelcastInstance\" interface=\"com.hazelcast.core.HazelcastInstance\"\
      \ />\n--------------------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-BundleBusestheinstance]]\nBundle B uses the instance\n\
      ++++++++++++++++++++++++++\n\n[source,xml]\n--------------------------------------------------------------------------------------\n\
      <!-- referencing the hazelcastInstance as a service -->\n<reference ref=\"hazelcastInstance\"\
      \ interface=\"com.hazelcast.core.HazelcastInstance\" />\n\n<camelContext xmlns=\"\
      http://camel.apache.org/schema/blueprint\">\n    <route id=\"testHazelcastInstanceBeanRefPut\"\
      >\n        <from uri=\"direct:testHazelcastInstanceBeanRefPut\"/>\n        <setHeader\
      \ headerName=\"CamelHazelcastOperationType\">\n            <constant>put</constant>\n\
      \        </setHeader>\n        <to uri=\"hazelcast:map:testmap?hazelcastInstance=#hazelcastInstance\"\
      />\n    </route>\n\n    <route id=\"testHazelcastInstanceBeanRefGet\">\n   \
      \     <from uri=\"direct:testHazelcastInstanceBeanRefGet\" />\n        <setHeader\
      \ headerName=\"CamelHazelcastOperationType\">\n            <constant>get</constant>\n\
      \        </setHeader>\n        <to uri=\"hazelcast:map:testmap?hazelcastInstance=#hazelcastInstance\"\
      />\n        <to uri=\"seda:out\" />\n    </route>\n</camelContext>\n--------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-UsageofReplicatedmap]]\nUsage of Replicated map\n^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Avalaible from Camel 2.16*\n\n[[HazelcastComponent-replicatedmapcacheproducer]]\n\
      replicatedmap cache producer\n++++++++++++++++++++++++++++\n\nA replicated map\
      \ is a weakly consistent, distributed key-value data\nstructure with no data\
      \ partition. The replicatedmap producer provides 4\noperations (put, get, delete,\
      \ clear).\n\nHeader Variables for the request message:\n\n[width=\"100%\",cols=\"\
      10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastOperationType` |`String` | valid\
      \ values are: put, get, removevalue, delete\n\n|`CamelHazelcastObjectId` |`String`\
      \ | the object id to store / find your object inside the cache\n|=======================================================================\n\
      \n[[HazelcastComponent-Sampleforput:.3]]\nSample for??*put*:\n\nJava DSL:\n\n\
      [source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:put\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION))\n\
      .to(String.format(\"hazelcast:%sbar\", HazelcastConstants.REPLICATEDMAP_PREFIX));\n\
      ------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:put\" />\n    <log message=\"put..\"/>\n   \
      \     <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>put</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:replicatedmap:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforget:.4]]\nSample for??*get*:\n\nJava DSL:\n\n\
      [source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.REPLICATEDMAP_PREFIX)\n.to(\"seda:out\"\
      );\n------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:get\" />\n    <log message=\"get..\"/>\n   \
      \     <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>get</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:replicatedmap:foo\" />\n    <to uri=\"\
      seda:out\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Samplefordelete:.2]]\nSample for??*delete*:\n\nJava DSL:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"direct:delete\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.DELETE_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.REPLICATEDMAP_PREFIX);\n---------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:delete\" />\n    <log message=\"delete..\"/>\n\
      \        <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>delete</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:replicatedmap:foo\" />\n</route>\n\
      -----------------------------------------------------------------------------------------------\n\
      \nyou can call them in your test class with:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------\n\
      template.sendBodyAndHeader(\"direct:[put|get|delete|clear]\", \"my-foo\", HazelcastConstants.OBJECT_ID,\
      \ \"4711\");\n------------------------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-replicatedmapcacheconsumer]]\nreplicatedmap cache consumer\n\
      ++++++++++++++++++++++++++++\n\nFor the multimap cache this component provides\
      \ the same listeners /\nvariables as for the map cache consumer (except the\
      \ update and enviction\nlistener). The only difference is the??*multimap*??prefix\
      \ inside the URI.\nHere is a sample:\n\n[source,java]\n--------------------------------------------------------------------------------------------------\n\
      fromF(\"hazelcast:%sbar\", HazelcastConstants.MULTIMAP_PREFIX)\n.log(\"object...\"\
      )\n.choice()\n    .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ADDED))\n\
      \        .log(\"...added\")\n                .to(\"mock:added\")\n        //.when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.ENVICTED))\n\
      \        //        .log(\"...envicted\")\n        //        .to(\"mock:envicted\"\
      )\n        .when(header(HazelcastConstants.LISTENER_ACTION).isEqualTo(HazelcastConstants.REMOVED))\n\
      \                .log(\"...removed\")\n                .to(\"mock:removed\"\
      )\n        .otherwise()\n                .log(\"fail!\");\n--------------------------------------------------------------------------------------------------\n\
      \nHeader Variables inside the response message:\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastListenerTime` |`Long` |time of the\
      \ event in millis\n\n|`CamelHazelcastListenerType` |`String` |the map consumer\
      \ sets here \"cachelistener\"\n\n|`CamelHazelcastListenerAction` |`String` |type\
      \ of event - here *added* and *removed* (and soon *envicted*)\n\n|`CamelHazelcastObjectId`\
      \ |`String` | the oid of the object\n\n|`CamelHazelcastCacheName` |`String`\
      \ |the name of the cache - e.g. \"foo\"\n\n|`CamelHazelcastCacheType` |`String`\
      \ |the type of the cache - here replicatedmap\n|=======================================================================\n\
      \n[[HazelcastComponent-UsageofRingbuffer]]\nUsage of Ringbuffer\n^^^^^^^^^^^^^^^^^^^\n\
      \n*Avalaible from Camel 2.16*\n\n[[HazelcastComponent-ringbuffercacheproducer]]\n\
      ringbuffer cache producer \n+++++++++++++++++++++++++\n\nRingbuffer is a distributed\
      \ data structure where the data is stored in a\nring-like structure. You can\
      \ think of it as a circular array with a\ncertain capacity.??The ringbuffer\
      \ producer provides 5 operations (add,\nreadonceHead, readonceTail, remainingCapacity,\
      \ capacity).\n\nHeader Variables for the request message:\n\n[width=\"100%\"\
      ,cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHazelcastOperationType` |`String` |valid\
      \ values are: put, get, removevalue, delete\n\n|`CamelHazelcastObjectId` |`String`\
      \ |the object id to store / find your object inside the cache\n|=======================================================================\n\
      \n[[HazelcastComponent-Sampleforput:.4]]\nSample for??*put*:\n\nJava DSL:\n\n\
      [source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:put\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.ADD_OPERATION))\n\
      .to(String.format(\"hazelcast:%sbar\", HazelcastConstants.RINGBUFFER_PREFIX));\n\
      ------------------------------------------------------------------------------------\n\
      \nSpring DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:put\" />\n    <log message=\"put..\"/>\n   \
      \     <!-- If using version 2.8 and above set headerName to \"CamelHazelcastOperationType\"\
      \ -->\n    <setHeader headerName=\"hazelcast.operation.type\">\n        <constant>add</constant>\n\
      \    </setHeader>\n    <to uri=\"hazelcast:ringbuffer:foo\" />\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \n[[HazelcastComponent-Sampleforreadoncefromhead:]]\nSample for??*readonce from\
      \ head*:\n\nJava DSL:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.READ_ONCE_HEAD_OPERATION))\n\
      .toF(\"hazelcast:%sbar\", HazelcastConstants.RINGBUFFER_PREFIX)\n.to(\"seda:out\"\
      );\n-----------------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-hbase
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: hbase
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: hbase
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: hbase
          spec:
            containers:
            - image: fabric8/connector-hbase:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: hbase
        syntax: hbase:tableName
        title: HBase
        description: For reading/writing from/to an HBase store (Hadoop database).
        label: hadoop
        deprecated: false
        async: false
        javaType: org.apache.camel.component.hbase.HBaseComponent
        groupId: org.apache.camel
        artifactId: camel-hbase
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.hadoop.conf.Configuration
          deprecated: false
          secret: false
          description: To use the shared configuration
        poolMaxSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Maximum number of references to keep for each table in the HTable pool. The default value is 10.
      properties:
        tableName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the table
        cellMappingStrategyFactory:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.hbase.mapping.CellMappingStrategyFactory
          deprecated: false
          secret: false
          description: To use a custom CellMappingStrategyFactory that is responsible for mapping cells.
        filters:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<org.apache.hadoop.hbase.filter.Filter>
          deprecated: false
          secret: false
          description: A list of filters to use.
        mappingStrategyClassName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The class name of a custom mapping strategy implementation.
        mappingStrategyName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - header
          - body
          deprecated: false
          secret: false
          description: 'The strategy to use for mapping Camel messages to HBase columns.
            Supported values: header or body.'
        rowMapping:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: row.
          multiValue: true
          deprecated: false
          secret: false
          description: 'To map the key/values from the Map to a HBaseRow. The following
            keys is supported: rowId - The id of the row. This has limited use as the row
            usually changes per Exchange. rowType - The type to covert row id to. Supported
            operations: CamelHBaseScan. family - The column family. Supports a number suffix
            for referring to more than one columns. qualifier - The column qualifier. Supports
            a number suffix for referring to more than one columns. value - The value. Supports
            a number suffix for referring to more than one columns valueType - The value
            type. Supports a number suffix for referring to more than one columns. Supported
            operations: CamelHBaseGet and CamelHBaseScan.'
        rowModel:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.hbase.model.HBaseRow
          deprecated: false
          secret: false
          description: An instance of org.apache.camel.component.hbase.model.HBaseRow which describes how each row should be modeled
        userGroupInformation:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.hadoop.security.UserGroupInformation
          deprecated: false
          secret: false
          description: Defines privileges to communicate with HBase such as using kerberos.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Gets the maximum number of messages as a limit to poll at each polling. Is default unlimited but use 0 or negative number to disable it as unlimited.
        operation:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - CamelHBasePut
          - CamelHBaseGet
          - CamelHBaseScan
          - CamelHBaseDelete
          deprecated: false
          secret: false
          description: The HBase operation to perform
        remove:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If the option is true Camel HBase Consumer will remove the rows which it processes.
        removeHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.hbase.HBaseRemoveHandler
          deprecated: false
          secret: false
          description: To use a custom HBaseRemoveHandler that is executed when a row is to be removed.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        maxResults:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: The maximum number of rows to scan.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[hbase-HBaseComponent]]\nHBase Component\n~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.10*\n\nThis component provides an idemptotent repository,\
      \ producers and\nconsumers for http://hbase.apache.org/[Apache HBase].\n\nMaven\
      \ users will need to add the following dependency to their `pom.xml`\nfor this\
      \ component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-hbase</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[hbase-ApacheHBaseOverview]]\nApache HBase Overview\n^^^^^^^^^^^^^^^^^^^^^\n\
      \nHBase is an open-source, distributed, versioned, column-oriented store\nmodeled\
      \ after Google's Bigtable: A Distributed Storage System for\nStructured Data.\
      \ You can use HBase when you need random, realtime\nread/write access to your\
      \ Big Data. More information at\nhttp://hbase.apache.org[Apache HBase].\n\n\
      [[hbase-CamelandHBase]]\nCamel and HBase\n^^^^^^^^^^^^^^^\n\nWhen using a datasotre\
      \ inside a camel route, there is always the\nchalenge of specifying how the\
      \ camel message will stored to the\ndatastore. In document based stores things\
      \ are more easy as the message\nbody can be directly mapped to a document. In\
      \ relational databases an\nORM solution can be used to map properties to columns\
      \ etc. In column\nbased stores things are more challenging as there is no standard\
      \ way to\nperform that kind of mapping.\n\nHBase adds two additional challenges:\n\
      \n* HBase groups columns into families, so just mapping a property to a\ncolumn\
      \ using a name convention is just not enough.\n* HBase doesn't have the notion\
      \ of type, which means that it stores\neverything as byte[] and doesn't know\
      \ if the byte[] represents a String,\na Number, a serialized Java object or\
      \ just binary data.\n\nTo overcome these challenges, camel-hbase makes use of\
      \ the message\nheaders to specify the mapping of the message to HBase columns.\
      \ It also\nprovides the ability to use some camel-hbase provided classes that\
      \ model\nHBase data and can be easily convert to and from xml/json etc. +\n\
      \ Finally it provides the ability to the user to implement and use his\nown\
      \ mapping strategy.\n\nRegardless of the mapping strategy camel-hbase will convert\
      \ a message\ninto an org.apache.camel.component.hbase.model.HBaseData object\
      \ and use\nthat object for its internal operations.\n\n[[hbase-Configuringthecomponent]]\n\
      Configuring the component\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe HBase component\
      \ can be provided a custom HBaseConfiguration object\nas a property or it can\
      \ create an HBase configuration object on its own\nbased on the HBase related\
      \ resources that are found on classpath.\n\n[source,xml]\n-----------------------------------------------------------------------------\n\
      \    <bean id=\"hbase\" class=\"org.apache.camel.component.hbase.HBaseComponent\"\
      >\n        <property name=\"configuration\" ref=\"config\"/>\n    </bean>\n\
      -----------------------------------------------------------------------------\n\
      \nIf no configuration object is provided to the component, the component\nwill\
      \ create one. The created configuration will search the class path\nfor an hbase-site.xml\
      \ file, from which it will draw the configuration.\nYou can find more information\
      \ about how to configure HBase clients at:\nhttp://archive.apache.org/dist/hbase/docs/client_dependencies.html[HBase\n\
      client configuration and dependencies]\n\n[[hbase-HBaseProducer]]\nHBase Producer\n\
      ^^^^^^^^^^^^^^\n\nAs mentioned above camel provides produers endpoints for HBase.\
      \ This\nallows you to store, delete, retrieve or query data from HBase using\n\
      your camel routes.\n\n[source,java]\n-----------------------\nhbase://table[?options]\n\
      -----------------------\n\nwhere *table* is the table name.\n\nThe supported\
      \ operations are:\n\n* Put\n* Get\n* Delete\n* Scan\n\n[[hbase-SupportedURIoptions]]\n\
      Supported URI options\n+++++++++++++++++++++\n\n\n\n\n// component options:\
      \ START\nThe HBase component supports 2 options which are listed below.\n\n\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | Configuration | To use the\
      \ shared configuration\n| poolMaxSize | int | Maximum number of references to\
      \ keep for each table in the HTable pool. The default value is 10.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n// endpoint options: START\n\
      The HBase component supports 17 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| tableName | common | \
      \ | String | *Required* The name of the table\n| cellMappingStrategyFactory\
      \ | common |  | CellMappingStrategyFactory | To use a custom CellMappingStrategyFactory\
      \ that is responsible for mapping cells.\n| filters | common |  | List | A list\
      \ of filters to use.\n| mappingStrategyClassName | common |  | String | The\
      \ class name of a custom mapping strategy implementation.\n| mappingStrategyName\
      \ | common |  | String | The strategy to use for mapping Camel messages to HBase\
      \ columns. Supported values: header or body.\n| rowMapping | common |  | Map\
      \ | To map the key/values from the Map to a HBaseRow. The following keys is\
      \ supported: rowId - The id of the row. This has limited use as the row usually\
      \ changes per Exchange. rowType - The type to covert row id to. Supported operations:\
      \ CamelHBaseScan. family - The column family. Supports a number suffix for referring\
      \ to more than one columns. qualifier - The column qualifier. Supports a number\
      \ suffix for referring to more than one columns. value - The value. Supports\
      \ a number suffix for referring to more than one columns valueType - The value\
      \ type. Supports a number suffix for referring to more than one columns. Supported\
      \ operations: CamelHBaseGet and CamelHBaseScan.\n| rowModel | common |  | HBaseRow\
      \ | An instance of org.apache.camel.component.hbase.model.HBaseRow which describes\
      \ how each row should be modeled\n| userGroupInformation | common |  | UserGroupInformation\
      \ | Defines privileges to communicate with HBase such as using kerberos.\n|\
      \ bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | maxMessagesPerPoll | consumer |  | int | Gets the maximum number of messages\
      \ as a limit to poll at each polling. Is default unlimited but use 0 or negative\
      \ number to disable it as unlimited.\n| operation | consumer |  | String | The\
      \ HBase operation to perform\n| remove | consumer | true | boolean | If the\
      \ option is true Camel HBase Consumer will remove the rows which it processes.\n\
      | removeHandler | consumer |  | HBaseRemoveHandler | To use a custom HBaseRemoveHandler\
      \ that is executed when a row is to be removed.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| maxResults | producer | 100 | int | The maximum number of\
      \ rows to scan.\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[hbase-PutOperations.]]\nPut\
      \ Operations.\n+++++++++++++++\n\nHBase is a column based store, which allows\
      \ you to store data into a\nspecific column of a specific row. Columns are grouped\
      \ into families, so\nin order to specify a column you need to specify the column\
      \ family and\nthe qualifier of that column. To store data into a specific column\
      \ you\nneed to specify both the column and the row.\n\nThe simplest scenario\
      \ for storing data into HBase from a camel route,\nwould be to store part of\
      \ the message body to specified HBase column.\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:in\"/>\n            <!-- Set\
      \ the HBase Row -->\n            <setHeader headerName=\"CamelHBaseRowId\">\n\
      \                <el>${in.body.id}</el>\n            </setHeader>\n        \
      \    <!-- Set the HBase Value -->\n            <setHeader headerName=\"CamelHBaseValue\"\
      >\n                <el>${in.body.value}</el>\n            </setHeader>\n   \
      \         <to uri=\"hbase:mytable?operation=CamelHBasePut&amp;family=myfamily&amp;qualifier=myqualifier\"\
      />\n        </route>\n-----------------------------------------------------------------------------------------------------------\n\
      \nThe route above assumes that the message body contains an object that\nhas\
      \ an id and value property and will store the content of value in the\nHBase\
      \ column myfamily:myqualifier in the row specified by id. If we\nneeded to specify\
      \ more than one column/value pairs we could just specify\nadditional column\
      \ mappings. Notice that you must use numbers from the\n2nd header onwards, eg\
      \ RowId2, RowId3, RowId4, etc. Only the 1st header\ndoes not have the number\
      \ 1.\n\n[source,xml]\n------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:in\"/>\n            <!-- Set\
      \ the HBase Row 1st column -->\n            <setHeader headerName=\"CamelHBaseRowId\"\
      >\n                <el>${in.body.id}</el>\n            </setHeader>\n      \
      \      <!-- Set the HBase Row 2nd column -->\n            <setHeader headerName=\"\
      CamelHBaseRowId2\">\n                <el>${in.body.id}</el>\n            </setHeader>\n\
      \            <!-- Set the HBase Value for 1st column -->\n            <setHeader\
      \ headerName=\"CamelHBaseValue\">\n                <el>${in.body.value}</el>\n\
      \            </setHeader>\n            <!-- Set the HBase Value for 2nd column\
      \ -->\n            <setHeader headerName=\"CamelHBaseValue2\">\n           \
      \     <el>${in.body.othervalue}</el>\n            </setHeader>\n           \
      \ <to uri=\"hbase:mytable?operation=CamelHBasePut&amp;family=myfamily&amp;qualifier=myqualifier&amp;family2=myfamily&amp;qualifier2=myqualifier2\"\
      />\n        </route>\n------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nIt is important to remember that you can use uri options, message\nheaders\
      \ or a combination of both. It is recommended to specify constants\nas part\
      \ of the uri and dynamic values as headers. If something is\ndefined both as\
      \ header and as part of the uri, the header will be used.\n\n[[hbase-GetOperations.]]\n\
      Get Operations.\n+++++++++++++++\n\nA Get Operation is an operation that is\
      \ used to retrieve one or more\nvalues from a specified HBase row. To specify\
      \ what are the values that\nyou want to retrieve you can just specify them as\
      \ part of the uri or as\nmessage headers.\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:in\"/>\n            <!-- Set\
      \ the HBase Row of the Get -->\n            <setHeader headerName=\"CamelHBaseRowId\"\
      >\n                <el>${in.body.id}</el>\n            </setHeader>\n      \
      \      <to uri=\"hbase:mytable?operation=CamelHBaseGet&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long\"\
      />\n            <to uri=\"log:out\"/>\n        </route>\n----------------------------------------------------------------------------------------------------------------------------------------\n\
      \nIn the example above the result of the get operation will be stored as a\n\
      header with name CamelHBaseValue.\n\n[[hbase-DeleteOperations.]]\nDelete Operations.\n\
      ++++++++++++++++++\n\nYou can also you camel-hbase to perform HBase delete operation.\
      \ The\ndelete operation will remove an entire row. All that needs to be\nspecified\
      \ is one or more rows as part of the message headers.\n\n[source,xml]\n----------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:in\"/>\n            <!-- Set\
      \ the HBase Row of the Get -->\n            <setHeader headerName=\"CamelHBaseRowId\"\
      >\n                <el>${in.body.id}</el>\n            </setHeader>\n      \
      \      <to uri=\"hbase:mytable?operation=CamelHBaseDelete\"/>\n        </route>\n\
      ----------------------------------------------------------------\n\n[[hbase-ScanOperations.]]\n\
      Scan Operations.\n++++++++++++++++\n\nA scan operation is the equivalent of\
      \ a query in HBase. You can use the\nscan operation to retrieve multiple rows.\
      \ To specify what columns should\nbe part of the result and also specify how\
      \ the values will be converted\nto objects you can use either uri options or\
      \ headers.\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:in\"/>\n            <to uri=\"\
      hbase:mytable?operation=CamelHBaseScan&amp;family=myfamily&amp;qualifier=myqualifier&amp;valueType=java.lang.Long&amp;rowType=java.lang.String\"\
      />\n            <to uri=\"log:out\"/>\n        </route>\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nIn this case its probable that you also also need to specify a list of\nfilters\
      \ for limiting the results. You can specify a list of filters as\npart of the\
      \ uri and camel will return only the rows that satisfy *ALL*\nthe filters. \
      \ +\n To have a filter that will be aware of the information that is part of\n\
      the message, camel defines the ModelAwareFilter. This will allow your\nfilter\
      \ to take into consideration the model that is defined by the\nmessage and the\
      \ mapping strategy. +\n When using a ModelAwareFilter camel-hbase will apply\
      \ the selected\nmapping strategy to the in message, will create an object that\
      \ models\nthe mapping and will pass that object to the Filter.\n\nFor example\
      \ to perform scan using as criteria the message headers, you\ncan make use of\
      \ the ModelAwareColumnMatchingFilter as shown below.\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:scan\"/>\n            <!--\
      \ Set the Criteria -->\n            <setHeader headerName=\"CamelHBaseFamily\"\
      >\n                <constant>name</constant>\n            </setHeader>\n   \
      \         <setHeader headerName=\"CamelHBaseQualifier\">\n                <constant>first</constant>\n\
      \            </setHeader>\n            <setHeader headerName=\"CamelHBaseValue\"\
      >\n                <el>in.body.firstName</el>\n            </setHeader>\n  \
      \          <setHeader headerName=\"CamelHBaseFamily2\">\n                <constant>name</constant>\n\
      \            </setHeader>\n            <setHeader headerName=\"CamelHBaseQualifier2\"\
      >\n                <constant>last</constant>\n            </setHeader>\n   \
      \         <setHeader headerName=\"CamelHBaseValue2\">\n                <el>in.body.lastName</el>\n\
      \            </setHeader>\n            <!-- Set additional fields that you want\
      \ to be return by skipping value -->\n            <setHeader headerName=\"CamelHBaseFamily3\"\
      >\n                <constant>address</constant>\n            </setHeader>\n\
      \            <setHeader headerName=\"CamelHBaseQualifier3\">\n             \
      \   <constant>country</constant>\n            </setHeader>\n            <to\
      \ uri=\"hbase:mytable?operation=CamelHBaseScan&amp;filters=#myFilterList\"/>\n\
      \        </route>\n\n        <bean id=\"myFilters\" class=\"java.util.ArrayList\"\
      >\n            <constructor-arg>\n                <list>\n                 \
      \   <bean class=\"org.apache.camel.component.hbase.filters.ModelAwareColumnMatchingFilter\"\
      />\n                </list>\n            </constructor-arg>\n        </bean>\n\
      -----------------------------------------------------------------------------------------------------------\n\
      \nThe route above assumes that a pojo is with properties firstName and\nlastName\
      \ is passed as the message body, it takes those properties and\nadds them as\
      \ part of the message headers. The default mapping strategy\nwill create a model\
      \ object that will map the headers to HBase columns\nand will pass that model\
      \ the the ModelAwareColumnMatchingFilter. The\nfilter will filter out any rows,\
      \ that do not contain columns that match\nthe model. It is like query by example.\n\
      \n[[hbase-HBaseConsumer]]\nHBase Consumer\n^^^^^^^^^^^^^^\n\nThe Camel HBase\
      \ Consumer, will perform repeated scan on the specified\nHBase table and will\
      \ return the scan results as part of the message. You\ncan either specify header\
      \ mapping (default) or body mapping. The later\nwill just add the org.apache.camel.component.hbase.model.HBaseData\
      \ as\npart of the message body.\n\n[source,java]\n-----------------------\n\
      hbase://table[?options]\n-----------------------\n\nYou can specify the columns\
      \ that you want to be return and their types\nas part of the uri options:\n\n\
      [source,java]\n------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      hbase:mutable?family=name&qualifer=first&valueType=java.lang.String&family=address&qualifer=number&valueType2=java.lang.Integer&rowType=java.lang.Long\n\
      ------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nThe example above will create a model object that is consisted of the\nspecified\
      \ fields and the scan results will populate the model object\nwith values. Finally\
      \ the mapping strategy will be used to map this model\nto the camel message.\n\
      \n[[hbase-HBaseIdempotentrepository]]\nHBase Idempotent repository\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe camel-hbase component also provides an idempotent repository which\ncan\
      \ be used when you want to make sure that each message is processed\nonly once.\
      \ The HBase idempotent repository is configured with a table, a\ncolumn family\
      \ and a column qualifier and will create to that table a row\nper message.\n\
      \n[source,java]\n------------------------------------------------------------------------------------------------------------------\n\
      HBaseConfiguration configuration = HBaseConfiguration.create();\nHBaseIdempotentRepository\
      \ repository = new HBaseIdempotentRepository(configuration, tableName, family,\
      \ qualifier);\n\nfrom(\"direct:in\")\n  .idempotentConsumer(header(\"messageId\"\
      ), repository)\n  .to(\"log:out);\n------------------------------------------------------------------------------------------------------------------\n\
      \n[[hbase-HBaseMapping]]\nHBase Mapping\n^^^^^^^^^^^^^\n\nIt was mentioned above\
      \ that you the default mapping strategies are\n*header* and *body* mapping.\
      \ +\n Below you can find some detailed examples of how each mapping strategy\n\
      works.\n\n[[hbase-HBaseHeadermappingExamples]]\nHBase Header mapping Examples\n\
      +++++++++++++++++++++++++++++\n\nThe header mapping is the default mapping.\
      \ \n To put the value \"myvalue\" into HBase row \"myrow\" and column\n\"myfamily:mycolum\"\
      \ the message should contain the following headers:\n\n[width=\"100%\",cols=\"\
      10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Value\n\n|CamelHBaseRowId |myrow\n\n|CamelHBaseFamily |myfamily\n\n\
      |CamelHBaseQualifier |myqualifier\n\n|CamelHBaseValue |myvalue\n|=======================================================================\n\
      \nTo put more values for different columns and / or different rows you can\n\
      specify additional headers suffixed with the index of the headers, e.g:\n\n\
      [width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Value\n\n|CamelHBaseRowId |myrow\n\n|CamelHBaseFamily |myfamily\n\n\
      |CamelHBaseQualifier |myqualifier\n\n|CamelHBaseValue |myvalue\n\n|CamelHBaseRowId2\
      \ |myrow2\n\n|CamelHBaseFamily2 |myfamily\n\n|CamelHBaseQualifier2 |myqualifier\n\
      \n|CamelHBaseValue2 |myvalue2\n|=======================================================================\n\
      \nIn the case of retrieval operations such as get or scan you can also\nspecify\
      \ for each column the type that you want the data to be converted\nto. For exampe:\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Value\n\n|CamelHBaseFamily |myfamily\n\n|CamelHBaseQualifier |myqualifier\n\
      \n|CamelHBaseValueType |Long\n|=======================================================================\n\
      \nPlease note that in order to avoid boilerplate headers that are\nconsidered\
      \ constant for all messages, you can also specify them as part\nof the endpoint\
      \ uri, as you will see below.\n\n[[hbase-BodymappingExamples]]\nBody mapping\
      \ Examples\n+++++++++++++++++++++\n\nIn order to use the body mapping strategy\
      \ you will have to specify the\noption mappingStrategy as part of the uri, for\
      \ example:\n\n[source,java]\n----------------------------------\nhbase:mytable?mappingStrategyName=body\n\
      ----------------------------------\n\nTo use the body mapping strategy the body\
      \ needs to contain an instance\nof org.apache.camel.component.hbase.model.HBaseData.\
      \ You can construct t\n\n[source,java]\n---------------------------------\n\
      HBaseData data = new HBaseData();\nHBaseRow row = new HBaseRow();\nrow.setId(\"\
      myRowId\");\nHBaseCell cell = new HBaseCell();\ncell.setFamily(\"myfamily\"\
      );\ncell.setQualifier(\"myqualifier\");\ncell.setValue(\"myValue\");\nrow.getCells().add(cell);\n\
      data.addRows().add(row);\n---------------------------------\n\nThe object above\
      \ can be used for example in a put operation and will\nresult in creating or\
      \ updating the row with id myRowId and add the value\nmyvalue to the column\
      \ myfamily:myqualifier. +\n The body mapping strategy might not seem very appealing\
      \ at first. The\nadvantage it has over the header mapping strategy is that the\
      \ HBaseData\nobject can be easily converted to or from xml/json.\n\n[[hbase-Seealso]]\n\
      See also\n^^^^^^^^\n\n* link:polling-consumer.html[Polling Consumer]\n* http://hbase.apache.org[Apache\
      \ HBase]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-hdfs
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: hdfs
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: hdfs
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: hdfs
          spec:
            containers:
            - image: fabric8/connector-hdfs:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: hdfs
        syntax: hdfs:hostName:port/path
        title: HDFS
        description: For reading/writing from/to an HDFS filesystem using Hadoop 1.x.
        label: hadoop,file
        deprecated: true
        async: false
        javaType: org.apache.camel.component.hdfs.HdfsComponent
        groupId: org.apache.camel
        artifactId: camel-hdfs
        version: 2.18.1
      componentProperties:
        jAASConfiguration:
          kind: property
          type: object
          javaType: javax.security.auth.login.Configuration
          deprecated: false
          secret: false
          description: To use the given configuration for security with JAAS.
      properties:
        hostName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HDFS host to use
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8020"
          description: HDFS port to use
        path:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The directory path to use
        connectOnStartup:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to connect to the HDFS file system on starting the producer/consumer. If false then the connection is created on-demand. Notice that HDFS may take up till 15 minutes to establish a connection as it has hardcoded 45 x 20 sec redelivery. By setting this option to false allows your application to startup and not block for up till 15 minutes.
        fileSystemType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs.HdfsFileSystemType
          enum:
          - LOCAL
          - HDFS
          deprecated: false
          secret: false
          defaultValue: HDFS
          description: Set to LOCAL to not use HDFS but local java.io.File instead.
        fileType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs.HdfsFileType
          enum:
          - NORMAL_FILE
          - SEQUENCE_FILE
          - MAP_FILE
          - BLOOMMAP_FILE
          - ARRAY_FILE
          deprecated: false
          secret: false
          defaultValue: NORMAL_FILE
          description: The file type to use. For more details see Hadoop HDFS documentation about the various files types.
        keyType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs.WritableType
          enum:
          - NULL
          - BOOLEAN
          - BYTE
          - INT
          - FLOAT
          - LONG
          - DOUBLE
          - TEXT
          - BYTES
          deprecated: false
          secret: false
          defaultValue: NULL
          description: The type for the key in case of sequence or map files.
        owner:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The file owner must match this owner for the consumer to pickup the file. Otherwise the file is skipped.
        valueType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs.WritableType
          enum:
          - NULL
          - BOOLEAN
          - BYTE
          - INT
          - FLOAT
          - LONG
          - DOUBLE
          - TEXT
          - BYTES
          deprecated: false
          secret: false
          defaultValue: BYTES
          description: The type for the key in case of sequence or map files
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The interval (milliseconds) between the directory scans.
        initialDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: For the consumer how much to wait (milliseconds) before to start scanning the directory.
        pattern:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '*'
          description: The pattern used for scanning the directory
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        append:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Append to existing file. Notice that not all HDFS file systems support the append option.
        overwrite:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to overwrite existing files with the same name
        blockSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "67108864"
          description: The size of the HDFS blocks
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: The buffer size used by HDFS
        checkIdleInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "500"
          description: How often (time in millis) in to run the idle checker background task. This option is only in use if the splitter strategy is IDLE.
        chunkSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: When reading a normal file this is split into chunks producing a message per chunk.
        compressionCodec:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: org.apache.camel.component.hdfs.HdfsCompressionCodec
          enum:
          - DEFAULT
          - GZIP
          - BZIP2
          deprecated: false
          secret: false
          defaultValue: DEFAULT
          description: The compression codec to use
        compressionType:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.hadoop.io.SequenceFile.CompressionType
          deprecated: false
          secret: false
          defaultValue: NONE
          description: The compression type to use (is default not in use)
        openedSuffix:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: opened
          description: When a file is opened for reading/writing the file is renamed with this suffix to avoid to read it during the writing phase.
        readSuffix:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: read
          description: Once the file has been read is renamed with this suffix to avoid to read it again.
        replication:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: short
          deprecated: false
          secret: false
          defaultValue: "3"
          description: The HDFS replication factor
        splitStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'In the current version of Hadoop opening a file in append mode is
            disabled since it''s not very reliable. So for the moment it''s only possible
            to create new files. The Camel HDFS endpoint tries to solve this problem in
            this way: If the split strategy option has been defined the hdfs path will be
            used as a directory and files will be created using the configured UuidGenerator.
            Every time a splitting condition is met a new file is created. The splitStrategy
            option is defined as a string with the following syntax: splitStrategy=ST:valueST:value...
            where ST can be: BYTES a new file is created and the old is closed when the
            number of written bytes is more than value MESSAGES a new file is created and
            the old is closed when the number of written messages is more than value IDLE
            a new file is created and the old is closed when no writing happened in the
            last value milliseconds'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[HDFS-HDFSComponent]]
      HDFS Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.8*

      The *hdfs* component enables you to read and write messages from/to an
      HDFS file system. HDFS is the distributed file system at the heart of
      http://hadoop.apache.org[Hadoop].

      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-hdfs</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[HDFS-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------
      hdfs://hostname[:port][/path][?options]
      ---------------------------------------

      You can append query options to the URI in the following format,
      `?option=value&option=value&...` +
       The path is treated in the following way:

      1.  as a consumer, if it's a file, it just reads the file, otherwise if
      it represents a directory it scans all the file under the path
      satisfying the configured pattern. All the files under that directory
      must be of the same type.
      2.  as a producer, if at least one split strategy is defined, the path
      is considered a directory and under that directory the producer creates
      a different file per split named using the configured
      link:uuidgenerator.html[UuidGenerator].

      *Note*

      When consuming from hdfs then in normal mode, a file is split into
      chunks, producing a message per chunk. You can configure the size of the
      chunk using the chunkSize option. If you want to read from hdfs and
      write to a regular file using the file component, then you can use the
      fileMode=Append to append each of the chunks together.

      ??

      [[HDFS-Options]]
      Options
      ^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | jAASConfiguration | Configuration | To use the given configuration for security with JAAS.
      |=======================================================================
      {% endraw %}
      // component options: END







      // endpoint options: START
      The HDFS component supports 41 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | hostName | common |  | String | *Required* HDFS host to use
      | port | common | 8020 | int | HDFS port to use
      | path | common |  | String | *Required* The directory path to use
      | connectOnStartup | common | true | boolean | Whether to connect to the HDFS file system on starting the producer/consumer. If false then the connection is created on-demand. Notice that HDFS may take up till 15 minutes to establish a connection as it has hardcoded 45 x 20 sec redelivery. By setting this option to false allows your application to startup and not block for up till 15 minutes.
      | fileSystemType | common | HDFS | HdfsFileSystemType | Set to LOCAL to not use HDFS but local java.io.File instead.
      | fileType | common | NORMAL_FILE | HdfsFileType | The file type to use. For more details see Hadoop HDFS documentation about the various files types.
      | keyType | common | NULL | WritableType | The type for the key in case of sequence or map files.
      | owner | common |  | String | The file owner must match this owner for the consumer to pickup the file. Otherwise the file is skipped.
      | valueType | common | BYTES | WritableType | The type for the key in case of sequence or map files
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delay | consumer | 1000 | long | The interval (milliseconds) between the directory scans.
      | initialDelay | consumer |  | long | For the consumer how much to wait (milliseconds) before to start scanning the directory.
      | pattern | consumer | * | String | The pattern used for scanning the directory
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | append | producer | false | boolean | Append to existing file. Notice that not all HDFS file systems support the append option.
      | overwrite | producer | true | boolean | Whether to overwrite existing files with the same name
      | blockSize | advanced | 67108864 | long | The size of the HDFS blocks
      | bufferSize | advanced | 4096 | int | The buffer size used by HDFS
      | checkIdleInterval | advanced | 500 | int | How often (time in millis) in to run the idle checker background task. This option is only in use if the splitter strategy is IDLE.
      | chunkSize | advanced | 4096 | int | When reading a normal file this is split into chunks producing a message per chunk.
      | compressionCodec | advanced | DEFAULT | HdfsCompressionCodec | The compression codec to use
      | compressionType | advanced | NONE | CompressionType | The compression type to use (is default not in use)
      | openedSuffix | advanced | opened | String | When a file is opened for reading/writing the file is renamed with this suffix to avoid to read it during the writing phase.
      | readSuffix | advanced | read | String | Once the file has been read is renamed with this suffix to avoid to read it again.
      | replication | advanced | 3 | short | The HDFS replication factor
      | splitStrategy | advanced |  | String | In the current version of Hadoop opening a file in append mode is disabled since it's not very reliable. So for the moment it's only possible to create new files. The Camel HDFS endpoint tries to solve this problem in this way: If the split strategy option has been defined the hdfs path will be used as a directory and files will be created using the configured UuidGenerator. Every time a splitting condition is met a new file is created. The splitStrategy option is defined as a string with the following syntax: splitStrategy=ST:valueST:value... where ST can be: BYTES a new file is created and the old is closed when the number of written bytes is more than value MESSAGES a new file is created and the old is closed when the number of written messages is more than value IDLE a new file is created and the old is closed when no writing happened in the last value milliseconds
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END





      [[HDFS-KeyTypeandValueType]]
      KeyType and ValueType
      +++++++++++++++++++++

      * NULL it means that the key or the value is absent
      * BYTE for writing a byte, the java Byte class is mapped into a BYTE
      * BYTES for writing a sequence of bytes. It maps the java ByteBuffer
      class
      * INT for writing java integer
      * FLOAT for writing java float
      * LONG for writing java long
      * DOUBLE for writing java double
      * TEXT for writing java strings

      BYTES is also used with everything else, for example, in Camel a file is
      sent around as an InputStream, int this case is written in a sequence
      file or a map file as a sequence of bytes.

      [[HDFS-SplittingStrategy]]
      Splitting Strategy
      ^^^^^^^^^^^^^^^^^^

      In the current version of Hadoop opening a file in append mode is
      disabled since it's not very reliable. So, for the moment, it's only
      possible to create new files. The Camel HDFS endpoint tries to solve
      this problem in this way:

      * If the split strategy option has been defined, the hdfs path will be
      used as a directory and files will be created using the configured
      link:uuidgenerator.html[UuidGenerator]
      * Every time a splitting condition is met, a new file is created. +
       The splitStrategy option is defined as a string with the following
      syntax: +
       splitStrategy=<ST>:<value>,<ST>:<value>,*

      where <ST> can be:

      * BYTES a new file is created, and the old is closed when the number of
      written bytes is more than <value>
      * MESSAGES a new file is created, and the old is closed when the number
      of written messages is more than <value>
      * IDLE a new file is created, and the old is closed when no writing
      happened in the last <value> milliseconds

      *Note*

      note that this strategy currently requires either setting an IDLE value
      or setting the HdfsConstants.HDFS_CLOSE header to false to use the
      BYTES/MESSAGES configuration...otherwise, the file will be closed with
      each message

      for example:

      [source,java]
      ----------------------------------------------------------------
      hdfs://localhost/tmp/simple-file?splitStrategy=IDLE:1000,BYTES:5
      ----------------------------------------------------------------

      it means: a new file is created either when it has been idle for more
      than 1 second or if more than 5 bytes have been written. So, running
      `hadoop fs -ls /tmp/simple-file` you'll see that multiple files have
      been created.

      [[HDFS-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The following headers are supported by this component:

      [[HDFS-Produceronly]]
      Producer only
      +++++++++++++

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

      |`CamelFileName` |*Camel 2.13:* Specifies the name of the file to write (relative to the
      endpoint path). The name can be a `String` or an
      link:expression.html[Expression] object. Only relevant when not using a
      split strategy.
      |=======================================================================

      [[HDFS-Controllingtoclosefilestream]]
      Controlling to close file stream
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.10.4*

      When using the link:hdfs.html[HDFS] producer *without* a split strategy,
      then the file output stream is by default closed after the write.
      However you may want to keep the stream open, and only explicitly close
      the stream later. For that you can use the header
      `HdfsConstants.HDFS_CLOSE` (value = `"CamelHdfsClose"`) to control this.
      Setting this value to a boolean allows you to explicit control whether
      the stream should be closed or not.

      Notice this does not apply if you use a split strategy, as there are
      various strategies that can control when the stream is closed.

      [[HDFS-UsingthiscomponentinOSGi]]
      Using this component in OSGi
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This component is fully functional in an OSGi environment, however, it
      requires some actions from the user. Hadoop uses the thread context
      class loader in order to load resources. Usually, the thread context
      classloader will be the bundle class loader of the bundle that contains
      the routes. So, the default configuration files need to be visible from
      the bundle class loader. A typical way to deal with it is to keep a copy
      of core-default.xml in your bundle root. That file can be found in the
      hadoop-common.jar.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-hdfs2
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: hdfs2
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: hdfs2
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: hdfs2
          spec:
            containers:
            - image: fabric8/connector-hdfs2:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: hdfs2
        syntax: hdfs2:hostName:port/path
        title: HDFS2
        description: For reading/writing from/to an HDFS filesystem using Hadoop 2.x.
        label: hadoop,file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.hdfs2.HdfsComponent
        groupId: org.apache.camel
        artifactId: camel-hdfs2
        version: 2.18.1
      componentProperties:
        jAASConfiguration:
          kind: property
          type: object
          javaType: javax.security.auth.login.Configuration
          deprecated: false
          secret: false
          description: To use the given configuration for security with JAAS.
      properties:
        hostName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HDFS host to use
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8020"
          description: HDFS port to use
        path:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The directory path to use
        connectOnStartup:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to connect to the HDFS file system on starting the producer/consumer. If false then the connection is created on-demand. Notice that HDFS may take up till 15 minutes to establish a connection as it has hardcoded 45 x 20 sec redelivery. By setting this option to false allows your application to startup and not block for up till 15 minutes.
        fileSystemType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs2.HdfsFileSystemType
          enum:
          - LOCAL
          - HDFS
          deprecated: false
          secret: false
          defaultValue: HDFS
          description: Set to LOCAL to not use HDFS but local java.io.File instead.
        fileType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs2.HdfsFileType
          enum:
          - NORMAL_FILE
          - SEQUENCE_FILE
          - MAP_FILE
          - BLOOMMAP_FILE
          - ARRAY_FILE
          deprecated: false
          secret: false
          defaultValue: NORMAL_FILE
          description: The file type to use. For more details see Hadoop HDFS documentation about the various files types.
        keyType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs2.WritableType
          enum:
          - NULL
          - BOOLEAN
          - BYTE
          - INT
          - FLOAT
          - LONG
          - DOUBLE
          - TEXT
          - BYTES
          deprecated: false
          secret: false
          defaultValue: NULL
          description: The type for the key in case of sequence or map files.
        owner:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The file owner must match this owner for the consumer to pickup the file. Otherwise the file is skipped.
        valueType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.hdfs2.WritableType
          enum:
          - NULL
          - BOOLEAN
          - BYTE
          - INT
          - FLOAT
          - LONG
          - DOUBLE
          - TEXT
          - BYTES
          deprecated: false
          secret: false
          defaultValue: BYTES
          description: The type for the key in case of sequence or map files
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The interval (milliseconds) between the directory scans.
        initialDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: For the consumer how much to wait (milliseconds) before to start scanning the directory.
        pattern:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '*'
          description: The pattern used for scanning the directory
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        append:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Append to existing file. Notice that not all HDFS file systems support the append option.
        overwrite:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to overwrite existing files with the same name
        blockSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "67108864"
          description: The size of the HDFS blocks
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: The buffer size used by HDFS
        checkIdleInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "500"
          description: How often (time in millis) in to run the idle checker background task. This option is only in use if the splitter strategy is IDLE.
        chunkSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4096"
          description: When reading a normal file this is split into chunks producing a message per chunk.
        compressionCodec:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: org.apache.camel.component.hdfs2.HdfsCompressionCodec
          enum:
          - DEFAULT
          - GZIP
          - BZIP2
          deprecated: false
          secret: false
          defaultValue: DEFAULT
          description: The compression codec to use
        compressionType:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.hadoop.io.SequenceFile.CompressionType
          deprecated: false
          secret: false
          defaultValue: NONE
          description: The compression type to use (is default not in use)
        openedSuffix:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: opened
          description: When a file is opened for reading/writing the file is renamed with this suffix to avoid to read it during the writing phase.
        readSuffix:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: read
          description: Once the file has been read is renamed with this suffix to avoid to read it again.
        replication:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: short
          deprecated: false
          secret: false
          defaultValue: "3"
          description: The HDFS replication factor
        splitStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'In the current version of Hadoop opening a file in append mode is
            disabled since it''s not very reliable. So for the moment it''s only possible
            to create new files. The Camel HDFS endpoint tries to solve this problem in
            this way: If the split strategy option has been defined the hdfs path will be
            used as a directory and files will be created using the configured UuidGenerator.
            Every time a splitting condition is met a new file is created. The splitStrategy
            option is defined as a string with the following syntax: splitStrategy=ST:valueST:value...
            where ST can be: BYTES a new file is created and the old is closed when the
            number of written bytes is more than value MESSAGES a new file is created and
            the old is closed when the number of written messages is more than value IDLE
            a new file is created and the old is closed when no writing happened in the
            last value milliseconds'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[HDFS2-HDFS2Component]]
      HDFS2 Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.13*

      The *hdfs2* component enables you to read and write messages from/to an
      HDFS file system using Hadoop 2.x. HDFS is the distributed file system
      at the heart of http://hadoop.apache.org[Hadoop].

      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-hdfs2</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[HDFS2-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------------
      hdfs2://hostname[:port][/path][?options]
      ----------------------------------------

      You can append query options to the URI in the following format,
      `?option=value&option=value&...` +
       The path is treated in the following way:

      1.  as a consumer, if it's a file, it just reads the file, otherwise if
      it represents a directory it scans all the file under the path
      satisfying the configured pattern. All the files under that directory
      must be of the same type.
      2.  as a producer, if at least one split strategy is defined, the path
      is considered a directory and under that directory the producer creates
      a different file per split named using the configured
      link:uuidgenerator.html[UuidGenerator].


      When consuming from hdfs2 then in normal mode, a file is split into
      chunks, producing a message per chunk. You can configure the size of the
      chunk using the chunkSize option. If you want to read from hdfs and
      write to a regular file using the file component, then you can use the
      fileMode=Append to append each of the chunks together.

      [[HDFS2-Options]]
      Options
      ^^^^^^^





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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | jAASConfiguration | Configuration | To use the given configuration for security with JAAS.
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The HDFS2 component supports 41 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | hostName | common |  | String | *Required* HDFS host to use
      | port | common | 8020 | int | HDFS port to use
      | path | common |  | String | *Required* The directory path to use
      | connectOnStartup | common | true | boolean | Whether to connect to the HDFS file system on starting the producer/consumer. If false then the connection is created on-demand. Notice that HDFS may take up till 15 minutes to establish a connection as it has hardcoded 45 x 20 sec redelivery. By setting this option to false allows your application to startup and not block for up till 15 minutes.
      | fileSystemType | common | HDFS | HdfsFileSystemType | Set to LOCAL to not use HDFS but local java.io.File instead.
      | fileType | common | NORMAL_FILE | HdfsFileType | The file type to use. For more details see Hadoop HDFS documentation about the various files types.
      | keyType | common | NULL | WritableType | The type for the key in case of sequence or map files.
      | owner | common |  | String | The file owner must match this owner for the consumer to pickup the file. Otherwise the file is skipped.
      | valueType | common | BYTES | WritableType | The type for the key in case of sequence or map files
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delay | consumer | 1000 | long | The interval (milliseconds) between the directory scans.
      | initialDelay | consumer |  | long | For the consumer how much to wait (milliseconds) before to start scanning the directory.
      | pattern | consumer | * | String | The pattern used for scanning the directory
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | append | producer | false | boolean | Append to existing file. Notice that not all HDFS file systems support the append option.
      | overwrite | producer | true | boolean | Whether to overwrite existing files with the same name
      | blockSize | advanced | 67108864 | long | The size of the HDFS blocks
      | bufferSize | advanced | 4096 | int | The buffer size used by HDFS
      | checkIdleInterval | advanced | 500 | int | How often (time in millis) in to run the idle checker background task. This option is only in use if the splitter strategy is IDLE.
      | chunkSize | advanced | 4096 | int | When reading a normal file this is split into chunks producing a message per chunk.
      | compressionCodec | advanced | DEFAULT | HdfsCompressionCodec | The compression codec to use
      | compressionType | advanced | NONE | CompressionType | The compression type to use (is default not in use)
      | openedSuffix | advanced | opened | String | When a file is opened for reading/writing the file is renamed with this suffix to avoid to read it during the writing phase.
      | readSuffix | advanced | read | String | Once the file has been read is renamed with this suffix to avoid to read it again.
      | replication | advanced | 3 | short | The HDFS replication factor
      | splitStrategy | advanced |  | String | In the current version of Hadoop opening a file in append mode is disabled since it's not very reliable. So for the moment it's only possible to create new files. The Camel HDFS endpoint tries to solve this problem in this way: If the split strategy option has been defined the hdfs path will be used as a directory and files will be created using the configured UuidGenerator. Every time a splitting condition is met a new file is created. The splitStrategy option is defined as a string with the following syntax: splitStrategy=ST:valueST:value... where ST can be: BYTES a new file is created and the old is closed when the number of written bytes is more than value MESSAGES a new file is created and the old is closed when the number of written messages is more than value IDLE a new file is created and the old is closed when no writing happened in the last value milliseconds
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[HDFS2-KeyTypeandValueType]]
      KeyType and ValueType
      +++++++++++++++++++++

      * NULL it means that the key or the value is absent
      * BYTE for writing a byte, the java Byte class is mapped into a BYTE
      * BYTES for writing a sequence of bytes. It maps the java ByteBuffer
      class
      * INT for writing java integer
      * FLOAT for writing java float
      * LONG for writing java long
      * DOUBLE for writing java double
      * TEXT for writing java strings

      BYTES is also used with everything else, for example, in Camel a file is
      sent around as an InputStream, int this case is written in a sequence
      file or a map file as a sequence of bytes.

      [[HDFS2-SplittingStrategy]]
      Splitting Strategy
      ^^^^^^^^^^^^^^^^^^

      In the current version of Hadoop opening a file in append mode is
      disabled since it's not very reliable. So, for the moment, it's only
      possible to create new files. The Camel HDFS endpoint tries to solve
      this problem in this way:

      * If the split strategy option has been defined, the hdfs path will be
      used as a directory and files will be created using the configured
      link:uuidgenerator.html[UuidGenerator]
      * Every time a splitting condition is met, a new file is created. +
       The splitStrategy option is defined as a string with the following
      syntax: splitStrategy=<ST>:<value>,<ST>:<value>,*

      where <ST> can be:

      * BYTES a new file is created, and the old is closed when the number of
      written bytes is more than <value>
      * MESSAGES a new file is created, and the old is closed when the number
      of written messages is more than <value>
      * IDLE a new file is created, and the old is closed when no writing
      happened in the last <value> milliseconds

      note that this strategy currently requires either setting an IDLE value
      or setting the HdfsConstants.HDFS_CLOSE header to false to use the
      BYTES/MESSAGES configuration...otherwise, the file will be closed with
      each message

      for example:

      [source,java]
      -----------------------------------------------------------------
      hdfs2://localhost/tmp/simple-file?splitStrategy=IDLE:1000,BYTES:5
      -----------------------------------------------------------------

      it means: a new file is created either when it has been idle for more
      than 1 second or if more than 5 bytes have been written. So, running
      `hadoop fs -ls /tmp/simple-file` you'll see that multiple files have
      been created.

      [[HDFS2-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The following headers are supported by this component:

      [[HDFS2-Produceronly]]
      Producer only
      +++++++++++++

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

      |`CamelFileName` |*Camel 2.13:* Specifies the name of the file to write (relative to the
      endpoint path). The name can be a `String` or an
      link:expression.html[Expression] object. Only relevant when not using a
      split strategy.
      |=======================================================================

      [[HDFS2-Controllingtoclosefilestream]]
      Controlling to close file stream
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When using the link:hdfs2.html[HDFS2] producer *without* a split
      strategy, then the file output stream is by default closed after the
      write. However you may want to keep the stream open, and only explicitly
      close the stream later. For that you can use the header
      `HdfsConstants.HDFS_CLOSE` (value = `"CamelHdfsClose"`) to control this.
      Setting this value to a boolean allows you to explicit control whether
      the stream should be closed or not.

      Notice this does not apply if you use a split strategy, as there are
      various strategies that can control when the stream is closed.

      [[HDFS2-UsingthiscomponentinOSGi]]
      Using this component in OSGi
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      There are some quirks when running this component in an OSGi environment
      related to the mechanism Hadoop 2.x uses to discover different
      `org.apache.hadoop.fs.FileSystem` implementations. Hadoop 2.x uses
      `java.util.ServiceLoader` which looks for
      `/META-INF/services/org.apache.hadoop.fs.FileSystem` files defining
      available filesystem types and implementations. These resources are not
      available when running inside OSGi.

      As with??`camel-hdfs` component, the default configuration files need to
      be visible from the bundle class loader. A typical way to deal with it
      is to keep a copy of??`core-default.xml` (and e.g., `hdfs-default.xml`)
      in your bundle root.

      [[HDFS2-Usingthiscomponentwithmanuallydefinedroutes]]
      Using this component with manually defined routes
      +++++++++++++++++++++++++++++++++++++++++++++++++

      There are two options:

      1.  Package `/META-INF/services/org.apache.hadoop.fs.FileSystem`
      resource with bundle that defines the routes. This resource should list
      all the required Hadoop 2.x filesystem implementations.
      2.  Provide boilerplate initialization code which populates internal,
      static cache inside `org.apache.hadoop.fs.FileSystem` class:

      [source,java]
      ----------------------------------------------------------------------------------------------------
      org.apache.hadoop.conf.Configuration conf = new org.apache.hadoop.conf.Configuration();
      conf.setClass("fs.file.impl", org.apache.hadoop.fs.LocalFileSystem.class, FileSystem.class);
      conf.setClass("fs.hdfs.impl", org.apache.hadoop.hdfs.DistributedFileSystem.class, FileSystem.class);
      ...
      FileSystem.get("file:///", conf);
      FileSystem.get("hdfs://localhost:9000/", conf);
      ...
      ----------------------------------------------------------------------------------------------------

      [[HDFS2-UsingthiscomponentwithBlueprintcontainer]]
      Using this component with Blueprint container
      +++++++++++++++++++++++++++++++++++++++++++++

      Two options:

      1.  Package `/META-INF/services/org.apache.hadoop.fs.FileSystem`
      resource with bundle that contains blueprint definition.
      2.  Add the following to the blueprint definition file:

      [source,java]
      ------------------------------------------------------------------------------------------------------
      <bean id="hdfsOsgiHelper" class="org.apache.camel.component.hdfs2.HdfsOsgiHelper">
         <argument>
            <map>
               <entry key="file:///" value="org.apache.hadoop.fs.LocalFileSystem"  />
               <entry key="hdfs://localhost:9000/" value="org.apache.hadoop.hdfs.DistributedFileSystem" />
               ...
            </map>
         </argument>
      </bean>

      <bean id="hdfs2" class="org.apache.camel.component.hdfs2.HdfsComponent" depends-on="hdfsOsgiHelper" />
      ------------------------------------------------------------------------------------------------------

      This way Hadoop 2.x will have correct mapping of URI schemes to
      filesystem implementations.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-hipchat
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: hipchat
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: hipchat
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: hipchat
          spec:
            containers:
            - image: fabric8/connector-hipchat:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: hipchat
        syntax: hipchat:protocol:host:port
        title: Hipchat
        description: The hipchat component supports producing and consuming messages from/to Hipchat service.
        label: api,cloud
        deprecated: false
        async: false
        javaType: org.apache.camel.component.hipchat.HipchatComponent
        groupId: org.apache.camel
        artifactId: camel-hipchat
        version: 2.18.1
      componentProperties: {}
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The protocol for the hipchat server such as http.
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The host for the hipchat server such as api.hipchat.com
        port:
          kind: path
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "80"
          description: The port for the hipchat server. Is by default 80.
        authToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth 2 auth token
        consumeUsers:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username(s) when consuming messages from the hiptchat server. Multiple user names can be separated by comma.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[Hipchat-HipchatComponent]]
      Hipchat Component
      ~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.15.0*

      The Hipchat component supports producing and consuming messages from/to
      https://www.hipchat.com[Hipchat]??service.

      *Prerequisites*

      You must have a valid Hipchat user account and get a
      https://www.hipchat.com/account/api[personal access token] that you can
      use to produce/consume messages.


      [[Hipchat-URIFormat]]
      URI Format
      ^^^^^^^^^^

      [source,java]
      -------------------------------
      hipchat://[host][:port]?options
      -------------------------------

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

      [[Hipchat-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The Hipchat component has no options.
      // component options: END






      // endpoint options: START
      The Hipchat component supports 24 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | protocol | common |  | String | *Required* The protocol for the hipchat server such as http.
      | host | common |  | String | *Required* The host for the hipchat server such as api.hipchat.com
      | port | common | 80 | Integer | The port for the hipchat server. Is by default 80.
      | authToken | common |  | String | OAuth 2 auth token
      | consumeUsers | common |  | String | Username(s) when consuming messages from the hiptchat server. Multiple user names can be separated by comma.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END






      [[Hipchat-ScheduledPollConsumer]]
      Scheduled Poll Consumer
      ^^^^^^^^^^^^^^^^^^^^^^^

      This component implements the
      link:polling-consumer.html[ScheduledPollConsumer]. Only the last message
      from the provided 'consumeUsers' are retrieved and sent as Exchange
      body. If you do not want the same message to be retrieved again when
      there are no new messages on next poll then you can add the
      link:idempotent-consumer.html[idempotent consumer] as shown below. All
      the options on the??link:polling-consumer.html[ScheduledPollConsumer]??can
      also be used for more control on the consumer.

      [source,java]
      ---------------------------------------------------------------------------------
      @Override
      public void configure() throws Exception {
       String hipchatEndpointUri = "hipchat://?authToken=XXXX&consumeUsers=@Joe,@John";
       from(hipchatEndpointUri)
        .idempotentConsumer(
          simple("${in.header.HipchatMessageDate} ${in.header.HipchatFromUser}"),
          MemoryIdempotentRepository.memoryIdempotentRepository(200)
        )
        .to("mock:result");
      }
      ---------------------------------------------------------------------------------

      [[Hipchat-MessageheaderssetbytheHipchatconsumer]]
      Message headers set by the Hipchat consumer
      +++++++++++++++++++++++++++++++++++++++++++

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

      |*Header* |*Constant* |*Type* |*Description*

      |HipchatFromUser |HipchatConstants.FROM_USER |_String_ |The body has the message that was sent from this user to the owner of
      authToken

      |HipchatMessageDate |HipchatConstants.MESSAGE_DATE |_String_ |The date message was sent. The format is ISO-8601 as present in the
      Hipchat https://www.hipchat.com/docs/apiv2/method/view_recent_privatechat_history[response].

      |HipchatFromUserResponseStatus |HipchatConstants.FROM_USER_RESPONSE_STATUS?? |_http://hc.apache.org/httpcomponents-core-4.2.x/httpcore/apidocs/org/apache/http/StatusLine.html[StatusLine]_
      The status of the API response received.
      |=======================================================================

      [[Hipchat-HipchatProducer]]
      Hipchat Producer
      ^^^^^^^^^^^^^^^^

      Producer can send messages to both Room's and User's simultaneously. The
      body of the exchange is sent as message. Sample usage is shown below.
      Appropriate headers needs to be set.

      [source,java]
      ----------------------------------------------------------
      @Override
       public void configure() throws Exception {
        String hipchatEndpointUri = "hipchat://?authToken=XXXX";
        from("direct:start")
         .to(hipchatEndpointUri)
         .to("mock:result");
       }
      ----------------------------------------------------------

      [[Hipchat-MessageheadersevaluatedbytheHipchatproducer]]
      Message headers evaluated by the Hipchat producer
      +++++++++++++++++++++++++++++++++++++++++++++++++

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

      |*Header* |*Constant* |*Type* |*Description*

      |HipchatToUser |HipchatConstants.TO_USER |_String_ |The Hipchat user to which the message needs to be sent.

      |HipchatToRoom |HipchatConstants.TO_ROOM |_String_ |The Hipchat room to which the message needs to be sent.

      |HipchatMessageFormat |HipchatConstants.MESSAGE_FORMAT |String |Valid formats are 'text' or 'html'. *Default: 'text'*

      |HipchatMessageBackgroundColor |HipchatConstants.MESSAGE_BACKGROUND_COLOR |_String_ |Valid color values are 'yellow', 'green', 'red', 'purple', 'gray',
      'random'. *Default: 'yellow' (Room Only)*??

      |HipchatTriggerNotification |HipchatConstants.TRIGGER_NOTIFY |_String_ |Valid values are 'true' or 'false'. Whether this message should trigger
      a user notification (change the tab color, play a sound, notify mobile
      phones, etc). *Default: 'false' (Room Only)*
      |=======================================================================

      [[Hipchat-MessageheaderssetbytheHipchatproducer]]
      Message headers set by the Hipchat producer
      +++++++++++++++++++++++++++++++++++++++++++

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

      |*Header* |*Constant* |*Type* |*Description*

      |HipchatToUserResponseStatus |HipchatConstants.TO_USER_RESPONSE_STATUS |_http://hc.apache.org/httpcomponents-core-4.2.x/httpcore/apidocs/org/apache/http/StatusLine.html[StatusLine]_
      The status of the API response received when message sent to the user.

      |HipchatFromUserResponseStatus |HipchatConstants.TO_ROOM_RESPONSE_STATUS |_http://hc.apache.org/httpcomponents-core-4.2.x/httpcore/apidocs/org/apache/http/StatusLine.html[StatusLine]_ |The status of the API response received when message sent to the room.
      |=======================================================================

      [[Hipchat-Dependencies]]
      Dependencies
      ++++++++++++

      Maven users will need to add the following dependency to their pom.xml.

      *pom.xml*

      [source,xml]
      ------------------------------------------
      <dependency>
          <groupId>org.apache.camel</groupId>
          <artifactId>camel-hipchat</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ------------------------------------------

      where??`${camel-version}` must be replaced by the actual version of Camel
      (2.15.0 or higher)
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-http
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: http
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: http
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: http
          spec:
            containers:
            - image: fabric8/connector-http:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: http
        alternativeSchemes: http,https
        syntax: http:httpUri
        title: HTTP
        description: For calling out to external HTTP servers using Apache HTTP Client 3.x.
        label: http
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.http.HttpComponent
        groupId: org.apache.camel
        artifactId: camel-http
        version: 2.18.1
      componentProperties:
        httpClientConfigurer:
          kind: property
          type: object
          javaType: org.apache.camel.component.http.HttpClientConfigurer
          deprecated: false
          secret: false
          description: To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
        httpConnectionManager:
          kind: property
          type: object
          javaType: org.apache.commons.httpclient.HttpConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpConnectionManager to manage connections
        httpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        httpConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpConfiguration
          deprecated: false
          secret: false
          description: To use the shared HttpConfiguration as base configuration.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: producer
          label: producer
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The url of the HTTP endpoint to call.
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        authMethodPriority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - Basic
          - Digest
          - NTLM
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
        chunked:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
        copyHeaders:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
        headerFilterStrategy:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        ignoreResponseBody:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true The http producer won't read response body and cache the input stream
        okStatusCodeRange:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
        preserveHostHeader:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
        proxyHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The proxy port number
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        urlRewrite:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.http.common.UrlRewrite
          deprecated: false
          secret: false
          description: Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
        httpClientConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.http.HttpClientConfigurer
          deprecated: false
          secret: false
          description: Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
        httpClientOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the HttpClient using the key/values from the Map.
        httpConnectionManager:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.httpclient.HttpConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpConnectionManager to manage connections
        httpConnectionManagerOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpConnectionManager.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the HttpConnectionManager using the key/values from the Map.
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[HTTP-HTTPComponent]]
      HTTP Component
      ~~~~~~~~~~~~~~

      The *http:* component provides HTTP based link:endpoint.html[endpoints]
      for consuming external HTTP resources (as a client to call external
      servers using HTTP).

      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-http</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[HTTP-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------------------------------------------
      http:hostname[:port][/resourceUri][?param1=value1][&param2=value2]
      ------------------------------------------------------------------

      Will by default use port 80 for HTTP and 443 for HTTPS.

      *camel-http vs camel-jetty*

      You can only produce to endpoints generated by the HTTP component.
      Therefore it should never be used as input into your camel Routes. To
      bind/expose an HTTP endpoint via a HTTP server as input to a camel
      route, you can use the link:jetty.html[Jetty Component] or the
      link:servlet.html[Servlet Component]


      [[HTTP-Examples]]
      Examples
      ^^^^^^^^

      Call the url with the body using POST and return response as out
      message. If body is null call URL using GET and return response as out
      message

      Java DSL

      Spring DSL

      [source,java]
      ------------------------------
      from("direct:start")
        .to("http://myhost/mypath");
      ------------------------------

      [source,xml]
      --------------------------
      <from uri="direct:start"/>
      <to uri="http://oldhost"/>
      --------------------------

      You can override the HTTP endpoint URI by adding a header. Camel will
      call the http://newhost. This is very handy for e.g. REST urls.

      Java DSL

      [source,java]
      -----------------------------------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_URI, simple("http://myserver/orders/${header.orderId}"))
        .to("http://dummyhost");
      -----------------------------------------------------------------------------------

      URI parameters can either be set directly on the endpoint URI or as a
      header

      Java DSL

      [source,java]
      ---------------------------------------------------------------------
      from("direct:start")
        .to("http://oldhost?order=123&detail=short");
      from("direct:start")
        .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
        .to("http://oldhost");
      ---------------------------------------------------------------------

      Set the HTTP request method to POST

      Java DSL

      Spring DSL

      [source,java]
      ----------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_METHOD, constant("POST"))
        .to("http://www.google.com");
      ----------------------------------------------------

      [source,xml]
      ----------------------------------------
      <from uri="direct:start"/>
      <setHeader headerName="CamelHttpMethod">
        <constant>POST</constant>
      </setHeader>
      <to uri="http://www.google.com"/>
      <to uri="mock:results"/>
      ----------------------------------------

      [[HTTP-HttpOptions]]
      Http Options
      ^^^^^^^^^^^^




      // component options: START
      The HTTP component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | httpClientConfigurer | HttpClientConfigurer | To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
      | httpConnectionManager | HttpConnectionManager | To use a custom HttpConnectionManager to manage connections
      | httpBinding | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | httpConfiguration | HttpConfiguration | To use the shared HttpConfiguration as base configuration.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END









      // endpoint options: START
      The HTTP component supports 25 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | producer |  | URI | *Required* The url of the HTTP endpoint to call.
      | disableStreamCache | common | false | boolean | Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
      | authMethodPriority | producer |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | bridgeEndpoint | producer | false | boolean | If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
      | chunked | producer | true | boolean | If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
      | connectionClose | producer | false | boolean | Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
      | copyHeaders | producer | true | boolean | If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
      | headerFilterStrategy | producer |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | httpBinding | producer |  | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | ignoreResponseBody | producer | false | boolean | If this option is true The http producer won't read response body and cache the input stream
      | okStatusCodeRange | producer | 200-299 | String | The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
      | preserveHostHeader | producer | false | boolean | If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
      | proxyHost | producer |  | String | The proxy host name
      | proxyPort | producer |  | int | The proxy port number
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | producer | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | urlRewrite | producer (advanced) |  | UrlRewrite | Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
      | httpClientConfigurer | advanced |  | HttpClientConfigurer | Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
      | httpClientOptions | advanced |  | Map | To configure the HttpClient using the key/values from the Map.
      | httpConnectionManager | advanced |  | HttpConnectionManager | To use a custom HttpConnectionManager to manage connections
      | httpConnectionManagerOptions | advanced |  | Map | To configure the HttpConnectionManager using the key/values from the Map.
      | mapHttpMessageBody | advanced | true | boolean | If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
      | mapHttpMessageFormUrlEncodedBody | advanced | true | boolean | If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
      | mapHttpMessageHeaders | advanced | true | boolean | If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END






      [[HTTP-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`Exchange.HTTP_URI` |`String` |URI to call. Will override existing URI set directly on the endpoint.
      This uri is the uri of the http server to call. Its not the same as the
      Camel endpoint uri, where you can configure endpoint options such as
      security etc. This header does not support that, its only the uri of the
      http server.

      |`Exchange.HTTP_METHOD` |`String` |HTTP Method / Verb to use (GET/POST/PUT/DELETE/HEAD/OPTIONS/TRACE)

      |`Exchange.HTTP_PATH` |`String` |Request URI's path, the header will be used to build the request URI
      with the HTTP_URI. *Camel 2.3.0:* If the path is start with "/", http
      producer will try to find the relative path based on the
      Exchange.HTTP_BASE_URI header or the
      exchange.getFromEndpoint().getEndpointUri();

      |`Exchange.HTTP_QUERY` |`String` |URI parameters. Will override existing URI parameters set directly on
      the endpoint.

      |`Exchange.HTTP_RESPONSE_CODE` |`int` |The HTTP response code from the external server. Is 200 for OK.

      |`Exchange.HTTP_CHARACTER_ENCODING` |`String` |Character encoding.

      |`Exchange.CONTENT_TYPE` |`String` |The HTTP content type. Is set on both the IN and OUT message to provide
      a content type, such as `text/html`.

      |`Exchange.CONTENT_ENCODING` |`String` |The HTTP content encoding. Is set on both the IN and OUT message to
      provide a content encoding, such as `gzip`.

      |`Exchange.HTTP_SERVLET_REQUEST` |`HttpServletRequest` |The `HttpServletRequest` object.

      |`Exchange.HTTP_SERVLET_RESPONSE` |`HttpServletResponse` |The `HttpServletResponse` object.

      |`Exchange.HTTP_PROTOCOL_VERSION` |`String` |*Camel 2.5:* You can set the http protocol version with this header, eg.
      "HTTP/1.0". If you didn't specify the header, HttpProducer will use the
      default value "HTTP/1.1"
      |=======================================================================

      The header name above are constants. For the spring DSL you have to use
      the value of the constant instead of the name.

      [[HTTP-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      Camel will store the HTTP response from the external server on the OUT
      body. All headers from the IN message will be copied to the OUT message,
      so headers are preserved during routing. Additionally Camel will add the
      HTTP response headers as well to the OUT message headers.

      [[HTTP-Responsecode]]
      Response code
      ^^^^^^^^^^^^^

      Camel will handle according to the HTTP response code:

      * Response code is in the range 100..299, Camel regards it as a success
      response.
      * Response code is in the range 300..399, Camel regards it as a
      redirection response and will throw a `HttpOperationFailedException`
      with the information.
      * Response code is 400+, Camel regards it as an external server failure
      and will throw a `HttpOperationFailedException` with the information.

      *throwExceptionOnFailure*

      The option, `throwExceptionOnFailure`, can be set to `false` to prevent
      the `HttpOperationFailedException` from being thrown for failed response
      codes. This allows you to get any response from the remote server. +
      There is a sample below demonstrating this.


      [[HTTP-HttpOperationFailedException]]
      HttpOperationFailedException
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This exception contains the following information:

      * The HTTP status code
      * The HTTP status line (text of the status code)
      * Redirect location, if server returned a redirect
      * Response body as a `java.lang.String`, if server provided a body as
      response

      [[HTTP-CallingusingGETorPOST]]
      Calling using GET or POST
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The following algorithm is used to determine if either `GET` or `POST`
      HTTP method should be used: +
       1. Use method provided in header. +
       2. `GET` if query string is provided in header. +
       3. `GET` if endpoint is configured with a query string. +
       4. `POST` if there is data to send (body is not null). +
       5. `GET` otherwise.

      [[HTTP-HowtogetaccesstoHttpServletRequestandHttpServletResponse]]
      How to get access to HttpServletRequest and HttpServletResponse
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can get access to these two using the Camel type converter system
      using

      [source,java]
      ----------------------------------------------------------------------------------
      HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
      HttpServletRequest response = exchange.getIn().getBody(HttpServletResponse.class);
      ----------------------------------------------------------------------------------

      [[HTTP-Usingclienttimeout-SO_TIMEOUT]]
      Using client timeout - SO_TIMEOUT
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      See the unit test in
      http://svn.apache.org/viewvc?view=rev&revision=781775[this link]

      [[HTTP-MoreExamples]]
      More Examples
      ~~~~~~~~~~~~~

      [[HTTP-ConfiguringaProxy]]
      Configuring a Proxy
      ^^^^^^^^^^^^^^^^^^^

      Java DSL

      [source,java]
      ---------------------------------------------------------------
      from("direct:start")
        .to("http://oldhost?proxyHost=www.myproxy.com&proxyPort=80");
      ---------------------------------------------------------------

      There is also support for proxy authentication via the `proxyUsername`
      and `proxyPassword` options.

      [[HTTP-UsingproxysettingsoutsideofURI]]
      Using proxy settings outside of URI
      +++++++++++++++++++++++++++++++++++

      Java DSL

      Spring DSL

      [source,java]
      ---------------------------------------------------------------
       context.getProperties().put("http.proxyHost", "172.168.18.9");
       context.getProperties().put("http.proxyPort" "8080");
      ---------------------------------------------------------------

      [source,java]
      ----------------------------------------------------------------
         <camelContext>
             <properties>
                 <property key="http.proxyHost" value="172.168.18.9"/>
                 <property key="http.proxyPort" value="8080"/>
            </properties>
         </camelContext>
      ----------------------------------------------------------------

      Options on Endpoint will override options on the context.

      [[HTTP-Configuringcharset]]
      Configuring charset
      ^^^^^^^^^^^^^^^^^^^

      If you are using `POST` to send data you can configure the `charset`

      [source,java]
      -------------------------------------------------
      setProperty(Exchange.CHARSET_NAME, "iso-8859-1");
      -------------------------------------------------

      [[HTTP-Samplewithscheduledpoll]]
      Sample with scheduled poll
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The sample polls the Google homepage every 10 seconds and write the page
      to the file `message.html`:

      [source,java]
      ----------------------------------------------------------------------------------------
      from("timer://foo?fixedRate=true&delay=0&period=10000")
          .to("http://www.google.com")
          .setHeader(FileComponent.HEADER_FILE_NAME, "message.html").to("file:target/google");
      ----------------------------------------------------------------------------------------

      [[HTTP-GettingtheResponseCode]]
      Getting the Response Code
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      You can get the HTTP response code from the HTTP component by getting
      the value from the Out message header with
      `Exchange.HTTP_RESPONSE_CODE`.

      [source,java]
      ----------------------------------------------------------------------------------------------
         Exchange exchange = template.send("http://www.google.com/search", new Processor() {
                  public void process(Exchange exchange) throws Exception {
                      exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
                  }
         });
         Message out = exchange.getOut();
         int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
      ----------------------------------------------------------------------------------------------

      [[HTTP-UsingthrowExceptionOnFailure=falsetogetanyresponseback]]
      Using `throwExceptionOnFailure=false` to get any response back
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In the route below we want to route a message that we
      link:content-enricher.html[enrich] with data returned from a remote HTTP
      call. As we want any response from the remote server, we set the
      `throwExceptionOnFailure` option to `false` so we get any response in
      the `AggregationStrategy`. As the code is based on a unit test that
      simulates a HTTP status code 404, there is some assertion code etc.

      [[HTTP-DisablingCookies]]
      Disabling Cookies
      ^^^^^^^^^^^^^^^^^

      To disable cookies you can set the HTTP Client to ignore cookies by
      adding this URI option: +
       `httpClient.cookiePolicy=ignoreCookies`

      [[HTTP-AdvancedUsage]]
      Advanced Usage
      ^^^^^^^^^^^^^^

      If you need more control over the HTTP producer you should use the
      `HttpComponent` where you can set various classes to give you custom
      behavior.

      [[HTTP-SettingMaxConnectionsPerHost]]
      Setting MaxConnectionsPerHost
      +++++++++++++++++++++++++++++

      The link:http.html[HTTP] Component has a
      `org.apache.commons.httpclient.HttpConnectionManager` where you can
      configure various global configuration for the given component. +
       By global, we mean that any endpoint the component creates has the same
      shared `HttpConnectionManager`. So, if we want to set a different value
      for the max connection per host, we need to define it on the HTTP
      component and *not* on the endpoint URI that we usually use. So here
      comes:

      First, we define the `http` component in Spring XML. Yes, we use the
      same scheme name, `http`, because otherwise Camel will auto-discover and
      create the component with default settings. What we need is to overrule
      this so we can set our options. In the sample below we set the max
      connection to 5 instead of the default of 2.

      And then we can just use it as we normally do in our routes:

      [[HTTP-Usingpreemptiveauthentication]]
      Using preemptive authentication
      +++++++++++++++++++++++++++++++

      An end user reported that he had problem with authenticating with HTTPS.
      The problem was eventually resolved when he discovered the HTTPS server
      did not return a HTTP code 401 Authorization Required. The solution was
      to set the following URI option:
      `httpClient.authenticationPreemptive=true`

      [[HTTP-Acceptingselfsignedcertificatesfromremoteserver]]
      Accepting self signed certificates from remote server
      +++++++++++++++++++++++++++++++++++++++++++++++++++++

      See this
      http://www.nabble.com/Using-HTTPS-in-camel-http-when-remote-side-has-self-signed-cert-td25916878.html[link]
      from a mailing list discussion with some code to outline how to do this
      with the Apache Commons HTTP API.

      [[HTTP-SettingupSSLforHTTPClient]]
      Setting up SSL for HTTP Client
      ++++++++++++++++++++++++++++++

      [[HTTP-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility

      As of Camel 2.8, the HTTP4 component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 HTTP4 component.

      The version of the Apache HTTP client used in this component resolves
      SSL/TLS information from a global "protocol" registry.?? This component
      provides an implementation,
      `org.apache.camel.component.http.SSLContextParametersSecureProtocolSocketFactory`,
      of the HTTP client's protocol socket factory in order to support the use
      of the Camel JSSE Configuration utility.?? The following example
      demonstrates how to configure the protocol registry and use the
      registered protocol information in a route.

      [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");

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

      ProtocolSocketFactory factory =
          new SSLContextParametersSecureProtocolSocketFactory(scp);

      Protocol.registerProtocol("https",
              new Protocol(
      ?????????????? "https",
      ?????????????? factory,
      ?????????????? 443));

      from("direct:start")
              .to("https://mail.google.com/mail/").to("mock:results");
      ----------------------------------------------------------------

      [[HTTP-ConfiguringApacheHTTPClientDirectly]]
      Configuring Apache HTTP Client Directly

      Basically camel-http component is built on the top of Apache HTTP
      client, and you can implement a custom
      `org.apache.camel.component.http.HttpClientConfigurer` to do some
      configuration on the http client if you need full control of it.

      However if you _just_ want to specify the keystore and truststore you
      can do this with Apache HTTP `HttpClientConfigurer`, for example:

      [source,java]
      ----------------------------------------------------------------------------
      Protocol authhttps = new Protocol("https", new AuthSSLProtocolSocketFactory(
        new URL("file:my.keystore"), "mypassword",
        new URL("file:my.truststore"), "mypassword"), 443);

      Protocol.registerProtocol("https", authhttps);
      ----------------------------------------------------------------------------

      And then you need to create a class that implements
      `HttpClientConfigurer`, and registers https protocol providing a
      keystore or truststore per example above. Then, from your camel route
      builder class you can hook it up like so:

      [source,java]
      -------------------------------------------------------------------------------------
      HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class);
      httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
      -------------------------------------------------------------------------------------

      If you are doing this using the Spring DSL, you can specify your
      `HttpClientConfigurer` using the URI. For example:

      [source,java]
      -------------------------------------------------------------------------------------------
      <bean id="myHttpClientConfigurer"
       class="my.https.HttpClientConfigurer">
      </bean>

      <to uri="https://myhostname.com:443/myURL?httpClientConfigurerRef=myHttpClientConfigurer"/>
      -------------------------------------------------------------------------------------------

      As long as you implement the HttpClientConfigurer and configure your
      keystore and truststore as described above, it will work fine.

      [[HTTP-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:jetty.html[Jetty]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-http4
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: http4
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: http4
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: http4
          spec:
            containers:
            - image: fabric8/connector-http4:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: http4
        alternativeSchemes: http4,http4s
        syntax: http4:httpUri
        title: HTTP4
        description: For calling out to external HTTP servers using Apache HTTP Client 4.x.
        label: http
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.http4.HttpComponent
        groupId: org.apache.camel
        artifactId: camel-http4
        version: 2.18.1
      componentProperties:
        httpClientConfigurer:
          kind: property
          type: object
          javaType: org.apache.camel.component.http4.HttpClientConfigurer
          deprecated: false
          secret: false
          description: To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
        clientConnectionManager:
          kind: property
          type: object
          javaType: org.apache.http.conn.HttpClientConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpClientConnectionManager to manage connections
        httpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        httpConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpConfiguration
          deprecated: false
          secret: false
          description: To use the shared HttpConfiguration as base configuration.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        httpContext:
          kind: property
          type: object
          javaType: org.apache.http.protocol.HttpContext
          deprecated: false
          secret: false
          description: To use a custom org.apache.http.protocol.HttpContext when executing requests.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: 'To configure security using SSLContextParameters. Important: Only
            one instance of org.apache.camel.util.jsse.SSLContextParameters is supported
            per HttpComponent. If you need to use 2 or more different instances you need
            to define a new HttpComponent per instance you need.'
        x509HostnameVerifier:
          kind: property
          type: object
          javaType: org.apache.http.conn.ssl.X509HostnameVerifier
          deprecated: false
          secret: false
          description: To use a custom X509HostnameVerifier such as org.apache.http.conn.ssl.StrictHostnameVerifier or org.apache.http.conn.ssl.AllowAllHostnameVerifier.
        maxTotalConnections:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The maximum number of connections.
        connectionsPerRoute:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The maximum number of connections per route.
        connectionTimeToLive:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The time for connection to live the time unit is millisecond the default value is always keep alive.
        cookieStore:
          kind: property
          type: object
          javaType: org.apache.http.client.CookieStore
          deprecated: false
          secret: false
          description: To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: producer
          label: producer
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The url of the HTTP endpoint to call.
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        authenticationPreemptive:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true camel-http4 sends preemptive basic authentication to the server.
        authMethodPriority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - Basic
          - Digest
          - NTLM
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
        chunked:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        clearExpiredCookies:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to clear expired cookies before sending the HTTP request. This ensures the cookies store does not keep growing by adding new cookies which is newer removed when they are expired.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
        cookieStore:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.apache.http.client.CookieStore
          deprecated: false
          secret: false
          description: To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
        copyHeaders:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
        headerFilterStrategy:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        ignoreResponseBody:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true The http producer won't read response body and cache the input stream
        okStatusCodeRange:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
        preserveHostHeader:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
        proxyHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The proxy port number
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        urlRewrite:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.http.common.UrlRewrite
          deprecated: false
          secret: false
          description: Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
        clientBuilder:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.impl.client.HttpClientBuilder
          deprecated: false
          secret: false
          description: Provide access to the http client request parameters used on new RequestConfig instances used by producers or consumers of this endpoint.
        clientConnectionManager:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.conn.HttpClientConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpClientConnectionManager to manage connections
        httpClient:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.client.HttpClient
          deprecated: false
          secret: false
          description: Gets the HttpClient to be used by org.apache.camel.component.http4.HttpProducer
        httpClientConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.http4.HttpClientConfigurer
          deprecated: false
          secret: false
          description: Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
        httpClientOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the HttpClient using the key/values from the Map.
        httpContext:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.protocol.HttpContext
          deprecated: false
          secret: false
          description: To use a custom HttpContext instance
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useSystemProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use System Properties as fallback for configuration
    documentation.adoc: |
      [[HTTP4-HTTP4Component]]
      HTTP4 Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.3*

      The *http4:* component provides HTTP based link:endpoint.html[endpoints]
      for calling external HTTP resources (as a client to call external
      servers using HTTP).

      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-http4</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------


      *camel-http4 vs camel-http*

      Camel-http4 uses http://hc.apache.org/httpcomponents-client-ga/[Apache
      HttpClient 4.x] while camel-http uses
      http://hc.apache.org/httpclient-3.x/[Apache HttpClient 3.x].

      [[HTTP4-URIformat]]
      URI format
      ^^^^^^^^^^

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

      Will by default use port 80 for HTTP and 443 for HTTPS.

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

      *camel-http4 vs camel-jetty*

      You can only produce to endpoints generated by the HTTP4 component.
      Therefore it should never be used as input into your Camel Routes. To
      bind/expose an HTTP endpoint via a HTTP server as input to a Camel
      route, use the link:jetty.html[Jetty Component] instead.

      [[HTTP4-HttpOptions]]
      Http4 Component Options
      ^^^^^^^^^^^^^^^^^^^^^^^




      // component options: START
      The HTTP4 component supports 13 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | httpClientConfigurer | HttpClientConfigurer | To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
      | clientConnectionManager | HttpClientConnectionManager | To use a custom HttpClientConnectionManager to manage connections
      | httpBinding | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | httpConfiguration | HttpConfiguration | To use the shared HttpConfiguration as base configuration.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | httpContext | HttpContext | To use a custom org.apache.http.protocol.HttpContext when executing requests.
      | sslContextParameters | SSLContextParameters | To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.util.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances you need to define a new HttpComponent per instance you need.
      | x509HostnameVerifier | X509HostnameVerifier | To use a custom X509HostnameVerifier such as org.apache.http.conn.ssl.StrictHostnameVerifier or org.apache.http.conn.ssl.AllowAllHostnameVerifier.
      | maxTotalConnections | int | The maximum number of connections.
      | connectionsPerRoute | int | The maximum number of connections per route.
      | connectionTimeToLive | long | The time for connection to live the time unit is millisecond the default value is always keep alive.
      | cookieStore | CookieStore | To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END










      // endpoint options: START
      The HTTP4 component supports 31 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | producer |  | URI | *Required* The url of the HTTP endpoint to call.
      | disableStreamCache | common | false | boolean | Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
      | authenticationPreemptive | producer | false | boolean | If this option is true camel-http4 sends preemptive basic authentication to the server.
      | authMethodPriority | producer |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | bridgeEndpoint | producer | false | boolean | If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
      | chunked | producer | true | boolean | If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
      | clearExpiredCookies | producer | true | boolean | Whether to clear expired cookies before sending the HTTP request. This ensures the cookies store does not keep growing by adding new cookies which is newer removed when they are expired.
      | connectionClose | producer | false | boolean | Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
      | cookieStore | producer |  | CookieStore | To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
      | copyHeaders | producer | true | boolean | If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
      | headerFilterStrategy | producer |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | httpBinding | producer |  | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | ignoreResponseBody | producer | false | boolean | If this option is true The http producer won't read response body and cache the input stream
      | okStatusCodeRange | producer | 200-299 | String | The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
      | preserveHostHeader | producer | false | boolean | If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
      | proxyHost | producer |  | String | The proxy host name
      | proxyPort | producer |  | int | The proxy port number
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | producer | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | urlRewrite | producer (advanced) |  | UrlRewrite | Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
      | clientBuilder | advanced |  | HttpClientBuilder | Provide access to the http client request parameters used on new RequestConfig instances used by producers or consumers of this endpoint.
      | clientConnectionManager | advanced |  | HttpClientConnectionManager | To use a custom HttpClientConnectionManager to manage connections
      | httpClient | advanced |  | HttpClient | Gets the HttpClient to be used by org.apache.camel.component.http4.HttpProducer
      | httpClientConfigurer | advanced |  | HttpClientConfigurer | Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
      | httpClientOptions | advanced |  | Map | To configure the HttpClient using the key/values from the Map.
      | httpContext | advanced |  | HttpContext | To use a custom HttpContext instance
      | mapHttpMessageBody | advanced | true | boolean | If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
      | mapHttpMessageFormUrlEncodedBody | advanced | true | boolean | If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
      | mapHttpMessageHeaders | advanced | true | boolean | If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useSystemProperties | advanced | false | boolean | To use System Properties as fallback for configuration
      |=======================================================================
      {% endraw %}
      // endpoint options: END







      [[HTTP4-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,20%,70%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`Exchange.HTTP_URI` |`String` |URI to call. Will override existing URI set directly on the endpoint.
      This uri is the uri of the http server to call. Its not the same as the
      Camel endpoint uri, where you can configure endpoint options such as
      security etc. This header does not support that, its only the uri of the
      http server.

      |`Exchange.HTTP_PATH` |`String` |Request URI's path, the header will be used to build the request URI
      with the HTTP_URI.

      |`Exchange.HTTP_QUERY` |`String` |URI parameters. Will override existing URI parameters set directly on
      the endpoint.

      |`Exchange.HTTP_RESPONSE_CODE` |`int` |The HTTP response code from the external server. Is 200 for OK.

      |`Exchange.HTTP_RESPONSE_TEXT` | `String` |The HTTP response text from the external server.

      |`Exchange.HTTP_CHARACTER_ENCODING` |`String` |Character encoding.

      |`Exchange.CONTENT_TYPE` |`String` |The HTTP content type. Is set on both the IN and OUT message to provide
      a content type, such as `text/html`.

      |`Exchange.CONTENT_ENCODING` |`String` |The HTTP content encoding. Is set on both the IN and OUT message to
      provide a content encoding, such as `gzip`.
      |=======================================================================

      [[HTTP4-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      Camel will store the HTTP response from the external server on the OUT
      body. All headers from the IN message will be copied to the OUT message,
      so headers are preserved during routing. Additionally Camel will add the
      HTTP response headers as well to the OUT message headers.

      ??


      [[HTTP4-UsingSystemProperties]]
      Using System Properties
      ^^^^^^^^^^^^^^^^^^^^^^^

      When setting useSystemProperties to true, the HTTP Client will look for
      the following System Properties and it will use it:

      * ssl.TrustManagerFactory.algorithm
      * http://javax.net/[javax.net].ssl.trustStoreType
      * http://javax.net/[javax.net].ssl.trustStore
      * http://javax.net/[javax.net].ssl.trustStoreProvider
      * http://javax.net/[javax.net].ssl.trustStorePassword
      * java.home
      * ssl.KeyManagerFactory.algorithm
      * http://javax.net/[javax.net].ssl.keyStoreType
      * http://javax.net/[javax.net].ssl.keyStore
      * http://javax.net/[javax.net].ssl.keyStoreProvider
      * http://javax.net/[javax.net].ssl.keyStorePassword
      * http.proxyHost
      * http.proxyPort
      * http.nonProxyHosts
      * http.keepAlive
      * http.maxConnections

      [[HTTP4-Responsecode]]
      Response code
      ^^^^^^^^^^^^^

      Camel will handle according to the HTTP response code:

      * Response code is in the range 100..299, Camel regards it as a success
      response.
      * Response code is in the range 300..399, Camel regards it as a
      redirection response and will throw a `HttpOperationFailedException`
      with the information.
      * Response code is 400+, Camel regards it as an external server failure
      and will throw a `HttpOperationFailedException` with the information.

      *throwExceptionOnFailure*
      The option, `throwExceptionOnFailure`, can be set to `false` to prevent
      the `HttpOperationFailedException` from being thrown for failed response
      codes. This allows you to get any response from the remote server. +
      There is a sample below demonstrating this.

      [[HTTP4-HttpOperationFailedException]]
      HttpOperationFailedException
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This exception contains the following information:

      * The HTTP status code
      * The HTTP status line (text of the status code)
      * Redirect location, if server returned a redirect
      * Response body as a `java.lang.String`, if server provided a body as
      response

      [[HTTP4-CallingusingGETorPOST]]
      Calling using GET or POST
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The following algorithm is used to determine whether the `GET` or `POST`
      HTTP method should be used: +
       1. Use method provided in header. +
       2. `GET` if query string is provided in header. +
       3. `GET` if endpoint is configured with a query string. +
       4. `POST` if there is data to send (body is not null). +
       5. `GET` otherwise.

      [[HTTP4-HowtogetaccesstoHttpServletRequestandHttpServletResponse]]
      How to get access to HttpServletRequest and HttpServletResponse
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can get access to these two using the Camel type converter system
      using +
       *NOTE* You can get the request and response not just from the processor
      after the camel-jetty or camel-cxf endpoint.

      [source,java]
      ----------------------------------------------------------------------------------
      HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
      HttpServletRequest response = exchange.getIn().getBody(HttpServletResponse.class);
      ----------------------------------------------------------------------------------

      [[HTTP4-ConfiguringURItocall]]
      Configuring URI to call
      ^^^^^^^^^^^^^^^^^^^^^^^

      You can set the HTTP producer's URI directly form the endpoint URI. In
      the route below, Camel will call out to the external server, `oldhost`,
      using HTTP.

      [source,java]
      -------------------------------
      from("direct:start")
              .to("http4://oldhost");
      -------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ---------------------------------------------------------------------
      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
          <from uri="direct:start"/>
          <to uri="http4://oldhost"/>
        </route>
      </camelContext>
      ---------------------------------------------------------------------

      You can override the HTTP endpoint URI by adding a header with the key,
      `Exchange.HTTP_URI`, on the message.

      [source,java]
      -----------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_URI, constant("http://newhost"))
        .to("http4://oldhost");
      -----------------------------------------------------------

      In the sample above Camel will call the http://newhost despite the
      endpoint is configured with http4://oldhost. +
      If the http4 endpoint is working in bridge mode, it will ignore the
      message header of `Exchange.HTTP_URI`.

      [[HTTP4-ConfiguringURIParameters]]
      Configuring URI Parameters
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The *http* producer supports URI parameters to be sent to the HTTP
      server. The URI parameters can either be set directly on the endpoint
      URI or as a header with the key `Exchange.HTTP_QUERY` on the message.

      [source,java]
      ------------------------------------------------
      from("direct:start")
        .to("http4://oldhost?order=123&detail=short");
      ------------------------------------------------

      Or options provided in a header:

      [source,java]
      ---------------------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
        .to("http4://oldhost");
      ---------------------------------------------------------------------

      [[HTTP4-HowtosetthehttpmethodtotheHTTPproducer]]
      How to set the http method (GET/PATCH/POST/PUT/DELETE/HEAD/OPTIONS/TRACE) to the HTTP producer
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Using the http PATCH method*

      The http PATCH method is supported starting with Camel 2.11.3 / 2.12.1.

      The HTTP4 component provides a way to set the HTTP request method by
      setting the message header. Here is an example:

      [source,java]
      -----------------------------------------------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
        .to("http4://www.google.com")
        .to("mock:results");
      -----------------------------------------------------------------------------------------------

      The method can be written a bit shorter using the string constants:

      [source,java]
      -----------------------------------------------
      .setHeader("CamelHttpMethod", constant("POST"))
      -----------------------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ---------------------------------------------------------------------
      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
          <from uri="direct:start"/>
          <setHeader headerName="CamelHttpMethod">
              <constant>POST</constant>
          </setHeader>
          <to uri="http4://www.google.com"/>
          <to uri="mock:results"/>
        </route>
      </camelContext>
      ---------------------------------------------------------------------

      [[HTTP4-Usingclienttimeout-SO_TIMEOUT]]
      Using client timeout - SO_TIMEOUT
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      See the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java[HttpSOTimeoutTest]
      unit test.

      *Since Camel 2.13.0*: See the updated
      https://github.com/apache/camel/blob/master/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java[HttpSOTimeoutTest]
      unit test.

      [[HTTP4-ConfiguringaProxy]]
      Configuring a Proxy
      ^^^^^^^^^^^^^^^^^^^

      The HTTP4 component provides a way to configure a proxy.

      [source,java]
      ------------------------------------------------------------------------
      from("direct:start")
        .to("http4://oldhost?proxyAuthHost=www.myproxy.com&proxyAuthPort=80");
      ------------------------------------------------------------------------

      There is also support for proxy authentication via the
      `proxyAuthUsername` and `proxyAuthPassword` options.

      [[HTTP4-UsingproxysettingsoutsideofURI]]
      Using proxy settings outside of URI
      +++++++++++++++++++++++++++++++++++

      To avoid System properties conflicts, you can set proxy configuration
      only from the CamelContext or URI. +
       Java DSL :

      [source,java]
      ---------------------------------------------------------------
       context.getProperties().put("http.proxyHost", "172.168.18.9");
       context.getProperties().put("http.proxyPort" "8080");
      ---------------------------------------------------------------

      Spring XML

      [source,xml]
      ----------------------------------------------------------------
         <camelContext>
             <properties>
                 <property key="http.proxyHost" value="172.168.18.9"/>
                 <property key="http.proxyPort" value="8080"/>
            </properties>
         </camelContext>
      ----------------------------------------------------------------

      Camel will first set the settings from Java System or CamelContext
      Properties and then the endpoint proxy options if provided. +
       So you can override the system properties with the endpoint options.

      Notice in *Camel 2.8* there is also a `http.proxyScheme` property you
      can set to explicit configure the scheme to use.

      [[HTTP4-Configuringcharset]]
      Configuring charset
      ^^^^^^^^^^^^^^^^^^^

      If you are using `POST` to send data you can configure the `charset`
      using the `Exchange` property:

      [source,java]
      ----------------------------------------------------------
      exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
      ----------------------------------------------------------

      [[HTTP4-Samplewithscheduledpoll]]
      Sample with scheduled poll
      ++++++++++++++++++++++++++

      This sample polls the Google homepage every 10 seconds and write the
      page to the file `message.html`:

      [source,java]
      ------------------------------------------------------------
      from("timer://foo?fixedRate=true&delay=0&period=10000")
        .to("http4://www.google.com")
        .setHeader(FileComponent.HEADER_FILE_NAME, "message.html")
        .to("file:target/google");
      ------------------------------------------------------------

      [[HTTP4-URIParametersfromtheendpointURI]]
      URI Parameters from the endpoint URI
      ++++++++++++++++++++++++++++++++++++

      In this sample we have the complete URI endpoint that is just what you
      would have typed in a web browser. Multiple URI parameters can of course
      be set using the `&` character as separator, just as you would in the
      web browser. Camel does no tricks here.

      [source,java]
      -----------------------------------------------------------------
      // we query for Camel at the Google page
      template.sendBody("http4://www.google.com/search?q=Camel", null);
      -----------------------------------------------------------------

      [[HTTP4-URIParametersfromtheMessage]]
      URI Parameters from the Message
      +++++++++++++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------
      Map headers = new HashMap();
      headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en");
      // we query for Camel and English language at Google
      template.sendBody("http4://www.google.com/search", null, headers);
      ------------------------------------------------------------------

      In the header value above notice that it should *not* be prefixed with
      `?` and you can separate parameters as usual with the `&` char.

      [[HTTP4-GettingtheResponseCode]]
      Getting the Response Code
      +++++++++++++++++++++++++

      You can get the HTTP response code from the HTTP4 component by getting
      the value from the Out message header with
      `Exchange.HTTP_RESPONSE_CODE`.

      [source,java]
      ------------------------------------------------------------------------------------
      Exchange exchange = template.send("http4://www.google.com/search", new Processor() {
        public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
        }
      });
      Message out = exchange.getOut();
      int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
      ------------------------------------------------------------------------------------

      [[HTTP4-DisablingCookies]]
      Disabling Cookies
      ^^^^^^^^^^^^^^^^^

      To disable cookies you can set the HTTP Client to ignore cookies by
      adding this URI option: +
       `httpClient.cookiePolicy=ignoreCookies`

      [[HTTP4-AdvancedUsage]]
      Advanced Usage
      ^^^^^^^^^^^^^^

      If you need more control over the HTTP producer you should use the
      `HttpComponent` where you can set various classes to give you custom
      behavior.

      [[HTTP4-SettingupSSLforHTTPClient]]
      Setting up SSL for HTTP Client
      ++++++++++++++++++++++++++++++

      [[HTTP4-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility

      As of Camel 2.8, the HTTP4 component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 HTTP4 component.

      [[HTTP4-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");

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

      HttpComponent httpComponent = getContext().getComponent("https4", HttpComponent.class);
      httpComponent.setSslContextParameters(scp);
      ---------------------------------------------------------------------------------------

      [[HTTP4-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:sslContextParameters>...
      ...
        <to uri="https4://127.0.0.1/mail/?sslContextParametersRef=sslContextParameters"/>...
      --------------------------------------------------------------------------------------

      [[HTTP4-ConfiguringApacheHTTPClientDirectly]]
      Configuring Apache HTTP Client Directly

      Basically camel-http4 component is built on the top of
      http://hc.apache.org/httpcomponents-client-ga/[Apache HttpClient].
      Please refer to
      http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e537[SSL/TLS
      customization] for details or have a look into the
      `org.apache.camel.component.http4.HttpsServerTestSupport` unit test base
      class. +
       You can also implement a custom
      `org.apache.camel.component.http4.HttpClientConfigurer` to do some
      configuration on the http client if you need full control of it.

      However if you _just_ want to specify the keystore and truststore you
      can do this with Apache HTTP `HttpClientConfigurer`, for example:

      [source,java]
      ------------------------------------------------------------------------------------------------------
      KeyStore keystore = ...;
      KeyStore truststore = ...;

      SchemeRegistry registry = new SchemeRegistry();
      registry.register(new Scheme("https", 443, new SSLSocketFactory(keystore, "mypassword", truststore)));
      ------------------------------------------------------------------------------------------------------

      And then you need to create a class that implements
      `HttpClientConfigurer`, and registers https protocol providing a
      keystore or truststore per example above. Then, from your camel route
      builder class you can hook it up like so:

      [source,java]
      --------------------------------------------------------------------------------------
      HttpComponent httpComponent = getContext().getComponent("http4", HttpComponent.class);
      httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
      --------------------------------------------------------------------------------------

      If you are doing this using the Spring DSL, you can specify your
      `HttpClientConfigurer` using the URI. For example:

      [source,xml]
      -----------------------------------------------------------------------------------------
      <bean id="myHttpClientConfigurer"
       class="my.https.HttpClientConfigurer">
      </bean>

      <to uri="https4://myhostname.com:443/myURL?httpClientConfigurer=myHttpClientConfigurer"/>
      -----------------------------------------------------------------------------------------

      As long as you implement the HttpClientConfigurer and configure your
      keystore and truststore as described above, it will work fine.

      [[HTTP4-UsingHTTPStoauthenticategotchas]]
      Using HTTPS to authenticate gotchas

      An end user reported that he had problem with authenticating with HTTPS.
      The problem was eventually resolved by providing a custom configured
      `org.apache.http.protocol.HttpContext`:

      * 1. Create a (Spring) factory for HttpContexts:

      [source,java]
      ------------------------------------------------------------------
      public class HttpContextFactory {

        private String httpHost = "localhost";
        private String httpPort = 9001;

        private BasicHttpContext httpContext = new BasicHttpContext();
        private BasicAuthCache authCache = new BasicAuthCache();
        private BasicScheme basicAuth = new BasicScheme();

        public HttpContext getObject() {
          authCache.put(new HttpHost(httpHost, httpPort), basicAuth);

          httpContext.setAttribute(ClientContext.AUTH_CACHE, authCache);

          return httpContext;
        }

        // getter and setter
      }
      ------------------------------------------------------------------

      * 2. Declare an HttpContext in the Spring application context file:

      [source,xml]
      ---------------------------------------------------------------------------------------
      <bean id="myHttpContext" factory-bean="httpContextFactory" factory-method="getObject"/>
      ---------------------------------------------------------------------------------------

      * 3. Reference the context in the http4 URL:

      [source,xml]
      -----------------------------------------------------------------------
      <to uri="https4://myhostname.com:443/myURL?httpContext=myHttpContext"/>
      -----------------------------------------------------------------------

      [[HTTP4-UsingdifferentSSLContextParameters]]
      Using different SSLContextParameters

      The link:http4.html[HTTP4] component only support one instance of
      `org.apache.camel.util.jsse.SSLContextParameters` per component. If you
      need to use 2 or more different instances, then you need to setup
      multiple link:http4.html[HTTP4] components as shown below. Where we have
      2 components, each using their own instance of `sslContextParameters`
      property.

      [source,xml]
      ----------------------------------------------------------------------------
      <bean id="http4-foo" class="org.apache.camel.component.http4.HttpComponent">
         <property name="sslContextParameters" ref="sslContextParams1"/>
         <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
      </bean>

      <bean id="http4-bar" class="org.apache.camel.component.http4.HttpComponent">
         <property name="sslContextParameters" ref="sslContextParams2"/>
         <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
      </bean>
      ----------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-http4s
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: http4s
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: http4s
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: http4s
          spec:
            containers:
            - image: fabric8/connector-http4s:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: http4s
        alternativeSchemes: http4,http4s
        syntax: http4s:httpUri
        title: HTTP4S
        description: For calling out to external HTTP servers using Apache HTTP Client 4.x.
        label: http
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: null
        groupId: org.apache.camel
        artifactId: camel-http4
        version: 2.18.1
      componentProperties: {}
      properties:
        httpUri:
          kind: path
          group: producer
          label: producer
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The url of the HTTP endpoint to call.
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        authenticationPreemptive:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true camel-http4 sends preemptive basic authentication to the server.
        authMethodPriority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - Basic
          - Digest
          - NTLM
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
        chunked:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        clearExpiredCookies:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to clear expired cookies before sending the HTTP request. This ensures the cookies store does not keep growing by adding new cookies which is newer removed when they are expired.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
        cookieStore:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.apache.http.client.CookieStore
          deprecated: false
          secret: false
          description: To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
        copyHeaders:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
        headerFilterStrategy:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        ignoreResponseBody:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true The http producer won't read response body and cache the input stream
        okStatusCodeRange:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
        preserveHostHeader:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
        proxyHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The proxy port number
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        urlRewrite:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.http.common.UrlRewrite
          deprecated: false
          secret: false
          description: Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
        clientBuilder:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.impl.client.HttpClientBuilder
          deprecated: false
          secret: false
          description: Provide access to the http client request parameters used on new RequestConfig instances used by producers or consumers of this endpoint.
        clientConnectionManager:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.conn.HttpClientConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpClientConnectionManager to manage connections
        httpClient:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.client.HttpClient
          deprecated: false
          secret: false
          description: Gets the HttpClient to be used by org.apache.camel.component.http4.HttpProducer
        httpClientConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.http4.HttpClientConfigurer
          deprecated: false
          secret: false
          description: Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
        httpClientOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the HttpClient using the key/values from the Map.
        httpContext:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.http.protocol.HttpContext
          deprecated: false
          secret: false
          description: To use a custom HttpContext instance
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useSystemProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use System Properties as fallback for configuration
    documentation.adoc: |
      [[HTTP4-HTTP4Component]]
      HTTP4 Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.3*

      The *http4:* component provides HTTP based link:endpoint.html[endpoints]
      for calling external HTTP resources (as a client to call external
      servers using HTTP).

      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-http4</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------


      *camel-http4 vs camel-http*

      Camel-http4 uses http://hc.apache.org/httpcomponents-client-ga/[Apache
      HttpClient 4.x] while camel-http uses
      http://hc.apache.org/httpclient-3.x/[Apache HttpClient 3.x].

      [[HTTP4-URIformat]]
      URI format
      ^^^^^^^^^^

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

      Will by default use port 80 for HTTP and 443 for HTTPS.

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

      *camel-http4 vs camel-jetty*

      You can only produce to endpoints generated by the HTTP4 component.
      Therefore it should never be used as input into your Camel Routes. To
      bind/expose an HTTP endpoint via a HTTP server as input to a Camel
      route, use the link:jetty.html[Jetty Component] instead.

      [[HTTP4-HttpOptions]]
      Http4 Component Options
      ^^^^^^^^^^^^^^^^^^^^^^^




      // component options: START
      The HTTP4 component supports 13 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | httpClientConfigurer | HttpClientConfigurer | To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
      | clientConnectionManager | HttpClientConnectionManager | To use a custom HttpClientConnectionManager to manage connections
      | httpBinding | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | httpConfiguration | HttpConfiguration | To use the shared HttpConfiguration as base configuration.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | httpContext | HttpContext | To use a custom org.apache.http.protocol.HttpContext when executing requests.
      | sslContextParameters | SSLContextParameters | To configure security using SSLContextParameters. Important: Only one instance of org.apache.camel.util.jsse.SSLContextParameters is supported per HttpComponent. If you need to use 2 or more different instances you need to define a new HttpComponent per instance you need.
      | x509HostnameVerifier | X509HostnameVerifier | To use a custom X509HostnameVerifier such as org.apache.http.conn.ssl.StrictHostnameVerifier or org.apache.http.conn.ssl.AllowAllHostnameVerifier.
      | maxTotalConnections | int | The maximum number of connections.
      | connectionsPerRoute | int | The maximum number of connections per route.
      | connectionTimeToLive | long | The time for connection to live the time unit is millisecond the default value is always keep alive.
      | cookieStore | CookieStore | To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END










      // endpoint options: START
      The HTTP4 component supports 31 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | producer |  | URI | *Required* The url of the HTTP endpoint to call.
      | disableStreamCache | common | false | boolean | Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
      | authenticationPreemptive | producer | false | boolean | If this option is true camel-http4 sends preemptive basic authentication to the server.
      | authMethodPriority | producer |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | bridgeEndpoint | producer | false | boolean | If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
      | chunked | producer | true | boolean | If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
      | clearExpiredCookies | producer | true | boolean | Whether to clear expired cookies before sending the HTTP request. This ensures the cookies store does not keep growing by adding new cookies which is newer removed when they are expired.
      | connectionClose | producer | false | boolean | Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
      | cookieStore | producer |  | CookieStore | To use a custom org.apache.http.client.CookieStore. By default the org.apache.http.impl.client.BasicCookieStore is used which is an in-memory only cookie store. Notice if bridgeEndpoint=true then the cookie store is forced to be a noop cookie store as cookie shouldn't be stored as we are just bridging (eg acting as a proxy).
      | copyHeaders | producer | true | boolean | If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
      | headerFilterStrategy | producer |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | httpBinding | producer |  | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | ignoreResponseBody | producer | false | boolean | If this option is true The http producer won't read response body and cache the input stream
      | okStatusCodeRange | producer | 200-299 | String | The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
      | preserveHostHeader | producer | false | boolean | If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
      | proxyHost | producer |  | String | The proxy host name
      | proxyPort | producer |  | int | The proxy port number
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | producer | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | urlRewrite | producer (advanced) |  | UrlRewrite | Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
      | clientBuilder | advanced |  | HttpClientBuilder | Provide access to the http client request parameters used on new RequestConfig instances used by producers or consumers of this endpoint.
      | clientConnectionManager | advanced |  | HttpClientConnectionManager | To use a custom HttpClientConnectionManager to manage connections
      | httpClient | advanced |  | HttpClient | Gets the HttpClient to be used by org.apache.camel.component.http4.HttpProducer
      | httpClientConfigurer | advanced |  | HttpClientConfigurer | Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
      | httpClientOptions | advanced |  | Map | To configure the HttpClient using the key/values from the Map.
      | httpContext | advanced |  | HttpContext | To use a custom HttpContext instance
      | mapHttpMessageBody | advanced | true | boolean | If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
      | mapHttpMessageFormUrlEncodedBody | advanced | true | boolean | If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
      | mapHttpMessageHeaders | advanced | true | boolean | If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useSystemProperties | advanced | false | boolean | To use System Properties as fallback for configuration
      |=======================================================================
      {% endraw %}
      // endpoint options: END







      [[HTTP4-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,20%,70%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`Exchange.HTTP_URI` |`String` |URI to call. Will override existing URI set directly on the endpoint.
      This uri is the uri of the http server to call. Its not the same as the
      Camel endpoint uri, where you can configure endpoint options such as
      security etc. This header does not support that, its only the uri of the
      http server.

      |`Exchange.HTTP_PATH` |`String` |Request URI's path, the header will be used to build the request URI
      with the HTTP_URI.

      |`Exchange.HTTP_QUERY` |`String` |URI parameters. Will override existing URI parameters set directly on
      the endpoint.

      |`Exchange.HTTP_RESPONSE_CODE` |`int` |The HTTP response code from the external server. Is 200 for OK.

      |`Exchange.HTTP_RESPONSE_TEXT` | `String` |The HTTP response text from the external server.

      |`Exchange.HTTP_CHARACTER_ENCODING` |`String` |Character encoding.

      |`Exchange.CONTENT_TYPE` |`String` |The HTTP content type. Is set on both the IN and OUT message to provide
      a content type, such as `text/html`.

      |`Exchange.CONTENT_ENCODING` |`String` |The HTTP content encoding. Is set on both the IN and OUT message to
      provide a content encoding, such as `gzip`.
      |=======================================================================

      [[HTTP4-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      Camel will store the HTTP response from the external server on the OUT
      body. All headers from the IN message will be copied to the OUT message,
      so headers are preserved during routing. Additionally Camel will add the
      HTTP response headers as well to the OUT message headers.

      ??


      [[HTTP4-UsingSystemProperties]]
      Using System Properties
      ^^^^^^^^^^^^^^^^^^^^^^^

      When setting useSystemProperties to true, the HTTP Client will look for
      the following System Properties and it will use it:

      * ssl.TrustManagerFactory.algorithm
      * http://javax.net/[javax.net].ssl.trustStoreType
      * http://javax.net/[javax.net].ssl.trustStore
      * http://javax.net/[javax.net].ssl.trustStoreProvider
      * http://javax.net/[javax.net].ssl.trustStorePassword
      * java.home
      * ssl.KeyManagerFactory.algorithm
      * http://javax.net/[javax.net].ssl.keyStoreType
      * http://javax.net/[javax.net].ssl.keyStore
      * http://javax.net/[javax.net].ssl.keyStoreProvider
      * http://javax.net/[javax.net].ssl.keyStorePassword
      * http.proxyHost
      * http.proxyPort
      * http.nonProxyHosts
      * http.keepAlive
      * http.maxConnections

      [[HTTP4-Responsecode]]
      Response code
      ^^^^^^^^^^^^^

      Camel will handle according to the HTTP response code:

      * Response code is in the range 100..299, Camel regards it as a success
      response.
      * Response code is in the range 300..399, Camel regards it as a
      redirection response and will throw a `HttpOperationFailedException`
      with the information.
      * Response code is 400+, Camel regards it as an external server failure
      and will throw a `HttpOperationFailedException` with the information.

      *throwExceptionOnFailure*
      The option, `throwExceptionOnFailure`, can be set to `false` to prevent
      the `HttpOperationFailedException` from being thrown for failed response
      codes. This allows you to get any response from the remote server. +
      There is a sample below demonstrating this.

      [[HTTP4-HttpOperationFailedException]]
      HttpOperationFailedException
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This exception contains the following information:

      * The HTTP status code
      * The HTTP status line (text of the status code)
      * Redirect location, if server returned a redirect
      * Response body as a `java.lang.String`, if server provided a body as
      response

      [[HTTP4-CallingusingGETorPOST]]
      Calling using GET or POST
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The following algorithm is used to determine whether the `GET` or `POST`
      HTTP method should be used: +
       1. Use method provided in header. +
       2. `GET` if query string is provided in header. +
       3. `GET` if endpoint is configured with a query string. +
       4. `POST` if there is data to send (body is not null). +
       5. `GET` otherwise.

      [[HTTP4-HowtogetaccesstoHttpServletRequestandHttpServletResponse]]
      How to get access to HttpServletRequest and HttpServletResponse
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can get access to these two using the Camel type converter system
      using +
       *NOTE* You can get the request and response not just from the processor
      after the camel-jetty or camel-cxf endpoint.

      [source,java]
      ----------------------------------------------------------------------------------
      HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
      HttpServletRequest response = exchange.getIn().getBody(HttpServletResponse.class);
      ----------------------------------------------------------------------------------

      [[HTTP4-ConfiguringURItocall]]
      Configuring URI to call
      ^^^^^^^^^^^^^^^^^^^^^^^

      You can set the HTTP producer's URI directly form the endpoint URI. In
      the route below, Camel will call out to the external server, `oldhost`,
      using HTTP.

      [source,java]
      -------------------------------
      from("direct:start")
              .to("http4://oldhost");
      -------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ---------------------------------------------------------------------
      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
          <from uri="direct:start"/>
          <to uri="http4://oldhost"/>
        </route>
      </camelContext>
      ---------------------------------------------------------------------

      You can override the HTTP endpoint URI by adding a header with the key,
      `Exchange.HTTP_URI`, on the message.

      [source,java]
      -----------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_URI, constant("http://newhost"))
        .to("http4://oldhost");
      -----------------------------------------------------------

      In the sample above Camel will call the http://newhost despite the
      endpoint is configured with http4://oldhost. +
      If the http4 endpoint is working in bridge mode, it will ignore the
      message header of `Exchange.HTTP_URI`.

      [[HTTP4-ConfiguringURIParameters]]
      Configuring URI Parameters
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The *http* producer supports URI parameters to be sent to the HTTP
      server. The URI parameters can either be set directly on the endpoint
      URI or as a header with the key `Exchange.HTTP_QUERY` on the message.

      [source,java]
      ------------------------------------------------
      from("direct:start")
        .to("http4://oldhost?order=123&detail=short");
      ------------------------------------------------

      Or options provided in a header:

      [source,java]
      ---------------------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
        .to("http4://oldhost");
      ---------------------------------------------------------------------

      [[HTTP4-HowtosetthehttpmethodtotheHTTPproducer]]
      How to set the http method (GET/PATCH/POST/PUT/DELETE/HEAD/OPTIONS/TRACE) to the HTTP producer
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Using the http PATCH method*

      The http PATCH method is supported starting with Camel 2.11.3 / 2.12.1.

      The HTTP4 component provides a way to set the HTTP request method by
      setting the message header. Here is an example:

      [source,java]
      -----------------------------------------------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http4.HttpMethods.POST))
        .to("http4://www.google.com")
        .to("mock:results");
      -----------------------------------------------------------------------------------------------

      The method can be written a bit shorter using the string constants:

      [source,java]
      -----------------------------------------------
      .setHeader("CamelHttpMethod", constant("POST"))
      -----------------------------------------------

      And the equivalent Spring sample:

      [source,xml]
      ---------------------------------------------------------------------
      <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
        <route>
          <from uri="direct:start"/>
          <setHeader headerName="CamelHttpMethod">
              <constant>POST</constant>
          </setHeader>
          <to uri="http4://www.google.com"/>
          <to uri="mock:results"/>
        </route>
      </camelContext>
      ---------------------------------------------------------------------

      [[HTTP4-Usingclienttimeout-SO_TIMEOUT]]
      Using client timeout - SO_TIMEOUT
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      See the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java[HttpSOTimeoutTest]
      unit test.

      *Since Camel 2.13.0*: See the updated
      https://github.com/apache/camel/blob/master/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java[HttpSOTimeoutTest]
      unit test.

      [[HTTP4-ConfiguringaProxy]]
      Configuring a Proxy
      ^^^^^^^^^^^^^^^^^^^

      The HTTP4 component provides a way to configure a proxy.

      [source,java]
      ------------------------------------------------------------------------
      from("direct:start")
        .to("http4://oldhost?proxyAuthHost=www.myproxy.com&proxyAuthPort=80");
      ------------------------------------------------------------------------

      There is also support for proxy authentication via the
      `proxyAuthUsername` and `proxyAuthPassword` options.

      [[HTTP4-UsingproxysettingsoutsideofURI]]
      Using proxy settings outside of URI
      +++++++++++++++++++++++++++++++++++

      To avoid System properties conflicts, you can set proxy configuration
      only from the CamelContext or URI. +
       Java DSL :

      [source,java]
      ---------------------------------------------------------------
       context.getProperties().put("http.proxyHost", "172.168.18.9");
       context.getProperties().put("http.proxyPort" "8080");
      ---------------------------------------------------------------

      Spring XML

      [source,xml]
      ----------------------------------------------------------------
         <camelContext>
             <properties>
                 <property key="http.proxyHost" value="172.168.18.9"/>
                 <property key="http.proxyPort" value="8080"/>
            </properties>
         </camelContext>
      ----------------------------------------------------------------

      Camel will first set the settings from Java System or CamelContext
      Properties and then the endpoint proxy options if provided. +
       So you can override the system properties with the endpoint options.

      Notice in *Camel 2.8* there is also a `http.proxyScheme` property you
      can set to explicit configure the scheme to use.

      [[HTTP4-Configuringcharset]]
      Configuring charset
      ^^^^^^^^^^^^^^^^^^^

      If you are using `POST` to send data you can configure the `charset`
      using the `Exchange` property:

      [source,java]
      ----------------------------------------------------------
      exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
      ----------------------------------------------------------

      [[HTTP4-Samplewithscheduledpoll]]
      Sample with scheduled poll
      ++++++++++++++++++++++++++

      This sample polls the Google homepage every 10 seconds and write the
      page to the file `message.html`:

      [source,java]
      ------------------------------------------------------------
      from("timer://foo?fixedRate=true&delay=0&period=10000")
        .to("http4://www.google.com")
        .setHeader(FileComponent.HEADER_FILE_NAME, "message.html")
        .to("file:target/google");
      ------------------------------------------------------------

      [[HTTP4-URIParametersfromtheendpointURI]]
      URI Parameters from the endpoint URI
      ++++++++++++++++++++++++++++++++++++

      In this sample we have the complete URI endpoint that is just what you
      would have typed in a web browser. Multiple URI parameters can of course
      be set using the `&` character as separator, just as you would in the
      web browser. Camel does no tricks here.

      [source,java]
      -----------------------------------------------------------------
      // we query for Camel at the Google page
      template.sendBody("http4://www.google.com/search?q=Camel", null);
      -----------------------------------------------------------------

      [[HTTP4-URIParametersfromtheMessage]]
      URI Parameters from the Message
      +++++++++++++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------
      Map headers = new HashMap();
      headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en");
      // we query for Camel and English language at Google
      template.sendBody("http4://www.google.com/search", null, headers);
      ------------------------------------------------------------------

      In the header value above notice that it should *not* be prefixed with
      `?` and you can separate parameters as usual with the `&` char.

      [[HTTP4-GettingtheResponseCode]]
      Getting the Response Code
      +++++++++++++++++++++++++

      You can get the HTTP response code from the HTTP4 component by getting
      the value from the Out message header with
      `Exchange.HTTP_RESPONSE_CODE`.

      [source,java]
      ------------------------------------------------------------------------------------
      Exchange exchange = template.send("http4://www.google.com/search", new Processor() {
        public void process(Exchange exchange) throws Exception {
          exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
        }
      });
      Message out = exchange.getOut();
      int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
      ------------------------------------------------------------------------------------

      [[HTTP4-DisablingCookies]]
      Disabling Cookies
      ^^^^^^^^^^^^^^^^^

      To disable cookies you can set the HTTP Client to ignore cookies by
      adding this URI option: +
       `httpClient.cookiePolicy=ignoreCookies`

      [[HTTP4-AdvancedUsage]]
      Advanced Usage
      ^^^^^^^^^^^^^^

      If you need more control over the HTTP producer you should use the
      `HttpComponent` where you can set various classes to give you custom
      behavior.

      [[HTTP4-SettingupSSLforHTTPClient]]
      Setting up SSL for HTTP Client
      ++++++++++++++++++++++++++++++

      [[HTTP4-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility

      As of Camel 2.8, the HTTP4 component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 HTTP4 component.

      [[HTTP4-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");

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

      HttpComponent httpComponent = getContext().getComponent("https4", HttpComponent.class);
      httpComponent.setSslContextParameters(scp);
      ---------------------------------------------------------------------------------------

      [[HTTP4-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:sslContextParameters>...
      ...
        <to uri="https4://127.0.0.1/mail/?sslContextParametersRef=sslContextParameters"/>...
      --------------------------------------------------------------------------------------

      [[HTTP4-ConfiguringApacheHTTPClientDirectly]]
      Configuring Apache HTTP Client Directly

      Basically camel-http4 component is built on the top of
      http://hc.apache.org/httpcomponents-client-ga/[Apache HttpClient].
      Please refer to
      http://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html#d4e537[SSL/TLS
      customization] for details or have a look into the
      `org.apache.camel.component.http4.HttpsServerTestSupport` unit test base
      class. +
       You can also implement a custom
      `org.apache.camel.component.http4.HttpClientConfigurer` to do some
      configuration on the http client if you need full control of it.

      However if you _just_ want to specify the keystore and truststore you
      can do this with Apache HTTP `HttpClientConfigurer`, for example:

      [source,java]
      ------------------------------------------------------------------------------------------------------
      KeyStore keystore = ...;
      KeyStore truststore = ...;

      SchemeRegistry registry = new SchemeRegistry();
      registry.register(new Scheme("https", 443, new SSLSocketFactory(keystore, "mypassword", truststore)));
      ------------------------------------------------------------------------------------------------------

      And then you need to create a class that implements
      `HttpClientConfigurer`, and registers https protocol providing a
      keystore or truststore per example above. Then, from your camel route
      builder class you can hook it up like so:

      [source,java]
      --------------------------------------------------------------------------------------
      HttpComponent httpComponent = getContext().getComponent("http4", HttpComponent.class);
      httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
      --------------------------------------------------------------------------------------

      If you are doing this using the Spring DSL, you can specify your
      `HttpClientConfigurer` using the URI. For example:

      [source,xml]
      -----------------------------------------------------------------------------------------
      <bean id="myHttpClientConfigurer"
       class="my.https.HttpClientConfigurer">
      </bean>

      <to uri="https4://myhostname.com:443/myURL?httpClientConfigurer=myHttpClientConfigurer"/>
      -----------------------------------------------------------------------------------------

      As long as you implement the HttpClientConfigurer and configure your
      keystore and truststore as described above, it will work fine.

      [[HTTP4-UsingHTTPStoauthenticategotchas]]
      Using HTTPS to authenticate gotchas

      An end user reported that he had problem with authenticating with HTTPS.
      The problem was eventually resolved by providing a custom configured
      `org.apache.http.protocol.HttpContext`:

      * 1. Create a (Spring) factory for HttpContexts:

      [source,java]
      ------------------------------------------------------------------
      public class HttpContextFactory {

        private String httpHost = "localhost";
        private String httpPort = 9001;

        private BasicHttpContext httpContext = new BasicHttpContext();
        private BasicAuthCache authCache = new BasicAuthCache();
        private BasicScheme basicAuth = new BasicScheme();

        public HttpContext getObject() {
          authCache.put(new HttpHost(httpHost, httpPort), basicAuth);

          httpContext.setAttribute(ClientContext.AUTH_CACHE, authCache);

          return httpContext;
        }

        // getter and setter
      }
      ------------------------------------------------------------------

      * 2. Declare an HttpContext in the Spring application context file:

      [source,xml]
      ---------------------------------------------------------------------------------------
      <bean id="myHttpContext" factory-bean="httpContextFactory" factory-method="getObject"/>
      ---------------------------------------------------------------------------------------

      * 3. Reference the context in the http4 URL:

      [source,xml]
      -----------------------------------------------------------------------
      <to uri="https4://myhostname.com:443/myURL?httpContext=myHttpContext"/>
      -----------------------------------------------------------------------

      [[HTTP4-UsingdifferentSSLContextParameters]]
      Using different SSLContextParameters

      The link:http4.html[HTTP4] component only support one instance of
      `org.apache.camel.util.jsse.SSLContextParameters` per component. If you
      need to use 2 or more different instances, then you need to setup
      multiple link:http4.html[HTTP4] components as shown below. Where we have
      2 components, each using their own instance of `sslContextParameters`
      property.

      [source,xml]
      ----------------------------------------------------------------------------
      <bean id="http4-foo" class="org.apache.camel.component.http4.HttpComponent">
         <property name="sslContextParameters" ref="sslContextParams1"/>
         <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
      </bean>

      <bean id="http4-bar" class="org.apache.camel.component.http4.HttpComponent">
         <property name="sslContextParameters" ref="sslContextParams2"/>
         <property name="x509HostnameVerifier" ref="hostnameVerifier"/>
      </bean>
      ----------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-https
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: https
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: https
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: https
          spec:
            containers:
            - image: fabric8/connector-https:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: https
        alternativeSchemes: http,https
        syntax: https:httpUri
        title: HTTPS
        description: For calling out to external HTTP servers using Apache HTTP Client 3.x.
        label: http
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.http.HttpComponent
        groupId: org.apache.camel
        artifactId: camel-http
        version: 2.18.1
      componentProperties:
        httpClientConfigurer:
          kind: property
          type: object
          javaType: org.apache.camel.component.http.HttpClientConfigurer
          deprecated: false
          secret: false
          description: To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
        httpConnectionManager:
          kind: property
          type: object
          javaType: org.apache.commons.httpclient.HttpConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpConnectionManager to manage connections
        httpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        httpConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpConfiguration
          deprecated: false
          secret: false
          description: To use the shared HttpConfiguration as base configuration.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: producer
          label: producer
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The url of the HTTP endpoint to call.
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        authMethodPriority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - Basic
          - Digest
          - NTLM
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
        chunked:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
        copyHeaders:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
        headerFilterStrategy:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        ignoreResponseBody:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true The http producer won't read response body and cache the input stream
        okStatusCodeRange:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
        preserveHostHeader:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
        proxyHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The proxy port number
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        transferException:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        urlRewrite:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.http.common.UrlRewrite
          deprecated: false
          secret: false
          description: Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
        httpClientConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.http.HttpClientConfigurer
          deprecated: false
          secret: false
          description: Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
        httpClientOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the HttpClient using the key/values from the Map.
        httpConnectionManager:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.httpclient.HttpConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpConnectionManager to manage connections
        httpConnectionManagerOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpConnectionManager.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure the HttpConnectionManager using the key/values from the Map.
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[HTTP-HTTPComponent]]
      HTTP Component
      ~~~~~~~~~~~~~~

      The *http:* component provides HTTP based link:endpoint.html[endpoints]
      for consuming external HTTP resources (as a client to call external
      servers using HTTP).

      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-http</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[HTTP-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------------------------------------------
      http:hostname[:port][/resourceUri][?param1=value1][&param2=value2]
      ------------------------------------------------------------------

      Will by default use port 80 for HTTP and 443 for HTTPS.

      *camel-http vs camel-jetty*

      You can only produce to endpoints generated by the HTTP component.
      Therefore it should never be used as input into your camel Routes. To
      bind/expose an HTTP endpoint via a HTTP server as input to a camel
      route, you can use the link:jetty.html[Jetty Component] or the
      link:servlet.html[Servlet Component]


      [[HTTP-Examples]]
      Examples
      ^^^^^^^^

      Call the url with the body using POST and return response as out
      message. If body is null call URL using GET and return response as out
      message

      Java DSL

      Spring DSL

      [source,java]
      ------------------------------
      from("direct:start")
        .to("http://myhost/mypath");
      ------------------------------

      [source,xml]
      --------------------------
      <from uri="direct:start"/>
      <to uri="http://oldhost"/>
      --------------------------

      You can override the HTTP endpoint URI by adding a header. Camel will
      call the http://newhost. This is very handy for e.g. REST urls.

      Java DSL

      [source,java]
      -----------------------------------------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_URI, simple("http://myserver/orders/${header.orderId}"))
        .to("http://dummyhost");
      -----------------------------------------------------------------------------------

      URI parameters can either be set directly on the endpoint URI or as a
      header

      Java DSL

      [source,java]
      ---------------------------------------------------------------------
      from("direct:start")
        .to("http://oldhost?order=123&detail=short");
      from("direct:start")
        .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
        .to("http://oldhost");
      ---------------------------------------------------------------------

      Set the HTTP request method to POST

      Java DSL

      Spring DSL

      [source,java]
      ----------------------------------------------------
      from("direct:start")
        .setHeader(Exchange.HTTP_METHOD, constant("POST"))
        .to("http://www.google.com");
      ----------------------------------------------------

      [source,xml]
      ----------------------------------------
      <from uri="direct:start"/>
      <setHeader headerName="CamelHttpMethod">
        <constant>POST</constant>
      </setHeader>
      <to uri="http://www.google.com"/>
      <to uri="mock:results"/>
      ----------------------------------------

      [[HTTP-HttpOptions]]
      Http Options
      ^^^^^^^^^^^^




      // component options: START
      The HTTP component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | httpClientConfigurer | HttpClientConfigurer | To use the custom HttpClientConfigurer to perform configuration of the HttpClient that will be used.
      | httpConnectionManager | HttpConnectionManager | To use a custom HttpConnectionManager to manage connections
      | httpBinding | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | httpConfiguration | HttpConfiguration | To use the shared HttpConfiguration as base configuration.
      | allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END









      // endpoint options: START
      The HTTP component supports 25 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | httpUri | producer |  | URI | *Required* The url of the HTTP endpoint to call.
      | disableStreamCache | common | false | boolean | Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
      | authMethodPriority | producer |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | bridgeEndpoint | producer | false | boolean | If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
      | chunked | producer | true | boolean | If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
      | connectionClose | producer | false | boolean | Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
      | copyHeaders | producer | true | boolean | If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
      | headerFilterStrategy | producer |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | httpBinding | producer |  | HttpBinding | To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
      | ignoreResponseBody | producer | false | boolean | If this option is true The http producer won't read response body and cache the input stream
      | okStatusCodeRange | producer | 200-299 | String | The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
      | preserveHostHeader | producer | false | boolean | If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
      | proxyHost | producer |  | String | The proxy host name
      | proxyPort | producer |  | int | The proxy port number
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | transferException | producer | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | urlRewrite | producer (advanced) |  | UrlRewrite | Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
      | httpClientConfigurer | advanced |  | HttpClientConfigurer | Register a custom configuration strategy for new HttpClient instances created by producers or consumers such as to configure authentication mechanisms etc
      | httpClientOptions | advanced |  | Map | To configure the HttpClient using the key/values from the Map.
      | httpConnectionManager | advanced |  | HttpConnectionManager | To use a custom HttpConnectionManager to manage connections
      | httpConnectionManagerOptions | advanced |  | Map | To configure the HttpConnectionManager using the key/values from the Map.
      | mapHttpMessageBody | advanced | true | boolean | If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
      | mapHttpMessageFormUrlEncodedBody | advanced | true | boolean | If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
      | mapHttpMessageHeaders | advanced | true | boolean | If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END






      [[HTTP-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`Exchange.HTTP_URI` |`String` |URI to call. Will override existing URI set directly on the endpoint.
      This uri is the uri of the http server to call. Its not the same as the
      Camel endpoint uri, where you can configure endpoint options such as
      security etc. This header does not support that, its only the uri of the
      http server.

      |`Exchange.HTTP_METHOD` |`String` |HTTP Method / Verb to use (GET/POST/PUT/DELETE/HEAD/OPTIONS/TRACE)

      |`Exchange.HTTP_PATH` |`String` |Request URI's path, the header will be used to build the request URI
      with the HTTP_URI. *Camel 2.3.0:* If the path is start with "/", http
      producer will try to find the relative path based on the
      Exchange.HTTP_BASE_URI header or the
      exchange.getFromEndpoint().getEndpointUri();

      |`Exchange.HTTP_QUERY` |`String` |URI parameters. Will override existing URI parameters set directly on
      the endpoint.

      |`Exchange.HTTP_RESPONSE_CODE` |`int` |The HTTP response code from the external server. Is 200 for OK.

      |`Exchange.HTTP_CHARACTER_ENCODING` |`String` |Character encoding.

      |`Exchange.CONTENT_TYPE` |`String` |The HTTP content type. Is set on both the IN and OUT message to provide
      a content type, such as `text/html`.

      |`Exchange.CONTENT_ENCODING` |`String` |The HTTP content encoding. Is set on both the IN and OUT message to
      provide a content encoding, such as `gzip`.

      |`Exchange.HTTP_SERVLET_REQUEST` |`HttpServletRequest` |The `HttpServletRequest` object.

      |`Exchange.HTTP_SERVLET_RESPONSE` |`HttpServletResponse` |The `HttpServletResponse` object.

      |`Exchange.HTTP_PROTOCOL_VERSION` |`String` |*Camel 2.5:* You can set the http protocol version with this header, eg.
      "HTTP/1.0". If you didn't specify the header, HttpProducer will use the
      default value "HTTP/1.1"
      |=======================================================================

      The header name above are constants. For the spring DSL you have to use
      the value of the constant instead of the name.

      [[HTTP-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      Camel will store the HTTP response from the external server on the OUT
      body. All headers from the IN message will be copied to the OUT message,
      so headers are preserved during routing. Additionally Camel will add the
      HTTP response headers as well to the OUT message headers.

      [[HTTP-Responsecode]]
      Response code
      ^^^^^^^^^^^^^

      Camel will handle according to the HTTP response code:

      * Response code is in the range 100..299, Camel regards it as a success
      response.
      * Response code is in the range 300..399, Camel regards it as a
      redirection response and will throw a `HttpOperationFailedException`
      with the information.
      * Response code is 400+, Camel regards it as an external server failure
      and will throw a `HttpOperationFailedException` with the information.

      *throwExceptionOnFailure*

      The option, `throwExceptionOnFailure`, can be set to `false` to prevent
      the `HttpOperationFailedException` from being thrown for failed response
      codes. This allows you to get any response from the remote server. +
      There is a sample below demonstrating this.


      [[HTTP-HttpOperationFailedException]]
      HttpOperationFailedException
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This exception contains the following information:

      * The HTTP status code
      * The HTTP status line (text of the status code)
      * Redirect location, if server returned a redirect
      * Response body as a `java.lang.String`, if server provided a body as
      response

      [[HTTP-CallingusingGETorPOST]]
      Calling using GET or POST
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The following algorithm is used to determine if either `GET` or `POST`
      HTTP method should be used: +
       1. Use method provided in header. +
       2. `GET` if query string is provided in header. +
       3. `GET` if endpoint is configured with a query string. +
       4. `POST` if there is data to send (body is not null). +
       5. `GET` otherwise.

      [[HTTP-HowtogetaccesstoHttpServletRequestandHttpServletResponse]]
      How to get access to HttpServletRequest and HttpServletResponse
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can get access to these two using the Camel type converter system
      using

      [source,java]
      ----------------------------------------------------------------------------------
      HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
      HttpServletRequest response = exchange.getIn().getBody(HttpServletResponse.class);
      ----------------------------------------------------------------------------------

      [[HTTP-Usingclienttimeout-SO_TIMEOUT]]
      Using client timeout - SO_TIMEOUT
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      See the unit test in
      http://svn.apache.org/viewvc?view=rev&revision=781775[this link]

      [[HTTP-MoreExamples]]
      More Examples
      ~~~~~~~~~~~~~

      [[HTTP-ConfiguringaProxy]]
      Configuring a Proxy
      ^^^^^^^^^^^^^^^^^^^

      Java DSL

      [source,java]
      ---------------------------------------------------------------
      from("direct:start")
        .to("http://oldhost?proxyHost=www.myproxy.com&proxyPort=80");
      ---------------------------------------------------------------

      There is also support for proxy authentication via the `proxyUsername`
      and `proxyPassword` options.

      [[HTTP-UsingproxysettingsoutsideofURI]]
      Using proxy settings outside of URI
      +++++++++++++++++++++++++++++++++++

      Java DSL

      Spring DSL

      [source,java]
      ---------------------------------------------------------------
       context.getProperties().put("http.proxyHost", "172.168.18.9");
       context.getProperties().put("http.proxyPort" "8080");
      ---------------------------------------------------------------

      [source,java]
      ----------------------------------------------------------------
         <camelContext>
             <properties>
                 <property key="http.proxyHost" value="172.168.18.9"/>
                 <property key="http.proxyPort" value="8080"/>
            </properties>
         </camelContext>
      ----------------------------------------------------------------

      Options on Endpoint will override options on the context.

      [[HTTP-Configuringcharset]]
      Configuring charset
      ^^^^^^^^^^^^^^^^^^^

      If you are using `POST` to send data you can configure the `charset`

      [source,java]
      -------------------------------------------------
      setProperty(Exchange.CHARSET_NAME, "iso-8859-1");
      -------------------------------------------------

      [[HTTP-Samplewithscheduledpoll]]
      Sample with scheduled poll
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      The sample polls the Google homepage every 10 seconds and write the page
      to the file `message.html`:

      [source,java]
      ----------------------------------------------------------------------------------------
      from("timer://foo?fixedRate=true&delay=0&period=10000")
          .to("http://www.google.com")
          .setHeader(FileComponent.HEADER_FILE_NAME, "message.html").to("file:target/google");
      ----------------------------------------------------------------------------------------

      [[HTTP-GettingtheResponseCode]]
      Getting the Response Code
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      You can get the HTTP response code from the HTTP component by getting
      the value from the Out message header with
      `Exchange.HTTP_RESPONSE_CODE`.

      [source,java]
      ----------------------------------------------------------------------------------------------
         Exchange exchange = template.send("http://www.google.com/search", new Processor() {
                  public void process(Exchange exchange) throws Exception {
                      exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
                  }
         });
         Message out = exchange.getOut();
         int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
      ----------------------------------------------------------------------------------------------

      [[HTTP-UsingthrowExceptionOnFailure=falsetogetanyresponseback]]
      Using `throwExceptionOnFailure=false` to get any response back
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In the route below we want to route a message that we
      link:content-enricher.html[enrich] with data returned from a remote HTTP
      call. As we want any response from the remote server, we set the
      `throwExceptionOnFailure` option to `false` so we get any response in
      the `AggregationStrategy`. As the code is based on a unit test that
      simulates a HTTP status code 404, there is some assertion code etc.

      [[HTTP-DisablingCookies]]
      Disabling Cookies
      ^^^^^^^^^^^^^^^^^

      To disable cookies you can set the HTTP Client to ignore cookies by
      adding this URI option: +
       `httpClient.cookiePolicy=ignoreCookies`

      [[HTTP-AdvancedUsage]]
      Advanced Usage
      ^^^^^^^^^^^^^^

      If you need more control over the HTTP producer you should use the
      `HttpComponent` where you can set various classes to give you custom
      behavior.

      [[HTTP-SettingMaxConnectionsPerHost]]
      Setting MaxConnectionsPerHost
      +++++++++++++++++++++++++++++

      The link:http.html[HTTP] Component has a
      `org.apache.commons.httpclient.HttpConnectionManager` where you can
      configure various global configuration for the given component. +
       By global, we mean that any endpoint the component creates has the same
      shared `HttpConnectionManager`. So, if we want to set a different value
      for the max connection per host, we need to define it on the HTTP
      component and *not* on the endpoint URI that we usually use. So here
      comes:

      First, we define the `http` component in Spring XML. Yes, we use the
      same scheme name, `http`, because otherwise Camel will auto-discover and
      create the component with default settings. What we need is to overrule
      this so we can set our options. In the sample below we set the max
      connection to 5 instead of the default of 2.

      And then we can just use it as we normally do in our routes:

      [[HTTP-Usingpreemptiveauthentication]]
      Using preemptive authentication
      +++++++++++++++++++++++++++++++

      An end user reported that he had problem with authenticating with HTTPS.
      The problem was eventually resolved when he discovered the HTTPS server
      did not return a HTTP code 401 Authorization Required. The solution was
      to set the following URI option:
      `httpClient.authenticationPreemptive=true`

      [[HTTP-Acceptingselfsignedcertificatesfromremoteserver]]
      Accepting self signed certificates from remote server
      +++++++++++++++++++++++++++++++++++++++++++++++++++++

      See this
      http://www.nabble.com/Using-HTTPS-in-camel-http-when-remote-side-has-self-signed-cert-td25916878.html[link]
      from a mailing list discussion with some code to outline how to do this
      with the Apache Commons HTTP API.

      [[HTTP-SettingupSSLforHTTPClient]]
      Setting up SSL for HTTP Client
      ++++++++++++++++++++++++++++++

      [[HTTP-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility

      As of Camel 2.8, the HTTP4 component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 HTTP4 component.

      The version of the Apache HTTP client used in this component resolves
      SSL/TLS information from a global "protocol" registry.?? This component
      provides an implementation,
      `org.apache.camel.component.http.SSLContextParametersSecureProtocolSocketFactory`,
      of the HTTP client's protocol socket factory in order to support the use
      of the Camel JSSE Configuration utility.?? The following example
      demonstrates how to configure the protocol registry and use the
      registered protocol information in a route.

      [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");

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

      ProtocolSocketFactory factory =
          new SSLContextParametersSecureProtocolSocketFactory(scp);

      Protocol.registerProtocol("https",
              new Protocol(
      ?????????????? "https",
      ?????????????? factory,
      ?????????????? 443));

      from("direct:start")
              .to("https://mail.google.com/mail/").to("mock:results");
      ----------------------------------------------------------------

      [[HTTP-ConfiguringApacheHTTPClientDirectly]]
      Configuring Apache HTTP Client Directly

      Basically camel-http component is built on the top of Apache HTTP
      client, and you can implement a custom
      `org.apache.camel.component.http.HttpClientConfigurer` to do some
      configuration on the http client if you need full control of it.

      However if you _just_ want to specify the keystore and truststore you
      can do this with Apache HTTP `HttpClientConfigurer`, for example:

      [source,java]
      ----------------------------------------------------------------------------
      Protocol authhttps = new Protocol("https", new AuthSSLProtocolSocketFactory(
        new URL("file:my.keystore"), "mypassword",
        new URL("file:my.truststore"), "mypassword"), 443);

      Protocol.registerProtocol("https", authhttps);
      ----------------------------------------------------------------------------

      And then you need to create a class that implements
      `HttpClientConfigurer`, and registers https protocol providing a
      keystore or truststore per example above. Then, from your camel route
      builder class you can hook it up like so:

      [source,java]
      -------------------------------------------------------------------------------------
      HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class);
      httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
      -------------------------------------------------------------------------------------

      If you are doing this using the Spring DSL, you can specify your
      `HttpClientConfigurer` using the URI. For example:

      [source,java]
      -------------------------------------------------------------------------------------------
      <bean id="myHttpClientConfigurer"
       class="my.https.HttpClientConfigurer">
      </bean>

      <to uri="https://myhostname.com:443/myURL?httpClientConfigurerRef=myHttpClientConfigurer"/>
      -------------------------------------------------------------------------------------------

      As long as you implement the HttpClientConfigurer and configure your
      keystore and truststore as described above, it will work fine.

      [[HTTP-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:jetty.html[Jetty]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ibatis
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ibatis
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ibatis
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ibatis
          spec:
            containers:
            - image: fabric8/connector-ibatis:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ibatis
        syntax: ibatis:statement
        title: iBatis
        description: Performs a query poll insert update or delete in a relational database using Apache iBATIS.
        label: database,sql
        deprecated: true
        async: false
        javaType: org.apache.camel.component.ibatis.IBatisComponent
        groupId: org.apache.camel
        artifactId: camel-ibatis
        version: 2.18.1
      componentProperties:
        sqlMapClient:
          kind: property
          type: object
          javaType: com.ibatis.sqlmap.client.SqlMapClient
          deprecated: false
          secret: false
          description: To use the given com.ibatis.sqlmap.client.SqlMapClient
        sqlMapConfig:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Location of iBatis xml configuration file. The default value is:
            SqlMapConfig.xml loaded from the classpath'
        useTransactions:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to use transactions. This option is by default true.
      properties:
        statement:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The statement name in the iBatis XML mapping file which maps to the query insert update or delete operation you wish to evaluate.
        isolation:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - TRANSACTION_NONE
          - TRANSACTION_READ_UNCOMMITTED
          - TRANSACTION_READ_COMMITTED
          - TRANSACTION_REPEATABLE_READ
          - TRANSACTION_SERIALIZABLE
          deprecated: false
          secret: false
          defaultValue: TRANSACTION_REPEATABLE_READ
          description: Transaction isolation level
        useTransactions:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use transactions. This option is by default true.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: This option is intended to split results returned by the database pool into the batches and deliver them in multiple exchanges. This integer defines the maximum messages to deliver in single exchange. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disable it.
        onConsume:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Statement to run after data has been processed in the route
        routeEmptyResultSet:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether allow empty resultset to be routed to the next hop
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        strategy:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.ibatis.strategy.IBatisProcessingStrategy
          deprecated: false
          secret: false
          description: Allows to plugin a custom IBatisProcessingStrategy to use by the consumer.
        useIterator:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Process resultset individually or as a list
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        statementType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.ibatis.StatementType
          enum:
          - QueryForObject
          - QueryForList
          - Insert
          - Update
          - Delete
          deprecated: false
          secret: false
          description: Mandatory to specify for the producer to control which kind of operation to invoke.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[iBATIS-iBATIS]]
      iBATIS
      ~~~~~~

      The *ibatis:* component allows you to query, poll, insert, update and
      delete data in a relational database using
      http://ibatis.apache.org/[Apache iBATIS].

      *Prefer MyBatis*

      The Apache iBatis project is no longer active. The project is moved
      outside Apache and is now know as the MyBatis project. +
      Therefore we encourage users to use link:mybatis.html[MyBatis] instead.
      This camel-ibatis component will be removed in Camel 3.0.

      iBatis do not support Spring 4.x. So you can only use Spring 3.x or
      older with iBatis.

      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-ibatis</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[iBATIS-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------
      ibatis:statementName[?options]
      ------------------------------

      Where *statementName* is the name in the iBATIS XML configuration file
      which maps to the query, insert, update or delete operation you wish to
      evaluate.

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

      This component will by default load the iBatis SqlMapConfig file from
      the root of the classpath and expected named as `SqlMapConfig.xml`. +
       It uses Spring resource loading so you can define it using `classpath`,
      `file` or `http` as prefix to load resources with those schemes. +
       In Camel 2.2 you can configure this on the iBatisComponent with the
      `setSqlMapConfig(String)` method.

      [[iBATIS-Options]]
      Options
      ^^^^^^^




      // component options: START
      The iBatis component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | sqlMapClient | SqlMapClient | To use the given com.ibatis.sqlmap.client.SqlMapClient
      | sqlMapConfig | String | Location of iBatis xml configuration file. The default value is: SqlMapConfig.xml loaded from the classpath
      | useTransactions | boolean | Whether to use transactions. This option is by default true.
      |=======================================================================
      {% endraw %}
      // component options: END








      // endpoint options: START
      The iBatis component supports 28 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | statement | common |  | String | *Required* The statement name in the iBatis XML mapping file which maps to the query insert update or delete operation you wish to evaluate.
      | isolation | common | TRANSACTION_REPEATABLE_READ | String | Transaction isolation level
      | useTransactions | common | true | boolean | Whether to use transactions. This option is by default true.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | maxMessagesPerPoll | consumer | 0 | int | This option is intended to split results returned by the database pool into the batches and deliver them in multiple exchanges. This integer defines the maximum messages to deliver in single exchange. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disable it.
      | onConsume | consumer |  | String | Statement to run after data has been processed in the route
      | routeEmptyResultSet | consumer | false | boolean | Whether allow empty resultset to be routed to the next hop
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | strategy | consumer |  | IBatisProcessingStrategy | Allows to plugin a custom IBatisProcessingStrategy to use by the consumer.
      | useIterator | consumer | true | boolean | Process resultset individually or as a list
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | statementType | producer |  | StatementType | Mandatory to specify for the producer to control which kind of operation to invoke.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END





      [[iBATIS-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel will populate the result message, either IN or OUT with a header
      with the operationName used:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelIBatisStatementName` |`String` |The *statementName* used (for example: insertAccount).

      |`CamelIBatisResult` |`Object` |The *response* returned from iBatis in any of the operations. For
      instance an `INSERT` could return the auto-generated key, or number of
      rows etc.
      |=======================================================================

      [[iBATIS-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      The response from iBatis will only be set as body if it's a `SELECT`
      statement. That means, for example, for `INSERT` statements Camel will
      not replace the body. This allows you to continue routing and keep the
      original body. The response from iBatis is always stored in the header
      with the key `CamelIBatisResult`.

      [[iBATIS-Samples]]
      Samples
      ^^^^^^^

      For example if you wish to consume beans from a JMS queue and insert
      them into a database you could do the following:

      [source,java]
      --------------------------------------------------
      from("activemq:queue:newAccount").
        to("ibatis:insertAccount?statementType=Insert");
      --------------------------------------------------

      Notice we have to specify the `statementType`, as we need to instruct
      Camel which `SqlMapClient` operation to invoke.

      Where *insertAccount* is the iBatis ID in the SQL map file:

      [source,xml]
      ------------------------------------------------------------
        <!-- Insert example, using the Account parameter class -->
        <insert id="insertAccount" parameterClass="Account">
          insert into ACCOUNT (
            ACC_ID,
            ACC_FIRST_NAME,
            ACC_LAST_NAME,
            ACC_EMAIL
          )
          values (
            #id#, #firstName#, #lastName#, #emailAddress#
          )
        </insert>
      ------------------------------------------------------------

      [[iBATIS-UsingStatementTypeforbettercontrolofIBatis]]
      Using StatementType for better control of IBatis
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When routing to an iBatis endpoint you want more fine grained control so
      you can control whether the SQL statement to be executed is a `SELEECT`,
      `UPDATE`, `DELETE` or `INSERT` etc. So for instance if we want to route
      to an iBatis endpoint in which the IN body contains parameters to a
      `SELECT` statement we can do:

      In the code above we can invoke the iBatis statement `selectAccountById`
      and the IN body should contain the account id we want to retrieve, such
      as an `Integer` type.

      We can do the same for some of the other operations, such as
      `QueryForList`:

      And the same for `UPDATE`, where we can send an `Account` object as IN
      body to iBatis:

      [[iBATIS-Scheduledpollingexample]]
      Scheduled polling example
      +++++++++++++++++++++++++

      Since this component does not support scheduled polling, you need to use
      another mechanism for triggering the scheduled polls, such as the
      link:timer.html[Timer] or link:quartz.html[Quartz] components.

      In the sample below we poll the database, every 30 seconds using the
      link:timer.html[Timer] component and send the data to the JMS queue:

      [source,java]
      ---------------------------------------------------------------------------------------------------------------------------------------
      from("timer://pollTheDatabase?delay=30000").to("ibatis:selectAllAccounts?statementType=QueryForList").to("activemq:queue:allAccounts");
      ---------------------------------------------------------------------------------------------------------------------------------------

      And the iBatis SQL map file used:

      [source,xml]
      ----------------------------------------------------------------------------
        <!-- Select with no parameters using the result map for Account class. -->
        <select id="selectAllAccounts" resultMap="AccountResult">
          select * from ACCOUNT
        </select>
      ----------------------------------------------------------------------------

      [[iBATIS-UsingonConsume]]
      Using onConsume
      +++++++++++++++

      This component supports executing statements *after* data have been
      consumed and processed by Camel. This allows you to do post updates in
      the database. Notice all statements must be `UPDATE` statements. Camel
      supports executing multiple statements whose name should be separated by
      comma.

      The route below illustrates we execute the *consumeAccount* statement
      data is processed. This allows us to change the status of the row in the
      database to processed, so we avoid consuming it twice or more.

      And the statements in the sqlmap file:

      [[iBATIS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:mybatis.html[MyBatis]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-imap
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: imap
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: imap
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: imap
          spec:
            containers:
            - image: fabric8/connector-imap:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: imap
        alternativeSchemes: imap,imaps,pop3,pop3s,smtp,smtps
        syntax: imap:host:port
        alternativeSyntax: imap:username:password@host:port
        title: IMAP
        description: To send or receive emails using imap/pop3 or stmp protocols.
        label: mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mail.MailComponent
        groupId: org.apache.camel
        artifactId: camel-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.MailConfiguration
          deprecated: false
          secret: false
          description: Sets the Mail configuration
        contentTypeResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The mail server host name
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the mail server
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        closeFolder:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
        copyTo:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
        disconnect:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
        handleFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
        peek:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        unseen:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit by unseen mails only.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fetchSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
        folderName:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: INBOX
          description: The folder to poll.
        mailUidGenerator:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailUidGenerator
          deprecated: false
          secret: false
          description: A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
        mapMailMessage:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        postProcessAction:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBoxPostProcessAction
          deprecated: false
          secret: false
          description: Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
        bcc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the BCC email address. Separate multiple email addresses with comma.
        cc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the CC email address. Separate multiple email addresses with comma.
        from:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel@localhost
          description: The from email address
        replyTo:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
        subject:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The Subject of the message being sent. Note: Setting the subject
            in the header takes precedence over this option.'
        to:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the To email address. Separate multiple email addresses with comma.
        javaMailSender:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          required: false
          type: object
          javaType: org.apache.camel.component.mail.JavaMailSender
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
        additionalJavaMailProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          prefix: mail.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
        alternativeBodyHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelMailAlternativeBody
          description: Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
        attachmentsContentTransferEncodingResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver
          deprecated: false
          secret: false
          description: To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBinding
          deprecated: false
          secret: false
          description: Sets the binding used to convert from a Camel message to and from a Mail message
        connectionTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The connection timeout in milliseconds.
        contentType:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text/plain
          description: The mail message content type. Use text/html for HTML mails.
        contentTypeResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
        debugMode:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        ignoreUnsupportedCharset:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        ignoreUriScheme:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        session:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.mail.Session
          deprecated: false
          secret: false
          description: Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useInlineAttachments:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use disposition inline or attachment.
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
        idempotentRepositoryRemoveOnCommit:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
        searchTerm:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: javax.mail.search.SearchTerm
          prefix: searchTerm.
          multiValue: true
          deprecated: false
          secret: false
          description: Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        sortTerm:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
        dummyTrustManager:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for login
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username for login
    documentation.adoc: |+
      [[Mail-MailComponent]]
      Mail Component
      ~~~~~~~~~~~~~~

      The mail component provides access to Email via Spring's Mail support
      and the underlying JavaMail system.

      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-mail</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      WARNING: *Geronimo mail .jar*

      We have discovered that the geronimo mail `.jar` (v1.6) has a bug when
      polling mails with attachments. It cannot correctly identify the
      `Content-Type`. So, if you attach a `.jpeg` file to a mail and you poll
      it, the `Content-Type` is resolved as `text/plain` and not as
      `image/jpeg`. For that reason, we have added an
      `org.apache.camel.component.ContentTypeResolver` SPI interface which
      enables you to provide your own implementation and fix this bug by
      returning the correct Mime type based on the file name. So if the file
      name ends with `jpeg/jpg`, you can return `image/jpeg`.

      You can set your custom resolver on the `MailComponent` instance or on
      the `MailEndpoint` instance.


      TIP: *POP3 or IMAP*
      POP3 has some limitations and end users are encouraged to use IMAP if
      possible.

      INFO: *Using mock-mail for testing*
      You can use a mock framework for unit testing, which allows you to test
      without the need for a real mail server. However you should remember to
      not include the mock-mail when you go into production or other
      environments where you need to send mails to a real mail server. Just
      the presence of the mock-javamail.jar on the classpath means that it
      will kick in and avoid sending the mails.

      [[Mail-URIformat]]
      URI format
      ^^^^^^^^^^

      Mail endpoints can have one of the following URI formats (for the
      protocols, SMTP, POP3, or IMAP, respectively):

      [source,java]
      ---------------------------------------
      smtp://[username@]host[:port][?options]
      pop3://[username@]host[:port][?options]
      imap://[username@]host[:port][?options]
      ---------------------------------------

      The mail component also supports secure variants of these protocols
      (layered over SSL). You can enable the secure protocols by adding `s` to
      the scheme:

      [source,java]
      ----------------------------------------
      smtps://[username@]host[:port][?options]
      pop3s://[username@]host[:port][?options]
      imaps://[username@]host[:port][?options]
      ----------------------------------------

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


      [[Mail-Component-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The Mail component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | MailConfiguration | Sets the Mail configuration
      | contentTypeResolver | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      |=======================================================================
      {% endraw %}
      // component options: END



      [[Mail-Endpoint-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // endpoint options: START
      The Mail component supports 63 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* The mail server host name
      | port | common |  | int | The port number of the mail server
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | closeFolder | consumer | true | boolean | Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
      | copyTo | consumer |  | String | After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
      | delete | consumer | false | boolean | Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
      | disconnect | consumer | false | boolean | Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
      | handleFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | maxMessagesPerPoll | consumer |  | int | Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
      | peek | consumer | true | boolean | Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | skipFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | unseen | consumer | true | boolean | Whether to limit by unseen mails only.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fetchSize | consumer (advanced) | -1 | int | Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
      | folderName | consumer (advanced) | INBOX | String | The folder to poll.
      | mailUidGenerator | consumer (advanced) |  | MailUidGenerator | A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
      | mapMailMessage | consumer (advanced) | true | boolean | Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | postProcessAction | consumer (advanced) |  | MailBoxPostProcessAction | Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
      | bcc | producer |  | String | Sets the BCC email address. Separate multiple email addresses with comma.
      | cc | producer |  | String | Sets the CC email address. Separate multiple email addresses with comma.
      | from | producer | camel@localhost | String | The from email address
      | replyTo | producer |  | String | The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
      | subject | producer |  | String | The Subject of the message being sent. Note: Setting the subject in the header takes precedence over this option.
      | to | producer |  | String | Sets the To email address. Separate multiple email addresses with comma.
      | javaMailSender | producer (advanced) |  | JavaMailSender | To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
      | additionalJavaMailProperties | advanced |  | Properties | Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
      | alternativeBodyHeader | advanced | CamelMailAlternativeBody | String | Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
      | attachmentsContentTransferEncodingResolver | advanced |  | AttachmentsContentTransferEncodingResolver | To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
      | binding | advanced |  | MailBinding | Sets the binding used to convert from a Camel message to and from a Mail message
      | connectionTimeout | advanced | 30000 | int | The connection timeout in milliseconds.
      | contentType | advanced | text/plain | String | The mail message content type. Use text/html for HTML mails.
      | contentTypeResolver | advanced |  | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      | debugMode | advanced | false | boolean | Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | ignoreUnsupportedCharset | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | ignoreUriScheme | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | session | advanced |  | Session | Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useInlineAttachments | advanced | false | boolean | Whether to use disposition inline or attachment.
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
      | idempotentRepositoryRemoveOnCommit | filter | true | boolean | When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
      | searchTerm | filter |  | SearchTerm | Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | sortTerm | sort |  | String | Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
      | dummyTrustManager | security | false | boolean | To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
      | password | security |  | String | The password for login
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | username | security |  | String | The username for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Mail-Sampleendpoints]]
      Sample endpoints
      ++++++++++++++++

      Typically, you specify a URI with login credentials as follows (taking
      SMTP as an example):

      [source,java]
      ------------------------------------------------
      smtp://[username@]host[:port][?password=somepwd]
      ------------------------------------------------

      Alternatively, it is possible to specify both the user name and the
      password as query options:

      [source,java]
      -----------------------------------------------------
      smtp://host[:port]?password=somepwd&username=someuser
      -----------------------------------------------------

      For example:

      [source,java]
      ------------------------------------------------------------
      smtp://mycompany.mailserver:30?password=tiger&username=scott
      ------------------------------------------------------------

      [[Mail-Components]]
      Components
      ^^^^^^^^^^

      - link:imap.html[IMAP]
      - link:imaps.html[IMAPs]
      - link:pop3.html[POP3s]
      - link:pop3s.html[POP3s]
      - link:smtp.html[STMP]
      - link:smtps.html[SMTPs]

      [[Mail-DefaultPortsDefaultports]]
      Default ports
      +++++++++++++

      Default port numbers are supported. If the port number is omitted, Camel
      determines the port number to use based on the protocol.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Protocol |Default Port Number
      |`SMTP` |`25`
      |`SMTPS` |`465`
      |`POP3` |`110`
      |`POP3S` |`995`
      |`IMAP` |`143`
      |`IMAPS` |`993`
      |=======================================================================

      [[Mail-SSLsupport]]
      SSL support
      ^^^^^^^^^^^

      The underlying mail framework is responsible for providing SSL support.
      ??You may either configure SSL/TLS support by completely specifying the
      necessary Java Mail API configuration options, or you may provide a
      configured SSLContextParameters through the component or endpoint
      configuration.

      [[Mail-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of *Camel 2.10*, the mail component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 mail component.

      [[Mail-Programmaticconfigurationoftheendpoint]]
      Programmatic configuration of the endpoint

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      KeyStoreParameters ksp = new KeyStoreParameters();
      ksp.setResource("/users/home/server/truststore.jks");
      ksp.setPassword("keystorePassword");
      TrustManagersParameters tmp = new TrustManagersParameters();
      tmp.setKeyStore(ksp);
      SSLContextParameters scp = new SSLContextParameters();
      scp.setTrustManagers(tmp);
      Registry registry = ...
      registry.bind("sslContextParameters", scp);
      ...
      from(...)
      &nbsp; &nbsp; .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
      ----------------------------------------------------------------------------------------------------------------------------------

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

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      ...
      <camel:sslContextParameters id="sslContextParameters">
        <camel:trustManagers>
          <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/>
        </camel:trustManagers>
      </camel:sslContextParameters>...
      ...
      <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
      ---------------------------------------------------------------------------------------------------------------------------

      [[Mail-ConfiguringJavaMailDirectly]]
      Configuring JavaMail Directly
      +++++++++++++++++++++++++++++

      Camel uses SUN JavaMail, which only trusts certificates issued by well
      known Certificate Authorities (the default JVM trust configuration). If
      you issue your own certificates, you have to import the CA certificates
      into the JVM's Java trust/key store files, override the default JVM
      trust/key store files (see `SSLNOTES.txt` in JavaMail for details).

      [[Mail-MailMessageContent]]
      Mail Message Content
      ^^^^^^^^^^^^^^^^^^^^

      Camel uses the message exchange's IN body as the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      text content. The body is converted to `String.class`.

      Camel copies all of the exchange's IN headers to the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      headers.

      The subject of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      can be configured using a header property on the IN message. The code
      below demonstrates this:

      The same applies for other MimeMessage headers such as recipients, so
      you can use a header property as `To`:

      *Since Camel 2.11* When using the MailProducer the send the mail to
      server, you should be able to get the message id of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      with the key `CamelMailMessageId` from the Camel message header.

      [[Mail-Headerstakeprecedenceoverpre-configuredrecipients]]
      Headers take precedence over pre-configured recipients
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The recipients specified in the message headers always take precedence
      over recipients pre-configured in the endpoint URI. The idea is that if
      you provide any recipients in the message headers, that is what you get.
      The recipients pre-configured in the endpoint URI are treated as a
      fallback.

      In the sample code below, the email message is sent to
      `davsclaus@apache.org`, because it takes precedence over the
      pre-configured recipient, `info@mycompany.com`. Any `CC` and `BCC`
      settings in the endpoint URI are also ignored and those recipients will
      not receive any mail. The choice between headers and pre-configured
      settings is all or nothing: the mail component _either_ takes the
      recipients exclusively from the headers or exclusively from the
      pre-configured settings. It is not possible to mix and match headers and
      pre-configured settings.

      [source,java]
      ------------------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org");

              template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
      ------------------------------------------------------------------------------------------------------------

      [[Mail-Multiplerecipientsforeasierconfiguration]]
      Multiple recipients for easier configuration
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      It is possible to set multiple recipients using a comma-separated or a
      semicolon-separated list. This applies both to header settings and to
      settings in an endpoint URI. For example:

      [source,java]
      ------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
      ------------------------------------------------------------------------------------------------

      The preceding example uses a semicolon, `;`, as the separator character.

      [[Mail-Settingsendernameandemail]]
      Setting sender name and email
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can specify recipients in the format, `name <email>`, to include
      both the name and the email address of the recipient.

      For example, you define the following headers on the a
      link:message.html[Message]:

      [source,java]
      ---------------------------------------------------------
      Map headers = new HashMap();
      map.put("To", "Claus Ibsen <davsclaus@apache.org>");
      map.put("From", "James Strachan <jstrachan@apache.org>");
      map.put("Subject", "Camel is cool");
      ---------------------------------------------------------

      [[Mail-JavaMailAPI(exSUNJavaMail)]]
      JavaMail API (ex SUN JavaMail)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      https://java.net/projects/javamail/pages/Home[JavaMail API] is used
      under the hood for consuming and producing mails. +
       We encourage end-users to consult these references when using either
      POP3 or IMAP protocol. Note particularly that POP3 has a much more
      limited set of features than IMAP.

      * https://javamail.java.net/nonav/docs/api/com/sun/mail/pop3/package-summary.html[JavaMail
      POP3 API]
      * https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/package-summary.html[JavaMail
      IMAP API]
      * And generally about the
      https://javamail.java.net/nonav/docs/api/javax/mail/Flags.html[MAIL
      Flags]

      [[Mail-Samples]]
      Samples
      ^^^^^^^

      We start with a simple route that sends the messages received from a JMS
      queue as emails. The email account is the `admin` account on
      `mymailserver.com`.

      [source,java]
      -------------------------------------------------------------------------------------
      from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
      -------------------------------------------------------------------------------------

      In the next sample, we poll a mailbox for new emails once every minute.
      Notice that we use the special `consumer` option for setting the poll
      interval, `consumer.delay`, as 60000 milliseconds = 60 seconds.

      [source,java]
      -------------------------------------------------------
      from("imap://admin@mymailserver.com
           password=secret&unseen=true&consumer.delay=60000")
          .to("seda://mails");
      -------------------------------------------------------

      In this sample we want to send a mail to multiple recipients:

      [[Mail-Sendingmailwithattachmentsample]]
      Sending mail with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


      WARNING: *Attachments are not support by all Camel components*
      The _Attachments API_ is based on the Java Activation Framework and is
      generally only used by the Mail API. Since many of the other Camel
      components do not support attachments, the attachments could potentially
      be lost as they propagate along the route. The rule of thumb, therefore,
      is to add attachments just before sending a message to the mail
      endpoint.


      The mail component supports attachments. In the sample below, we send a
      mail message containing a plain text message with a logo file
      attachment.

      [[Mail-SSLsample]]
      SSL sample
      ^^^^^^^^^^

      In this sample, we want to poll our Google mail inbox for mails. To
      download mail onto a local mail client, Google mail requires you to
      enable and configure SSL. This is done by logging into your Google mail
      account and changing your settings to allow IMAP access. Google have
      extensive documentation on how to do this.

      [source,java]
      -------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").to("log:newmail");
      -------------------------------------------------------------------------------------

      The preceding route polls the Google mail inbox for new mails once every
      minute and logs the received messages to the `newmail` logger
      category. +
       Running the sample with `DEBUG` logging enabled, we can monitor the
      progress in the logs:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages.
      2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      2008-05-08 06:32:12,187 INFO  newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Mail-Consumingmailswithattachmentsample]]
      Consuming mails with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this sample we poll a mailbox and store all attachments from the
      mails as files. First, we define a route to poll the mailbox. As this
      sample is based on google mail, it uses the same route as shown in the
      SSL sample:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").process(new MyMailProcessor());
      ---------------------------------------------------------------------------------------

      Instead of logging the mail we use a processor where we can process the
      mail from java code:

      [source,java]
      ---------------------------------------------------------------------------------
          public void process(Exchange exchange) throws Exception {
              // the API is a bit clunky so we need to loop
              Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
              if (attachments.size() > 0) {
                  for (String name : attachments.keySet()) {
                      DataHandler dh = attachments.get(name);
                      // get the file name
                      String filename = dh.getName();

                      // get the content and convert it to byte[]
                      byte[] data = exchange.getContext().getTypeConverter()
                                        .convertTo(byte[].class, dh.getInputStream());

                      // write the data to a file
                      FileOutputStream out = new FileOutputStream(filename);
                      out.write(data);
                      out.flush();
                      out.close();
                  }
              }
         }
      ---------------------------------------------------------------------------------

      As you can see the API to handle attachments is a bit clunky but it's
      there so you can get the `javax.activation.DataHandler` so you can
      handle the attachments using standard API.

      [[Mail-Howtosplitamailmessagewithattachments]]
      How to split a mail message with attachments
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this example we consume mail messages which may have a number of
      attachments. What we want to do is to use the
      link:splitter.html[Splitter] EIP per individual attachment, to process
      the attachments separately. For example if the mail message has 5
      attachments, we want the link:splitter.html[Splitter] to process five
      messages, each having a single attachment. To do this we need to provide
      a custom link:expression.html[Expression] to the
      link:splitter.html[Splitter] where we provide a List<Message> that
      contains the five messages with the single attachment.

      The code is provided out of the box in Camel 2.10 onwards in the
      `camel-mail` component. The code is in the class:
      `org.apache.camel.component.mail.SplitAttachmentsExpression`, which you
      can find the source code
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java[here]

      In the Camel route you then need to use this
      link:expression.html[Expression] in the route as shown below:

      If you use XML DSL then you need to declare a method call expression in
      the link:splitter.html[Splitter] as shown below

      [source,xml]
      ---------------------------------------------------------------------------------
      <split>
        <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/>
        <to uri="mock:split"/>
      </split>
      ---------------------------------------------------------------------------------

      ??

      From Camel 2.16 onwards you can also split the attachments as byte[] to
      be stored as the message body. This is done by creating the expression
      with boolean true

      [source,java]
      --------------------------------------------------------------------
      SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
      --------------------------------------------------------------------

      And then use the expression with the splitter eip.

      [[Mail-UsingcustomSearchTerm]]
      Using custom SearchTerm
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can configure a `searchTerm` on the `MailEndpoint` which allows you
      to filter out unwanted mails.

      For example to filter mails to contain Camel in either Subject or Text
      you can do as follows:

      [source,xml]
      -------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------------

      Notice we use the `"searchTerm.subjectOrBody"` as parameter key to
      indicate that we want to search on mail subject or body, to contain the
      word "Camel". +
       The class `org.apache.camel.component.mail.SimpleSearchTerm` has a
      number of options you can configure:

      Or to get the new unseen emails going 24 hours back in time you can do.
      Notice the "now-24h" syntax. See the table below for more details.

      [source,xml]
      --------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      --------------------------------------------------------------------------------------------------

      You can have multiple searchTerm in the endpoint uri configuration. They
      would then be combined together using AND operator, eg so both
      conditions must match. For example to get the last unseen emails going
      back 24 hours which has Camel in the mail subject you can do:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      ---------------------------------------------------------------------------------------------------------------------------

      The `SimpleSearchTerm` is designed to be easily configurable from a
      POJO, so you can also configure it using a <bean> style in XML

      [source,java]
      ---------------------------------------------------------------------------------
      <bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
        <property name="subject" value="Order"/>
        <property name="to" value="acme-order@acme.com"/>
        <property name="fromSentDate" value="now"/>
       </bean>
      ---------------------------------------------------------------------------------

      You can then refer to this bean, using #beanId in your Camel route as
      shown:

      [source,xml]
      -------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------

      In Java there is a builder class to build compound
      `SearchTerms` using the `org.apache.camel.component.mail.SearchTermBuilder`
      class. This allows you to build complex terms such as:

      [source,java]
      --------------------------------------------------------------
      // we just want the unseen mails which is not spam
      SearchTermBuilder builder = new SearchTermBuilder();

      builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
        // which was sent from either foo or bar
        .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
        // .. and we could continue building the terms

      SearchTerm term = builder.build();
      --------------------------------------------------------------

      [[Mail-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-imaps
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: imaps
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: imaps
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: imaps
          spec:
            containers:
            - image: fabric8/connector-imaps:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: imaps
        alternativeSchemes: imap,imaps,pop3,pop3s,smtp,smtps
        syntax: imaps:host:port
        alternativeSyntax: imaps:username:password@host:port
        title: IMAPS
        description: To send or receive emails using imap/pop3 or stmp protocols.
        label: mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mail.MailComponent
        groupId: org.apache.camel
        artifactId: camel-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.MailConfiguration
          deprecated: false
          secret: false
          description: Sets the Mail configuration
        contentTypeResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The mail server host name
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the mail server
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        closeFolder:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
        copyTo:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
        disconnect:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
        handleFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
        peek:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        unseen:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit by unseen mails only.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fetchSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
        folderName:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: INBOX
          description: The folder to poll.
        mailUidGenerator:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailUidGenerator
          deprecated: false
          secret: false
          description: A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
        mapMailMessage:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        postProcessAction:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBoxPostProcessAction
          deprecated: false
          secret: false
          description: Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
        bcc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the BCC email address. Separate multiple email addresses with comma.
        cc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the CC email address. Separate multiple email addresses with comma.
        from:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel@localhost
          description: The from email address
        replyTo:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
        subject:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The Subject of the message being sent. Note: Setting the subject
            in the header takes precedence over this option.'
        to:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the To email address. Separate multiple email addresses with comma.
        javaMailSender:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          required: false
          type: object
          javaType: org.apache.camel.component.mail.JavaMailSender
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
        additionalJavaMailProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          prefix: mail.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
        alternativeBodyHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelMailAlternativeBody
          description: Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
        attachmentsContentTransferEncodingResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver
          deprecated: false
          secret: false
          description: To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBinding
          deprecated: false
          secret: false
          description: Sets the binding used to convert from a Camel message to and from a Mail message
        connectionTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The connection timeout in milliseconds.
        contentType:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text/plain
          description: The mail message content type. Use text/html for HTML mails.
        contentTypeResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
        debugMode:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        ignoreUnsupportedCharset:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        ignoreUriScheme:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        session:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.mail.Session
          deprecated: false
          secret: false
          description: Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useInlineAttachments:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use disposition inline or attachment.
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
        idempotentRepositoryRemoveOnCommit:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
        searchTerm:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: javax.mail.search.SearchTerm
          prefix: searchTerm.
          multiValue: true
          deprecated: false
          secret: false
          description: Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        sortTerm:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
        dummyTrustManager:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for login
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username for login
    documentation.adoc: |+
      [[Mail-MailComponent]]
      Mail Component
      ~~~~~~~~~~~~~~

      The mail component provides access to Email via Spring's Mail support
      and the underlying JavaMail system.

      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-mail</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      WARNING: *Geronimo mail .jar*

      We have discovered that the geronimo mail `.jar` (v1.6) has a bug when
      polling mails with attachments. It cannot correctly identify the
      `Content-Type`. So, if you attach a `.jpeg` file to a mail and you poll
      it, the `Content-Type` is resolved as `text/plain` and not as
      `image/jpeg`. For that reason, we have added an
      `org.apache.camel.component.ContentTypeResolver` SPI interface which
      enables you to provide your own implementation and fix this bug by
      returning the correct Mime type based on the file name. So if the file
      name ends with `jpeg/jpg`, you can return `image/jpeg`.

      You can set your custom resolver on the `MailComponent` instance or on
      the `MailEndpoint` instance.


      TIP: *POP3 or IMAP*
      POP3 has some limitations and end users are encouraged to use IMAP if
      possible.

      INFO: *Using mock-mail for testing*
      You can use a mock framework for unit testing, which allows you to test
      without the need for a real mail server. However you should remember to
      not include the mock-mail when you go into production or other
      environments where you need to send mails to a real mail server. Just
      the presence of the mock-javamail.jar on the classpath means that it
      will kick in and avoid sending the mails.

      [[Mail-URIformat]]
      URI format
      ^^^^^^^^^^

      Mail endpoints can have one of the following URI formats (for the
      protocols, SMTP, POP3, or IMAP, respectively):

      [source,java]
      ---------------------------------------
      smtp://[username@]host[:port][?options]
      pop3://[username@]host[:port][?options]
      imap://[username@]host[:port][?options]
      ---------------------------------------

      The mail component also supports secure variants of these protocols
      (layered over SSL). You can enable the secure protocols by adding `s` to
      the scheme:

      [source,java]
      ----------------------------------------
      smtps://[username@]host[:port][?options]
      pop3s://[username@]host[:port][?options]
      imaps://[username@]host[:port][?options]
      ----------------------------------------

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


      [[Mail-Component-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The Mail component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | MailConfiguration | Sets the Mail configuration
      | contentTypeResolver | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      |=======================================================================
      {% endraw %}
      // component options: END



      [[Mail-Endpoint-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // endpoint options: START
      The Mail component supports 63 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* The mail server host name
      | port | common |  | int | The port number of the mail server
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | closeFolder | consumer | true | boolean | Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
      | copyTo | consumer |  | String | After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
      | delete | consumer | false | boolean | Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
      | disconnect | consumer | false | boolean | Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
      | handleFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | maxMessagesPerPoll | consumer |  | int | Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
      | peek | consumer | true | boolean | Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | skipFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | unseen | consumer | true | boolean | Whether to limit by unseen mails only.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fetchSize | consumer (advanced) | -1 | int | Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
      | folderName | consumer (advanced) | INBOX | String | The folder to poll.
      | mailUidGenerator | consumer (advanced) |  | MailUidGenerator | A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
      | mapMailMessage | consumer (advanced) | true | boolean | Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | postProcessAction | consumer (advanced) |  | MailBoxPostProcessAction | Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
      | bcc | producer |  | String | Sets the BCC email address. Separate multiple email addresses with comma.
      | cc | producer |  | String | Sets the CC email address. Separate multiple email addresses with comma.
      | from | producer | camel@localhost | String | The from email address
      | replyTo | producer |  | String | The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
      | subject | producer |  | String | The Subject of the message being sent. Note: Setting the subject in the header takes precedence over this option.
      | to | producer |  | String | Sets the To email address. Separate multiple email addresses with comma.
      | javaMailSender | producer (advanced) |  | JavaMailSender | To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
      | additionalJavaMailProperties | advanced |  | Properties | Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
      | alternativeBodyHeader | advanced | CamelMailAlternativeBody | String | Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
      | attachmentsContentTransferEncodingResolver | advanced |  | AttachmentsContentTransferEncodingResolver | To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
      | binding | advanced |  | MailBinding | Sets the binding used to convert from a Camel message to and from a Mail message
      | connectionTimeout | advanced | 30000 | int | The connection timeout in milliseconds.
      | contentType | advanced | text/plain | String | The mail message content type. Use text/html for HTML mails.
      | contentTypeResolver | advanced |  | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      | debugMode | advanced | false | boolean | Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | ignoreUnsupportedCharset | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | ignoreUriScheme | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | session | advanced |  | Session | Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useInlineAttachments | advanced | false | boolean | Whether to use disposition inline or attachment.
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
      | idempotentRepositoryRemoveOnCommit | filter | true | boolean | When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
      | searchTerm | filter |  | SearchTerm | Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | sortTerm | sort |  | String | Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
      | dummyTrustManager | security | false | boolean | To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
      | password | security |  | String | The password for login
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | username | security |  | String | The username for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Mail-Sampleendpoints]]
      Sample endpoints
      ++++++++++++++++

      Typically, you specify a URI with login credentials as follows (taking
      SMTP as an example):

      [source,java]
      ------------------------------------------------
      smtp://[username@]host[:port][?password=somepwd]
      ------------------------------------------------

      Alternatively, it is possible to specify both the user name and the
      password as query options:

      [source,java]
      -----------------------------------------------------
      smtp://host[:port]?password=somepwd&username=someuser
      -----------------------------------------------------

      For example:

      [source,java]
      ------------------------------------------------------------
      smtp://mycompany.mailserver:30?password=tiger&username=scott
      ------------------------------------------------------------

      [[Mail-Components]]
      Components
      ^^^^^^^^^^

      - link:imap.html[IMAP]
      - link:imaps.html[IMAPs]
      - link:pop3.html[POP3s]
      - link:pop3s.html[POP3s]
      - link:smtp.html[STMP]
      - link:smtps.html[SMTPs]

      [[Mail-DefaultPortsDefaultports]]
      Default ports
      +++++++++++++

      Default port numbers are supported. If the port number is omitted, Camel
      determines the port number to use based on the protocol.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Protocol |Default Port Number
      |`SMTP` |`25`
      |`SMTPS` |`465`
      |`POP3` |`110`
      |`POP3S` |`995`
      |`IMAP` |`143`
      |`IMAPS` |`993`
      |=======================================================================

      [[Mail-SSLsupport]]
      SSL support
      ^^^^^^^^^^^

      The underlying mail framework is responsible for providing SSL support.
      ??You may either configure SSL/TLS support by completely specifying the
      necessary Java Mail API configuration options, or you may provide a
      configured SSLContextParameters through the component or endpoint
      configuration.

      [[Mail-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of *Camel 2.10*, the mail component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 mail component.

      [[Mail-Programmaticconfigurationoftheendpoint]]
      Programmatic configuration of the endpoint

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      KeyStoreParameters ksp = new KeyStoreParameters();
      ksp.setResource("/users/home/server/truststore.jks");
      ksp.setPassword("keystorePassword");
      TrustManagersParameters tmp = new TrustManagersParameters();
      tmp.setKeyStore(ksp);
      SSLContextParameters scp = new SSLContextParameters();
      scp.setTrustManagers(tmp);
      Registry registry = ...
      registry.bind("sslContextParameters", scp);
      ...
      from(...)
      &nbsp; &nbsp; .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
      ----------------------------------------------------------------------------------------------------------------------------------

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

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      ...
      <camel:sslContextParameters id="sslContextParameters">
        <camel:trustManagers>
          <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/>
        </camel:trustManagers>
      </camel:sslContextParameters>...
      ...
      <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
      ---------------------------------------------------------------------------------------------------------------------------

      [[Mail-ConfiguringJavaMailDirectly]]
      Configuring JavaMail Directly
      +++++++++++++++++++++++++++++

      Camel uses SUN JavaMail, which only trusts certificates issued by well
      known Certificate Authorities (the default JVM trust configuration). If
      you issue your own certificates, you have to import the CA certificates
      into the JVM's Java trust/key store files, override the default JVM
      trust/key store files (see `SSLNOTES.txt` in JavaMail for details).

      [[Mail-MailMessageContent]]
      Mail Message Content
      ^^^^^^^^^^^^^^^^^^^^

      Camel uses the message exchange's IN body as the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      text content. The body is converted to `String.class`.

      Camel copies all of the exchange's IN headers to the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      headers.

      The subject of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      can be configured using a header property on the IN message. The code
      below demonstrates this:

      The same applies for other MimeMessage headers such as recipients, so
      you can use a header property as `To`:

      *Since Camel 2.11* When using the MailProducer the send the mail to
      server, you should be able to get the message id of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      with the key `CamelMailMessageId` from the Camel message header.

      [[Mail-Headerstakeprecedenceoverpre-configuredrecipients]]
      Headers take precedence over pre-configured recipients
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The recipients specified in the message headers always take precedence
      over recipients pre-configured in the endpoint URI. The idea is that if
      you provide any recipients in the message headers, that is what you get.
      The recipients pre-configured in the endpoint URI are treated as a
      fallback.

      In the sample code below, the email message is sent to
      `davsclaus@apache.org`, because it takes precedence over the
      pre-configured recipient, `info@mycompany.com`. Any `CC` and `BCC`
      settings in the endpoint URI are also ignored and those recipients will
      not receive any mail. The choice between headers and pre-configured
      settings is all or nothing: the mail component _either_ takes the
      recipients exclusively from the headers or exclusively from the
      pre-configured settings. It is not possible to mix and match headers and
      pre-configured settings.

      [source,java]
      ------------------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org");

              template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
      ------------------------------------------------------------------------------------------------------------

      [[Mail-Multiplerecipientsforeasierconfiguration]]
      Multiple recipients for easier configuration
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      It is possible to set multiple recipients using a comma-separated or a
      semicolon-separated list. This applies both to header settings and to
      settings in an endpoint URI. For example:

      [source,java]
      ------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
      ------------------------------------------------------------------------------------------------

      The preceding example uses a semicolon, `;`, as the separator character.

      [[Mail-Settingsendernameandemail]]
      Setting sender name and email
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can specify recipients in the format, `name <email>`, to include
      both the name and the email address of the recipient.

      For example, you define the following headers on the a
      link:message.html[Message]:

      [source,java]
      ---------------------------------------------------------
      Map headers = new HashMap();
      map.put("To", "Claus Ibsen <davsclaus@apache.org>");
      map.put("From", "James Strachan <jstrachan@apache.org>");
      map.put("Subject", "Camel is cool");
      ---------------------------------------------------------

      [[Mail-JavaMailAPI(exSUNJavaMail)]]
      JavaMail API (ex SUN JavaMail)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      https://java.net/projects/javamail/pages/Home[JavaMail API] is used
      under the hood for consuming and producing mails. +
       We encourage end-users to consult these references when using either
      POP3 or IMAP protocol. Note particularly that POP3 has a much more
      limited set of features than IMAP.

      * https://javamail.java.net/nonav/docs/api/com/sun/mail/pop3/package-summary.html[JavaMail
      POP3 API]
      * https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/package-summary.html[JavaMail
      IMAP API]
      * And generally about the
      https://javamail.java.net/nonav/docs/api/javax/mail/Flags.html[MAIL
      Flags]

      [[Mail-Samples]]
      Samples
      ^^^^^^^

      We start with a simple route that sends the messages received from a JMS
      queue as emails. The email account is the `admin` account on
      `mymailserver.com`.

      [source,java]
      -------------------------------------------------------------------------------------
      from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
      -------------------------------------------------------------------------------------

      In the next sample, we poll a mailbox for new emails once every minute.
      Notice that we use the special `consumer` option for setting the poll
      interval, `consumer.delay`, as 60000 milliseconds = 60 seconds.

      [source,java]
      -------------------------------------------------------
      from("imap://admin@mymailserver.com
           password=secret&unseen=true&consumer.delay=60000")
          .to("seda://mails");
      -------------------------------------------------------

      In this sample we want to send a mail to multiple recipients:

      [[Mail-Sendingmailwithattachmentsample]]
      Sending mail with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


      WARNING: *Attachments are not support by all Camel components*
      The _Attachments API_ is based on the Java Activation Framework and is
      generally only used by the Mail API. Since many of the other Camel
      components do not support attachments, the attachments could potentially
      be lost as they propagate along the route. The rule of thumb, therefore,
      is to add attachments just before sending a message to the mail
      endpoint.


      The mail component supports attachments. In the sample below, we send a
      mail message containing a plain text message with a logo file
      attachment.

      [[Mail-SSLsample]]
      SSL sample
      ^^^^^^^^^^

      In this sample, we want to poll our Google mail inbox for mails. To
      download mail onto a local mail client, Google mail requires you to
      enable and configure SSL. This is done by logging into your Google mail
      account and changing your settings to allow IMAP access. Google have
      extensive documentation on how to do this.

      [source,java]
      -------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").to("log:newmail");
      -------------------------------------------------------------------------------------

      The preceding route polls the Google mail inbox for new mails once every
      minute and logs the received messages to the `newmail` logger
      category. +
       Running the sample with `DEBUG` logging enabled, we can monitor the
      progress in the logs:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages.
      2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      2008-05-08 06:32:12,187 INFO  newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Mail-Consumingmailswithattachmentsample]]
      Consuming mails with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this sample we poll a mailbox and store all attachments from the
      mails as files. First, we define a route to poll the mailbox. As this
      sample is based on google mail, it uses the same route as shown in the
      SSL sample:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").process(new MyMailProcessor());
      ---------------------------------------------------------------------------------------

      Instead of logging the mail we use a processor where we can process the
      mail from java code:

      [source,java]
      ---------------------------------------------------------------------------------
          public void process(Exchange exchange) throws Exception {
              // the API is a bit clunky so we need to loop
              Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
              if (attachments.size() > 0) {
                  for (String name : attachments.keySet()) {
                      DataHandler dh = attachments.get(name);
                      // get the file name
                      String filename = dh.getName();

                      // get the content and convert it to byte[]
                      byte[] data = exchange.getContext().getTypeConverter()
                                        .convertTo(byte[].class, dh.getInputStream());

                      // write the data to a file
                      FileOutputStream out = new FileOutputStream(filename);
                      out.write(data);
                      out.flush();
                      out.close();
                  }
              }
         }
      ---------------------------------------------------------------------------------

      As you can see the API to handle attachments is a bit clunky but it's
      there so you can get the `javax.activation.DataHandler` so you can
      handle the attachments using standard API.

      [[Mail-Howtosplitamailmessagewithattachments]]
      How to split a mail message with attachments
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this example we consume mail messages which may have a number of
      attachments. What we want to do is to use the
      link:splitter.html[Splitter] EIP per individual attachment, to process
      the attachments separately. For example if the mail message has 5
      attachments, we want the link:splitter.html[Splitter] to process five
      messages, each having a single attachment. To do this we need to provide
      a custom link:expression.html[Expression] to the
      link:splitter.html[Splitter] where we provide a List<Message> that
      contains the five messages with the single attachment.

      The code is provided out of the box in Camel 2.10 onwards in the
      `camel-mail` component. The code is in the class:
      `org.apache.camel.component.mail.SplitAttachmentsExpression`, which you
      can find the source code
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java[here]

      In the Camel route you then need to use this
      link:expression.html[Expression] in the route as shown below:

      If you use XML DSL then you need to declare a method call expression in
      the link:splitter.html[Splitter] as shown below

      [source,xml]
      ---------------------------------------------------------------------------------
      <split>
        <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/>
        <to uri="mock:split"/>
      </split>
      ---------------------------------------------------------------------------------

      ??

      From Camel 2.16 onwards you can also split the attachments as byte[] to
      be stored as the message body. This is done by creating the expression
      with boolean true

      [source,java]
      --------------------------------------------------------------------
      SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
      --------------------------------------------------------------------

      And then use the expression with the splitter eip.

      [[Mail-UsingcustomSearchTerm]]
      Using custom SearchTerm
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can configure a `searchTerm` on the `MailEndpoint` which allows you
      to filter out unwanted mails.

      For example to filter mails to contain Camel in either Subject or Text
      you can do as follows:

      [source,xml]
      -------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------------

      Notice we use the `"searchTerm.subjectOrBody"` as parameter key to
      indicate that we want to search on mail subject or body, to contain the
      word "Camel". +
       The class `org.apache.camel.component.mail.SimpleSearchTerm` has a
      number of options you can configure:

      Or to get the new unseen emails going 24 hours back in time you can do.
      Notice the "now-24h" syntax. See the table below for more details.

      [source,xml]
      --------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      --------------------------------------------------------------------------------------------------

      You can have multiple searchTerm in the endpoint uri configuration. They
      would then be combined together using AND operator, eg so both
      conditions must match. For example to get the last unseen emails going
      back 24 hours which has Camel in the mail subject you can do:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      ---------------------------------------------------------------------------------------------------------------------------

      The `SimpleSearchTerm` is designed to be easily configurable from a
      POJO, so you can also configure it using a <bean> style in XML

      [source,java]
      ---------------------------------------------------------------------------------
      <bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
        <property name="subject" value="Order"/>
        <property name="to" value="acme-order@acme.com"/>
        <property name="fromSentDate" value="now"/>
       </bean>
      ---------------------------------------------------------------------------------

      You can then refer to this bean, using #beanId in your Camel route as
      shown:

      [source,xml]
      -------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------

      In Java there is a builder class to build compound
      `SearchTerms` using the `org.apache.camel.component.mail.SearchTermBuilder`
      class. This allows you to build complex terms such as:

      [source,java]
      --------------------------------------------------------------
      // we just want the unseen mails which is not spam
      SearchTermBuilder builder = new SearchTermBuilder();

      builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
        // which was sent from either foo or bar
        .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
        // .. and we could continue building the terms

      SearchTerm term = builder.build();
      --------------------------------------------------------------

      [[Mail-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-infinispan
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: infinispan
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: infinispan
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: infinispan
          spec:
            containers:
            - image: fabric8/connector-infinispan:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: infinispan
        syntax: infinispan:host
        title: Infinispan
        description: For reading/writing from/to Infinispan distributed key/value store and data grid.
        label: cache,datagrid,clustering
        deprecated: false
        async: false
        javaType: org.apache.camel.component.infinispan.InfinispanComponent
        groupId: org.apache.camel
        artifactId: camel-infinispan
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies the host of the cache on Infinispan instance
        cacheContainer:
          kind: parameter
          group: common
          type: object
          javaType: org.infinispan.commons.api.BasicCacheContainer
          deprecated: false
          secret: false
          description: Specifies the cache Container to connect
        cacheName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies the cache name
        queryBuilder:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.infinispan.InfinispanQueryBuilder
          deprecated: false
          secret: false
          description: Specifies the query builder.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        clusteredListener:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the listener will be installed for the entire cluster
        customListener:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.infinispan.InfinispanCustomListener
          deprecated: false
          secret: false
          description: Returns the custom listener in use if provided
        eventTypes:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Specifies the set of event types to register by the consumer. Multiple
            event can be separated by comma. The possible event types are: CACHE_ENTRY_ACTIVATED
            CACHE_ENTRY_PASSIVATED CACHE_ENTRY_VISITED CACHE_ENTRY_LOADED CACHE_ENTRY_EVICTED
            CACHE_ENTRY_CREATED CACHE_ENTRY_REMOVED CACHE_ENTRY_MODIFIED TRANSACTION_COMPLETED
            TRANSACTION_REGISTERED CACHE_ENTRY_INVALIDATED DATA_REHASHED TOPOLOGY_CHANGED
            PARTITION_STATUS_CHANGED'
        sync:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true the consumer will receive notifications synchronously
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        command:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - put
          - putAll
          - putIfAbsent
          - putAsync
          - putAllAsync
          - putIfAbsentAsync
          - get
          - containsKey
          - containsValue
          - remove
          - removeAsync
          - replace
          - replaceAsync
          - size
          - clear
          - clearAsync
          - query
          - stats
          deprecated: false
          secret: false
          defaultValue: put
          description: The operation to perform.
        configurationUri:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: An implementation specific URI for the CacheManager
        flags:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A comma separated list of Flag to be applied by default on each cache invocation not applicable to remote caches.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Infinispan-InfinispanComponent]]\nInfinispan Component\n\
      ~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.13.0*\n\nThis component allows\
      \ you to interact with\nhttp://infinispan.org/[Infinispan] distributed data\
      \ grid / cache.\nInfinispan is an extremely scalable, highly available key/value\
      \ data\nstore and data grid platform written in Java.\n\nFrom??*Camel 2.17*\
      \ onwards Infinispan requires Java 8.\n\nMaven users will need to add the following\
      \ dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-infinispan</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Infinispan-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------\n\
      infinispan://hostName?[options]\n-------------------------------\n\n[[Infinispan-URIOptions]]\n\
      URI Options\n^^^^^^^^^^^\n\nThe producer allows sending messages to a local\
      \ infinispan cache\nconfigured in the registry, or to a remote cache using the\
      \ HotRod\nprotocol. The consumer allows listening for events from local infinispan\
      \ cache\naccessible from the registry.\n\n\n// component options: START\nThe\
      \ Infinispan component has no options.\n// component options: END\n\n\n\n\n\
      // endpoint options: START\nThe Infinispan component supports 15 endpoint options\
      \ which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | common |  | String\
      \ | *Required* Specifies the host of the cache on Infinispan instance\n| cacheContainer\
      \ | common |  | BasicCacheContainer | Specifies the cache Container to connect\n\
      | cacheName | common |  | String | Specifies the cache name\n| queryBuilder\
      \ | common |  | InfinispanQueryBuilder | Specifies the query builder.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| clusteredListener\
      \ | consumer | false | boolean | If true the listener will be installed for\
      \ the entire cluster\n| customListener | consumer |  | InfinispanCustomListener\
      \ | Returns the custom listener in use if provided\n| eventTypes | consumer\
      \ |  | String | Specifies the set of event types to register by the consumer.\
      \ Multiple event can be separated by comma. The possible event types are: CACHE_ENTRY_ACTIVATED\
      \ CACHE_ENTRY_PASSIVATED CACHE_ENTRY_VISITED CACHE_ENTRY_LOADED CACHE_ENTRY_EVICTED\
      \ CACHE_ENTRY_CREATED CACHE_ENTRY_REMOVED CACHE_ENTRY_MODIFIED TRANSACTION_COMPLETED\
      \ TRANSACTION_REGISTERED CACHE_ENTRY_INVALIDATED DATA_REHASHED TOPOLOGY_CHANGED\
      \ PARTITION_STATUS_CHANGED\n| sync | consumer | true | boolean | If true the\
      \ consumer will receive notifications synchronously\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| command | producer | put | String | The operation to perform.\n\
      | configurationUri | advanced |  | String | An implementation specific URI for\
      \ the CacheManager\n| flags | advanced |  | String | A comma separated list\
      \ of Flag to be applied by default on each cache invocation not applicable to\
      \ remote caches.\n| synchronous | advanced | false | boolean | Sets whether\
      \ synchronous processing should be strictly used or Camel is allowed to use\
      \ asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[Infinispan-MessageHeaders]]\n\
      Message Headers\n^^^^^^^^^^^^^^^\n\n[width=\"100%\",cols=\"10%,10%,10%,10%,60%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Default Value |Type |Context |Description\n\n|CamelInfinispanCacheName\
      \ |`null` |String |Shared |The cache participating in the operation or event.\n\
      \n|CamelInfinispanOperation |`PUT` |String |Producer |The operation to perform:\
      \ CamelInfinispanOperationPut,\nCamelInfinispanOperationGet, CamelInfinispanOperationRemove,\n\
      CamelInfinispanOperationClear. *From Camel 2.16:* CamelInfinispanOperationPutAll,\n\
      CamelInfinispanOperationPutIfAbsent, CamelInfinispanOperationReplace,\nCamelInfinispanOperationSize.\n\
      \n|CamelInfinispanMap |`null` |Map |Producer |A Map to use in case of CamelInfinispanOperationPutAll\
      \ operation\n\n|CamelInfinispanKey |`null` |Object |Shared |The key to perform\
      \ the operation to or the key generating the event.\n\n|CamelInfinispanValue\
      \ |`null` |Object |Producer |The value to use for the operation.\n\n|CamelInfinispanOperationResult\
      \ |`null` |Object |Producer |The result of the operation.\n\n|CamelInfinispanEventType\
      \ |`null` |String |Consumer |The type of the received event. Possible values\
      \ defined here\norg.infinispan.notifications.cachelistener.event.Event.Type\n\
      \n|CamelInfinispanIsPre |`null` |Boolean |Consumer |Infinispan fires two events\
      \ for each operation: one before and one after\nthe operation.\n\n|CamelInfinispanLifespanTime\
      \ |`null` |long |Producer |The Lifespan time of a value inside the cache. Negative\
      \ values are\ninterpreted as infinity.\n\n|CamelInfinispanTimeUnit |`null` |String\
      \ |Producer |The Time Unit of an entry Lifespan Time.\n\n|CamelInfinispanMaxIdleTime\
      \ |`null` |long |Producer |The maximum amount of time an entry is allowed to\
      \ be idle for before it\nis considered as expired.\n\n|CamelInfinispanMaxIdleTimeUnit\
      \ |`null` |String |Producer |The Time Unit of an entry Max Idle Time.\n\n|CamelInfinispanQueryBuilder\
      \ |null |InfinispanQueryBuilder |Producer | *From Camel 2.17:* The QueryBuilde\
      \ to use for QUERY command, if not\npresent the command defaults to InifinispanConfiguration's\
      \ one\n\n|CamelInfinispanIgnoreReturnValues |null |Boolean |Producer |*From\
      \ Camel 2.17:* If this header is set, the return value for cache\noperation\
      \ returning something is ignored by the client application\n|=======================================================================\n\
      \n[[Infinispan-Example]]\nExample\n^^^^^^^\n\nBelow is an example route that\
      \ retrieves a value from the cache for a\nspecific key:\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:start\")\n        .setHeader(InfinispanConstants.OPERATION, constant(InfinispanConstants.GET))\n\
      \        .setHeader(InfinispanConstants.KEY, constant(\"123\"))\n        .to(\"\
      infinispan://localhost?cacheContainer=#cacheContainer\");\n------------------------------------------------------------------------------------\n\
      \n[[Infinispan-UsingtheInfinispanbasedidempotentrepository]]\nUsing the Infinispan\
      \ based idempotent repository\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIn this section we will use the Infinispan based idempotent repository.\n\n\
      First, we need to create a cacheManager and then configure our\n\n------------------------------------------------------------------------------------------\n\
      org.apache.camel.component.infinispan.processor.idempotent.InfinispanIdempotentRepository:\n\
      ------------------------------------------------------------------------------------------\n\
      \n[source,xml]\n---------------------------------------------------------------------------------------------------------------------------\n\
      <bean id=\"cacheManager\" class=\"org.infinispan.manager.DefaultCacheManager\"\
      \ init-method=\"start\" destroy-method=\"stop\"/>\n<bean id=\"infinispanRepo\"\
      \ class=\"org.apache.camel.component.infinispan.processor.idempotent.InfinispanIdempotentRepository\"\
      \n      factory-method=\"infinispanIdempotentRepository\">\n    <argument ref=\"\
      cacheManager\"/>\n    <argument value=\"idempotent\"/>\n</bean>\n---------------------------------------------------------------------------------------------------------------------------\n\
      \nThen we can create our Infinispan idempotent repository in the spring\nXML\
      \ file as well:\n\n[source,xml]\n---------------------------------------------------------------------\n\
      <camelContext xmlns=\"http://camel.apache.org/schema/spring\">   \n    <route\
      \ id=\"JpaMessageIdRepositoryTest\">\n        <from uri=\"direct:start\" />\n\
      \        <idempotentConsumer messageIdRepositoryRef=\"infinispanStore\">\n \
      \           <header>messageId</header>\n            <to uri=\"mock:result\"\
      \ />\n        </idempotentConsumer>\n    </route>\n</camelContext>\n---------------------------------------------------------------------\n\
      \nFor more information, see these resources...\n\n[[Infinispan-SeeAlso]]\nSee\
      \ Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-influxdb
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: influxdb
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: influxdb
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: influxdb
          spec:
            containers:
            - image: fabric8/connector-influxdb:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: influxdb
        syntax: influxdb:connectionBean
        title: InfluxDB
        description: The influxdb component allows you to interact with InfluxDB a time series database.
        label: database,ticks
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.influxdb.InfluxDbComponent
        groupId: org.apache.camel
        artifactId: camel-influxdb
        version: 2.18.1
      componentProperties: {}
      properties:
        connectionBean:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of org.influxdb.InfluxDB to use.
        databaseName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Setter for databaseName
        retentionPolicy:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: default
          description: Setter for retentionPolicy
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[InfluxDb-InfluxDbComponent]]
      InfluxDb Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18.0*

      This component allows you to interact with InfluxDB
      https://influxdata.com/time-series-platform/influxdb/ a time series database. The native body type for this component is
      Point (the native influxdb class), but it can also accept Map<String, Object> as message body and it will get converted
      to Point.class, please note that the map must contain an element with InfluxDbConstants.MEASUREMENT_NAME as key.

      Aditionally of course you may register your own Converters to your data type to Point, or use the
      (un)marshalling tools provided by camel.


      From??*Camel 2.18* onwards Influxdb requires Java 8.

      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-influxdb</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[InfluxDb-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------
      influxdb://beanName?[options]
      -------------------------------

      [[InfluxDb-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      The producer allows sending messages to a influxdb
      configured in the registry, using the native java driver.



      // component options: START
      The InfluxDB component has no options.
      // component options: END




      // endpoint options: START
      The InfluxDB component supports 4 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | connectionBean | producer |  | String | *Required* Name of org.influxdb.InfluxDB to use.
      | databaseName | producer |  | String | Setter for databaseName
      | retentionPolicy | producer | default | String | Setter for retentionPolicy
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[InfluxDb-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,10%,60%",options="header",]
      |=======================================================================
      |Name |Default Value |Type |Context |Description


      |=======================================================================

      [[InfluxDb-Example]]
      Example
      ^^^^^^^


      Below is an example route that stores a point into the db (taking the db name from the URI)
      specific key:

      [source,java]
      ------------------------------------------------------------------------------------
      from("direct:start")
              .setHeader(InfluxDbConstants.DBNAME_HEADER, constant("myTimeSeriesDB"))
              .to("influxdb://connectionBean);
      ------------------------------------------------------------------------------------

      [source,java]
      ------------------------------------------------------------------------------------
      from("direct:start")
              .to("influxdb://connectionBean?databaseName=myTimeSeriesDB");
      ------------------------------------------------------------------------------------

      For more information, see these resources...

      [[InfluxDb-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-irc
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: irc
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: irc
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: irc
          spec:
            containers:
            - image: fabric8/connector-irc:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: irc
        syntax: irc:hostname:port
        alternativeSyntax: irc:username:password@hostname:port
        title: IRC
        description: The irc component implements an IRC (Internet Relay Chat) transport.
        label: chat
        deprecated: false
        async: false
        javaType: org.apache.camel.component.irc.IrcComponent
        groupId: org.apache.camel
        artifactId: camel-irc
        version: 2.18.1
      componentProperties: {}
      properties:
        hostname:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname for the IRC chat server
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: 6667,6668,6669
          description: Port number for the IRC chat server
        autoRejoin:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to auto re-join when being kicked
        namesOnJoin:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sends NAMES command to channel after joining it. link onReply has to be true in order to process the result which will have the header value irc.num = '353'.
        nickname:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The nickname used in chat.
        persistent:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          defaultValue: true
          description: Use persistent messages.
        realname:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The IRC user's actual name.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        colors:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not the server supports color codes.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        onJoin:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle user join events.
        onKick:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle kick events.
        onMode:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle mode change events.
        onNick:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle nickname change events.
        onPart:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle user part events.
        onPrivmsg:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle private message events.
        onQuit:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle user quit events.
        onReply:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to handle general responses to commands or informational messages.
        onTopic:
          kind: parameter
          group: filter
          label: filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Handle topic change events.
        nickPassword:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Your IRC server nickname password.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The IRC server password.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Used for configuring security using SSL. Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. This reference overrides any configured SSLContextParameters at the component level. Note that this setting overrides the trustManager option.
        trustManager:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.schwering.irc.lib.ssl.SSLTrustManager
          deprecated: false
          secret: false
          description: The trust manager used to verify the SSL server's certificate.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The IRC server user name.
    documentation.adoc: "[[IRC-IRCComponent]]\nIRC Component\n~~~~~~~~~~~~~\n\nThe\
      \ *irc* component implements an\nhttp://en.wikipedia.org/wiki/Internet_Relay_Chat[IRC]\
      \ (Internet Relay\nChat) transport.\n\nMaven users will need to add the following\
      \ dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-irc</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[IRC-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n---------------------------------------------------------------------\n\
      irc:nick@host[:port]/#room[?options]\nirc:nick@host[:port]?channels=#channel1,#channel2,#channel3[?options]\n\
      ---------------------------------------------------------------------\n\nYou\
      \ can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[IRC-Options]]\nOptions\n^^^^^^^\n\n\n// component options: START\nThe IRC\
      \ component has no options.\n// component options: END\n\n\n\n\n\n\n\n// endpoint\
      \ options: START\nThe IRC component supports 26 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| hostname | common |  |\
      \ String | *Required* Hostname for the IRC chat server\n| port | common | 6667,6668,6669\
      \ | int | Port number for the IRC chat server\n| autoRejoin | common | true\
      \ | boolean | Whether to auto re-join when being kicked\n| namesOnJoin | common\
      \ | false | boolean | Sends NAMES command to channel after joining it. link\
      \ onReply has to be true in order to process the result which will have the\
      \ header value irc.num = '353'.\n| nickname | common |  | String | The nickname\
      \ used in chat.\n| persistent | common | true | boolean | Use persistent messages.\n\
      | realname | common |  | String | The IRC user's actual name.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| colors | advanced | true | boolean |\
      \ Whether or not the server supports color codes.\n| synchronous | advanced\
      \ | false | boolean | Sets whether synchronous processing should be strictly\
      \ used or Camel is allowed to use asynchronous processing (if supported).\n\
      | onJoin | filter | true | boolean | Handle user join events.\n| onKick | filter\
      \ | true | boolean | Handle kick events.\n| onMode | filter | true | boolean\
      \ | Handle mode change events.\n| onNick | filter | true | boolean | Handle\
      \ nickname change events.\n| onPart | filter | true | boolean | Handle user\
      \ part events.\n| onPrivmsg | filter | true | boolean | Handle private message\
      \ events.\n| onQuit | filter | true | boolean | Handle user quit events.\n|\
      \ onReply | filter | false | boolean | Whether or not to handle general responses\
      \ to commands or informational messages.\n| onTopic | filter | true | boolean\
      \ | Handle topic change events.\n| nickPassword | security |  | String | Your\
      \ IRC server nickname password.\n| password | security |  | String | The IRC\
      \ server password.\n| sslContextParameters | security |  | SSLContextParameters\
      \ | Used for configuring security using SSL. Reference to a org.apache.camel.util.jsse.SSLContextParameters\
      \ in the Registry. This reference overrides any configured SSLContextParameters\
      \ at the component level. Note that this setting overrides the trustManager\
      \ option.\n| trustManager | security |  | SSLTrustManager | The trust manager\
      \ used to verify the SSL server's certificate.\n| username | security |  | String\
      \ | The IRC server user name.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n\n[[IRC-SSLSupport]]\nSSL\
      \ Support\n^^^^^^^^^^^\n\n[[IRC-UsingtheJSSEConfigurationUtility]]\nUsing the\
      \ JSSE Configuration Utility\n++++++++++++++++++++++++++++++++++++\n\nAs of\
      \ Camel 2.9, the IRC component supports SSL/TLS configuration\nthrough the link:camel-configuration-utilities.html[Camel\
      \ JSSE\nConfiguration Utility].?? This utility greatly decreases the amount\
      \ of\ncomponent specific code you need to write and is configurable at the\n\
      endpoint and component levels.?? The following examples demonstrate how\nto\
      \ use the utility with the IRC component.\n\n[[IRC-Programmaticconfigurationoftheendpoint]]\n\
      Programmatic configuration of the endpoint\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------------------\n\
      KeyStoreParameters ksp = new KeyStoreParameters();\nksp.setResource(\"/users/home/server/truststore.jks\"\
      );\nksp.setPassword(\"keystorePassword\");\n\nTrustManagersParameters tmp =\
      \ new TrustManagersParameters();\ntmp.setKeyStore(ksp);\n\nSSLContextParameters\
      \ scp = new SSLContextParameters();\nscp.setTrustManagers(tmp);\n\nRegistry\
      \ registry = ...\nregistry.bind(\"sslContextParameters\", scp);\n\n...\n\nfrom(...)\n\
      \    .to(\"ircs://camel-prd-user@server:6669/#camel-test?nickname=camel-prd&password=password&sslContextParameters=#sslContextParameters\"\
      );\n-----------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[IRC-SpringDSLbasedconfigurationofendpoint]]\nSpring DSL based configuration\
      \ of endpoint\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      ...\n  <camel:sslContextParameters\n      id=\"sslContextParameters\">\n   \
      \ <camel:trustManagers>\n      <camel:keyStore\n          resource=\"/users/home/server/truststore.jks\"\
      \n          password=\"keystorePassword\"/>\n    </camel:keyManagers>\n  </camel:sslContextParameters>...\n\
      ...\n  <to uri=\"ircs://camel-prd-user@server:6669/#camel-test?nickname=camel-prd&password=password&sslContextParameters=#sslContextParameters\"\
      />...\n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[IRC-Usingthelegacybasicconfigurationoptions]]\nUsing the legacy basic configuration\
      \ options\n++++++++++++++++++++++++++++++++++++++++++++\n\nYou can also connect\
      \ to an SSL enabled IRC server, as follows:\n\n[source,java]\n--------------------------------------------------\n\
      ircs:host[:port]/#room?username=user&password=pass\n--------------------------------------------------\n\
      \nBy default, the IRC transport uses\nhttp://moepii.sourceforge.net/irclib/javadoc/org/schwering/irc/lib/ssl/SSLDefaultTrustManager.html[SSLDefaultTrustManager].\n\
      If you need to provide your own custom trust manager, use the\n`trustManager`\
      \ parameter as follows:\n\n[source,java]\n----------------------------------------------------------------------------------------------\n\
      ircs:host[:port]/#room?username=user&password=pass&trustManager=#referenceToMyTrustManagerBean\n\
      ----------------------------------------------------------------------------------------------\n\
      \n[[IRC-Usingkeys]]\nUsing keys\n^^^^^^^^^^\n\n*Available as of Camel 2.2*\n\
      \nSome irc rooms requires you to provide a key to be able to join that\nchannel.\
      \ The key is just a secret word.\n\nFor example we join 3 channels where as\
      \ only channel 1 and 3 uses a key.\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      irc:nick@irc.server.org?channels=#chan1,#chan2,#chan3&keys=chan1Key,,chan3key\n\
      -----------------------------------------------------------------------------\n\
      \nGetting a list of users of the channel\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nUsing the `namesOnJoin` option one can invoke the IRC-`NAMES` command after\
      \ the component has joined a channel. \nThe server will reply with `irc.num\
      \ = 353`. So in order to process the result the property `onReply` has to be\
      \ `true`.\nFurthermore one has to filter the `onReply` exchanges in order to\
      \ get the names.\n\nFor example we want to get all exchanges that contain the\
      \ usernames of the channel:\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      from(\"ircs:nick@myserver:1234/#mychannelname?listOnJoin=true&onReply=true\"\
      )\n\t.choice()\n\t\t.when(header(\"irc.messageType\").isEqualToIgnoreCase(\"\
      REPLY\"))\n\t\t\t.filter(header(\"irc.num\").isEqualTo(\"353\"))\n\t\t\t.to(\"\
      mock:result\").stop();\n-----------------------------------------------------------------------------\n\
      \n[[IRC-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ironmq
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ironmq
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ironmq
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ironmq
          spec:
            containers:
            - image: fabric8/connector-ironmq:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ironmq
        syntax: ironmq:queueName
        title: ironmq
        description: The ironmq provides integration with IronMQ an elastic and durable hosted message queue as a service.
        label: cloud,messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.ironmq.IronMQComponent
        groupId: org.apache.camel
        artifactId: camel-ironmq
        version: 2.18.1
      componentProperties: {}
      properties:
        queueName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the IronMQ queue
        client:
          kind: parameter
          group: common
          type: object
          javaType: io.iron.ironmq.Client
          deprecated: false
          secret: false
          description: Reference to a io.iron.ironmq.Client in the Registry.
        ironMQCloud:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https://mq-aws-us-east-1-1.iron.io
          description: 'IronMq Cloud url. Urls for public clusters: https://mq-aws-us-east-1-1.iron.io
            (US) and https://mq-aws-eu-west-1-1.iron.io (EU)'
        preserveHeaders:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should message headers be preserved when publishing messages. This will add the Camel headers to the Iron MQ message as a json payload with a header list and a message body. Useful when Camel is both consumer and producer.
        projectId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: IronMQ projectId
        token:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: IronMQ token
        batchDelete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should messages be deleted in one batch. This will limit the number of api requests since messages are deleted in one request instead of one pr. exchange. If enabled care should be taken that the consumer is idempotent when processing exchanges.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: The number of concurrent consumers.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of messages to poll pr. call. Maximum is 100.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        timeout:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "60"
          description: After timeout (in seconds) item will be placed back onto the queue.
        wait:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Time in seconds to wait for a message to become available. This enables long polling. Default is 0 (does not wait) maximum is 30.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        visibilityDelay:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The item will not be available on the queue until this many seconds have passed. Default is 0 seconds.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[IronMQ-IronMQComponent]]
      IronMQ Component
      ~~~~~~~~~~~~~~~~

      *Available as of Camel 2.17*

      The IronMQ component provides integration with http://www.iron.io/products/mq[IronMQ] an elastic and durable hosted message queue as a service.

      The component uses the
      https://github.com/iron-io/iron_mq_java[IronMQ java client]
      library.

      To run it requires a IronMQ account, and a project id and token.

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

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

      [[IronMQ-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------
       ironmq:queueName[?options]
      -----------------------------
      Where **queueName** identifies the IronMQ queue you want to publish or consume messages from.

      [[IronMQ-Options]]
      Options
      ^^^^^^^







      // endpoint options: START
      The ironmq component supports 31 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | queueName | common |  | String | *Required* The name of the IronMQ queue
      | client | common |  | Client | Reference to a io.iron.ironmq.Client in the Registry.
      | ironMQCloud | common | https://mq-aws-us-east-1-1.iron.io | String | IronMq Cloud url. Urls for public clusters: https://mq-aws-us-east-1-1.iron.io (US) and https://mq-aws-eu-west-1-1.iron.io (EU)
      | preserveHeaders | common | false | boolean | Should message headers be preserved when publishing messages. This will add the Camel headers to the Iron MQ message as a json payload with a header list and a message body. Useful when Camel is both consumer and producer.
      | projectId | common |  | String | IronMQ projectId
      | token | common |  | String | IronMQ token
      | batchDelete | consumer | false | boolean | Should messages be deleted in one batch. This will limit the number of api requests since messages are deleted in one request instead of one pr. exchange. If enabled care should be taken that the consumer is idempotent when processing exchanges.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | The number of concurrent consumers.
      | maxMessagesPerPoll | consumer | 1 | int | Number of messages to poll pr. call. Maximum is 100.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | timeout | consumer | 60 | int | After timeout (in seconds) item will be placed back onto the queue.
      | wait | consumer |  | int | Time in seconds to wait for a message to become available. This enables long polling. Default is 0 (does not wait) maximum is 30.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | visibilityDelay | producer |  | int | The item will not be available on the queue until this many seconds have passed. Default is 0 seconds.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END






      [[IronMQ-IronMQComponentOptions]]
      IronMQComponent Options
      ^^^^^^^^^^^^^^^^^^^^^^^




      // component options: START
      The ironmq component has no options.
      // component options: END





      [[IronMQ-Messagebody]]
      Message Body
      ^^^^^^^^^^^^
      Should be either a String or a array of Strings. In the latter case the batch of strings will be send to IronMQ as one request, creating one message pr. element in the array.

      [[IronMQ-MessageHeaders]]
      Producer message headers
      ^^^^^^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type | Description
      |CamelIronMQOperation |String|If value set to 'CamelIronMQClearQueue' the queue is cleared of unconsumed  messages.
      |CamelIronMQMessageId |String or io.iron.ironmq.Ids|The id of the IronMQ message as a String when sending a single message, or a Ids object when sending a array of strings.
      |=======================================================================

      Consumer message headers
      ^^^^^^^^^^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type | Description
      |CamelIronMQMessageId    |String|The id of the message.
      |CamelIronMQReservationId|String|The reservation id of the message.
      |CamelIronMQReservedCount|String|The number of times this message has been reserved.
      |=======================================================================


      Consumer example
      ^^^^^^^^^^^^^^^^

      Consume 50 messages pr. poll from the queue 'testqueue' on aws eu, and save the messages to files.

      [source,java]
      --------------------------------------------------
      from("ironmq:testqueue?ironMQCloud=https://mq-aws-eu-west-1-1.iron.io&projectId=myIronMQProjectid&token=myIronMQToken&maxMessagesPerPoll=50")
        .to("file:somefolder");
      --------------------------------------------------

      Producer example
      ^^^^^^^^^^^^^^^^
      Dequeue from activemq jms and enqueue the messages on IronMQ.

      [source,java]
      --------------------------------------------------
      from("activemq:foo")
        .to("ironmq:testqueue?projectId=myIronMQProjectid&token=myIronMQToken");
      --------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-javaspace
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: javaspace
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: javaspace
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: javaspace
          spec:
            containers:
            - image: fabric8/connector-javaspace:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: javaspace
        syntax: javaspace:url
        title: JavaSpace
        description: Sending and receiving messages through JavaSpace.
        label: messaging
        deprecated: true
        async: false
        javaType: org.apache.camel.component.javaspace.JavaSpaceComponent
        groupId: org.apache.camel
        artifactId: camel-javaspace
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URL to the JavaSpace server
        spaceName:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies the JavaSpace name.
        transactional:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true sending and receiving entries is performed within a transaction.
        transactionTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Specifies the transaction timeout in millis. By default there is no timeout.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the number of concurrent consumers getting entries from the JavaSpace.
        templateId:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If present this option specifies the Spring bean ID of the template to use for reading/taking entries.
        verb:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - take
          - read
          deprecated: false
          secret: false
          defaultValue: take
          description: Specifies the verb for getting JavaSpace entries.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[JavaSpace-JavaSpaceComponent]]
      JavaSpace Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.1*

      The *javaspace* component is a transport for working with any JavaSpace
      compliant implementation and this component has been tested with both
      the http://www.dancres.org/blitz/[Blitz implementation] and the
      http://www.gigaspaces.com/[GigaSpace implementation]. +
       This component can be used for sending and receiving any object
      inheriting from the Jini `net.jini.core.entry.Entry` class. It is also
      possible to pass the bean ID of a template that can be used for
      reading/taking the entries from the space. +
       This component can be used for sending/receiving any serializable
      object acting as a sort of generic transport. The JavaSpace component
      contains a special optimization for dealing with the `BeanExchange`. It
      can be used to invoke a POJO remotely, using a JavaSpace as a
      transport. +
       This latter feature can provide a simple implementation of the
      master/worker pattern, where a POJO provides the business logic for the
      worker. +
       Look at the test cases for examples of various use cases for this
      component.

      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-javaspace</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[JavaSpace-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------
      javaspace:jini://host[?options]
      -------------------------------

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

      [[JavaSpace-Options]]
      Options
      ^^^^^^^


      // component options: START
      The JavaSpace component has no options.
      // component options: END




      // endpoint options: START
      The JavaSpace component supports 11 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | common |  | String | *Required* The URL to the JavaSpace server
      | spaceName | common |  | String | *Required* Specifies the JavaSpace name.
      | transactional | common | false | boolean | If true sending and receiving entries is performed within a transaction.
      | transactionTimeout | common |  | long | Specifies the transaction timeout in millis. By default there is no timeout.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Specifies the number of concurrent consumers getting entries from the JavaSpace.
      | templateId | consumer |  | String | If present this option specifies the Spring bean ID of the template to use for reading/taking entries.
      | verb | consumer | take | String | Specifies the verb for getting JavaSpace entries.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[JavaSpace-Examples]]
      Examples
      ^^^^^^^^

      [[JavaSpace-SendingandReceivingEntries]]
      Sending and Receiving Entries
      +++++++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------------------------------------------------------------
      // sending route
      from("direct:input")
          .to("javaspace:jini://localhost?spaceName=mySpace");

      // receiving Route
      from("javaspace:jini://localhost?spaceName=mySpace&templateId=template&verb=take&concurrentConsumers=1")
          .to("mock:foo");
      --------------------------------------------------------------------------------------------------------

      In this case the payload can be any object that inherits from the Jini
      `Entry` type.

      [[JavaSpace-Sendingandreceivingserializableobjects]]
      Sending and receiving serializable objects
      ++++++++++++++++++++++++++++++++++++++++++

      Using the preceding routes, it is also possible to send and receive any
      serializable object. The JavaSpace component detects that the payload is
      not a Jini `Entry` and then it automatically wraps the payload with a
      Camel Jini `Entry`. In this way, a JavaSpace can be used as a generic
      transport mechanism.

      [[JavaSpace-UsingJavaSpaceasaremoteinvocationtransport]]
      Using JavaSpace as a remote invocation transport
      ++++++++++++++++++++++++++++++++++++++++++++++++

      The JavaSpace component has been tailored to work in combination with
      the Camel bean component. It is therefore possible to call a remote POJO
      using JavaSpace as the transport:

      [source,java]
      ---------------------------------------------------------------------------
      // client side
      from("direct:input")
          .to("javaspace:jini://localhost?spaceName=mySpace");

      // server side
      from("javaspace:jini://localhost?concurrentConsumers=10&spaceName=mySpace")
          .to("mock:foo");
      ---------------------------------------------------------------------------

      In the code there are two test cases showing how to use a POJO to
      realize the master/worker pattern. The idea is to use the POJO to
      provide the business logic and rely on Camel for sending/receiving
      requests/replies with the proper correlation.

      [[JavaSpace-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jbpm
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jbpm
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jbpm
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jbpm
          spec:
            containers:
            - image: fabric8/connector-jbpm:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jbpm
        syntax: jbpm:connectionURL
        title: JBPM
        description: The jbpm component provides integration with jBPM (Business Process Management).
        label: process
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.jbpm.JBPMComponent
        groupId: org.apache.camel
        artifactId: camel-jbpm
        version: 2.18.1
      componentProperties: {}
      properties:
        connectionURL:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.net.URL
          deprecated: false
          secret: false
          description: The URL to the jBPM server.
        attachmentId:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: attachId to use when retrieving attachments
        contentId:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: contentId to use when retrieving attachments
        deploymentId:
          kind: parameter
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The id of the deployment
        event:
          kind: parameter
          group: producer
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: the data associated with this event when signalEvent operation is performed
        eventType:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: the type of event to use when signalEvent operation is performed
        identifier:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: identifier the global identifier
        language:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The language to use when filtering user tasks
        maxNumber:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: the maximum number of rules that should be fired
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: startProcess
          description: The operation to perform
        processId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: the id of the process that should be acted upon
        processInstanceId:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: the id of the process instance
        targetUserId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The targetUserId used when delegating a task
        task:
          kind: parameter
          group: producer
          type: object
          javaType: org.kie.api.task.model.Task
          deprecated: false
          secret: false
          description: The task instance to use with task operations
        taskId:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: the id of the task
        timeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: A timeout value
        userId:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: userId to use with task operations
        value:
          kind: parameter
          group: producer
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: the value to assign to the global identifier
        workItemId:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: the id of the work item
        entities:
          kind: parameter
          group: advanced
          label: advanced
          type: array
          javaType: java.util.List<org.kie.api.task.model.OrganizationalEntity>
          deprecated: false
          secret: false
          description: The potentialOwners when nominateTask operation is performed
        extraJaxbClasses:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.Class[]
          deprecated: false
          secret: false
          description: To load additional classes when working with XML
        parameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: the variables that should be set for various operations
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        statuses:
          kind: parameter
          group: filter
          label: filter
          type: array
          javaType: java.util.List<org.kie.api.task.model.Status>
          deprecated: false
          secret: false
          description: The list of status to use when filtering tasks
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password for authentication
        userName:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username for authentication
    documentation.adoc: |
      [[jBPM-jBPMComponent]]
      jBPM Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      The *jbpm* component provides integration with Business Process
      Management (BPM) Suit http://www.jbpm.org/[jBPM]. It uses
      kie-remote-client API to interact with jBPM instance over REST. The
      component supports only producer.

      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-jbpm</artifactId>
          <version>x.x.x</version><!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------------------------------

      [[jBPM-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------------
      jbpm::hostName[:port][/resourceUri][?options]
      ---------------------------------------------

      [[jBPM-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The JBPM component has no options.
      // component options: END





      // endpoint options: START
      The JBPM component supports 26 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | connectionURL | producer |  | URL | *Required* The URL to the jBPM server.
      | attachmentId | producer |  | Long | attachId to use when retrieving attachments
      | contentId | producer |  | Long | contentId to use when retrieving attachments
      | deploymentId | producer |  | String | *Required* The id of the deployment
      | event | producer |  | Object | the data associated with this event when signalEvent operation is performed
      | eventType | producer |  | String | the type of event to use when signalEvent operation is performed
      | identifier | producer |  | String | identifier the global identifier
      | language | producer |  | String | The language to use when filtering user tasks
      | maxNumber | producer |  | Integer | the maximum number of rules that should be fired
      | operation | producer | startProcess | String | The operation to perform
      | processId | producer |  | String | the id of the process that should be acted upon
      | processInstanceId | producer |  | Long | the id of the process instance
      | targetUserId | producer |  | String | The targetUserId used when delegating a task
      | task | producer |  | Task | The task instance to use with task operations
      | taskId | producer |  | Long | the id of the task
      | timeout | producer |  | Integer | A timeout value
      | userId | producer |  | String | userId to use with task operations
      | value | producer |  | Object | the value to assign to the global identifier
      | workItemId | producer |  | Long | the id of the work item
      | entities | advanced |  | List | The potentialOwners when nominateTask operation is performed
      | extraJaxbClasses | advanced |  | Class[] | To load additional classes when working with XML
      | parameters | advanced |  | Map | the variables that should be set for various operations
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | statuses | filter |  | List | The list of status to use when filtering tasks
      | password | security |  | String | Password for authentication
      | userName | security |  | String | Username for authentication
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[jBPM-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Name |Default Value |Type |Description

      |CamelJBPMValue |null |Object |the value to assign to the global identifier

      |CamelJBPMOperation |PUT |String |The operation to perform. The operation name must be prefixed with
      CamelJBPMOperation and the name of the operation. See the full list
      above. It is case insensitive.

      |CamelJBPMProcessId |null |String |the id of the process that should be acted upon

      |CamelJBPMProcessInstanceId |0 |Long |the id of the process instance

      |CamelJBPMParameters |null |Map<String, Object> |the variables that should be set for various operations

      |CamelJBPMEventType |null |String |the type of event to use when signalEvent operation is performed

      |CamelJBPMEvent |null |String |The type of the received event. Possible values defined here
      org.infinispan.notifications.cachelistener.event.Event.Type

      |CamelJBPMMaxNumber |null |Integer |the maximum number of rules that should be fired

      |CamelJBPMIdentifier |null |long |identifier the global identifier

      |CamelJBPMWorkItemId |0 |Long |the id of the work item

      |CamelJBPMTaskId |0 |Long |the id of the task

      |CamelJBPMTask |null |Task |The task instance to use with task operations

      |CamelJBPMUserId |null |String |userId to use with task operations

      |CamelJBPMTargetUserId |null |String |The targetUserId used when delegating a task

      |CamelJBPMLanguage |null |String |The language to use when filtering user tasks

      |CamelJBPMAttachmentId |0 |Long |attachId to use when retrieving attachments

      |CamelJBPMContentId |0 |Long |contentId to use when retrieving attachments

      |CamelJBPMEntityList |null |List<OrganizationalEntity> |The potentialOwners when nominateTask operation is performed

      |CamelJBPMStatusList |null |List<Status> |The list of status to use when filtering tasks
      |=======================================================================

      [[jBPM-Example]]
      Example
      ^^^^^^^

      Below is an example route that starts a business process with id
      project1.integration-test and deploymentId
      org.kie.example:project1:1.0.0-SNAPSHOT

      [source,java]
      ----------------------------------------------------------------------------------------------
      from("direct:start")
              .setHeader(JBPMConstants.PROCESS_ID, constant("project1.integration-test"))
              .to("jbpm:http://localhost:8080/business-central?userName=bpmsAdmin&password=pa$word1"
      ??+ "&deploymentId=org.kie.example:project1:1.0.0-SNAPSHOT");
      ----------------------------------------------------------------------------------------------

      [[jBPM-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      ??
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jcache
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jcache
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jcache
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jcache
          spec:
            containers:
            - image: fabric8/connector-jcache:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jcache
        syntax: jcache:cacheName
        title: JCache
        description: The jcache component enables you to perform caching operations using JSR107/JCache as cache implementation.
        label: cache,datagrid,clustering
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jcache.JCacheComponent
        groupId: org.apache.camel
        artifactId: camel-jcache
        version: 2.18.1
      componentProperties: {}
      properties:
        cacheName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: the cache name
        managementEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether management gathering is enabled
        readThrough:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If read-through caching should be used
        statisticsEnabled:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether statistics gathering is enabled
        storeByValue:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If cache should use store-by-value or store-by-reference semantics
        writeThrough:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If write-through caching should be used
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        filteredEvents:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.util.List<javax.cache.event.EventType>
          enum:
          - CREATED
          - UPDATED
          - REMOVED
          - EXPIRED
          deprecated: false
          secret: false
          description: Events a consumer should filter. If using filteredEvents option then eventFilters one will be ignored
        oldValueRequired:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: if the old value is required for events
        synchronous:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: if the the event listener should block the thread causing the event
        eventFilters:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: array
          javaType: java.util.List<javax.cache.event.CacheEntryEventFilter>
          deprecated: false
          secret: false
          description: The CacheEntryEventFilter. If using eventFilters option then filteredEvents one will be ignored
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        action:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To configure using a cache operation by default. If an operation in the message header then the operation from the header takes precedence.
        cacheConfiguration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.cache.configuration.Configuration
          deprecated: false
          secret: false
          description: A Configuration for the Cache
        cacheConfigurationProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: The Properties for the javax.cache.spi.CachingProvider to create the CacheManager
        cacheLoaderFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.cache.configuration.Factory<javax.cache.integration.CacheLoader>
          deprecated: false
          secret: false
          description: The CacheLoader factory
        cacheWriterFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.cache.configuration.Factory<javax.cache.integration.CacheWriter>
          deprecated: false
          secret: false
          description: The CacheWriter factory
        cachingProvider:
          kind: parameter
          group: advanced
          label: advanced
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The fully qualified class name of the javax.cache.spi.CachingProvider
        configurationUri:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: An implementation specific URI for the CacheManager
        createCacheIfNotExists:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Configure if a cache need to be created if it does exist or can't be pre-configured.
        expiryPolicyFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.cache.configuration.Factory<javax.cache.expiry.ExpiryPolicy>
          deprecated: false
          secret: false
          description: The ExpiryPolicy factory
        lookupProviders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configure if a camel-cache should try to find implementations of jcache api in runtimes like OSGi.
    documentation.adoc: |+
      [[JCache-JCache]]
      JCache
      ~~~~~~






      // endpoint options: START
      The JCache component supports 23 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | cacheName | common |  | String | *Required* the cache name
      | managementEnabled | common | false | boolean | Whether management gathering is enabled
      | readThrough | common | false | boolean | If read-through caching should be used
      | statisticsEnabled | common | false | boolean | Whether statistics gathering is enabled
      | storeByValue | common | true | boolean | If cache should use store-by-value or store-by-reference semantics
      | writeThrough | common | false | boolean | If write-through caching should be used
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | filteredEvents | consumer |  | List | Events a consumer should filter. If using filteredEvents option then eventFilters one will be ignored
      | oldValueRequired | consumer | false | boolean | if the old value is required for events
      | synchronous | consumer | false | boolean | if the the event listener should block the thread causing the event
      | eventFilters | consumer (advanced) |  | List | The CacheEntryEventFilter. If using eventFilters option then filteredEvents one will be ignored
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | action | producer |  | String | To configure using a cache operation by default. If an operation in the message header then the operation from the header takes precedence.
      | cacheConfiguration | advanced |  | Configuration | A Configuration for the Cache
      | cacheConfigurationProperties | advanced |  | Properties | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager
      | cacheLoaderFactory | advanced |  | CacheLoader> | The CacheLoader factory
      | cacheWriterFactory | advanced |  | CacheWriter> | The CacheWriter factory
      | cachingProvider | advanced |  | String | *Required* The fully qualified class name of the javax.cache.spi.CachingProvider
      | configurationUri | advanced |  | String | An implementation specific URI for the CacheManager
      | createCacheIfNotExists | advanced | true | boolean | Configure if a cache need to be created if it does exist or can't be pre-configured.
      | expiryPolicyFactory | advanced |  | ExpiryPolicy> | The ExpiryPolicy factory
      | lookupProviders | advanced | false | boolean | Configure if a camel-cache should try to find implementations of jcache api in runtimes like OSGi.
      |=======================================================================
      {% endraw %}
      // endpoint options: END








      // component options: START
      The JCache component has no options.
      // component options: END


- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jclouds
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jclouds
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jclouds
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jclouds
          spec:
            containers:
            - image: fabric8/connector-jclouds:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jclouds
        syntax: jclouds:command:providerId
        title: JClouds
        description: For interacting with cloud compute & blobstore service via jclouds.
        label: api,cloud
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jclouds.JcloudsComponent
        groupId: org.apache.camel
        artifactId: camel-jclouds
        version: 2.18.1
      componentProperties:
        blobStores:
          kind: property
          type: array
          javaType: java.util.List<org.jclouds.blobstore.BlobStore>
          deprecated: false
          secret: false
          description: To use the given BlobStore which must be configured when using blobstore.
        computeServices:
          kind: property
          type: array
          javaType: java.util.List<org.jclouds.compute.ComputeService>
          deprecated: false
          secret: false
          description: To use the given ComputeService which must be configured when use compute.
      properties:
        command:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.jclouds.JcloudsCommand
          enum:
          - blobstore
          - compute
          deprecated: false
          secret: false
          description: What command to execute such as blobstore or compute.
        providerId:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the cloud provider that provides the target service (e.g. aws-s3 or aws_ec2).
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        blobName:
          kind: parameter
          group: blobstore
          label: producer,blobstore
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the blob.
        container:
          kind: parameter
          group: blobstore
          label: blobstore
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the blob container.
        directory:
          kind: parameter
          group: blobstore
          label: consumer,blobstore
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: An optional directory name to use
        group:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The group that will be assigned to the newly created node. Values depend on the actual cloud provider.
        hardwareId:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hardware that will be used for creating a node. Values depend on the actual cloud provider.
        imageId:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The imageId that will be used for creating a node. Values depend on the actual cloud provider.
        locationId:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The location that will be used for creating a node. Values depend on the actual cloud provider.
        nodeId:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The id of the node that will run the script or destroyed.
        nodeState:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          enum:
          - PENDING
          - TERMINATED
          - SUSPENDED
          - RUNNING
          - ERROR
          - UNRECOGNIZED
          deprecated: false
          secret: false
          description: To filter by node status to only select running nodes etc.
        operation:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies the type of operation that will be performed to the blobstore.
        user:
          kind: parameter
          group: compute
          label: producer,compute
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The user on the target node that will run the script.
    documentation.adoc: "[[jclouds-JcloudsComponent]]\nJclouds Component\n~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.9*\n\nThis component allows interaction with cloud\
      \ provider key-value engines\n(blobstores) and compute services. The component\
      \ uses\nhttp://code.google.com/p/jclouds[jclouds] which is +\n a library that\
      \ provides abstractions for blobstores and compute\nservices.\n\n*ComputeService*\
      \ simplifies the task of managing machines in the cloud.\nFor example, you can\
      \ use ComputeService to start 5 machines and install\nyour software on them.\
      \ +\n *BlobStore* simplifies dealing with key-value providers such as Amazon\n\
      S3. For example, BlobStore can give you a simple Map view of a\ncontainer.\n\
      \nThe camel jclouds component allows you to use both abstractions, as it\nspecifes\
      \ two types of endpoint the JcloudsBlobStoreEndpoint and the\nJcloudsComputeEndpoint.\
      \ You can have both producers and consumers on a\nblobstore endpoint but you\
      \ can only have producers on compute endpoints.\n\nMaven users will need to\
      \ add the following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-jclouds</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[jclouds-Configuringthecomponent]]\nConfiguring the component\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe camel jclouds component will make use of multiple jclouds blobstores\n\
      and compute services as long as they are passed to the component during\ninitialization.\
      \ The component accepts a list blobstores and compute\nservices. Here is how\
      \ it can be configured.\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------\n\
      \    <bean id=\"jclouds\" class=\"org.apache.camel.component.jclouds.JcloudsComponent\"\
      >\n        <property name=\"computeServices\">\n            <list>\n       \
      \         <ref bean=\"computeService\"/>\n            </list>\n        </property>\n\
      \        <property name=\"blobStores\">\n            <list>\n              \
      \  <ref bean=\"blobStore\"/>\n            </list>\n        </property>\n   \
      \ </bean>\n\n    <!-- Creating a blobstore from spring / blueprint xml -->\n\
      \    <bean id=\"blobStoreContextFactory\" class=\"org.jclouds.blobstore.BlobStoreContextFactory\"\
      />\n\n    <bean id=\"blobStoreContext\" factory-bean=\"blobStoreContextFactory\"\
      \ factory-method=\"createContext\">\n        <constructor-arg name=\"provider\"\
      \ value=\"PROVIDER_NAME\"/>\n        <constructor-arg name=\"identity\"  value=\"\
      IDENTITY\"/>\n        <constructor-arg name=\"credential\" value=\"CREDENTIAL\"\
      />\n    </bean>\n\n    <bean id=\"blobStore\" factory-bean=\"blobStoreContext\"\
      \ factory-method=\"getBlobStore\"/>\n\n    <!-- Creating a compute service from\
      \ spring / blueprint xml -->\n    <bean id=\"computeServiceContextFactory\"\
      \ class=\"org.jclouds.compute.ComputeServiceContextFactory\"/>\n\n    <bean\
      \ id=\"computeServiceContext\" factory-bean=\"computeServiceContextFactory\"\
      \ factory-method=\"createContext\">\n        <constructor-arg name=\"provider\"\
      \ value=\"PROVIDER_NAME\"/>\n        <constructor-arg name=\"identity\"  value=\"\
      IDENTITY\"/>\n        <constructor-arg name=\"credential\" value=\"CREDENTIAL\"\
      />\n    </bean>\n\n    <bean id=\"computeService\" factory-bean=\"computeServiceContext\"\
      \ factory-method=\"getComputeService\"/>\n----------------------------------------------------------------------------------------------------------------\n\
      \nAs you can see the component is capable of handling multiple blobstores\n\
      and compute services. The actual implementation that will be used by\neach endpoint\
      \ is specified by passing the provider inside the URI.\n\n[[jclouds-Options]]\n\
      Jclouds Options\n^^^^^^^^^^^^^^^\n\n[source,java]\n-----------------------------------------\n\
      jclouds:blobstore:[provider id][?options]\njclouds:compute:[provider id][?options]\n\
      -----------------------------------------\n\nThe *provider id* is the name of\
      \ the cloud provider that provides the\ntarget service (_e.g. aws-s3 or aws_ec2_).\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[jclouds-BlobstoreURIOptions]]\nBlobstore URI Options\n^^^^^^^^^^^^^^^^^^^^^\n\
      \n\n\n\n// component options: START\nThe JClouds component supports 2 options\
      \ which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| blobStores | List | To use the given BlobStore\
      \ which must be configured when using blobstore.\n| computeServices | List |\
      \ To use the given ComputeService which must be configured when use compute.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// component options: END\n\n\n\n\n\n\n// endpoint options: START\n\
      The JClouds component supports 17 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| command | common |  |\
      \ JcloudsCommand | *Required* What command to execute such as blobstore or compute.\n\
      | providerId | common |  | String | *Required* The name of the cloud provider\
      \ that provides the target service (e.g. aws-s3 or aws_ec2).\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n| blobName | blobstore\
      \ |  | String | The name of the blob.\n| container | blobstore |  | String |\
      \ The name of the blob container.\n| directory | blobstore |  | String | An\
      \ optional directory name to use\n| group | compute |  | String | The group\
      \ that will be assigned to the newly created node. Values depend on the actual\
      \ cloud provider.\n| hardwareId | compute |  | String | The hardware that will\
      \ be used for creating a node. Values depend on the actual cloud provider.\n\
      | imageId | compute |  | String | The imageId that will be used for creating\
      \ a node. Values depend on the actual cloud provider.\n| locationId | compute\
      \ |  | String | The location that will be used for creating a node. Values depend\
      \ on the actual cloud provider.\n| nodeId | compute |  | String | The id of\
      \ the node that will run the script or destroyed.\n| nodeState | compute | \
      \ | String | To filter by node status to only select running nodes etc.\n| operation\
      \ | compute |  | String | Specifies the type of operation that will be performed\
      \ to the blobstore.\n| user | compute |  | String | The user on the target node\
      \ that will run the script.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\nYou can have as many of these\
      \ options as you like.\n\n[source,java]\n------------------------------------------------------------------------------------------\n\
      jclouds:blobstore:aws-s3?operation=CamelJcloudsGet&container=mycontainer&blobName=someblob\n\
      ------------------------------------------------------------------------------------------\n\
      \nFor producer endpoint you can override all of the above URI options by\npassing\
      \ the appropriate headers to the message.\n\n[[jclouds-MessageHeadersforblobstore]]\n\
      Message Headers for blobstore\n+++++++++++++++++++++++++++++\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Description\n\n|`CamelJcloudsOperation` |The operation to be performed\
      \ on the blob. The valid options are\n* PUT\n* GET\n\n|`CamelJcloudsContainer`\
      \ |The name of the blob container.\n\n|`CamelJcloudsBlobName` |The name of the\
      \ blob.\n|=======================================================================\n\
      \n[[jclouds-BlobstoreUsageSamples]]\nBlobstore Usage Samples\n^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[jclouds-Example1:Puttingtotheblob]]\nExample 1: Putting to the blob\n++++++++++++++++++++++++++++++\n\
      \nThis example will show you how you can store any message inside a blob\nusing\
      \ the jclouds component.\n\n[source,java]\n------------------------------------\n\
      from(\"direct:start\")\n    .to(\"jclouds:blobstore:aws-s3\" +\n        \"?operation=PUT\"\
      \ +\n        \"&container=mycontainer\" +\n        \"&blobName=myblob\");\n\
      ------------------------------------\n\nIn the above example you can override\
      \ any of the URI parameters with\nheaders on the message. \nHere is how the\
      \ above example would look like using xml to define our\nroute.\n\n[source,xml]\n\
      --------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:start\"/>\n    <to uri=\"jclouds:blobstore:aws-s3?operation=PUT&container=mycontainer&blobName=myblob\"\
      />\n</route>\n--------------------------------------------------------------------------------------------\n\
      \n[[jclouds-Example2:GettingReadingfromablob]]\nExample 2: Getting/Reading from\
      \ a blob\n++++++++++++++++++++++++++++++++++++++\n\nThis example will show you\
      \ how you can read the contnet of a blob using\nthe jclouds component.\n\n[source,java]\n\
      ------------------------------------\nfrom(\"direct:start\")\n    .to(\"jclouds:blobstore:aws-s3\"\
      \ +\n        \"?operation=GET\" +\n        \"&container=mycontainer\" +\n  \
      \      \"&blobName=myblob\");\n------------------------------------\n\nIn the\
      \ above example you can override any of the URI parameters with\nheaders on\
      \ the message. \n Here is how the above example would look like using xml to\
      \ define our\nroute.\n\n[source,xml]\n--------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:start\"/>\n    <to uri=\"jclouds:blobstore:aws-s3?operation=PUT&container=mycontainer&blobName=myblob\"\
      />\n</route>\n--------------------------------------------------------------------------------------------\n\
      \n[[jclouds-Example3:Consumingablob]]\nExample 3: Consuming a blob\n+++++++++++++++++++++++++++\n\
      \nThis example will consume all blob that are under the specified\ncontainer.\
      \ The generated exchange will contain the payload of the blob\nas body.\n\n\
      [source,java]\n-------------------------------------\n    from(\"jclouds:blobstore:aws-s3\"\
      \ +\n        \"?container=mycontainer\")\n        .to(\"direct:next\");\n-------------------------------------\n\
      \nYou can achieve the same goal by using xml, as you can see below.\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"jclouds:blobstore:aws-s3?operation=GET&container=mycontainer&blobName=myblob\"\
      />\n    <to uri=\"direct:next\"/>\n</route>\n----------------------------------------------------------------------------------------------\n\
      \n\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------\n\
      jclouds:compute:aws-ec2?operation=CamelJcloudsCreateNode&imageId=AMI_XXXXX&locationId=eu-west-1&group=mygroup\n\
      -------------------------------------------------------------------------------------------------------------\n\
      \n[[jclouds-ComputeUsageSamples]]\nCompute Usage Samples\n^^^^^^^^^^^^^^^^^^^^^\n\
      \nBelow are some examples that demonstrate the use of jclouds compute\nproducer\
      \ in java dsl and spring/blueprint xml.\n\n[[jclouds-Example1:Listingtheavailableimages.]]\n\
      Example 1: Listing the available images.\n++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n--------------------------------------------\n    from(\"jclouds:compute:aws-ec2\"\
      \ +\n        \"&operation=CamelJCloudsListImages\")\n        .to(\"direct:next\"\
      );\n--------------------------------------------\n\nThis will create a message\
      \ that will contain the list of images inside\nits body. You can also do the\
      \ same using xml.\n\n[source,xml]\n--------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"jclouds:compute:aws-ec2?operation=CamelJCloudsListImages\"\
      />\n    <to uri=\"direct:next\"/>\n</route>\n--------------------------------------------------------------------------\n\
      \n[[jclouds-Example2:Createanewnode.]]\nExample 2: Create a new node.\n+++++++++++++++++++++++++++++\n\
      \n[source,java]\n---------------------------------------------\n    from(\"\
      direct:start\").\n    to(\"jclouds:compute:aws-ec2\" +\n        \"?operation=CamelJcloudsCreateNode\"\
      \ +\n        \"&imageId=AMI_XXXXX\" +\n        \"&locationId=XXXXX\" +\n   \
      \     \"&group=myGroup\");\n---------------------------------------------\n\n\
      This will create a new node on the cloud provider. The out message in\nthis\
      \ case will be a set of metadata that contains information about the\nnewly\
      \ created node (e.g. the ip, hostname etc). Here is the same using\nspring xml.\n\
      \n[source,xml]\n-------------------------------------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:start\"/>\n    <to uri=\"jclouds:compute:aws-ec2?operation=CamelJcloudsCreateNode&imageId=AMI_XXXXX&locationId=XXXXX&group=myGroup\"\
      />\n</route>\n-------------------------------------------------------------------------------------------------------------------------\n\
      \n[[jclouds-Example3:Runashellscriptonrunningnode.]]\nExample 3: Run a shell\
      \ script on running node.\n++++++++++++++++++++++++++++++++++++++++++++++\n\n\
      [source,java]\n--------------------------------------------\n    from(\"direct:start\"\
      ).\n    to(\"jclouds:compute:aws-ec2\" +\n        \"?operation=CamelJcloudsRunScript\"\
      \ +\n        \"?nodeId=10\" +\n        \"&user=ubuntu\");\n--------------------------------------------\n\
      \nThe sample above will retrieve the body of the in message, which is\nexpected\
      \ to contain the shell script to be executed. Once the script is\nretrieved,\
      \ it will be sent to the node for execution under the specified\nuser (_in order\
      \ case ubuntu_). The target node is specified using its\nnodeId. The nodeId\
      \ can be retrieved either upon the creation of the\nnode, it will be part of\
      \ the resulting metadata or by a executing a\nLIST_NODES operation.\n\n*Note*\
      \ This will require that the compute service that will be passed to\nthe component,\
      \ to be initialized with the appropriate jclouds ssh\ncapable module (_e.g.\
      \ jsch or sshj_).\n\nHere is the same using spring xml.\n\n[source,xml]\n----------------------------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"direct:start\"/>\n    <to uri=\"jclouds:compute:aws-ec2?operation=CamelJcloudsListNodes&?nodeId=10&user=ubuntu\"\
      />\n</route>\n----------------------------------------------------------------------------------------------\n\
      \n[[jclouds-Seealso]]\nSee also\n++++++++\n\nIf you want to find out more about\
      \ jclouds here is list of interesting\nresources \n\nhttp://jclouds.incubator.apache.org/documentation/userguide/blobstore-guide/[Jclouds\n\
      Blobstore wiki] \n\nhttp://jclouds.incubator.apache.org/documentation/userguide/compute/[Jclouds\n\
      Compute wiki]\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jcr
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jcr
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jcr
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jcr
          spec:
            containers:
            - image: fabric8/connector-jcr:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jcr
        syntax: jcr:host/base
        alternativeSyntax: jcr:username:password@host/base
        title: JCR
        description: The jcr component allows you to add/read nodes to/from a JCR compliant content repository.
        label: cms,database
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jcr.JcrComponent
        groupId: org.apache.camel
        artifactId: camel-jcr
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the javax.jcr.Repository to lookup from the Camel registry to be used.
        base:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Get the base node when accessing the repository
        deep:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When isDeep is true events whose associated parent node is at absPath or within its subgraph are received.
        eventTypes:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: eventTypes (a combination of one or more event types encoded as a bit mask value such as javax.jcr.observation.Event.NODE_ADDED javax.jcr.observation.Event.NODE_REMOVED etc.).
        nodeTypeNames:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When a comma separated nodeTypeName list string is set only events whose associated parent node has one of the node types (or a subtype of one of the node types) in this list will be received.
        noLocal:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If noLocal is true then events generated by the session through which the listener was registered are ignored. Otherwise they are not ignored.
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for login
        sessionLiveCheckInterval:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Interval in milliseconds to wait before each session live checking The default value is 60000 ms.
        sessionLiveCheckIntervalOnStart:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "3000"
          description: Interval in milliseconds to wait before the first session live checking. The default value is 3000 ms.
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for login
        uuids:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When a comma separated uuid list string is set only events whose associated parent node has one of the identifiers in the comma separated uuid list will be received.
        workspaceName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The workspace to access. If it's not specified then the default one will be used
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[JCR-JCRComponent]]
      JCR Component
      ~~~~~~~~~~~~~

      The *`jcr`* component allows you to add/read nodes to/from a JCR
      compliant content repository (for example,
      http://jackrabbit.apache.org/[Apache Jackrabbit]) with its producer, or
      register an EventListener with the consumer.

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

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

      [[JCR-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------------
      jcr://user:password@repository/path/to/node
      -------------------------------------------

      *Consumer added*

      From *Camel 2.10* onwards you can use consumer as an EventListener in
      JCR or a producer to read a node by identifier.

      [[JCR-Usage]]
      Usage
      ^^^^^

      The `repository` element of the URI is used to look up the JCR
      `Repository` object in the Camel context registry.

      [[JCR-Options]]
      JCR Options
      +++++++++++


      // component options: START
      The JCR component has no options.
      // component options: END




      // endpoint options: START
      The JCR component supports 16 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Name of the javax.jcr.Repository to lookup from the Camel registry to be used.
      | base | common |  | String | Get the base node when accessing the repository
      | deep | common | false | boolean | When isDeep is true events whose associated parent node is at absPath or within its subgraph are received.
      | eventTypes | common |  | int | eventTypes (a combination of one or more event types encoded as a bit mask value such as javax.jcr.observation.Event.NODE_ADDED javax.jcr.observation.Event.NODE_REMOVED etc.).
      | nodeTypeNames | common |  | String | When a comma separated nodeTypeName list string is set only events whose associated parent node has one of the node types (or a subtype of one of the node types) in this list will be received.
      | noLocal | common | false | boolean | If noLocal is true then events generated by the session through which the listener was registered are ignored. Otherwise they are not ignored.
      | password | common |  | String | Password for login
      | sessionLiveCheckInterval | common | 60000 | long | Interval in milliseconds to wait before each session live checking The default value is 60000 ms.
      | sessionLiveCheckIntervalOnStart | common | 3000 | long | Interval in milliseconds to wait before the first session live checking. The default value is 3000 ms.
      | username | common |  | String | Username for login
      | uuids | common |  | String | When a comma separated uuid list string is set only events whose associated parent node has one of the identifiers in the comma separated uuid list will be received.
      | workspaceName | common |  | String | The workspace to access. If it's not specified then the default one will be used
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      Please note that the JCR Producer used message properties instead of
      message headers in Camel versions earlier than 2.12.3. See
      https://issues.apache.org/jira/browse/CAMEL-7067[https://issues.apache.org/jira/browse/CAMEL-7067]
      for more details.

      [[JCR-Example]]
      Example
      ^^^^^^^

      The snippet below creates a node named `node` under the `/home/test`
      node in the content repository. One additional property is added to the
      node as well: `my.contents.property` which will contain the body of the
      message being sent.

      [source,java]
      ------------------------------------------------------------------------
      from("direct:a").setHeader(JcrConstants.JCR_NODE_NAME, constant("node"))
          .setHeader("my.contents.property", body())
          .to("jcr://user:pass@repository/home/test");
      ------------------------------------------------------------------------

      ??

      The following code will register an EventListener under the path
      import-application/inbox for Event.NODE_ADDED and Event.NODE_REMOVED
      events (event types 1 and 2, both masked as 3) and listening deep for
      all the children.

      [source,xml]
      ---------------------------------------------------------------------------------------------
      <route>
          <from uri="jcr://user:pass@repository/import-application/inbox?eventTypes=3&deep=true" />
          <to uri="direct:execute-import-application" />
      </route>
      ---------------------------------------------------------------------------------------------

      [[JCR-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jdbc
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jdbc
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jdbc
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jdbc
          spec:
            containers:
            - image: fabric8/connector-jdbc:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jdbc
        syntax: jdbc:dataSourceName
        title: JDBC
        description: The jdbc component enables you to access databases through JDBC where SQL queries are sent in the message body.
        label: database,sql
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.jdbc.JdbcComponent
        groupId: org.apache.camel
        artifactId: camel-jdbc
        version: 2.18.1
      componentProperties:
        dataSource:
          kind: property
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: To use the DataSource instance instead of looking up the data source by name from the registry.
      properties:
        dataSourceName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of DataSource to lookup in the Registry.
        allowNamedParameters:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow using named parameters in the queries.
        beanRowMapper:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.jdbc.BeanRowMapper
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.jdbc.BeanRowMapper when using outputClass. The default implementation will lower case the row names and skip underscores and dashes. For example CUST_ID is mapped as custId.
        outputClass:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the full package and class name to use as conversion when outputType=SelectOne or SelectList.
        outputType:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.jdbc.JdbcOutputType
          enum:
          - SelectOne
          - SelectList
          - StreamList
          deprecated: false
          secret: false
          defaultValue: SelectList
          description: Determines the output the producer should use.
        parameters:
          kind: parameter
          group: producer
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: statement.
          multiValue: true
          deprecated: false
          secret: false
          description: Optional parameters to the java.sql.Statement. For example to set maxRows fetchSize etc.
        prepareStatementStrategy:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy
          deprecated: false
          secret: false
          description: Allows to plugin to use a custom org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy to control preparation of the query and prepared statement.
        readSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The default maximum number of rows that can be read by a polling query. The default value is 0.
        resetAutoCommit:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Camel will set the autoCommit on the JDBC connection to be false commit the change after executed the statement and reset the autoCommit flag of the connection at the end if the resetAutoCommit is true. If the JDBC connection doesn't support to reset the autoCommit flag you can set the resetAutoCommit flag to be false and Camel will not try to reset the autoCommit flag. When used with XA transactions you most likely need to set it to false so that the transaction manager is in charge of committing this tx.
        transacted:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether transactions are in use.
        useGetBytesForBlob:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To read BLOB columns as bytes instead of string data. This may be needed for certain databases such as Oracle where you must read BLOB columns as bytes.
        useHeadersAsParameters:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set this option to true to use the prepareStatementStrategy with named parameters. This allows to define queries with named placeholders and use headers with the dynamic values for the query placeholders.
        useJDBC4ColumnNameAndLabelSemantics:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to use JDBC 4 or JDBC 3.0 or older semantic when retrieving column name. JDBC 4.0 uses columnLabel to get the column name where as JDBC 3.0 uses both columnName or columnLabel. Unfortunately JDBC drivers behave differently so you can use this option to work out issues around your JDBC driver if you get problem using this component This option is default true.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[JDBC-JDBCComponent]]
      JDBC Component
      ~~~~~~~~~~~~~~

      The *jdbc* component enables you to access databases through JDBC, where
      SQL queries (SELECT) and operations (INSERT, UPDATE, etc) are sent in
      the message body. This component uses the standard JDBC API, unlike the
      link:sql-component.html[SQL Component] component, which uses
      spring-jdbc.

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

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

      This component can only be used to define producer endpoints, which
      means that you cannot use the JDBC component in a `from()` statement.

      [[JDBC-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------
      jdbc:dataSourceName[?options]
      -----------------------------

      This component only supports producer endpoints.

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

      [[JDBC-Options]]
      Options
      ^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | dataSource | DataSource | To use the DataSource instance instead of looking up the data source by name from the registry.
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The JDBC component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | dataSourceName | producer |  | String | *Required* Name of DataSource to lookup in the Registry.
      | allowNamedParameters | producer | true | boolean | Whether to allow using named parameters in the queries.
      | beanRowMapper | producer |  | BeanRowMapper | To use a custom org.apache.camel.component.jdbc.BeanRowMapper when using outputClass. The default implementation will lower case the row names and skip underscores and dashes. For example CUST_ID is mapped as custId.
      | outputClass | producer |  | String | Specify the full package and class name to use as conversion when outputType=SelectOne or SelectList.
      | outputType | producer | SelectList | JdbcOutputType | Determines the output the producer should use.
      | parameters | producer |  | Map | Optional parameters to the java.sql.Statement. For example to set maxRows fetchSize etc.
      | prepareStatementStrategy | producer |  | JdbcPrepareStatementStrategy | Allows to plugin to use a custom org.apache.camel.component.jdbc.JdbcPrepareStatementStrategy to control preparation of the query and prepared statement.
      | readSize | producer |  | int | The default maximum number of rows that can be read by a polling query. The default value is 0.
      | resetAutoCommit | producer | true | boolean | Camel will set the autoCommit on the JDBC connection to be false commit the change after executed the statement and reset the autoCommit flag of the connection at the end if the resetAutoCommit is true. If the JDBC connection doesn't support to reset the autoCommit flag you can set the resetAutoCommit flag to be false and Camel will not try to reset the autoCommit flag. When used with XA transactions you most likely need to set it to false so that the transaction manager is in charge of committing this tx.
      | transacted | producer | false | boolean | Whether transactions are in use.
      | useGetBytesForBlob | producer | false | boolean | To read BLOB columns as bytes instead of string data. This may be needed for certain databases such as Oracle where you must read BLOB columns as bytes.
      | useHeadersAsParameters | producer | false | boolean | Set this option to true to use the prepareStatementStrategy with named parameters. This allows to define queries with named placeholders and use headers with the dynamic values for the query placeholders.
      | useJDBC4ColumnNameAndLabelSemantics | producer | true | boolean | Sets whether to use JDBC 4 or JDBC 3.0 or older semantic when retrieving column name. JDBC 4.0 uses columnLabel to get the column name where as JDBC 3.0 uses both columnName or columnLabel. Unfortunately JDBC drivers behave differently so you can use this option to work out issues around your JDBC driver if you get problem using this component This option is default true.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[JDBC-Result]]
      Result
      ^^^^^^

      By default the result is returned in the OUT body as an
      `ArrayList<HashMap<String, Object>>`. The `List` object contains the
      list of rows and the `Map` objects contain each row with the `String`
      key as the column name. You can use the option `outputType` to control
      the result.

      *Note:* This component fetches `ResultSetMetaData` to be able to return
      the column name as the key in the `Map`.

      [[JDBC-MessageHeaders]]
      Message Headers
      +++++++++++++++

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

      |`CamelJdbcRowCount` |If the query is a `SELECT`, query the row count is returned in this OUT
      header.

      |`CamelJdbcUpdateCount` |If the query is an `UPDATE`, query the update count is returned in this
      OUT header.

      |`CamelGeneratedKeysRows` |*Camel 2.10:* Rows that contains the generated kets.

      |`CamelGeneratedKeysRowCount` |*Camel 2.10:* The number of rows in the header that contains generated
      keys.

      |`CamelJdbcColumnNames` |*Camel 2.11.1:* The column names from the ResultSet as a `java.util.Set`
      type.

      |`CamelJdbcParametes` |*Camel 2.12:* A `java.util.Map` which has the headers to be used if
      `useHeadersAsParameters` has been enabled.
      |=======================================================================

      [[JDBC-Generatedkeys]]
      Generated keys
      ^^^^^^^^^^^^^^

      *Available as of Camel 2.10*

      If you insert data using SQL INSERT, then the RDBMS may support auto
      generated keys. You can instruct the link:jdbc.html[JDBC] producer to
      return the generated keys in headers. +
       To do that set the header `CamelRetrieveGeneratedKeys=true`. Then the
      generated keys will be provided as headers with the keys listed in the
      table above.

      You can see more details in this
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-jdbc/src/test/java/org/apache/camel/component/jdbc/JdbcGeneratedKeysTest.java[unit
      test].

      Using generated keys does not work with together with named parameters.

      [[JDBC-Usingnamedparameters]]
      Using named parameters
      ^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.12*

      In the given route below, we want to get all the projects from the
      projects table. Notice the SQL query has 2 named parameters, :?lic and
      :?min. +
       Camel will then lookup these parameters from the message headers.
      Notice in the example above we set two headers with constant value +
       for the named parameters:

      [source,java]
      ----------------------------------------------------------------------------------------
        from("direct:projects")
           .setHeader("lic", constant("ASF"))
           .setHeader("min", constant(123))
           .setBody("select * from projects where license = :?lic and id > :?min order by id")
           .to("jdbc:myDataSource?useHeadersAsParameters=true")
      ----------------------------------------------------------------------------------------

      You can also store the header values in a `java.util.Map` and store the
      map on the headers with the key `CamelJdbcParameters`.

      [[JDBC-Samples]]
      Samples
      ^^^^^^^

      In the following example, we fetch the rows from the customer table.

      First we register our datasource in the Camel registry as `testdb`:

      Then we configure a route that routes to the JDBC component, so the SQL
      will be executed. Note how we refer to the `testdb` datasource that was
      bound in the previous step:

      Or you can create a `DataSource` in Spring like this:

      We create an endpoint, add the SQL query to the body of the IN message,
      and then send the exchange. The result of the query is returned in the
      OUT body:

      If you want to work on the rows one by one instead of the entire
      ResultSet at once you need to use the link:splitter.html[Splitter] EIP
      such as:

      In Camel 2.13.x or older

      In Camel 2.14.x or newer

      [source,java]
      -------------------------------------------------------------------------------------------------
      from("direct:hello")
      // here we split the data from the testdb into new messages one by one
      // so the mock endpoint will receive a message per row in the table
      // the StreamList option allows to stream the result of the query without creating a List of rows
      // and notice we also enable streaming mode on the splitter
      .to("jdbc:testdb?outputType=StreamList")
        .split(body()).streaming()
        .to("mock:result");
      -------------------------------------------------------------------------------------------------

      [[JDBC-Sample-Pollingthedatabaseeveryminute]]
      Sample - Polling the database every minute
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If we want to poll a database using the JDBC component, we need to
      combine it with a polling scheduler such as the link:timer.html[Timer]
      or link:quartz.html[Quartz] etc. In the following example, we retrieve
      data from the database every 60 seconds:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------
      from("timer://foo?period=60000").setBody(constant("select * from customer")).to("jdbc:testdb").to("activemq:queue:customers");
      ------------------------------------------------------------------------------------------------------------------------------

      [[JDBC-Sample-MoveDataBetweenDataSources]]
      Sample - Move Data Between Data Sources +
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      A common use case is to query for data, process it and move it to
      another data source (ETL operations). In the following example, we
      retrieve new customer records from the source table every hour,
      filter/transform them and move them to a destination table:

      [source,java]
      ------------------------------------------------------------------------------------------------
      from("timer://MoveNewCustomersEveryHour?period=3600000")
          .setBody(constant("select * from customer where create_time > (sysdate-1/24)"))
          .to("jdbc:testdb")
          .split(body())
              .process(new MyCustomerProcessor()) //filter/transform results as needed
              .setBody(simple("insert into processed_customer values('${body[ID]}','${body[NAME]}')"))
              .to("jdbc:testdb");
      ------------------------------------------------------------------------------------------------

      ??

      [[JDBC-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:sql.html[SQL]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jetty
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jetty
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jetty
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jetty
          spec:
            containers:
            - image: fabric8/connector-jetty:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jetty
        extendsScheme: http
        syntax: jetty:httpUri
        title: Jetty 9
        description: The jetty component provides HTTP-based endpoints for consuming and producing HTTP requests.
        label: http
        deprecated: false
        async: true
        lenientProperties: true
        javaType: org.apache.camel.component.jetty9.JettyHttpComponent9
        groupId: org.apache.camel
        artifactId: camel-jetty9
        version: 2.18.1
      componentProperties:
        sslKeyPassword:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The key password which is used to access the certificate's key entry in the keystore (this is the same password that is supplied to the keystore command's -keypass option).
        sslPassword:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ssl password which is required to access the keystore file (this is the same password that is supplied to the keystore command's -storepass option).
        keystore:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies the location of the Java keystore file which contains the Jetty server's own X.509 certificate in a key entry.
        errorHandler:
          kind: property
          required: false
          type: object
          javaType: org.eclipse.jetty.server.handler.ErrorHandler
          deprecated: false
          secret: false
          description: This option is used to set the ErrorHandler that Jetty server uses.
        sslSocketConnectors:
          kind: property
          required: false
          type: object
          javaType: java.util.Map<java.lang.Integer,org.eclipse.jetty.server.Connector>
          deprecated: false
          secret: false
          description: A map which contains per port number specific SSL connectors.
        socketConnectors:
          kind: property
          required: false
          type: object
          javaType: java.util.Map<java.lang.Integer,org.eclipse.jetty.server.Connector>
          deprecated: false
          secret: false
          description: A map which contains per port number specific HTTP connectors. Uses the same principle as sslSocketConnectors.
        httpClientMinThreads:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To set a value for minimum number of threads in HttpClient thread pool. Notice that both a min and max size must be configured.
        httpClientMaxThreads:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To set a value for maximum number of threads in HttpClient thread pool. Notice that both a min and max size must be configured.
        minThreads:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To set a value for minimum number of threads in server thread pool. Notice that both a min and max size must be configured.
        maxThreads:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To set a value for maximum number of threads in server thread pool. Notice that both a min and max size must be configured.
        threadPool:
          kind: property
          required: false
          type: object
          javaType: org.eclipse.jetty.util.thread.ThreadPool
          deprecated: false
          secret: false
          description: To use a custom thread pool for the server. This option should only be used in special circumstances.
        enableJmx:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If this option is true Jetty JMX support will be enabled for this endpoint.
        jettyHttpBinding:
          kind: property
          required: false
          type: object
          javaType: org.apache.camel.component.jetty.JettyHttpBinding
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.jetty.JettyHttpBinding which are used to customize how a response should be written for the producer.
        httpBinding:
          kind: property
          required: false
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: Not to be used - use JettyHttpBinding instead.
        httpConfiguration:
          kind: property
          required: false
          type: object
          javaType: org.apache.camel.http.common.HttpConfiguration
          deprecated: false
          secret: false
          description: Jetty component does not use HttpConfiguration.
        mbContainer:
          kind: property
          required: false
          type: object
          javaType: org.eclipse.jetty.jmx.MBeanContainer
          deprecated: false
          secret: false
          description: To use a existing configured org.eclipse.jetty.jmx.MBeanContainer if JMX is enabled that Jetty uses for registering mbeans.
        sslSocketConnectorProperties:
          kind: property
          required: false
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: A map which contains general SSL connector properties.
        socketConnectorProperties:
          kind: property
          required: false
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: A map which contains general HTTP connector properties. Uses the same principle as sslSocketConnectorProperties.
        continuationTimeout:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Allows to set a timeout in millis when using Jetty as consumer (server). By default Jetty uses 30000. You can use a value of = 0 to never expire. If a timeout occurs then the request will be expired and Jetty will return back a http error 503 to the client. This option is only in use when using Jetty with the Asynchronous Routing Engine.
        useContinuation:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether or not to use Jetty continuations for the Jetty Server.
        sslContextParameters:
          kind: property
          required: false
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        responseBufferSize:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Allows to configure a custom value of the response buffer size on the Jetty connectors.
        requestBufferSize:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Allows to configure a custom value of the request buffer size on the Jetty connectors.
        requestHeaderSize:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Allows to configure a custom value of the request header size on the Jetty connectors.
        responseHeaderSize:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Allows to configure a custom value of the response header size on the Jetty connectors.
        proxyHost:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use a http proxy to configure the hostname.
        proxyPort:
          kind: property
          required: false
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To use a http proxy to configure the port number.
        useXForwardedForHeader:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: To use the X-Forwarded-For header in HttpServletRequest.getRemoteAddr.
        sendServerVersion:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If the option is true jetty server will send the date header to the client which sends the request. NOTE please make sure there is no any other camel-jetty endpoint is share the same port otherwise this option may not work as expected.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        httpUri:
          kind: path
          group: producer
          label: producer
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The url of the HTTP endpoint to call.
        chunked:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        enableMultipartFilter:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether Jetty org.eclipse.jetty.servlets.MultiPartFilter is enabled or not. You should set this value to false when bridging endpoints to ensure multipart requests is proxied/bridged as well.
        headerFilterStrategy:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        transferException:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        async:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configure the consumer to work in async mode
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        continuationTimeout:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Allows to set a timeout in millis when using Jetty as consumer (server). By default Jetty uses 30000. You can use a value of = 0 to never expire. If a timeout occurs then the request will be expired and Jetty will return back a http error 503 to the client. This option is only in use when using Jetty with the Asynchronous Routing Engine.
        eagerCheckContentAvailable:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to eager check whether the HTTP requests has content if the content-length header is 0 or not present. This can be turned on in case HTTP clients do not send streamed data.
        enableCORS:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true Jetty server will setup the CrossOriginFilter which supports the CORS out of box.
        enableJmx:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true Jetty JMX support will be enabled for this endpoint. See Jetty JMX support for more details.
        httpMethodRestrict:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.
        matchOnUriPrefix:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
        optionsEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off.
        responseBufferSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To use a custom buffer size on the javax.servlet.ServletResponse.
        sendDateHeader:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true jetty server will send the date header to the client which sends the request. NOTE please make sure there is no any other camel-jetty endpoint is share the same port otherwise this option may not work as expected.
        sendServerVersion:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If the option is true jetty will send the server header with the jetty version information to the client which sends the request. NOTE please make sure there is no any other camel-jetty endpoint is share the same port otherwise this option may not work as expected.
        sessionSupport:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable the session manager on the server side of Jetty.
        traceEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP TRACE for this Servlet consumer. By default TRACE is turned off.
        useContinuation:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Whether or not to use Jetty continuations for the Jetty Server.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        filterInitParameters:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          prefix: filter.
          multiValue: true
          deprecated: false
          secret: false
          description: Configuration of the filter init parameters. These parameters will be applied to the filter list before starting the jetty server.
        filtersRef:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Allows using a custom filters which is putted into a list and can be find in the Registry. Multiple values can be separated by comma.
        handlers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Specifies a comma-delimited set of Handler instances to lookup in
            your Registry. These handlers are added to the Jetty servlet context (for example
            to add security). Important: You can not use different handlers with different
            Jetty endpoints using the same port number. The handlers is associated to the
            port number. If you need different handlers then use different port numbers.'
        httpBindingRef:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        multipartFilter:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: javax.servlet.Filter
          deprecated: false
          secret: false
          description: 'Allows using a custom multipart filter. Note: setting multipartFilterRef
            forces the value of enableMultipartFilter to true.'
        multipartFilterRef:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: 'Allows using a custom multipart filter. Note: setting multipartFilterRef
            forces the value of enableMultipartFilter to true.'
        authMethodPriority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - Basic
          - Digest
          - NTLM
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the HttpProducer send all the fault response back.
        connectionClose:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether a Connection Close header must be added to HTTP Request. By default connectionClose is false.
        copyHeaders:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange headers will be copied to OUT exchange headers according to copy strategy. Setting this to false allows to only include the headers from the HTTP response (not propagating IN headers).
        httpClientMaxThreads:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "254"
          description: To set a value for maximum number of threads in HttpClient thread pool. This setting override any setting configured on component level. Notice that both a min and max size must be configured. If not set it default to max 254 threads used in Jettys thread pool.
        httpClientMinThreads:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "8"
          description: To set a value for minimum number of threads in HttpClient thread pool. This setting override any setting configured on component level. Notice that both a min and max size must be configured. If not set it default to min 8 threads used in Jettys thread pool.
        ignoreResponseBody:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true The http producer won't read response body and cache the input stream
        okStatusCodeRange:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included.
        preserveHostHeader:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true HttpProducer will set the Host header to the value contained in the current exchange Host header useful in reverse proxy applications where you want the Host header received by the downstream server to reflect the URL called by the upstream client this allows applications which use the Host header to generate accurate URL's for a proxied service
        proxyHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The proxy port number
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        httpClient:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.eclipse.jetty.client.HttpClient
          deprecated: false
          secret: false
          description: 'Sets a shared HttpClient to use for all producers created by this
            endpoint. By default each producer will use a new http client and not share.
            Important: Make sure to handle the lifecycle of the shared client such as stopping
            the client when it is no longer in use. Camel will call the start method on
            the client to ensure its started when this endpoint creates a producer. This
            options should only be used in special circumstances.'
        httpClientParameters:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: httpClient.
          multiValue: true
          deprecated: false
          secret: false
          description: Configuration of Jetty's HttpClient. For example setting httpClient.idleTimeout=30000 sets the idle timeout to 30 seconds. And httpClient.timeout=30000 sets the request timeout to 30 seconds in case you want to timeout sooner if you have long running request/response calls.
        jettyBinding:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.component.jetty.JettyHttpBinding
          deprecated: false
          secret: false
          description: To use a custom JettyHttpBinding which be used to customize how a response should be written for the producer.
        jettyBindingRef:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: To use a custom JettyHttpBinding which be used to customize how a response should be written for the producer.
        urlRewrite:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.http.common.UrlRewrite
          deprecated: false
          secret: false
          description: Refers to a custom org.apache.camel.component.http.UrlRewrite which allows you to rewrite urls when you bridge/proxy endpoints. See more details at http://camel.apache.org/urlrewrite.html
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        sslContextParametersRef:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: To configure security using SSLContextParameters
    documentation.adoc: "[[Jetty-JettyComponent]]\nJetty Component\n~~~~~~~~~~~~~~~\n\
      \nThe *jetty* component provides HTTP-based link:endpoint.html[endpoints]\n\
      for consuming and producing HTTP requests. That is, the Jetty component\nbehaves\
      \ as a simple Web server. +\n Jetty can also be used as a http client which\
      \ mean you can also use it\nwith Camel as a producer.\n\n*Stream*\n\nThe??`assert`??call\
      \ appears in this example, because the code is part of\nan unit test.Jetty is\
      \ stream based, which means the input it receives is\nsubmitted to Camel as\
      \ a stream. That means you will only be able to read\nthe content of the stream\
      \ *once*. +\nIf you find a situation where the message body appears to be empty\
      \ or\nyou need to access the Exchange.HTTP_RESPONSE_CODE data multiple times\n\
      (e.g.: doing multicasting, or redelivery error handling), you should use\nlink:stream-caching.html[Stream\
      \ caching] or convert the message body to\na `String` which is safe to be re-read\
      \ multiple times.\n\nMaven users will need to add the following dependency to\
      \ their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-jetty</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Jetty-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n----------------------------------------------------\n\
      jetty:http://hostname[:port][/resourceUri][?options]\n----------------------------------------------------\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[Jetty-Options]]\nOptions\n^^^^^^^\n\n\n\n\n\n// component options: START\n\
      The Jetty 9 component supports 31 options which are listed below.\n\n\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| sslKeyPassword | String | The key password\
      \ which is used to access the certificate's key entry in the keystore (this\
      \ is the same password that is supplied to the keystore command's -keypass option).\n\
      | sslPassword | String | The ssl password which is required to access the keystore\
      \ file (this is the same password that is supplied to the keystore command's\
      \ -storepass option).\n| keystore | String | Specifies the location of the Java\
      \ keystore file which contains the Jetty server's own X.509 certificate in a\
      \ key entry.\n| errorHandler | ErrorHandler | This option is used to set the\
      \ ErrorHandler that Jetty server uses.\n| sslSocketConnectors | Map | A map\
      \ which contains per port number specific SSL connectors.\n| socketConnectors\
      \ | Map | A map which contains per port number specific HTTP connectors. Uses\
      \ the same principle as sslSocketConnectors.\n| httpClientMinThreads | Integer\
      \ | To set a value for minimum number of threads in HttpClient thread pool.\
      \ Notice that both a min and max size must be configured.\n| httpClientMaxThreads\
      \ | Integer | To set a value for maximum number of threads in HttpClient thread\
      \ pool. Notice that both a min and max size must be configured.\n| minThreads\
      \ | Integer | To set a value for minimum number of threads in server thread\
      \ pool. Notice that both a min and max size must be configured.\n| maxThreads\
      \ | Integer | To set a value for maximum number of threads in server thread\
      \ pool. Notice that both a min and max size must be configured.\n| threadPool\
      \ | ThreadPool | To use a custom thread pool for the server. This option should\
      \ only be used in special circumstances.\n| enableJmx | boolean | If this option\
      \ is true Jetty JMX support will be enabled for this endpoint.\n| jettyHttpBinding\
      \ | JettyHttpBinding | To use a custom org.apache.camel.component.jetty.JettyHttpBinding\
      \ which are used to customize how a response should be written for the producer.\n\
      | httpBinding | HttpBinding | Not to be used - use JettyHttpBinding instead.\n\
      | httpConfiguration | HttpConfiguration | Jetty component does not use HttpConfiguration.\n\
      | mbContainer | MBeanContainer | To use a existing configured org.eclipse.jetty.jmx.MBeanContainer\
      \ if JMX is enabled that Jetty uses for registering mbeans.\n| sslSocketConnectorProperties\
      \ | Map | A map which contains general SSL connector properties.\n| socketConnectorProperties\
      \ | Map | A map which contains general HTTP connector properties. Uses the same\
      \ principle as sslSocketConnectorProperties.\n| continuationTimeout | Long |\
      \ Allows to set a timeout in millis when using Jetty as consumer (server). By\
      \ default Jetty uses 30000. You can use a value of = 0 to never expire. If a\
      \ timeout occurs then the request will be expired and Jetty will return back\
      \ a http error 503 to the client. This option is only in use when using Jetty\
      \ with the Asynchronous Routing Engine.\n| useContinuation | boolean | Whether\
      \ or not to use Jetty continuations for the Jetty Server.\n| sslContextParameters\
      \ | SSLContextParameters | To configure security using SSLContextParameters\n\
      | responseBufferSize | Integer | Allows to configure a custom value of the response\
      \ buffer size on the Jetty connectors.\n| requestBufferSize | Integer | Allows\
      \ to configure a custom value of the request buffer size on the Jetty connectors.\n\
      | requestHeaderSize | Integer | Allows to configure a custom value of the request\
      \ header size on the Jetty connectors.\n| responseHeaderSize | Integer | Allows\
      \ to configure a custom value of the response header size on the Jetty connectors.\n\
      | proxyHost | String | To use a http proxy to configure the hostname.\n| proxyPort\
      \ | Integer | To use a http proxy to configure the port number.\n| useXForwardedForHeader\
      \ | boolean | To use the X-Forwarded-For header in HttpServletRequest.getRemoteAddr.\n\
      | sendServerVersion | boolean | If the option is true jetty server will send\
      \ the date header to the client which sends the request. NOTE please make sure\
      \ there is no any other camel-jetty endpoint is share the same port otherwise\
      \ this option may not work as expected.\n| allowJavaSerializedObject | boolean\
      \ | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object\
      \ This is by default turned off. If you enable this then be aware that Java\
      \ will deserialize the incoming data from the request to Java and that can be\
      \ a potential security risk.\n| headerFilterStrategy | HeaderFilterStrategy\
      \ | To use a custom HeaderFilterStrategy to filter header to and from Camel\
      \ message.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Jetty 9 component supports 53 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| httpUri | producer | \
      \ | URI | *Required* The url of the HTTP endpoint to call.\n| chunked | common\
      \ | true | boolean | If this option is false the Servlet will disable the HTTP\
      \ streaming and set the content-length header on the response\n| disableStreamCache\
      \ | common | false | boolean | Determines whether or not the raw input stream\
      \ from Servlet is cached or not (Camel will read the stream into a in memory/overflow\
      \ to file Stream caching) cache. By default Camel will cache the Servlet input\
      \ stream to support reading it multiple times to ensure it Camel can retrieve\
      \ all data from the stream. However you can set this option to true when you\
      \ for example need to access the raw stream such as streaming it directly to\
      \ a file or other persistent store. DefaultHttpBinding will copy the request\
      \ input stream into a stream cache and put it into message body if this option\
      \ is false to support reading the stream multiple times. If you use Servlet\
      \ to bridge/proxy an endpoint then consider enabling this option to improve\
      \ performance in case you do not need to read the message payload multiple times.\
      \ The http/http4 producer will by default cache the response body stream. If\
      \ setting this option to true then the producers will not cache the response\
      \ body stream but use the response stream as-is as the message body.\n| enableMultipartFilter\
      \ | common | false | boolean | Whether Jetty org.eclipse.jetty.servlets.MultiPartFilter\
      \ is enabled or not. You should set this value to false when bridging endpoints\
      \ to ensure multipart requests is proxied/bridged as well.\n| headerFilterStrategy\
      \ | common |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy\
      \ to filter header to and from Camel message.\n| httpBinding | common |  | HttpBinding\
      \ | To use a custom HttpBinding to control the mapping between Camel message\
      \ and HttpClient.\n| transferException | common | false | boolean | If enabled\
      \ and an Exchange failed processing on the consumer side and if the caused Exception\
      \ was send back serialized in the response as a application/x-java-serialized-object\
      \ content type. On the producer side the exception will be deserialized and\
      \ thrown as is instead of the HttpOperationFailedException. The caused exception\
      \ is required to be serialized. This is by default turned off. If you enable\
      \ this then be aware that Java will deserialize the incoming data from the request\
      \ to Java and that can be a potential security risk.\n| async | consumer | false\
      \ | boolean | Configure the consumer to work in async mode\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| continuationTimeout\
      \ | consumer | 30000 | Long | Allows to set a timeout in millis when using Jetty\
      \ as consumer (server). By default Jetty uses 30000. You can use a value of\
      \ = 0 to never expire. If a timeout occurs then the request will be expired\
      \ and Jetty will return back a http error 503 to the client. This option is\
      \ only in use when using Jetty with the Asynchronous Routing Engine.\n| eagerCheckContentAvailable\
      \ | consumer | false | boolean | Whether to eager check whether the HTTP requests\
      \ has content if the content-length header is 0 or not present. This can be\
      \ turned on in case HTTP clients do not send streamed data.\n| enableCORS |\
      \ consumer | false | boolean | If the option is true Jetty server will setup\
      \ the CrossOriginFilter which supports the CORS out of box.\n| enableJmx | consumer\
      \ | false | boolean | If this option is true Jetty JMX support will be enabled\
      \ for this endpoint. See Jetty JMX support for more details.\n| httpMethodRestrict\
      \ | consumer |  | String | Used to only allow consuming if the HttpMethod matches\
      \ such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.\n\
      | matchOnUriPrefix | consumer | false | boolean | Whether or not the consumer\
      \ should try to find a target consumer by matching the URI prefix if no exact\
      \ match is found.\n| optionsEnabled | consumer | false | boolean | Specifies\
      \ whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS\
      \ is turned off.\n| responseBufferSize | consumer |  | Integer | To use a custom\
      \ buffer size on the javax.servlet.ServletResponse.\n| sendDateHeader | consumer\
      \ | false | boolean | If the option is true jetty server will send the date\
      \ header to the client which sends the request. NOTE please make sure there\
      \ is no any other camel-jetty endpoint is share the same port otherwise this\
      \ option may not work as expected.\n| sendServerVersion | consumer | true |\
      \ boolean | If the option is true jetty will send the server header with the\
      \ jetty version information to the client which sends the request. NOTE please\
      \ make sure there is no any other camel-jetty endpoint is share the same port\
      \ otherwise this option may not work as expected.\n| sessionSupport | consumer\
      \ | false | boolean | Specifies whether to enable the session manager on the\
      \ server side of Jetty.\n| traceEnabled | consumer | false | boolean | Specifies\
      \ whether to enable HTTP TRACE for this Servlet consumer. By default TRACE is\
      \ turned off.\n| useContinuation | consumer |  | Boolean | Whether or not to\
      \ use Jetty continuations for the Jetty Server.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| filterInitParameters | consumer (advanced) |  | Map | Configuration\
      \ of the filter init parameters. These parameters will be applied to the filter\
      \ list before starting the jetty server.\n| filtersRef | consumer (advanced)\
      \ |  | String | Allows using a custom filters which is putted into a list and\
      \ can be find in the Registry. Multiple values can be separated by comma.\n\
      | handlers | consumer (advanced) |  | String | Specifies a comma-delimited set\
      \ of Handler instances to lookup in your Registry. These handlers are added\
      \ to the Jetty servlet context (for example to add security). Important: You\
      \ can not use different handlers with different Jetty endpoints using the same\
      \ port number. The handlers is associated to the port number. If you need different\
      \ handlers then use different port numbers.\n| httpBindingRef | consumer (advanced)\
      \ |  | String | Option to disable throwing the HttpOperationFailedException\
      \ in case of failed responses from the remote server. This allows you to get\
      \ all responses regardless of the HTTP status code.\n| multipartFilter | consumer\
      \ (advanced) |  | Filter | Allows using a custom multipart filter. Note: setting\
      \ multipartFilterRef forces the value of enableMultipartFilter to true.\n| multipartFilterRef\
      \ | consumer (advanced) |  | String | Allows using a custom multipart filter.\
      \ Note: setting multipartFilterRef forces the value of enableMultipartFilter\
      \ to true.\n| authMethodPriority | producer |  | String | Authentication method\
      \ for proxy either as Basic Digest or NTLM.\n| bridgeEndpoint | producer | false\
      \ | boolean | If the option is true HttpProducer will ignore the Exchange.HTTP_URI\
      \ header and use the endpoint's URI for request. You may also set the option\
      \ throwExceptionOnFailure to be false to let the HttpProducer send all the fault\
      \ response back.\n| connectionClose | producer | false | boolean | Specifies\
      \ whether a Connection Close header must be added to HTTP Request. By default\
      \ connectionClose is false.\n| copyHeaders | producer | true | boolean | If\
      \ this option is true then IN exchange headers will be copied to OUT exchange\
      \ headers according to copy strategy. Setting this to false allows to only include\
      \ the headers from the HTTP response (not propagating IN headers).\n| httpClientMaxThreads\
      \ | producer | 254 | Integer | To set a value for maximum number of threads\
      \ in HttpClient thread pool. This setting override any setting configured on\
      \ component level. Notice that both a min and max size must be configured. If\
      \ not set it default to max 254 threads used in Jettys thread pool.\n| httpClientMinThreads\
      \ | producer | 8 | Integer | To set a value for minimum number of threads in\
      \ HttpClient thread pool. This setting override any setting configured on component\
      \ level. Notice that both a min and max size must be configured. If not set\
      \ it default to min 8 threads used in Jettys thread pool.\n| ignoreResponseBody\
      \ | producer | false | boolean | If this option is true The http producer won't\
      \ read response body and cache the input stream\n| okStatusCodeRange | producer\
      \ | 200-299 | String | The status codes which is considered a success response.\
      \ The values are inclusive. The range must be defined as from-to with the dash\
      \ included.\n| preserveHostHeader | producer | false | boolean | If the option\
      \ is true HttpProducer will set the Host header to the value contained in the\
      \ current exchange Host header useful in reverse proxy applications where you\
      \ want the Host header received by the downstream server to reflect the URL\
      \ called by the upstream client this allows applications which use the Host\
      \ header to generate accurate URL's for a proxied service\n| proxyHost | producer\
      \ |  | String | The proxy host name\n| proxyPort | producer |  | int | The proxy\
      \ port number\n| throwExceptionOnFailure | producer | true | boolean | Option\
      \ to disable throwing the HttpOperationFailedException in case of failed responses\
      \ from the remote server. This allows you to get all responses regardless of\
      \ the HTTP status code.\n| httpClient | producer (advanced) |  | HttpClient\
      \ | Sets a shared HttpClient to use for all producers created by this endpoint.\
      \ By default each producer will use a new http client and not share. Important:\
      \ Make sure to handle the lifecycle of the shared client such as stopping the\
      \ client when it is no longer in use. Camel will call the start method on the\
      \ client to ensure its started when this endpoint creates a producer. This options\
      \ should only be used in special circumstances.\n| httpClientParameters | producer\
      \ (advanced) |  | Map | Configuration of Jetty's HttpClient. For example setting\
      \ httpClient.idleTimeout=30000 sets the idle timeout to 30 seconds. And httpClient.timeout=30000\
      \ sets the request timeout to 30 seconds in case you want to timeout sooner\
      \ if you have long running request/response calls.\n| jettyBinding | producer\
      \ (advanced) |  | JettyHttpBinding | To use a custom JettyHttpBinding which\
      \ be used to customize how a response should be written for the producer.\n\
      | jettyBindingRef | producer (advanced) |  | String | To use a custom JettyHttpBinding\
      \ which be used to customize how a response should be written for the producer.\n\
      | urlRewrite | producer (advanced) |  | UrlRewrite | Refers to a custom org.apache.camel.component.http.UrlRewrite\
      \ which allows you to rewrite urls when you bridge/proxy endpoints. See more\
      \ details at http://camel.apache.org/urlrewrite.html\n| mapHttpMessageBody |\
      \ advanced | true | boolean | If this option is true then IN exchange Body of\
      \ the exchange will be mapped to HTTP body. Setting this to false will avoid\
      \ the HTTP mapping.\n| mapHttpMessageFormUrlEncodedBody | advanced | true |\
      \ boolean | If this option is true then IN exchange Form Encoded body of the\
      \ exchange will be mapped to HTTP. Setting this to false will avoid the HTTP\
      \ Form Encoded body mapping.\n| mapHttpMessageHeaders | advanced | true | boolean\
      \ | If this option is true then IN exchange Headers of the exchange will be\
      \ mapped to HTTP headers. Setting this to false will avoid the HTTP Headers\
      \ mapping.\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n| sslContextParameters | security |  | SSLContextParameters\
      \ | To configure security using SSLContextParameters\n| sslContextParametersRef\
      \ | security |  | String | To configure security using SSLContextParameters\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n\n\n\n[[Jetty-MessageHeaders]]\n\
      Message Headers\n^^^^^^^^^^^^^^^\n\nCamel uses the same message headers as the\
      \ link:http.html[HTTP]\ncomponent. \nFrom Camel 2.2, it also uses (Exchange.HTTP_CHUNKED,CamelHttpChunked)\n\
      header to turn on or turn off the chuched encoding on the camel-jetty\nconsumer.\n\
      \nCamel also populates *all* request.parameter and request.headers. For\nexample,\
      \ given a client request with the URL,\n`http://myserver/myserver?orderid=123`,\
      \ the exchange will contain a\nheader named `orderid` with the value 123.\n\n\
      Starting with Camel 2.2.0, you can get the request.parameter from the\nmessage\
      \ header not only from Get Method, but also other HTTP method.\n\n[[Jetty-Usage]]\n\
      Usage\n^^^^^\n\nThe Jetty component supports both consumer and producer endpoints.\n\
      Another option for producing to other HTTP endpoints, is to use the\nlink:http.html[HTTP\
      \ Component]\n\n[[Jetty-ProducerExample]]\nProducer Example\n^^^^^^^^^^^^^^^^\n\
      \nThe following is a basic example of how to send an HTTP request to an\nexisting\
      \ HTTP endpoint.\n\nin Java DSL\n\n[source,java]\n---------------------------------------------------------\n\
      from(\"direct:start\").to(\"jetty://http://www.google.com\");\n---------------------------------------------------------\n\
      \nor in Spring XML\n\n[source,xml]\n---------------------------------------------\n\
      <route>\n    <from uri=\"direct:start\"/>\n    <to uri=\"jetty://http://www.google.com\"\
      />\n<route>\n---------------------------------------------\n\n[[Jetty-ConsumerExample]]\n\
      Consumer Example\n^^^^^^^^^^^^^^^^\n\nIn this sample we define a route that\
      \ exposes a HTTP service at\n`http://localhost:8080/myapp/myservice`:\n\n*Usage\
      \ of localhost*\n\nWhen you specify `localhost` in a URL, Camel exposes the\
      \ endpoint only\non the local TCP/IP network interface, so it cannot be accessed\
      \ from\noutside the machine it operates on.\n\nIf you need to expose a Jetty\
      \ endpoint on a specific network interface,\nthe numerical IP address of this\
      \ interface should be used as the host.\nIf you need to expose a Jetty endpoint\
      \ on all network interfaces, the\n`0.0.0.0` address should be used.\n\nTo listen\
      \ across an entire URI prefix, see\nlink:how-do-i-let-jetty-match-wildcards.html[How\
      \ do I let Jetty match\nwildcards].\n\nIf you actually want to expose routes\
      \ by HTTP and already have a\nServlet, you should instead refer to the\nhttps://cwiki.apache.org/confluence/pages/viewpage.action?pageId=46339[Servlet\n\
      Transport].\n\nOur business logic is implemented in the `MyBookService` class,\
      \ which\naccesses the HTTP request contents and then returns a response. +\n\
      \ *Note:* The `assert` call appears in this example, because the code is\npart\
      \ of an unit test.\n\nThe following sample shows a content-based route that\
      \ routes all\nrequests containing the URI parameter, `one`, to the endpoint,\n\
      `mock:one`, and all others to `mock:other`.\n\nSo if a client sends the HTTP\
      \ request, `http://serverUri?one=hello`, the\nJetty component will copy the\
      \ HTTP request parameter, `one` to the\nexchange's `in.header`. We can then\
      \ use the `simple` language to route\nexchanges that contain this header to\
      \ a specific endpoint and all others\nto another. If we used a language more\
      \ powerful than\nlink:simple.html[Simple]??(such as link:el.html[EL] or\nlink:ognl.html[OGNL])??we\
      \ could also test for the parameter value and do\nrouting based on the header\
      \ value as well.\n\n[[Jetty-SessionSupport]]\nSession Support\n^^^^^^^^^^^^^^^\n\
      \nThe session support option, `sessionSupport`, can be used to enable a\n`HttpSession`\
      \ object and access the session object while processing the\nexchange. For example,\
      \ the following route enables sessions:\n\n[source,xml]\n---------------------------------------------------------------------------\n\
      <route>\n    <from uri=\"jetty:http://0.0.0.0/myapp/myservice/?sessionSupport=true\"\
      />\n    <processRef ref=\"myCode\"/>\n<route>\n---------------------------------------------------------------------------\n\
      \nThe `myCode` link:processor.html[Processor] can be instantiated by a\nSpring\
      \ `bean` element:\n\n[source,xml]\n--------------------------------------------------------\n\
      <bean id=\"myCode\"class=\"com.mycompany.MyCodeProcessor\"/>\n--------------------------------------------------------\n\
      \nWhere the processor implementation can access the `HttpSession` as\nfollows:\n\
      \n[source,java]\n--------------------------------------------------------------------------------------\n\
      public void process(Exchange exchange) throws Exception {\n    HttpSession session\
      \ = exchange.getIn(HttpMessage.class).getRequest().getSession();\n    ...\n\
      }\n--------------------------------------------------------------------------------------\n\
      \n[[Jetty-SSLSupport(HTTPS)]]\nSSL Support (HTTPS)\n^^^^^^^^^^^^^^^^^^^\n\n\
      [[Jetty-UsingtheJSSEConfigurationUtility]]\nUsing the JSSE Configuration Utility\n\
      \nAs of Camel 2.8, the Jetty component supports SSL/TLS configuration\nthrough\
      \ the link:camel-configuration-utilities.html[Camel JSSE\nConfiguration Utility].??\
      \ This utility greatly decreases the amount of\ncomponent specific code you\
      \ need to write and is configurable at the\nendpoint and component levels.??\
      \ The following examples demonstrate how\nto use the utility with the Jetty\
      \ component.\n\n[[Jetty-Programmaticconfigurationofthecomponent]]\nProgrammatic\
      \ configuration of the component\n\n[source,java]\n-----------------------------------------------------------------------------------------\n\
      KeyStoreParameters ksp = new KeyStoreParameters();\nksp.setResource(\"/users/home/server/keystore.jks\"\
      );\nksp.setPassword(\"keystorePassword\");\n\nKeyManagersParameters kmp = new\
      \ KeyManagersParameters();\nkmp.setKeyStore(ksp);\nkmp.setKeyPassword(\"keyPassword\"\
      );\n\nSSLContextParameters scp = new SSLContextParameters();\nscp.setKeyManagers(kmp);\n\
      \nJettyComponent jettyComponent = getContext().getComponent(\"jetty\", JettyComponent.class);\n\
      jettyComponent.setSslContextParameters(scp);\n-----------------------------------------------------------------------------------------\n\
      \n[[Jetty-SpringDSLbasedconfigurationofendpoint]]\nSpring DSL based configuration\
      \ of endpoint\n\n[source,xml]\n----------------------------------------------------------------------------------------\n\
      ...\n  <camel:sslContextParameters\n      id=\"sslContextParameters\">\n   \
      \ <camel:keyManagers\n        keyPassword=\"keyPassword\">\n      <camel:keyStore\n\
      \          resource=\"/users/home/server/keystore.jks\"\n          password=\"\
      keystorePassword\"/>\n    </camel:keyManagers>\n  </camel:sslContextParameters>...\n\
      ...\n  <to uri=\"jetty:https://127.0.0.1/mail/?sslContextParametersRef=sslContextParameters\"\
      />\n...\n----------------------------------------------------------------------------------------\n\
      \n[[Jetty-ConfiguringJettyDirectly]]\nConfiguring Jetty Directly\n\nJetty provides\
      \ SSL support out of the box. To enable Jetty to run in SSL\nmode, simply format\
      \ the URI with the `https://` prefix---for example:\n\n[source,xml]\n----------------------------------------------------\n\
      <from uri=\"jetty:https://0.0.0.0/myapp/myservice/\"/>\n----------------------------------------------------\n\
      \nJetty also needs to know where to load your keystore from and what\npasswords\
      \ to use in order to load the correct SSL certificate. Set the\nfollowing JVM\
      \ System Properties:\n\n*until Camel 2.2*\n\n* `jetty.ssl.keystore` specifies\
      \ the location of the Java keystore file,\nwhich contains the Jetty server's\
      \ own X.509 certificate in a _key\nentry_. A key entry stores the X.509 certificate\
      \ (effectively, the\n_public key_) and also its associated private key.\n* `jetty.ssl.password`\
      \ the store password, which is required to access\nthe keystore file (this is\
      \ the same password that is supplied to the\n`keystore` command's `-storepass`\
      \ option).\n* `jetty.ssl.keypassword` the key password, which is used to access\
      \ the\ncertificate's key entry in the keystore (this is the same password that\n\
      is supplied to the `keystore` command's `-keypass` option).\n\n*from Camel 2.3\
      \ onwards*\n\n* `org.eclipse.jetty.ssl.keystore` specifies the location of the\
      \ Java\nkeystore file, which contains the Jetty server's own X.509 certificate\n\
      in a _key entry_. A key entry stores the X.509 certificate (effectively,\nthe\
      \ _public key_) and also its associated private key.\n* `org.eclipse.jetty.ssl.password`\
      \ the store password, which is required\nto access the keystore file (this is\
      \ the same password that is supplied\nto the `keystore` command's `-storepass`\
      \ option).\n* `org.eclipse.jetty.ssl.keypassword` the key password, which is\
      \ used to\naccess the certificate's key entry in the keystore (this is the same\n\
      password that is supplied to the `keystore` command's `-keypass`\noption).\n\
      \nFor details of how to configure SSL on a Jetty endpoint, read the\nfollowing\
      \ documentation at the Jetty Site:\nhttp://docs.codehaus.org/display/JETTY/How+to+configure+SSL[http://docs.codehaus.org/display/JETTY/How+to+configure+SSL]\n\
      \nSome SSL properties aren't exposed directly by Camel, however Camel does\n\
      expose the underlying SslSocketConnector, which will allow you to set\nproperties\
      \ like needClientAuth for mutual authentication requiring a\nclient certificate\
      \ or wantClientAuth for mutual authentication where a\nclient doesn't need a\
      \ certificate but can have one. There's a slight\ndifference between the various\
      \ Camel versions:\n\n*Up to Camel 2.2*\n\n[source,xml]\n-----------------------------------------------------------------------------\n\
      <bean id=\"jetty\" class=\"org.apache.camel.component.jetty.JettyHttpComponent\"\
      >\n    <property name=\"sslSocketConnectors\">\n        <map>\n            <entry\
      \ key=\"8043\">\n                <bean class=\"org.mortbay.jetty.security.SslSocketConnector\"\
      >\n                    <property name=\"password\"value=\"...\"/>\n        \
      \            <property name=\"keyPassword\"value=\"...\"/>\n               \
      \     <property name=\"keystore\"value=\"...\"/>\n                    <property\
      \ name=\"needClientAuth\"value=\"...\"/>\n                    <property name=\"\
      truststore\"value=\"...\"/>\n                </bean>\n            </entry>\n\
      \        </map>\n    </property>\n</bean>\n-----------------------------------------------------------------------------\n\
      \n*Camel 2.3, 2.4*\n\n[source,xml]\n------------------------------------------------------------------------------\n\
      <bean id=\"jetty\" class=\"org.apache.camel.component.jetty.JettyHttpComponent\"\
      >\n    <property name=\"sslSocketConnectors\">\n        <map>\n            <entry\
      \ key=\"8043\">\n                <bean class=\"org.eclipse.jetty.server.ssl.SslSocketConnector\"\
      >\n                    <property name=\"password\"value=\"...\"/>\n        \
      \            <property name=\"keyPassword\"value=\"...\"/>\n               \
      \     <property name=\"keystore\"value=\"...\"/>\n                    <property\
      \ name=\"needClientAuth\"value=\"...\"/>\n                    <property name=\"\
      truststore\"value=\"...\"/>\n                </bean>\n            </entry>\n\
      \        </map>\n    </property>\n</bean>\n------------------------------------------------------------------------------\n\
      \n*From Camel 2.5 we switch to use SslSelectChannelConnector *\n\n[source,xml]\n\
      -------------------------------------------------------------------------------------\n\
      <bean id=\"jetty\" class=\"org.apache.camel.component.jetty.JettyHttpComponent\"\
      >\n    <property name=\"sslSocketConnectors\">\n        <map>\n            <entry\
      \ key=\"8043\">\n                <bean class=\"org.eclipse.jetty.server.ssl.SslSelectChannelConnector\"\
      >\n                    <property name=\"password\"value=\"...\"/>\n        \
      \            <property name=\"keyPassword\"value=\"...\"/>\n               \
      \     <property name=\"keystore\"value=\"...\"/>\n                    <property\
      \ name=\"needClientAuth\"value=\"...\"/>\n                    <property name=\"\
      truststore\"value=\"...\"/>\n                </bean>\n            </entry>\n\
      \        </map>\n    </property>\n</bean>\n-------------------------------------------------------------------------------------\n\
      \nThe value you use as keys in the above map is the port you configure\nJetty\
      \ to listen on.\n\n[[Jetty-ConfiguringgeneralSSLproperties]]\nConfiguring general\
      \ SSL properties\n++++++++++++++++++++++++++++++++++\n\n*Available as of Camel\
      \ 2.5*\n\nInstead of a per port number specific SSL socket connector (as shown\n\
      above) you can now configure general properties which applies for all\nSSL socket\
      \ connectors (which is not explicit configured as above with\nthe port number\
      \ as entry).\n\n[source,xml]\n-----------------------------------------------------------------------------\n\
      <bean id=\"jetty\" class=\"org.apache.camel.component.jetty.JettyHttpComponent\"\
      >\n    <property name=\"sslSocketConnectorProperties\">\n        <map>\n   \
      \         <entry key=\"password\"value=\"...\"/>\n            <entry key=\"\
      keyPassword\"value=\"...\"/>\n            <entry key=\"keystore\"value=\"...\"\
      />\n            <entry key=\"needClientAuth\"value=\"...\"/>\n            <entry\
      \ key=\"truststore\"value=\"...\"/>\n        </map>\n    </property>\n</bean>\n\
      -----------------------------------------------------------------------------\n\
      \n[[Jetty-HowtoobtainreferencetotheX509Certificate]]\nHow to obtain reference\
      \ to the X509Certificate\n++++++++++++++++++++++++++++++++++++++++++++++\n\n\
      Jetty stores a reference to the certificate in the HttpServletRequest\nwhich\
      \ you can access from code as follows:\n\n[source,java]\n--------------------------------------------------------------------------------------------------\n\
      HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);\n\
      X509Certificate cert = (X509Certificate) req.getAttribute(\"javax.servlet.request.X509Certificate\"\
      )\n--------------------------------------------------------------------------------------------------\n\
      \n[[Jetty-ConfiguringgeneralHTTPproperties]]\nConfiguring general HTTP properties\n\
      +++++++++++++++++++++++++++++++++++\n\n*Available as of Camel 2.5*\n\nInstead\
      \ of a per port number specific HTTP socket connector (as shown\nabove) you\
      \ can now configure general properties which applies for all\nHTTP socket connectors\
      \ (which is not explicit configured as above with\nthe port number as entry).\n\
      \n[source,xml]\n-----------------------------------------------------------------------------\n\
      <bean id=\"jetty\" class=\"org.apache.camel.component.jetty.JettyHttpComponent\"\
      >\n    <property name=\"socketConnectorProperties\">\n        <map>\n      \
      \      <entry key=\"acceptors\" value=\"4\"/>\n            <entry key=\"maxIdleTime\"\
      \ value=\"300000\"/>\n        </map>\n    </property>\n</bean>\n-----------------------------------------------------------------------------\n\
      \n[[Jetty-ObtainingX-Forwarded-ForheaderwithHttpServletRequest.getRemoteAddr]]\n\
      Obtaining X-Forwarded-For header with HttpServletRequest.getRemoteAddr()\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nIf the HTTP requests are handled by an Apache server and forwarded to\njetty\
      \ with mod_proxy, the original client IP address is in the\nX-Forwarded-For\
      \ header and the HttpServletRequest.getRemoteAddr() will\nreturn the address\
      \ of the Apache proxy.\n\nJetty has a forwarded property which takes the value\
      \ from\nX-Forwarded-For and places it in the HttpServletRequest remoteAddr\n\
      property.?? This property is not available directly through the endpoint\nconfiguration\
      \ but it can be easily added using the socketConnectors\nproperty:\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------\n\
      <bean id=\"jetty\" class=\"org.apache.camel.component.jetty.JettyHttpComponent\"\
      >\n    <property name=\"socketConnectors\">\n        <map>\n            <entry\
      \ key=\"8080\">\n                <bean class=\"org.eclipse.jetty.server.nio.SelectChannelConnector\"\
      >\n                    <property name=\"forwarded\" value=\"true\"/>\n     \
      \           </bean>\n            </entry>\n        </map>\n    </property>\n\
      </bean>\n----------------------------------------------------------------------------------\n\
      \nThis is particularly useful when an existing Apache server handles TLS\nconnections\
      \ for a domain and proxies them to application servers\ninternally.\n\n[[Jetty-DefaultbehaviorforreturningHTTPstatuscodes]]\n\
      Default behavior for returning HTTP status codes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe default behavior of HTTP status codes is defined by the\n`org.apache.camel.component.http.DefaultHttpBinding`\
      \ class, which\nhandles how a response is written and also sets the HTTP status\
      \ code.\n\nIf the exchange was processed successfully, the 200 HTTP status code\
      \ is\nreturned. +\n If the exchange failed with an exception, the 500 HTTP status\
      \ code is\nreturned, and the stacktrace is returned in the body. If you want\
      \ to\nspecify which HTTP status code to return, set the code in the\n`Exchange.HTTP_RESPONSE_CODE`\
      \ header of the OUT message.\n\n[[Jetty-CustomizingHttpBinding]]\nCustomizing\
      \ HttpBinding\n^^^^^^^^^^^^^^^^^^^^^^^\n\nBy default, Camel uses the\n`org.apache.camel.component.http.DefaultHttpBinding`\
      \ to handle how a\nresponse is written. If you like, you can customize this\
      \ behavior either\nby implementing your own `HttpBinding` class or by extending\n\
      `DefaultHttpBinding` and overriding the appropriate methods.\n\nThe following\
      \ example shows how to customize the `DefaultHttpBinding` in\norder to change\
      \ how exceptions are returned:\n\nWe can then create an instance of our binding\
      \ and register it in the\nSpring registry as follows:\n\n[source,xml]\n---------------------------------------------------------\n\
      <bean id=\"mybinding\"class=\"com.mycompany.MyHttpBinding\"/>\n---------------------------------------------------------\n\
      \nAnd then we can reference this binding when we define the route:\n\n[source,xml]\n\
      ---------------------------------------------------------------------------------------------------------------------------\n\
      <route><from uri=\"jetty:http://0.0.0.0:8080/myapp/myservice?httpBindingRef=mybinding\"\
      /><to uri=\"bean:doSomething\"/></route>\n---------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Jetty-Jettyhandlersandsecurityconfiguration]]\nJetty handlers and security\
      \ configuration\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nYou can configure\
      \ a list of Jetty handlers on the endpoint, which can be\nuseful for enabling\
      \ advanced Jetty security features. These handlers are\nconfigured in Spring\
      \ XML as follows:\n\n[source,xml]\n----------------------------------------------------------------------------------\n\
      <-- Jetty Security handling -->\n<bean id=\"userRealm\" class=\"org.mortbay.jetty.plus.jaas.JAASUserRealm\"\
      >\n    <property name=\"name\" value=\"tracker-users\"/>\n    <property name=\"\
      loginModuleName\" value=\"ldaploginmodule\"/>\n</bean>\n\n<bean id=\"constraint\"\
      \ class=\"org.mortbay.jetty.security.Constraint\">\n    <property name=\"name\"\
      \ value=\"BASIC\"/>\n    <property name=\"roles\" value=\"tracker-users\"/>\n\
      \    <property name=\"authenticate\" value=\"true\"/>\n</bean>\n\n<bean id=\"\
      constraintMapping\" class=\"org.mortbay.jetty.security.ConstraintMapping\">\n\
      \    <property name=\"constraint\" ref=\"constraint\"/>\n    <property name=\"\
      pathSpec\" value=\"/*\"/>\n</bean>\n\n<bean id=\"securityHandler\" class=\"\
      org.mortbay.jetty.security.SecurityHandler\">\n    <property name=\"userRealm\"\
      \ ref=\"userRealm\"/>\n    <property name=\"constraintMappings\" ref=\"constraintMapping\"\
      />\n</bean>\n----------------------------------------------------------------------------------\n\
      \n*And from Camel 2.3 onwards* you can configure a list of Jetty handlers\n\
      as follows:\n\n[source,xml]\n----------------------------------------------------------------------------------------\n\
      <-- Jetty Security handling -->\n<bean id=\"constraint\" class=\"org.eclipse.jetty.http.security.Constraint\"\
      >\n    <property name=\"name\" value=\"BASIC\"/>\n    <property name=\"roles\"\
      \ value=\"tracker-users\"/>\n    <property name=\"authenticate\" value=\"true\"\
      />\n</bean>\n\n<bean id=\"constraintMapping\" class=\"org.eclipse.jetty.security.ConstraintMapping\"\
      >\n    <property name=\"constraint\" ref=\"constraint\"/>\n    <property name=\"\
      pathSpec\" value=\"/*\"/>\n</bean>\n\n<bean id=\"securityHandler\" class=\"\
      org.eclipse.jetty.security.ConstraintSecurityHandler\">\n    <property name=\"\
      authenticator\">\n        <bean class=\"org.eclipse.jetty.security.authentication.BasicAuthenticator\"\
      />\n    </property>\n    <property name=\"constraintMappings\">\n        <list>\n\
      \            <ref bean=\"constraintMapping\"/>\n        </list>\n    </property>\n\
      </bean>\n----------------------------------------------------------------------------------------\n\
      \nYou can then define the endpoint as:\n\n[source,java]\n--------------------------------------------------------------------\n\
      from(\"jetty:http://0.0.0.0:9080/myservice?handlers=securityHandler\")\n--------------------------------------------------------------------\n\
      \nIf you need more handlers, set the `handlers` option equal to a\ncomma-separated\
      \ list of bean IDs.\n\n[[Jetty-HowtoreturnacustomHTTP500replymessage]]\nHow\
      \ to return a custom HTTP 500 reply message\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nYou may want to return a custom reply message when something goes wrong,\n\
      instead of the default reply message Camel link:jetty.html[Jetty]\nreplies with.\
      \ +\n You could use a custom `HttpBinding` to be in control of the message\n\
      mapping, but often it may be easier to use Camel's\nlink:exception-clause.html[Exception\
      \ Clause] to construct the custom\nreply message. For example as show here,\
      \ where we return\n`Dude something went wrong` with HTTP error code 500:\n\n\
      [[Jetty-Multi-partFormsupport]]\nMulti-part Form support\n^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nFrom Camel 2.3.0, camel-jetty support to multipart form post out of box.\n\
      The submitted form-data are mapped into the message header. Camel-jetty\ncreates\
      \ an attachment for each uploaded file. The file name is mapped to\nthe name\
      \ of the attachment. The content type is set as the content type\nof the attachment\
      \ file name. You can find the example here.\n\n*Note: getName() functions as\
      \ shown below in versions 2.5 and higher. In\nearlier versions you receive the\
      \ temporary file name for the attachment\ninstead*\n\n[[Jetty-JettyJMXsupport]]\n\
      Jetty JMX support\n^^^^^^^^^^^^^^^^^\n\nFrom Camel 2.3.0, camel-jetty supports\
      \ the enabling of Jetty's JMX\ncapabilities at the component and endpoint level\
      \ with the endpoint\nconfiguration taking priority. Note that JMX must be enabled\
      \ within the\nCamel context in order to enable JMX support in this component\
      \ as the\ncomponent provides Jetty with a reference to the MBeanServer registered\n\
      with the Camel context. Because the camel-jetty component caches and\nreuses\
      \ Jetty resources for a given protocol/host/port pairing, this\nconfiguration\
      \ option will only be evaluated during the creation of the\nfirst endpoint to\
      \ use a protocol/host/port pairing. For example, given\ntwo routes created from\
      \ the following XML fragments, JMX support would\nremain enabled for all endpoints\
      \ listening on \"https://0.0.0.0\".\n\n[source,xml]\n--------------------------------------------------------------------\n\
      <from uri=\"jetty:https://0.0.0.0/myapp/myservice1/?enableJmx=true\"/>\n--------------------------------------------------------------------\n\
      \n[source,xml]\n---------------------------------------------------------------------\n\
      <from uri=\"jetty:https://0.0.0.0/myapp/myservice2/?enableJmx=false\"/>\n---------------------------------------------------------------------\n\
      \nThe camel-jetty component also provides for direct configuration of the\n\
      Jetty MBeanContainer. Jetty creates MBean names dynamically. If you are\nrunning\
      \ another instance of Jetty outside of the Camel context and\nsharing the same\
      \ MBeanServer between the instances, you can provide both\ninstances with a\
      \ reference to the same MBeanContainer in order to avoid\nname collisions when\
      \ registering Jetty MBeans.\n\n[[Jetty-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:http.html[HTTP]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jgroups
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jgroups
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jgroups
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jgroups
          spec:
            containers:
            - image: fabric8/connector-jgroups:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jgroups
        syntax: jgroups:clusterName
        title: JGroups
        description: The jgroups component provides exchange of messages between Camel and JGroups clusters.
        label: clustering,messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jgroups.JGroupsComponent
        groupId: org.apache.camel
        artifactId: camel-jgroups
        version: 2.18.1
      componentProperties:
        channel:
          kind: property
          type: object
          javaType: org.jgroups.Channel
          deprecated: false
          secret: false
          description: Channel to use
        channelProperties:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies configuration properties of the JChannel used by the endpoint.
        enableViewMessages:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If set to true the consumer endpoint will receive org.jgroups.View messages as well (not only org.jgroups.Message instances). By default only regular messages are consumed by the endpoint.
      properties:
        clusterName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the JGroups cluster the component should connect to.
        channelProperties:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies configuration properties of the JChannel used by the endpoint.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        enableViewMessages:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true the consumer endpoint will receive org.jgroups.View messages as well (not only org.jgroups.Message instances). By default only regular messages are consumed by the endpoint.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[JGroups-JGroupsComponent]]\nJGroups Component\n~~~~~~~~~~~~~~~~~\n\
      \n*Available since Camel 2.10.0*\n\nhttp://www.jgroups.org[JGroups] is a toolkit\
      \ for reliable multicast\ncommunication. The *jgroups:* component provides exchange\
      \ of messages\nbetween Camel infrastructure and http://jgroups.org[JGroups]\
      \ clusters.\n\nMaven users will need to add the following dependency to their\
      \ `pom.xml`\nfor this component.\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache-extras.camel-extra</groupId>\n    <artifactId>camel-jgroups</artifactId>\n\
      \    <!-- use the same version as your Camel core version -->\n    <version>x.y.z</version>\n\
      </dependency>\n------------------------------------------------------------\n\
      \nStarting from the Camel *2.13.0*, JGroups component has been moved from\n\
      Camel Extra under the umbrella of the Apache Camel. If you are using\nCamel\
      \ *2.13.0* or higher, please use the following POM entry instead.\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-jgroups</artifactId>\n\
      \    <!-- use the same version as your Camel core version -->\n   ??<version>x.y.z</version>\n\
      </dependency>\n------------------------------------------------------------\n\
      \n[[JGroups-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-----------------------------\n\
      jgroups:clusterName[?options]\n-----------------------------\n\nWhere *clusterName*\
      \ represents the name of the JGroups cluster the\ncomponent should connect to.\n\
      \n[[JGroups-Options]]\nOptions\n^^^^^^^\n\n\n\n\n// component options: START\n\
      The JGroups component supports 3 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| channel | Channel | Channel to use\n| channelProperties\
      \ | String | Specifies configuration properties of the JChannel used by the\
      \ endpoint.\n| enableViewMessages | boolean | If set to true the consumer endpoint\
      \ will receive org.jgroups.View messages as well (not only org.jgroups.Message\
      \ instances). By default only regular messages are consumed by the endpoint.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// component options: END\n\n\n\n\n\n\n// endpoint options: START\n\
      The JGroups component supports 7 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| clusterName | common |\
      \  | String | *Required* The name of the JGroups cluster the component should\
      \ connect to.\n| channelProperties | common |  | String | Specifies configuration\
      \ properties of the JChannel used by the endpoint.\n| bridgeErrorHandler | consumer\
      \ | false | boolean | 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/ERROR level and ignored.\n| enableViewMessages | consumer\
      \ | false | boolean | If set to true the consumer endpoint will receive org.jgroups.View\
      \ messages as well (not only org.jgroups.Message instances). By default only\
      \ regular messages are consumed by the endpoint.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[JGroups-Headers]]\nHeaders\n\
      ^^^^^^^\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Constant |Since version |Description\n\n|`JGROUPS_ORIGINAL_MESSAGE`\
      \ |`JGroupsEndpoint.HEADER_JGROUPS_ORIGINAL_MESSAGE` |*2.13.0* |The original\
      \ `org.jgroups.Message` instance from which the body of the\nconsumed message\
      \ has been extracted.\n\n|`JGROUPS_SRC` |`JGroupsEndpoint.`HEADER_JGROUPS_SRC\
      \ |*2.10.0* | *Consumer* : The `org.jgroups.Address` instance extracted by\n\
      `org.jgroups.Message`.getSrc() method of the consumed message. \n*Producer*:\
      \ The custom source `org.jgroups.Address` of the message to be sent.\n\n|`JGROUPS_DEST`\
      \ |`JGroupsEndpoint.`HEADER_JGROUPS_DEST |*2.10.0* |*Consumer*: The `org.jgroups.Address`\
      \ instance extracted by\n`org.jgroups.Message`.getDest() method of the consumed\
      \ message.\n*Producer*: The custom destination `org.jgroups.Address` of the\
      \ message to be sent.\n\n|`JGROUPS_CHANNEL_ADDRESS` |`JGroupsEndpoint.`HEADER_JGROUPS_CHANNEL_ADDRESS\
      \ |*2.13.0* |Address (`org.jgroups.Address`) of the channel associated with\
      \ the\nendpoint.\n|=======================================================================\n\
      ??\n[[JGroups-Usage]]\nUsage\n^^^^^\n\nUsing `jgroups` component on the consumer\
      \ side of the route will capture\nmessages received by the `JChannel` associated\
      \ with the endpoint and\nforward them to the Camel route. JGroups consumer processes\
      \ incoming\nmessages\nhttp://camel.apache.org/asynchronous-routing-engine.html[asynchronously].\n\
      \n[source,java]\n----------------------------------------------\n// Capture\
      \ messages from cluster named\n// 'clusterName' and send them to Camel route.\n\
      from(\"jgroups:clusterName\").to(\"seda:queue\");\n----------------------------------------------\n\
      \nUsing `jgroups` component on the producer side of the route will forward\n\
      body of the Camel exchanges to the `JChannel` instance managed by the\nendpoint.\n\
      \n[source,java]\n--------------------------------------------------\n// Send\
      \ message to the cluster named 'clusterName'\nfrom(\"direct:start\").to(\"jgroups:clusterName\"\
      );\n--------------------------------------------------\n\n[[JGroups-Predefinedfilters]]\n\
      Predefined filters\n^^^^^^^^^^^^^^^^^^\n\nStarting from version *2.13.0* of\
      \ Camel, JGroups component comes with\npredefined filters factory class named\
      \ `JGroupsFilters.`\n\nIf you would like to consume only view changes notifications\
      \ sent to\ncoordinator of the cluster (and ignore these sent to the \"slave\"\
      \ nodes),\nuse the `JGroupsFilters.dropNonCoordinatorViews()` filter. This filter\n\
      is particularly useful when you want a single Camel node to become the\nmaster\
      \ in the cluster, because messages passing this filter notifies you\nwhen given\
      \ node has become a coordinator of the cluster. The snippet\nbelow demonstrates\
      \ how to collect only messages received by the master\nnode.\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------\n\
      import static org.apache.camel.component.jgroups.JGroupsFilters.dropNonCoordinatorViews;\n\
      ...\nfrom(\"jgroups:clusterName?enableViewMessages=true\").\n  filter(dropNonCoordinatorViews()).\n\
      \  to(\"seda:masterNodeEventsQueue\");\n----------------------------------------------------------------------------------------\n\
      \n[[JGroups-Predefinedexpressions]]\nPredefined expressions\n^^^^^^^^^^^^^^^^^^^^^^\n\
      \nStarting from version *2.13.0* of Camel, JGroups component comes with\npredefined\
      \ expressions factory class named `JGroupsExpressions.`\n\nIf you would like\
      \ to create link:delayer.html[delayer] that would affect\nthe route only if\
      \ the Camel context has not been started yet, use the\n`JGroupsExpressions.delayIfContextNotStarted(long\
      \ delay)` factory\nmethod. The expression created by this factory method will\
      \ return given\ndelay value only if the Camel context is in the state different\
      \ than\n`started`. This expression is particularly useful if you would like\
      \ to\nuse JGroups component for keeping singleton (master) route within the\n\
      cluster. link:controlbus-component.html[Control Bus] `start` command\nwon't\
      \ initialize the singleton route if the Camel Context hasn't been\nyet started.\
      \ So you need to delay a startup of the master route, to be\nsure that it has\
      \ been initialized after the Camel Context startup.\nBecause such scenario can\
      \ happen only during the initialization of the\ncluster, we don't want to delay\
      \ startup of the slave node becoming the\nnew master - that's why we need a\
      \ conditional delay expression.\n\nThe snippet below demonstrates how to use\
      \ conditional delaying with the\nJGroups component to delay the initial startup\
      \ of master node in the\ncluster.\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      import static java.util.concurrent.TimeUnit.SECONDS;\nimport static org.apache.camel.component.jgroups.JGroupsExpressions.delayIfContextNotStarted;\n\
      import static org.apache.camel.component.jgroups.JGroupsFilters.dropNonCoordinatorViews;\n\
      ...\nfrom(\"jgroups:clusterName?enableViewMessages=true\").\n  filter(dropNonCoordinatorViews()).\n\
      \  threads().delay(delayIfContextNotStarted(SECONDS.toMillis(5))). // run in\
      \ separated and delayed thread. Delay only if the context hasn't been started\
      \ already. \n ??to(\"controlbus:route?routeId=masterRoute&action=start&async=true\"\
      );\n\nfrom(\"timer://master?repeatCount=1\").routeId(\"masterRoute\").autoStartup(false).to(masterMockUri);??\n\
      -----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[JGroups-Examples]]\nExamples\n^^^^^^^^\n\n[[JGroups-SendingreceivingmessagestofromtheJGroupscluster]]\n\
      Sending (receiving) messages to (from) the JGroups cluster\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nIn order to send message to the JGroups cluster use producer endpoint,\njust\
      \ as demonstrated on the snippet below.\n\n[source,java]\n------------------------------------------------\n\
      from(\"direct:start\").to(\"jgroups:myCluster\");\n...\nproducerTemplate.sendBody(\"\
      direct:start\", \"msg\")\n------------------------------------------------\n\
      \nTo receive the message from the snippet above (on the same or the other\n\
      physical machine) listen on the messages coming from the given cluster,\njust\
      \ as demonstrated on the code fragment below.\n\n[source,java]\n------------------------------------------------------------\n\
      mockEndpoint.setExpectedMessageCount(1);\nmockEndpoint.message(0).body().isEqualTo(\"\
      msg\");\n...\nfrom(\"jgroups:myCluster\").to(\"mock:messagesFromTheCluster\"\
      );\n...\nmockEndpoint.assertIsSatisfied();\n------------------------------------------------------------\n\
      \n[[JGroups-Receiveclusterviewchangenotifications]]\nReceive cluster view change\
      \ notifications\n+++++++++++++++++++++++++++++++++++++++++\n\nThe snippet below\
      \ demonstrates how to create the consumer endpoint\nlistening to the??notifications\
      \ regarding cluster membership changes. By\ndefault only regular messages are\
      \ consumed by the endpoint.\n\n[source,java]\n---------------------------------------------------------------------\n\
      mockEndpoint.setExpectedMessageCount(1);\nmockEndpoint.message(0).body().isInstanceOf(org.jgroups.View.class);\n\
      ...\nfrom(\"jgroups:clusterName?enableViewMessages=true\").to(mockEndpoint);\n\
      ...\nmockEndpoint.assertIsSatisfied();\n---------------------------------------------------------------------\n\
      \n[[JGroups-Keepingsingletonroutewithinthecluster]]\nKeeping singleton route\
      \ within the cluster\n++++++++++++++++++++++++++++++++++++++++++\n\nThe snippet\
      \ below demonstrates how to keep the singleton consumer route\nin the cluster\
      \ of Camel Contexts. As soon as the master node dies, one\nof the slaves will\
      \ be elected as a new master and started. In this\nparticular example we want\
      \ to keep singleton link:jetty.html[jetty]\ninstance listening for the requests\
      \ on\naddress` http://localhost:8080/orders`.\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      import static java.util.concurrent.TimeUnit.SECONDS;\nimport static org.apache.camel.component.jgroups.JGroupsExpressions.delayIfContextNotStarted;\n\
      import static org.apache.camel.component.jgroups.JGroupsFilters.dropNonCoordinatorViews;\n\
      ...\nfrom(\"jgroups:clusterName?enableViewMessages=true\").\n  filter(dropNonCoordinatorViews()).\n\
      \  threads().delay(delayIfContextNotStarted(SECONDS.toMillis(5))). // run in\
      \ separated and delayed thread. Delay only if the context hasn't been started\
      \ already. \n ??to(\"controlbus:route?routeId=masterRoute&action=start&async=true\"\
      );\n\nfrom(\"jetty:http://localhost:8080/orders\").routeId(\"masterRoute\").autoStartup(false).to(\"\
      jms:orders\");??\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jing
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jing
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jing
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jing
          spec:
            containers:
            - image: fabric8/connector-jing:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jing
        syntax: jing:resourceUri
        title: Jing
        description: Validates the payload of a message using RelaxNG Syntax using Jing library.
        label: validation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.validator.jing.JingComponent
        groupId: org.apache.camel
        artifactId: camel-jing
        version: 2.18.1
      componentProperties: {}
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: URL to a local resource on the classpath or a full URL to a remote resource or resource on the file system which contains the schema to validate against.
        compactSyntax:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to validate using RelaxNG compact syntax or not. By default this is false for using RelaxNG XML Syntax (rng) And true is for using RelaxNG Compact Syntax (rnc)
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Jing-JingComponent]]
      Jing Component
      ~~~~~~~~~~~~~~

      The Jing component uses the
      http://www.thaiopensource.com/relaxng/jing.html[Jing Library] to perform
      XML validation of the message body using either

      * http://relaxng.org/[RelaxNG XML Syntax]
      * http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
      Syntax]

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

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

      Note that the link:msv.html[MSV] component can also support RelaxNG XML
      syntax.

      [[Jing-URIformatCamel2.16]]
      URI format Camel 2.16
      ^^^^^^^^^^^^^^^^^^^^^

      [source,java]
      ------------------------------
      jing:someLocalOrRemoteResource
      ------------------------------

      From Camel 2.16 the component use jing as name, and you can use the
      option compactSyntax to turn on either RNG or RNC mode.

      [[Jing-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Jing component has no options.
      // component options: END




      // endpoint options: START
      The Jing component supports 3 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* URL to a local resource on the classpath or a full URL to a remote resource or resource on the file system which contains the schema to validate against.
      | compactSyntax | producer | false | boolean | Whether to validate using RelaxNG compact syntax or not. By default this is false for using RelaxNG XML Syntax (rng) And true is for using RelaxNG Compact Syntax (rnc)
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Jing-Example]]
      Example
      ^^^^^^^

      The following
      http://svn.apache.org/repos/asf/camel/trunk/components/camel-jing/src/test/resources/org/apache/camel/component/validator/jing/rnc-context.xml[example]
      shows how to configure a route from the endpoint *direct:start* which
      then goes to one of two endpoints, either *mock:valid* or *mock:invalid*
      based on whether or not the XML matches the given
      http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
      Syntax] schema (which is supplied on the classpath).

      [[Jing-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jira
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jira
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jira
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jira
          spec:
            containers:
            - image: fabric8/connector-jira:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jira
        syntax: jira:type
        title: JIRA
        description: The jira component interacts with the JIRA issue tracker.
        label: api,reporting
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jira.JIRAComponent
        groupId: org.apache.camel
        artifactId: camel-jira
        version: 2.18.1
      componentProperties: {}
      properties:
        type:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.jira.JIRAType
          enum:
          - NEWISSUE
          - NEWCOMMENT
          deprecated: false
          secret: false
          description: Operation to perform such as create a new issue or a new comment
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for login
        serverUrl:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: URL to the JIRA server
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for login
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "6000"
          description: Delay in seconds when querying JIRA using the consumer.
        jql:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: JQL is the query language from JIRA which allows you to retrieve the data you want. For example jql=project=MyProject Where MyProject is the product key in Jira.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[JIRA-JIRA]]
      JIRA
      ~~~~

      *Available as of Camel 2.15*

      The JIRA component interacts with the JIRA??API by encapsulating
      Atlassian's??https://marketplace.atlassian.com/plugins/com.atlassian.jira.jira-rest-java-client[REST
      Java Client for JIRA]. It currently provides polling for new issues and
      new comments. ??It is also able to create new issues.

      Rather than webhooks, this endpoint relies on simple polling. Reasons
      include:

      * Concern for reliability/stability
      * The types of payloads we're polling aren't typically large (plus,
      paging is available in the API)
      * The need to support apps running somewhere not publicly accessible
      where a webhook would fail

      Note that the JIRA API is fairly expansive. ??Therefore, this component
      could be easily expanded to provide additional interactions.

      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-jira</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ---------------------------------------

      [[JIRA-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,text]
      -------------------------
      jira://endpoint[?options]
      -------------------------

      [[JIRA-Options:]]
      JIRA Options
      ^^^^^^^^^^^^^


      // component options: START
      The JIRA component has no options.
      // component options: END




      // endpoint options: START
      The JIRA component supports 10 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | type | common |  | JIRAType | *Required* Operation to perform such as create a new issue or a new comment
      | password | common |  | String | Password for login
      | serverUrl | common |  | String | *Required* URL to the JIRA server
      | username | common |  | String | Username for login
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delay | consumer | 6000 | int | Delay in seconds when querying JIRA using the consumer.
      | jql | consumer |  | String | JQL is the query language from JIRA which allows you to retrieve the data you want. For example jql=project=MyProject Where MyProject is the product key in Jira.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[JIRA-JQL:]]
      JQL:
      ^^^^

      The JQL URI option is used by both consumer endpoints. ??Theoretically,
      items like "project key", etc. could be URI options themselves.
      ??However, by requiring the use of JQL, the consumers become much more
      flexible and powerful.

      At the bare minimum, the consumers will require the following:

      [source,text]
      --------------------------------------------------------------
      jira://[endpoint]?[required options]&jql=project=[project key]
      --------------------------------------------------------------

      One important thing to note is that the newIssue consumer will
      automatically append??"ORDER BY key desc" to your JQL. ??This is in order
      to optimize startup processing, rather than having to index every single
      issue in the project.

      Another note is that, similarly, the newComment consumer will have to
      index every single issue??*and* comment in the project. ??Therefore, for
      large projects, it's??*vital* to optimize the JQL expression as much as
      possible. ??For example,??the JIRA Toolkit Plugin includes a??"Number of
      comments" custom field -- use '"Number of comments" > 0' in your query.
      Also try to minimize based on??state (status=Open), increase the polling
      delay, etc. ??Example:

      [source,text]
      ----------------------------------------------------------------------------------------------------------------------------------------------
      jira://[endpoint]?[required options]&jql=RAW(project=[project key] AND status in (Open, \"Coding In Progress\") AND \"Number of comments\">0)"
      ----------------------------------------------------------------------------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jms
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jms
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jms
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jms
          spec:
            containers:
            - image: fabric8/connector-jms:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jms
        syntax: jms:destinationType:destinationName
        title: JMS
        description: The jms component allows messages to be sent to (or consumed from) a JMS Queue or Topic.
        label: messaging
        deprecated: false
        async: true
        javaType: org.apache.camel.component.jms.JmsComponent
        groupId: org.apache.camel
        artifactId: camel-jms
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.JmsConfiguration
          deprecated: false
          secret: false
          description: To use a shared JMS configuration
        acceptMessagesWhileStopping:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether the consumer accept messages while it is stopping. You may consider enabling this option if you start and stop JMS routes at runtime while there are still messages enqued on the queue. If this option is false and you stop the JMS route then messages may be rejected and the JMS broker would have to attempt redeliveries which yet again may be rejected and eventually the message may be moved at a dead letter queue on the JMS broker. To avoid this its recommended to enable this option.
        allowReplyManagerQuickStop:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether the DefaultMessageListenerContainer used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed flag to quick stop in case JmsConfigurationisAcceptMessagesWhileStopping is enabled and org.apache.camel.CamelContext is currently being stopped. This quick stop ability is enabled by default in the regular JMS consumers but to enable for reply managers you must enable this flag.
        acknowledgementMode:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The JMS acknowledgement mode defined as an Integer. Allows you to set vendor-specific extensions to the acknowledgment mode. For the regular modes it is preferable to use the acknowledgementModeName instead.
        eagerLoadingOfProperties:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Enables eager loading of JMS properties as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties
        acknowledgementModeName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The JMS acknowledgement name which is one of: SESSION_TRANSACTED
            CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE'
        autoStartup:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether the consumer container should auto-startup.
        cacheLevel:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details.
        cacheLevelName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the cache level by name for the underlying JMS resources. Possible
            values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION.
            The default setting is CACHE_AUTO. See the Spring documentation and Transactions
            Cache Levels for more information.'
        replyToCacheLevelName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the cache level by name for the reply consumer when doing request/reply
            over JMS. This option only applies when using fixed reply queues (not temporary).
            Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName.
            And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers such
            as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE to
            work. Note: If using temporary queues then CACHE_NONE is not allowed and you
            must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.'
        clientId:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS client ID to use. Note that this value if specified must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead.
        concurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        replyToConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        connectionFactory:
          kind: property
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: Sets the default connection factory to be use
        username:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        password:
          kind: property
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        deliveryPersistent:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether persistent delivery is used by default.
        deliveryMode:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Specifies the delivery mode to be used. Possible values are Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2.
        durableSubscriptionName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.
        exceptionListener:
          kind: property
          type: object
          javaType: javax.jms.ExceptionListener
          deprecated: false
          secret: false
          description: Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
        errorHandler:
          kind: property
          type: object
          javaType: org.springframework.util.ErrorHandler
          deprecated: false
          secret: false
          description: Specifies a org.springframework.util.ErrorHandler to be invoked in case of any uncaught exceptions thrown while processing a Message. By default these exceptions will be logged at the WARN level if no errorHandler has been configured. You can configure logging level and whether stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes it much easier to configure than having to code a custom errorHandler.
        errorHandlerLoggingLevel:
          kind: property
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          description: Allows to configure the default errorHandler logging level for logging uncaught exceptions.
        errorHandlerLogStackTrace:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Allows to control whether stacktraces should be logged or not by the default errorHandler.
        explicitQosEnabled:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Set if the deliveryMode priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option which operates at message granularity reading QoS properties exclusively from the Camel In message headers.
        exposeListenerSession:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether the listener session should be exposed when consuming messages.
        idleTaskExecutionLimit:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the limit for idle executions of a receive task not having received any message within its execution. If this limit is reached the task will shut down and leave receiving to other executing tasks (in the case of dynamic scheduling; see the maxConcurrentConsumers setting). There is additional doc available from Spring.
        idleConsumerLimit:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specify the limit for the number of consumers that are allowed to be idle at any given time.
        maxConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        replyToMaxConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when using request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        replyOnTimeoutToMaxConcurrentConsumers:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS.
        maxMessagesPerTask:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The number of messages per task. -1 is unlimited. If you use a range for concurrent consumers (eg min max) then this option can be used to set a value to eg 100 to control how fast the consumers will shrink when less work is required.
        messageConverter:
          kind: property
          type: object
          javaType: org.springframework.jms.support.converter.MessageConverter
          deprecated: false
          secret: false
          description: To use a custom Spring org.springframework.jms.support.converter.MessageConverter so you can be in control how to map to/from a javax.jms.Message.
        mapJmsMessage:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
        messageIdEnabled:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: When sending specifies whether message IDs should be added.
        messageTimestampEnabled:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether timestamps should be enabled by default on sending messages.
        alwaysCopyMessage:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If true Camel will always make a JMS message copy of the message when it is passed to the producer for sending. Copying the message is needed in some situations such as when a replyToDestinationSelectorName is set (incidentally Camel will set the alwaysCopyMessage option to true if a replyToDestinationSelectorName is set)
        useMessageIDAsCorrelationID:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether JMSMessageID should always be used as JMSCorrelationID for InOut messages.
        priority:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect.
        pubSubNoLocal:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether to inhibit the delivery of messages published by its own connection.
        receiveTimeout:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The timeout for receiving messages (in milliseconds).
        recoveryInterval:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Specifies the interval between recovery attempts i.e. when a connection is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.
        subscriptionDurable:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          description: 'Deprecated: Enabled by default if you specify a durableSubscriptionName
            and a clientId.'
        taskExecutor:
          kind: property
          type: object
          javaType: org.springframework.core.task.TaskExecutor
          deprecated: false
          secret: false
          description: Allows you to specify a custom task executor for consuming messages.
        timeToLive:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: When sending messages specifies the time-to-live of the message (in milliseconds).
        transacted:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether to use transacted mode
        lazyCreateTransactionManager:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If true Camel will create a JmsTransactionManager if there is no transactionManager injected when option transacted=true.
        transactionManager:
          kind: property
          type: object
          javaType: org.springframework.transaction.PlatformTransactionManager
          deprecated: false
          secret: false
          description: The Spring transaction manager to use.
        transactionName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the transaction to use.
        transactionTimeout:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The timeout value of the transaction (in seconds) if using transacted mode.
        testConnectionOnStartup:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well.
        asyncStartListener:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to startup the JmsConsumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
        asyncStopListener:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to stop the JmsConsumer message listener asynchronously when stopping a route.
        forceSendOriginalMessage:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: When using mapJmsMessage=false Camel will create a new JMS message to send to a new JMS destination if you touch the headers (get or set) during the route. Set this option to true to force Camel to send the original JMS message that was received.
        requestTimeout:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option.
        requestTimeoutCheckerInterval:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs then you can lower this interval to check more frequently. The timeout is determined by the option requestTimeout.
        transferExchange:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: 'You can transfer the exchange over the wire instead of just the
            body and headers. The following fields are transferred: In body Out body Fault
            body In headers Out headers Fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level. You must enable this option on both the producer
            and consumer side so Camel knows the payloads is an Exchange and not a regular
            payload.'
        transferException:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled this option takes precedence. The caught exception is required to be serializable. The original Exception on the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException when returned to the producer.
        transferFault:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer side then the fault flag on link org.apache.camel.MessageisFault() will be send back in the response as a JMS header with the key link JmsConstantsJMS_TRANSFER_FAULT. If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean). You may want to enable this when using Camel components that support faults such as SOAP based such as cxf or spring-ws.
        jmsOperations:
          kind: property
          type: object
          javaType: org.springframework.jms.core.JmsOperations
          deprecated: false
          secret: false
          description: Allows you to use your own implementation of the org.springframework.jms.core.JmsOperations interface. Camel uses JmsTemplate as default. Can be used for testing purpose but not used much as stated in the spring API docs.
        destinationResolver:
          kind: property
          type: object
          javaType: org.springframework.jms.support.destination.DestinationResolver
          deprecated: false
          secret: false
          description: A pluggable org.springframework.jms.support.destination.DestinationResolver that allows you to use your own resolver (for example to lookup the real destination in a JNDI registry).
        replyToType:
          kind: property
          type: string
          javaType: org.apache.camel.component.jms.ReplyToType
          enum:
          - Temporary
          - Shared
          - Exclusive
          deprecated: false
          secret: false
          description: 'Allows for explicitly specifying which kind of strategy to use for
            replyTo queues when doing request/reply over JMS. Possible values are: Temporary
            Shared or Exclusive. By default Camel will use temporary queues. However if
            replyTo has been configured then Shared is used by default. This option allows
            you to use exclusive queues instead of shared ones. See Camel JMS documentation
            for more details and especially the notes about the implications if running
            in a clustered environment and the fact that Shared reply queues has lower performance
            than its alternatives Temporary and Exclusive.'
        preserveMessageQos:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Set to true if you want to send message using the QoS settings specified on the message instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only some of them. If not provided Camel will fall back to use the values from the endpoint instead. So when using this option the headers override the values from the endpoint. The explicitQosEnabled option by contrast will only use options set on the endpoint and not values from the message header.
        asyncConsumer:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100 strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transacted has been enabled then asyncConsumer=true does not run asynchronously as transaction must be executed synchronously (Camel 3.0 may support async transactions).
        allowNullBody:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
        includeSentJMSMessageID:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination.
        includeAllJMSXProperties:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: 'Whether to include all JMSXxxx properties when mapping from JMS
            to Camel Message. Setting this to true will include properties such as JMSXAppID
            and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then
            this option does not apply.'
        defaultTaskExecutorType:
          kind: property
          type: string
          javaType: org.apache.camel.component.jms.DefaultTaskExecutorType
          enum:
          - ThreadPool
          - SimpleAsync
          deprecated: false
          secret: false
          description: 'Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer
            for both consumer endpoints and the ReplyTo consumer of producer endpoints.
            Possible values: SimpleAsync (uses Spring''s SimpleAsyncTaskExecutor) or ThreadPool
            (uses Spring''s ThreadPoolTaskExecutor with optimal values - cached threadpool-like).
            If not set it defaults to the previous behaviour which uses a cached thread
            pool for consumer endpoints and SimpleAsync for reply consumers. The use of
            ThreadPool is recommended to reduce thread trash in elastic configurations with
            dynamically increasing and decreasing concurrent consumers.'
        jmsKeyFormatStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.JmsKeyFormatStrategy
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides two implementations
            out of the box: default and passthrough. The default strategy will safely marshal
            dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can
            be used for JMS brokers which do not care whether JMS header keys contain illegal
            characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy
            and refer to it using the notation.'
        applicationContext:
          kind: property
          type: object
          javaType: org.springframework.context.ApplicationContext
          deprecated: false
          secret: false
          description: Sets the Spring ApplicationContext to use
        queueBrowseStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.QueueBrowseStrategy
          deprecated: false
          secret: false
          description: To use a custom QueueBrowseStrategy when browsing queues
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        messageCreatedStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
        waitForProvisionCorrelationToBeUpdatedCounter:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Number of times to wait for provisional correlation id to be updated to the actual correlation id when doing request/reply over JMS and when the option useMessageIDAsCorrelationID is enabled.
        waitForProvisionCorrelationToBeUpdatedThreadSleepingTime:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Interval in millis to sleep each time while waiting for provisional correlation id to be updated.
      properties:
        destinationType:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - queue
          - topic
          - temp:queue
          - temp:topic
          deprecated: false
          secret: false
          defaultValue: queue
          description: The kind of destination to use
        destinationName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the queue or topic to use as destination
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS client ID to use. Note that this value if specified must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead.
        connectionFactory:
          kind: parameter
          group: common
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: Sets the default connection factory to be used if a connection factory is not specified for either link setTemplateConnectionFactory(ConnectionFactory) or link setListenerConnectionFactory(ConnectionFactory)
        disableReplyTo:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true a producer will behave like a InOnly exchange with the exception that JMSReplyTo header is sent out and not be suppressed like in the case of InOnly. Like InOnly the producer will not wait for a reply. A consumer with this flag will behave like InOnly. This feature can be used to bridge InOut requests to another queue so that a route on the other queue will send its response directly back to the original JMSReplyTo.
        durableSubscriptionName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.
        jmsMessageType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.jms.JmsMessageType
          enum:
          - Bytes
          - Map
          - Object
          - Stream
          - Text
          deprecated: false
          secret: false
          description: 'Allows you to force the use of a specific javax.jms.Message implementation
            for sending JMS messages. Possible values are: Bytes Map Object Stream Text.
            By default Camel would determine which JMS message type to use from the In body
            type. This option allows you to specify it.'
        testConnectionOnStartup:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well.
        acknowledgementModeName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - SESSION_TRANSACTED
          - CLIENT_ACKNOWLEDGE
          - AUTO_ACKNOWLEDGE
          - DUPS_OK_ACKNOWLEDGE
          deprecated: false
          secret: false
          defaultValue: AUTO_ACKNOWLEDGE
          description: 'The JMS acknowledgement name which is one of: SESSION_TRANSACTED
            CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE'
        asyncConsumer:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100 strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transacted has been enabled then asyncConsumer=true does not run asynchronously as transaction must be executed synchronously (Camel 3.0 may support async transactions).
        autoStartup:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether the consumer container should auto-startup.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        cacheLevelName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - CACHE_AUTO
          - CACHE_CONNECTION
          - CACHE_CONSUMER
          - CACHE_NONE
          - CACHE_SESSION
          deprecated: false
          secret: false
          defaultValue: CACHE_AUTO
          description: 'Sets the cache level by name for the underlying JMS resources. Possible
            values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION.
            The default setting is CACHE_AUTO. See the Spring documentation and Transactions
            Cache Levels for more information.'
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        maxConcurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
        replyTo:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Provides an explicit ReplyTo destination which overrides any incoming value of Message.getJMSReplyTo().
        replyToDeliveryPersistent:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether to use persistent delivery by default for replies.
        selector:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS selector to use
        acceptMessagesWhileStopping:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether the consumer accept messages while it is stopping. You may consider enabling this option if you start and stop JMS routes at runtime while there are still messages enqued on the queue. If this option is false and you stop the JMS route then messages may be rejected and the JMS broker would have to attempt redeliveries which yet again may be rejected and eventually the message may be moved at a dead letter queue on the JMS broker. To avoid this its recommended to enable this option.
        allowReplyManagerQuickStop:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the DefaultMessageListenerContainer used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed flag to quick stop in case link JmsConfigurationisAcceptMessagesWhileStopping() is enabled and org.apache.camel.CamelContext is currently being stopped. This quick stop ability is enabled by default in the regular JMS consumers but to enable for reply managers you must enable this flag.
        consumerType:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.component.jms.ConsumerType
          enum:
          - Simple
          - Default
          - Custom
          deprecated: false
          secret: false
          defaultValue: Default
          description: 'The consumer type to use which can be one of: Simple Default or
            Custom. The consumer type determines which Spring JMS listener to use. Default
            will use org.springframework.jms.listener.DefaultMessageListenerContainer Simple
            will use org.springframework.jms.listener.SimpleMessageListenerContainer. When
            Custom is specified the MessageListenerContainerFactory defined by the messageListenerContainerFactory
            option will determine what org.springframework.jms.listener.AbstractMessageListenerContainer
            to use.'
        defaultTaskExecutorType:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.component.jms.DefaultTaskExecutorType
          enum:
          - ThreadPool
          - SimpleAsync
          deprecated: false
          secret: false
          description: 'Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer
            for both consumer endpoints and the ReplyTo consumer of producer endpoints.
            Possible values: SimpleAsync (uses Spring''s SimpleAsyncTaskExecutor) or ThreadPool
            (uses Spring''s ThreadPoolTaskExecutor with optimal values - cached threadpool-like).
            If not set it defaults to the previous behaviour which uses a cached thread
            pool for consumer endpoints and SimpleAsync for reply consumers. The use of
            ThreadPool is recommended to reduce thread trash in elastic configurations with
            dynamically increasing and decreasing concurrent consumers.'
        eagerLoadingOfProperties:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables eager loading of JMS properties as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        exposeListenerSession:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether the listener session should be exposed when consuming messages.
        replyToSameDestinationAllowed:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself.
        deliveryMode:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.Integer
          enum:
          - "1"
          - "2"
          deprecated: false
          secret: false
          description: Specifies the delivery mode to be used. Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2.
        deliveryPersistent:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether persistent delivery is used by default.
        explicitQosEnabled:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set if the deliveryMode priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option which operates at message granularity reading QoS properties exclusively from the Camel In message headers.
        preserveMessageQos:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set to true if you want to send message using the QoS settings specified on the message instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only some of them. If not provided Camel will fall back to use the values from the endpoint instead. So when using this option the headers override the values from the endpoint. The explicitQosEnabled option by contrast will only use options set on the endpoint and not values from the message header.
        priority:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: int
          enum:
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          - "7"
          - "8"
          - "9"
          deprecated: false
          secret: false
          defaultValue: "4"
          description: Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect.
        replyToConcurrentConsumers:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        replyToMaxConcurrentConsumers:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of concurrent consumers when using request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
        replyToOnTimeoutMaxConcurrentConsumers:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS.
        replyToOverride:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Provides an explicit ReplyTo destination in the JMS message which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination.
        replyToType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.jms.ReplyToType
          enum:
          - Temporary
          - Shared
          - Exclusive
          deprecated: false
          secret: false
          description: 'Allows for explicitly specifying which kind of strategy to use for
            replyTo queues when doing request/reply over JMS. Possible values are: Temporary
            Shared or Exclusive. By default Camel will use temporary queues. However if
            replyTo has been configured then Shared is used by default. This option allows
            you to use exclusive queues instead of shared ones. See Camel JMS documentation
            for more details and especially the notes about the implications if running
            in a clustered environment and the fact that Shared reply queues has lower performance
            than its alternatives Temporary and Exclusive.'
        requestTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "20000"
          description: The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option.
        timeToLive:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: -1
          description: When sending messages specifies the time-to-live of the message (in milliseconds).
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
        alwaysCopyMessage:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true Camel will always make a JMS message copy of the message when it is passed to the producer for sending. Copying the message is needed in some situations such as when a replyToDestinationSelectorName is set (incidentally Camel will set the alwaysCopyMessage option to true if a replyToDestinationSelectorName is set)
        disableTimeToLive:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Use this option to force disabling time to live. For example when you do request/reply over JMS then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message will not expire on the receiver system. See below in section About time to live for more details.
        forceSendOriginalMessage:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When using mapJmsMessage=false Camel will create a new JMS message to send to a new JMS destination if you touch the headers (get or set) during the route. Set this option to true to force Camel to send the original JMS message that was received.
        includeSentJMSMessageID:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination.
        replyToCacheLevelName:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the cache level by name for the reply consumer when doing request/reply
            over JMS. This option only applies when using fixed reply queues (not temporary).
            Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName.
            And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers such
            as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE to
            work. Note: If using temporary queues then CACHE_NONE is not allowed and you
            must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.'
        replyToDestinationSelectorName:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS Selector using the fixed name to be used so you can filter out your own replies from the others when using a shared queue (that is if you are not using a temporary reply queue).
        asyncStartListener:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to startup the JmsConsumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
        asyncStopListener:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to stop the JmsConsumer message listener asynchronously when stopping a route.
        destinationResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.springframework.jms.support.destination.DestinationResolver
          deprecated: false
          secret: false
          description: A pluggable org.springframework.jms.support.destination.DestinationResolver that allows you to use your own resolver (for example to lookup the real destination in a JNDI registry).
        errorHandler:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.springframework.util.ErrorHandler
          deprecated: false
          secret: false
          description: Specifies a org.springframework.util.ErrorHandler to be invoked in case of any uncaught exceptions thrown while processing a Message. By default these exceptions will be logged at the WARN level if no errorHandler has been configured. You can configure logging level and whether stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes it much easier to configure than having to code a custom errorHandler.
        errorHandlerLoggingLevel:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: Allows to configure the default errorHandler logging level for logging uncaught exceptions.
        errorHandlerLogStackTrace:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Allows to control whether stacktraces should be logged or not by the default errorHandler.
        exceptionListener:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.jms.ExceptionListener
          deprecated: false
          secret: false
          description: Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        idleConsumerLimit:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specify the limit for the number of consumers that are allowed to be idle at any given time.
        idleTaskExecutionLimit:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Specifies the limit for idle executions of a receive task not having received any message within its execution. If this limit is reached the task will shut down and leave receiving to other executing tasks (in the case of dynamic scheduling; see the maxConcurrentConsumers setting). There is additional doc available from Spring.
        includeAllJMSXProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to include all JMSXxxx properties when mapping from JMS
            to Camel Message. Setting this to true will include properties such as JMSXAppID
            and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then
            this option does not apply.'
        jmsKeyFormatStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          enum:
          - default
          - passthrough
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides two implementations
            out of the box: default and passthrough. The default strategy will safely marshal
            dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can
            be used for JMS brokers which do not care whether JMS header keys contain illegal
            characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy
            and refer to it using the notation.'
        mapJmsMessage:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc.
        maxMessagesPerTask:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: The number of messages per task. -1 is unlimited. If you use a range for concurrent consumers (eg min max) then this option can be used to set a value to eg 100 to control how fast the consumers will shrink when less work is required.
        messageConverter:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.springframework.jms.support.converter.MessageConverter
          deprecated: false
          secret: false
          description: To use a custom Spring org.springframework.jms.support.converter.MessageConverter so you can be in control how to map to/from a javax.jms.Message.
        messageCreatedStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
        messageIdEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When sending specifies whether message IDs should be added. This is just an hint to the JMS Broker. If the JMS provider accepts this hint these messages must have the message ID set to null; if the provider ignores the hint the message ID must be set to its normal unique value
        messageListenerContainerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.jms.MessageListenerContainerFactory
          deprecated: false
          secret: false
          description: Registry ID of the MessageListenerContainerFactory used to determine what org.springframework.jms.listener.AbstractMessageListenerContainer to use to consume messages. Setting this will automatically set consumerType to Custom.
        messageTimestampEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether timestamps should be enabled by default on sending messages. This is just an hint to the JMS Broker. If the JMS provider accepts this hint these messages must have the timestamp set to zero; if the provider ignores the hint the timestamp must be set to its normal value
        pubSubNoLocal:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to inhibit the delivery of messages published by its own connection.
        receiveTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout for receiving messages (in milliseconds).
        recoveryInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Specifies the interval between recovery attempts i.e. when a connection is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.
        requestTimeoutCheckerInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs then you can lower this interval to check more frequently. The timeout is determined by the option requestTimeout.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferException:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled this option takes precedence. The caught exception is required to be serializable. The original Exception on the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException when returned to the producer.
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'You can transfer the exchange over the wire instead of just the
            body and headers. The following fields are transferred: In body Out body Fault
            body In headers Out headers Fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level. You must enable this option on both the producer
            and consumer side so Camel knows the payloads is an Exchange and not a regular
            payload.'
        transferFault:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and you are using Request Reply messaging (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer side then the fault flag on link org.apache.camel.MessageisFault() will be send back in the response as a JMS header with the key link JmsConstantsJMS_TRANSFER_FAULT. If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean). You may want to enable this when using Camel components that support faults such as SOAP based such as cxf or spring-ws.
        useMessageIDAsCorrelationID:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether JMSMessageID should always be used as JMSCorrelationID for InOut messages.
        waitForProvisionCorrelationToBeUpdatedCounter:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "50"
          description: Number of times to wait for provisional correlation id to be updated to the actual correlation id when doing request/reply over JMS and when the option useMessageIDAsCorrelationID is enabled.
        waitForProvisionCorrelationToBeUpdatedThreadSleepingTime:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Interval in millis to sleep each time while waiting for provisional correlation id to be updated.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
        transacted:
          kind: parameter
          group: transaction
          label: transaction
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to use transacted mode
        lazyCreateTransactionManager:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true Camel will create a JmsTransactionManager if there is no transactionManager injected when option transacted=true.
        transactionManager:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: object
          javaType: org.springframework.transaction.PlatformTransactionManager
          deprecated: false
          secret: false
          description: The Spring transaction manager to use.
        transactionName:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the transaction to use.
        transactionTimeout:
          kind: parameter
          group: transaction (advanced)
          label: transaction,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: The timeout value of the transaction (in seconds) if using transacted mode.
    documentation.adoc: |
      ifdef::env-github[]
      :icon-smile: :smiley:
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      ifndef::env-github[]
      :icons: font
      :icon-smile: icon:smile-o[fw,role=yellow]
      endif::[]


      [[JMS-JMSComponent]]
      JMS Component
      ~~~~~~~~~~~~~

      [TIP]
      ====
      *Using ActiveMQ*

      If you are using http://activemq.apache.org/[Apache ActiveMQ], you
      should prefer the link:activemq.html[ActiveMQ] component as it has been
      optimized for link:activemq.html[ActiveMQ]. All of the options and
      samples on this page are also valid for the link:activemq.html[ActiveMQ]
      component.
      ====

      [NOTE]
      ====
      *Transacted and caching*

      See section _Transactions and Cache Levels_ below if you are using
      transactions with link:jms.html[JMS] as it can impact performance.
      ====

      [NOTE]
      ====
      *Request/Reply over JMS*

      Make sure to read the section _Request-reply over JMS_ further below on
      this page for important notes about request/reply, as Camel offers a
      number of options to configure for performance, and clustered
      environments.
      ====

      This??component allows messages to be sent to (or consumed from) a
      http://java.sun.com/products/jms/[JMS] Queue or Topic. It uses Spring's
      JMS support for declarative transactions, including Spring's
      `JmsTemplate` for sending and a `MessageListenerContainer` for
      consuming.

      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-jms</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[JMS-URIformat]]
      URI format
      ^^^^^^^^^^

      --------------------------------------------
      jms:[queue:|topic:]destinationName[?options]
      --------------------------------------------

      Where `destinationName` is a JMS queue or topic name. By default, the
      `destinationName` is interpreted as a queue name. For example, to
      connect to the queue, `FOO.BAR` use:

      -----------
      jms:FOO.BAR
      -----------

      You can include the optional `queue:` prefix, if you prefer:

      -----------------
      jms:queue:FOO.BAR
      -----------------

      To connect to a topic, you _must_ include the `topic:` prefix. For
      example, to +
       connect to the topic, `Stocks.Prices`, use:

      -----------------------
      jms:topic:Stocks.Prices
      -----------------------

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

      [[JMS-Notes]]
      Notes
      ^^^^^

      [[JMS-UsingActiveMQ]]
      Using ActiveMQ
      ++++++++++++++

      The JMS component reuses Spring 2's `JmsTemplate` for sending messages.
      This is not ideal for use in a non-J2EE container and typically requires
      some caching in the JMS provider to avoid
      http://activemq.apache.org/jmstemplate-gotchas.html[poor performance].

      If you intend to use http://activemq.apache.org/[Apache ActiveMQ] as
      your Message Broker - which is a good choice as ActiveMQ rocks {icon-smile},
      then we recommend that you either:

      * Use the link:activemq.html[ActiveMQ] component, which is already
      optimized to use ActiveMQ efficiently
      * Use the `PoolingConnectionFactory` in ActiveMQ.

      [[JMS-TransactionsandCacheLevels]]
      Transactions and Cache Levels
      +++++++++++++++++++++++++++++

      If you are consuming messages and using transactions
      (`transacted=true`) then the default settings for cache level can impact
      performance.

      If you are using XA transactions then you cannot cache as it can cause
      the XA transaction to not work properly.

      If you are *not* using XA, then you should consider caching as it speeds
      up performance, such as setting `cacheLevelName=CACHE_CONSUMER`.

      Through Camel 2.7.x, the default setting for `cacheLevelName` is
      `CACHE_CONSUMER`. You will need to explicitly set
      `cacheLevelName=CACHE_NONE`.

      In Camel 2.8 onwards, the default setting for `cacheLevelName` is
      `CACHE_AUTO`. This default auto detects the mode and sets the cache
      level accordingly to:

      * `CACHE_CONSUMER` if `transacted=false`
      * `CACHE_NONE` if `transacted=true`

      So you can say the default setting is conservative. Consider using
      `cacheLevelName=CACHE_CONSUMER` if you are using non-XA transactions.

      [[JMS-DurableSubscriptions]]
      Durable Subscriptions
      +++++++++++++++++++++

      If you wish to use durable topic subscriptions, you need to specify both
      `clientId` and `durableSubscriptionName`. The value of the `clientId`
      must be unique and can only be used by a single JMS connection instance
      in your entire network. You may prefer to use
      http://activemq.apache.org/virtual-destinations.html[Virtual Topics]
      instead to avoid this limitation. More background on durable messaging
      http://activemq.apache.org/how-do-durable-queues-and-topics-work.html[here].

      [[JMS-MessageHeaderMapping]]
      Message Header Mapping
      ++++++++++++++++++++++

      When using message headers, the JMS specification states that header
      names must be valid Java identifiers. So try to name your headers to be
      valid Java identifiers. One benefit of doing this is that you can then
      use your headers inside a JMS Selector (whose SQL92 syntax mandates Java
      identifier syntax for headers).

      A simple strategy for mapping header names is used by default. The
      strategy is to replace any dots and hyphens in the header name as shown
      below and to reverse the replacement when the header name is restored
      from a JMS message sent over the wire. What does this mean? No more
      losing method names to invoke on a bean component, no more losing the
      filename header for the File Component, and so on.

      The current header name strategy for accepting header names in Camel is
      as follows:

      * Dots are replaced by `_DOT_` and the replacement is reversed when
      Camel consume the message
      * Hyphen is replaced by `_HYPHEN_` and the replacement is reversed when
      Camel consumes the message

      [[JMS-Options]]
      Options
      ^^^^^^^

      You can configure many different properties on the JMS endpoint which
      map to properties on the
      http://camel.apache.org/maven/current/camel-jms/apidocs/org/apache/camel/component/jms/JmsConfiguration.html[JMSConfiguration
      POJO].

      [WARNING]
      ====
      *Mapping to Spring JMS*

      Many of these properties map to properties on Spring JMS, which Camel
      uses for sending and receiving messages. So you can get more information
      about these properties by consulting the relevant Spring documentation.
      ====

      [[JMS-Componentoptions]]
      Component options
      +++++++++++++++++








      // component options: START
      The JMS component supports 74 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | JmsConfiguration | To use a shared JMS configuration
      | acceptMessagesWhileStopping | boolean | Specifies whether the consumer accept messages while it is stopping. You may consider enabling this option if you start and stop JMS routes at runtime while there are still messages enqued on the queue. If this option is false and you stop the JMS route then messages may be rejected and the JMS broker would have to attempt redeliveries which yet again may be rejected and eventually the message may be moved at a dead letter queue on the JMS broker. To avoid this its recommended to enable this option.
      | allowReplyManagerQuickStop | boolean | Whether the DefaultMessageListenerContainer used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed flag to quick stop in case JmsConfigurationisAcceptMessagesWhileStopping is enabled and org.apache.camel.CamelContext is currently being stopped. This quick stop ability is enabled by default in the regular JMS consumers but to enable for reply managers you must enable this flag.
      | acknowledgementMode | int | The JMS acknowledgement mode defined as an Integer. Allows you to set vendor-specific extensions to the acknowledgment mode. For the regular modes it is preferable to use the acknowledgementModeName instead.
      | eagerLoadingOfProperties | boolean | Enables eager loading of JMS properties as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties
      | acknowledgementModeName | String | The JMS acknowledgement name which is one of: SESSION_TRANSACTED CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE
      | autoStartup | boolean | Specifies whether the consumer container should auto-startup.
      | cacheLevel | int | Sets the cache level by ID for the underlying JMS resources. See cacheLevelName option for more details.
      | cacheLevelName | String | Sets the cache level by name for the underlying JMS resources. Possible values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION. The default setting is CACHE_AUTO. See the Spring documentation and Transactions Cache Levels for more information.
      | replyToCacheLevelName | String | Sets the cache level by name for the reply consumer when doing request/reply over JMS. This option only applies when using fixed reply queues (not temporary). Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName. And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers such as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE to work. Note: If using temporary queues then CACHE_NONE is not allowed and you must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.
      | clientId | String | Sets the JMS client ID to use. Note that this value if specified must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead.
      | concurrentConsumers | int | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
      | replyToConcurrentConsumers | int | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
      | connectionFactory | ConnectionFactory | Sets the default connection factory to be use
      | username | String | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
      | password | String | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
      | deliveryPersistent | boolean | Specifies whether persistent delivery is used by default.
      | deliveryMode | Integer | Specifies the delivery mode to be used. Possible values are Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2.
      | durableSubscriptionName | String | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.
      | exceptionListener | ExceptionListener | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
      | errorHandler | ErrorHandler | Specifies a org.springframework.util.ErrorHandler to be invoked in case of any uncaught exceptions thrown while processing a Message. By default these exceptions will be logged at the WARN level if no errorHandler has been configured. You can configure logging level and whether stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes it much easier to configure than having to code a custom errorHandler.
      | errorHandlerLoggingLevel | LoggingLevel | Allows to configure the default errorHandler logging level for logging uncaught exceptions.
      | errorHandlerLogStackTrace | boolean | Allows to control whether stacktraces should be logged or not by the default errorHandler.
      | explicitQosEnabled | boolean | Set if the deliveryMode priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option which operates at message granularity reading QoS properties exclusively from the Camel In message headers.
      | exposeListenerSession | boolean | Specifies whether the listener session should be exposed when consuming messages.
      | idleTaskExecutionLimit | int | Specifies the limit for idle executions of a receive task not having received any message within its execution. If this limit is reached the task will shut down and leave receiving to other executing tasks (in the case of dynamic scheduling; see the maxConcurrentConsumers setting). There is additional doc available from Spring.
      | idleConsumerLimit | int | Specify the limit for the number of consumers that are allowed to be idle at any given time.
      | maxConcurrentConsumers | int | Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
      | replyToMaxConcurrentConsumers | int | Specifies the maximum number of concurrent consumers when using request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
      | replyOnTimeoutToMaxConcurrentConsumers | int | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS.
      | maxMessagesPerTask | int | The number of messages per task. -1 is unlimited. If you use a range for concurrent consumers (eg min max) then this option can be used to set a value to eg 100 to control how fast the consumers will shrink when less work is required.
      | messageConverter | MessageConverter | To use a custom Spring org.springframework.jms.support.converter.MessageConverter so you can be in control how to map to/from a javax.jms.Message.
      | mapJmsMessage | boolean | Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
      | messageIdEnabled | boolean | When sending specifies whether message IDs should be added.
      | messageTimestampEnabled | boolean | Specifies whether timestamps should be enabled by default on sending messages.
      | alwaysCopyMessage | boolean | If true Camel will always make a JMS message copy of the message when it is passed to the producer for sending. Copying the message is needed in some situations such as when a replyToDestinationSelectorName is set (incidentally Camel will set the alwaysCopyMessage option to true if a replyToDestinationSelectorName is set)
      | useMessageIDAsCorrelationID | boolean | Specifies whether JMSMessageID should always be used as JMSCorrelationID for InOut messages.
      | priority | int | Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect.
      | pubSubNoLocal | boolean | Specifies whether to inhibit the delivery of messages published by its own connection.
      | receiveTimeout | long | The timeout for receiving messages (in milliseconds).
      | recoveryInterval | long | Specifies the interval between recovery attempts i.e. when a connection is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.
      | subscriptionDurable | boolean | Deprecated: Enabled by default if you specify a durableSubscriptionName and a clientId.
      | taskExecutor | TaskExecutor | Allows you to specify a custom task executor for consuming messages.
      | timeToLive | long | When sending messages specifies the time-to-live of the message (in milliseconds).
      | transacted | boolean | Specifies whether to use transacted mode
      | lazyCreateTransactionManager | boolean | If true Camel will create a JmsTransactionManager if there is no transactionManager injected when option transacted=true.
      | transactionManager | PlatformTransactionManager | The Spring transaction manager to use.
      | transactionName | String | The name of the transaction to use.
      | transactionTimeout | int | The timeout value of the transaction (in seconds) if using transacted mode.
      | testConnectionOnStartup | boolean | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well.
      | asyncStartListener | boolean | Whether to startup the JmsConsumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
      | asyncStopListener | boolean | Whether to stop the JmsConsumer message listener asynchronously when stopping a route.
      | forceSendOriginalMessage | boolean | When using mapJmsMessage=false Camel will create a new JMS message to send to a new JMS destination if you touch the headers (get or set) during the route. Set this option to true to force Camel to send the original JMS message that was received.
      | requestTimeout | long | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option.
      | requestTimeoutCheckerInterval | long | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs then you can lower this interval to check more frequently. The timeout is determined by the option requestTimeout.
      | transferExchange | boolean | You can transfer the exchange over the wire instead of just the body and headers. The following fields are transferred: In body Out body Fault body In headers Out headers Fault headers exchange properties exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. You must enable this option on both the producer and consumer side so Camel knows the payloads is an Exchange and not a regular payload.
      | transferException | boolean | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled this option takes precedence. The caught exception is required to be serializable. The original Exception on the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException when returned to the producer.
      | transferFault | boolean | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer side then the fault flag on link org.apache.camel.MessageisFault() will be send back in the response as a JMS header with the key link JmsConstantsJMS_TRANSFER_FAULT. If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean). You may want to enable this when using Camel components that support faults such as SOAP based such as cxf or spring-ws.
      | jmsOperations | JmsOperations | Allows you to use your own implementation of the org.springframework.jms.core.JmsOperations interface. Camel uses JmsTemplate as default. Can be used for testing purpose but not used much as stated in the spring API docs.
      | destinationResolver | DestinationResolver | A pluggable org.springframework.jms.support.destination.DestinationResolver that allows you to use your own resolver (for example to lookup the real destination in a JNDI registry).
      | replyToType | ReplyToType | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary Shared or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details and especially the notes about the implications if running in a clustered environment and the fact that Shared reply queues has lower performance than its alternatives Temporary and Exclusive.
      | preserveMessageQos | boolean | Set to true if you want to send message using the QoS settings specified on the message instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only some of them. If not provided Camel will fall back to use the values from the endpoint instead. So when using this option the headers override the values from the endpoint. The explicitQosEnabled option by contrast will only use options set on the endpoint and not values from the message header.
      | asyncConsumer | boolean | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100 strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transacted has been enabled then asyncConsumer=true does not run asynchronously as transaction must be executed synchronously (Camel 3.0 may support async transactions).
      | allowNullBody | boolean | Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
      | includeSentJMSMessageID | boolean | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination.
      | includeAllJMSXProperties | boolean | Whether to include all JMSXxxx properties when mapping from JMS to Camel Message. Setting this to true will include properties such as JMSXAppID and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then this option does not apply.
      | defaultTaskExecutorType | DefaultTaskExecutorType | Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer for both consumer endpoints and the ReplyTo consumer of producer endpoints. Possible values: SimpleAsync (uses Spring's SimpleAsyncTaskExecutor) or ThreadPool (uses Spring's ThreadPoolTaskExecutor with optimal values - cached threadpool-like). If not set it defaults to the previous behaviour which uses a cached thread pool for consumer endpoints and SimpleAsync for reply consumers. The use of ThreadPool is recommended to reduce thread trash in elastic configurations with dynamically increasing and decreasing concurrent consumers.
      | jmsKeyFormatStrategy | JmsKeyFormatStrategy | Pluggable strategy for encoding and decoding JMS keys so they can be compliant with the JMS specification. Camel provides two implementations out of the box: default and passthrough. The default strategy will safely marshal dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the notation.
      | applicationContext | ApplicationContext | Sets the Spring ApplicationContext to use
      | queueBrowseStrategy | QueueBrowseStrategy | To use a custom QueueBrowseStrategy when browsing queues
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | messageCreatedStrategy | MessageCreatedStrategy | To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
      | waitForProvisionCorrelationToBeUpdatedCounter | int | Number of times to wait for provisional correlation id to be updated to the actual correlation id when doing request/reply over JMS and when the option useMessageIDAsCorrelationID is enabled.
      | waitForProvisionCorrelationToBeUpdatedThreadSleepingTime | long | Interval in millis to sleep each time while waiting for provisional correlation id to be updated.
      |=======================================================================
      {% endraw %}
      // component options: END








      [[JMS-Endpointoptions]]
      Endpoint options
      ++++++++++++++++









      // endpoint options: START
      The JMS component supports 83 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | destinationType | common | queue | String | The kind of destination to use
      | destinationName | common |  | String | *Required* Name of the queue or topic to use as destination
      | clientId | common |  | String | Sets the JMS client ID to use. Note that this value if specified must be unique and can only be used by a single JMS connection instance. It is typically only required for durable topic subscriptions. If using Apache ActiveMQ you may prefer to use Virtual Topics instead.
      | connectionFactory | common |  | ConnectionFactory | Sets the default connection factory to be used if a connection factory is not specified for either link setTemplateConnectionFactory(ConnectionFactory) or link setListenerConnectionFactory(ConnectionFactory)
      | disableReplyTo | common | false | boolean | If true a producer will behave like a InOnly exchange with the exception that JMSReplyTo header is sent out and not be suppressed like in the case of InOnly. Like InOnly the producer will not wait for a reply. A consumer with this flag will behave like InOnly. This feature can be used to bridge InOut requests to another queue so that a route on the other queue will send its response directly back to the original JMSReplyTo.
      | durableSubscriptionName | common |  | String | The durable subscriber name for specifying durable topic subscriptions. The clientId option must be configured as well.
      | jmsMessageType | common |  | JmsMessageType | Allows you to force the use of a specific javax.jms.Message implementation for sending JMS messages. Possible values are: Bytes Map Object Stream Text. By default Camel would determine which JMS message type to use from the In body type. This option allows you to specify it.
      | testConnectionOnStartup | common | false | boolean | Specifies whether to test the connection on startup. This ensures that when Camel starts that all the JMS consumers have a valid connection to the JMS broker. If a connection cannot be granted then Camel throws an exception on startup. This ensures that Camel is not started with failed connections. The JMS producers is tested as well.
      | acknowledgementModeName | consumer | AUTO_ACKNOWLEDGE | String | The JMS acknowledgement name which is one of: SESSION_TRANSACTED CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE
      | asyncConsumer | consumer | false | boolean | Whether the JmsConsumer processes the Exchange asynchronously. If enabled then the JmsConsumer may pickup the next message from the JMS queue while the previous message is being processed asynchronously (by the Asynchronous Routing Engine). This means that messages may be processed not 100 strictly in order. If disabled (as default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue. Note if transacted has been enabled then asyncConsumer=true does not run asynchronously as transaction must be executed synchronously (Camel 3.0 may support async transactions).
      | autoStartup | consumer | true | boolean | Specifies whether the consumer container should auto-startup.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | cacheLevelName | consumer | CACHE_AUTO | String | Sets the cache level by name for the underlying JMS resources. Possible values are: CACHE_AUTO CACHE_CONNECTION CACHE_CONSUMER CACHE_NONE and CACHE_SESSION. The default setting is CACHE_AUTO. See the Spring documentation and Transactions Cache Levels for more information.
      | concurrentConsumers | consumer | 1 | int | Specifies the default number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
      | maxConcurrentConsumers | consumer |  | int | Specifies the maximum number of concurrent consumers when consuming from JMS (not for request/reply over JMS). See also the maxMessagesPerTask option to control dynamic scaling up/down of threads. When doing request/reply over JMS then the option replyToMaxConcurrentConsumers is used to control number of concurrent consumers on the reply message listener.
      | replyTo | consumer |  | String | Provides an explicit ReplyTo destination which overrides any incoming value of Message.getJMSReplyTo().
      | replyToDeliveryPersistent | consumer | true | boolean | Specifies whether to use persistent delivery by default for replies.
      | selector | consumer |  | String | Sets the JMS selector to use
      | acceptMessagesWhileStopping | consumer (advanced) | false | boolean | Specifies whether the consumer accept messages while it is stopping. You may consider enabling this option if you start and stop JMS routes at runtime while there are still messages enqued on the queue. If this option is false and you stop the JMS route then messages may be rejected and the JMS broker would have to attempt redeliveries which yet again may be rejected and eventually the message may be moved at a dead letter queue on the JMS broker. To avoid this its recommended to enable this option.
      | allowReplyManagerQuickStop | consumer (advanced) | false | boolean | Whether the DefaultMessageListenerContainer used in the reply managers for request-reply messaging allow the DefaultMessageListenerContainer.runningAllowed flag to quick stop in case link JmsConfigurationisAcceptMessagesWhileStopping() is enabled and org.apache.camel.CamelContext is currently being stopped. This quick stop ability is enabled by default in the regular JMS consumers but to enable for reply managers you must enable this flag.
      | consumerType | consumer (advanced) | Default | ConsumerType | The consumer type to use which can be one of: Simple Default or Custom. The consumer type determines which Spring JMS listener to use. Default will use org.springframework.jms.listener.DefaultMessageListenerContainer Simple will use org.springframework.jms.listener.SimpleMessageListenerContainer. When Custom is specified the MessageListenerContainerFactory defined by the messageListenerContainerFactory option will determine what org.springframework.jms.listener.AbstractMessageListenerContainer to use.
      | defaultTaskExecutorType | consumer (advanced) |  | DefaultTaskExecutorType | Specifies what default TaskExecutor type to use in the DefaultMessageListenerContainer for both consumer endpoints and the ReplyTo consumer of producer endpoints. Possible values: SimpleAsync (uses Spring's SimpleAsyncTaskExecutor) or ThreadPool (uses Spring's ThreadPoolTaskExecutor with optimal values - cached threadpool-like). If not set it defaults to the previous behaviour which uses a cached thread pool for consumer endpoints and SimpleAsync for reply consumers. The use of ThreadPool is recommended to reduce thread trash in elastic configurations with dynamically increasing and decreasing concurrent consumers.
      | eagerLoadingOfProperties | consumer (advanced) | false | boolean | Enables eager loading of JMS properties as soon as a message is loaded which generally is inefficient as the JMS properties may not be required but sometimes can catch early any issues with the underlying JMS provider and the use of JMS properties
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | exposeListenerSession | consumer (advanced) | false | boolean | Specifies whether the listener session should be exposed when consuming messages.
      | replyToSameDestinationAllowed | consumer (advanced) | false | boolean | Whether a JMS consumer is allowed to send a reply message to the same destination that the consumer is using to consume from. This prevents an endless loop by consuming and sending back the same message to itself.
      | deliveryMode | producer |  | Integer | Specifies the delivery mode to be used. Possibles values are those defined by javax.jms.DeliveryMode. NON_PERSISTENT = 1 and PERSISTENT = 2.
      | deliveryPersistent | producer | true | boolean | Specifies whether persistent delivery is used by default.
      | explicitQosEnabled | producer | false | Boolean | Set if the deliveryMode priority or timeToLive qualities of service should be used when sending messages. This option is based on Spring's JmsTemplate. The deliveryMode priority and timeToLive options are applied to the current endpoint. This contrasts with the preserveMessageQos option which operates at message granularity reading QoS properties exclusively from the Camel In message headers.
      | preserveMessageQos | producer | false | boolean | Set to true if you want to send message using the QoS settings specified on the message instead of the QoS settings on the JMS endpoint. The following three headers are considered JMSPriority JMSDeliveryMode and JMSExpiration. You can provide all or only some of them. If not provided Camel will fall back to use the values from the endpoint instead. So when using this option the headers override the values from the endpoint. The explicitQosEnabled option by contrast will only use options set on the endpoint and not values from the message header.
      | priority | producer | 4 | int | Values greater than 1 specify the message priority when sending (where 0 is the lowest priority and 9 is the highest). The explicitQosEnabled option must also be enabled in order for this option to have any effect.
      | replyToConcurrentConsumers | producer | 1 | int | Specifies the default number of concurrent consumers when doing request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
      | replyToMaxConcurrentConsumers | producer |  | int | Specifies the maximum number of concurrent consumers when using request/reply over JMS. See also the maxMessagesPerTask option to control dynamic scaling up/down of threads.
      | replyToOnTimeoutMaxConcurrentConsumers | producer | 1 | int | Specifies the maximum number of concurrent consumers for continue routing when timeout occurred when using request/reply over JMS.
      | replyToOverride | producer |  | String | Provides an explicit ReplyTo destination in the JMS message which overrides the setting of replyTo. It is useful if you want to forward the message to a remote Queue and receive the reply message from the ReplyTo destination.
      | replyToType | producer |  | ReplyToType | Allows for explicitly specifying which kind of strategy to use for replyTo queues when doing request/reply over JMS. Possible values are: Temporary Shared or Exclusive. By default Camel will use temporary queues. However if replyTo has been configured then Shared is used by default. This option allows you to use exclusive queues instead of shared ones. See Camel JMS documentation for more details and especially the notes about the implications if running in a clustered environment and the fact that Shared reply queues has lower performance than its alternatives Temporary and Exclusive.
      | requestTimeout | producer | 20000 | long | The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds). The default is 20 seconds. You can include the header CamelJmsRequestTimeout to override this endpoint configured timeout value and thus have per message individual timeout values. See also the requestTimeoutCheckerInterval option.
      | timeToLive | producer | -1 | long | When sending messages specifies the time-to-live of the message (in milliseconds).
      | allowNullBody | producer (advanced) | true | boolean | Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
      | alwaysCopyMessage | producer (advanced) | false | boolean | If true Camel will always make a JMS message copy of the message when it is passed to the producer for sending. Copying the message is needed in some situations such as when a replyToDestinationSelectorName is set (incidentally Camel will set the alwaysCopyMessage option to true if a replyToDestinationSelectorName is set)
      | disableTimeToLive | producer (advanced) | false | boolean | Use this option to force disabling time to live. For example when you do request/reply over JMS then Camel will by default use the requestTimeout value as time to live on the message being sent. The problem is that the sender and receiver systems have to have their clocks synchronized so they are in sync. This is not always so easy to archive. So you can use disableTimeToLive=true to not set a time to live value on the sent message. Then the message will not expire on the receiver system. See below in section About time to live for more details.
      | forceSendOriginalMessage | producer (advanced) | false | boolean | When using mapJmsMessage=false Camel will create a new JMS message to send to a new JMS destination if you touch the headers (get or set) during the route. Set this option to true to force Camel to send the original JMS message that was received.
      | includeSentJMSMessageID | producer (advanced) | false | boolean | Only applicable when sending to JMS destination using InOnly (eg fire and forget). Enabling this option will enrich the Camel Exchange with the actual JMSMessageID that was used by the JMS client when the message was sent to the JMS destination.
      | replyToCacheLevelName | producer (advanced) |  | String | Sets the cache level by name for the reply consumer when doing request/reply over JMS. This option only applies when using fixed reply queues (not temporary). Camel will by default use: CACHE_CONSUMER for exclusive or shared w/ replyToSelectorName. And CACHE_SESSION for shared without replyToSelectorName. Some JMS brokers such as IBM WebSphere may require to set the replyToCacheLevelName=CACHE_NONE to work. Note: If using temporary queues then CACHE_NONE is not allowed and you must use a higher value such as CACHE_CONSUMER or CACHE_SESSION.
      | replyToDestinationSelectorName | producer (advanced) |  | String | Sets the JMS Selector using the fixed name to be used so you can filter out your own replies from the others when using a shared queue (that is if you are not using a temporary reply queue).
      | asyncStartListener | advanced | false | boolean | Whether to startup the JmsConsumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
      | asyncStopListener | advanced | false | boolean | Whether to stop the JmsConsumer message listener asynchronously when stopping a route.
      | destinationResolver | advanced |  | DestinationResolver | A pluggable org.springframework.jms.support.destination.DestinationResolver that allows you to use your own resolver (for example to lookup the real destination in a JNDI registry).
      | errorHandler | advanced |  | ErrorHandler | Specifies a org.springframework.util.ErrorHandler to be invoked in case of any uncaught exceptions thrown while processing a Message. By default these exceptions will be logged at the WARN level if no errorHandler has been configured. You can configure logging level and whether stack traces should be logged using errorHandlerLoggingLevel and errorHandlerLogStackTrace options. This makes it much easier to configure than having to code a custom errorHandler.
      | errorHandlerLoggingLevel | advanced | WARN | LoggingLevel | Allows to configure the default errorHandler logging level for logging uncaught exceptions.
      | errorHandlerLogStackTrace | advanced | true | boolean | Allows to control whether stacktraces should be logged or not by the default errorHandler.
      | exceptionListener | advanced |  | ExceptionListener | Specifies the JMS Exception Listener that is to be notified of any underlying JMS exceptions.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | idleConsumerLimit | advanced | 1 | int | Specify the limit for the number of consumers that are allowed to be idle at any given time.
      | idleTaskExecutionLimit | advanced | 1 | int | Specifies the limit for idle executions of a receive task not having received any message within its execution. If this limit is reached the task will shut down and leave receiving to other executing tasks (in the case of dynamic scheduling; see the maxConcurrentConsumers setting). There is additional doc available from Spring.
      | includeAllJMSXProperties | advanced | false | boolean | Whether to include all JMSXxxx properties when mapping from JMS to Camel Message. Setting this to true will include properties such as JMSXAppID and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then this option does not apply.
      | jmsKeyFormatStrategy | advanced |  | String | Pluggable strategy for encoding and decoding JMS keys so they can be compliant with the JMS specification. Camel provides two implementations out of the box: default and passthrough. The default strategy will safely marshal dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the notation.
      | mapJmsMessage | advanced | true | boolean | Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc.
      | maxMessagesPerTask | advanced | -1 | int | The number of messages per task. -1 is unlimited. If you use a range for concurrent consumers (eg min max) then this option can be used to set a value to eg 100 to control how fast the consumers will shrink when less work is required.
      | messageConverter | advanced |  | MessageConverter | To use a custom Spring org.springframework.jms.support.converter.MessageConverter so you can be in control how to map to/from a javax.jms.Message.
      | messageCreatedStrategy | advanced |  | MessageCreatedStrategy | To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
      | messageIdEnabled | advanced | true | boolean | When sending specifies whether message IDs should be added. This is just an hint to the JMS Broker. If the JMS provider accepts this hint these messages must have the message ID set to null; if the provider ignores the hint the message ID must be set to its normal unique value
      | messageListenerContainerFactory | advanced |  | MessageListenerContainerFactory | Registry ID of the MessageListenerContainerFactory used to determine what org.springframework.jms.listener.AbstractMessageListenerContainer to use to consume messages. Setting this will automatically set consumerType to Custom.
      | messageTimestampEnabled | advanced | true | boolean | Specifies whether timestamps should be enabled by default on sending messages. This is just an hint to the JMS Broker. If the JMS provider accepts this hint these messages must have the timestamp set to zero; if the provider ignores the hint the timestamp must be set to its normal value
      | pubSubNoLocal | advanced | false | boolean | Specifies whether to inhibit the delivery of messages published by its own connection.
      | receiveTimeout | advanced | 1000 | long | The timeout for receiving messages (in milliseconds).
      | recoveryInterval | advanced | 5000 | long | Specifies the interval between recovery attempts i.e. when a connection is being refreshed in milliseconds. The default is 5000 ms that is 5 seconds.
      | requestTimeoutCheckerInterval | advanced | 1000 | long | Configures how often Camel should check for timed out Exchanges when doing request/reply over JMS. By default Camel checks once per second. But if you must react faster when a timeout occurs then you can lower this interval to check more frequently. The timeout is determined by the option requestTimeout.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | transferException | advanced | false | boolean | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed on the consumer side then the caused Exception will be send back in response as a javax.jms.ObjectMessage. If the client is Camel the returned Exception is rethrown. This allows you to use Camel JMS as a bridge in your routing - for example using persistent queues to enable robust routing. Notice that if you also have transferExchange enabled this option takes precedence. The caught exception is required to be serializable. The original Exception on the consumer side can be wrapped in an outer exception such as org.apache.camel.RuntimeCamelException when returned to the producer.
      | transferExchange | advanced | false | boolean | You can transfer the exchange over the wire instead of just the body and headers. The following fields are transferred: In body Out body Fault body In headers Out headers Fault headers exchange properties exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level. You must enable this option on both the producer and consumer side so Camel knows the payloads is an Exchange and not a regular payload.
      | transferFault | advanced | false | boolean | If enabled and you are using Request Reply messaging (InOut) and an Exchange failed with a SOAP fault (not exception) on the consumer side then the fault flag on link org.apache.camel.MessageisFault() will be send back in the response as a JMS header with the key link JmsConstantsJMS_TRANSFER_FAULT. If the client is Camel the returned fault flag will be set on the link org.apache.camel.MessagesetFault(boolean). You may want to enable this when using Camel components that support faults such as SOAP based such as cxf or spring-ws.
      | useMessageIDAsCorrelationID | advanced | false | boolean | Specifies whether JMSMessageID should always be used as JMSCorrelationID for InOut messages.
      | waitForProvisionCorrelationToBeUpdatedCounter | advanced | 50 | int | Number of times to wait for provisional correlation id to be updated to the actual correlation id when doing request/reply over JMS and when the option useMessageIDAsCorrelationID is enabled.
      | waitForProvisionCorrelationToBeUpdatedThreadSleepingTime | advanced | 100 | long | Interval in millis to sleep each time while waiting for provisional correlation id to be updated.
      | password | security |  | String | Password to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
      | username | security |  | String | Username to use with the ConnectionFactory. You can also configure username/password directly on the ConnectionFactory.
      | transacted | transaction | false | boolean | Specifies whether to use transacted mode
      | lazyCreateTransactionManager | transaction (advanced) | true | boolean | If true Camel will create a JmsTransactionManager if there is no transactionManager injected when option transacted=true.
      | transactionManager | transaction (advanced) |  | PlatformTransactionManager | The Spring transaction manager to use.
      | transactionName | transaction (advanced) |  | String | The name of the transaction to use.
      | transactionTimeout | transaction (advanced) | -1 | int | The timeout value of the transaction (in seconds) if using transacted mode.
      |=======================================================================
      {% endraw %}
      // endpoint options: END









      [[JMS-MessageMappingbetweenJMSandCamel]]
      Message Mapping between JMS and Camel
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Camel automatically maps messages between `javax.jms.Message` and
      `org.apache.camel.Message`.

      When sending a JMS message, Camel converts the message body to the
      following JMS message types:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Body Type |JMS Message |Comment
      |`String` |`javax.jms.TextMessage` |??

      |`org.w3c.dom.Node` |`javax.jms.TextMessage` |The DOM will be converted
      to `String`.

      |`Map` |`javax.jms.MapMessage` |??

      |`java.io.Serializable` |`javax.jms.ObjectMessage` |??

      |`byte[]` |`javax.jms.BytesMessage` |??

      |`java.io.File` |`javax.jms.BytesMessage` |??

      |`java.io.Reader` |`javax.jms.BytesMessage` |??

      |`java.io.InputStream` |`javax.jms.BytesMessage` |??

      |`java.nio.ByteBuffer` |`javax.jms.BytesMessage` |??
      |=======================================================================

      When receiving a JMS message, Camel converts the JMS message to the
      following body type:

      [width="100%",cols="50%,50%",options="header",]
      |=============================================
      |JMS Message |Body Type
      |`javax.jms.TextMessage` |`String`
      |`javax.jms.BytesMessage` |`byte[]`
      |`javax.jms.MapMessage` |`Map<String, Object>`
      |`javax.jms.ObjectMessage` |`Object`
      |=============================================

      [[JMS-Disablingauto-mappingofJMSmessages]]
      Disabling auto-mapping of JMS messages
      ++++++++++++++++++++++++++++++++++++++

      You can use the `mapJmsMessage` option to disable the auto-mapping
      above. If disabled, Camel will not try to map the received JMS message,
      but instead uses it directly as the payload. This allows you to avoid
      the overhead of mapping and let Camel just pass through the JMS message.
      For instance, it even allows you to route `javax.jms.ObjectMessage` JMS
      messages with classes you do *not* have on the classpath.

      [[JMS-UsingacustomMessageConverter]]
      Using a custom MessageConverter
      +++++++++++++++++++++++++++++++

      You can use the `messageConverter` option to do the mapping yourself in
      a Spring `org.springframework.jms.support.converter.MessageConverter`
      class.

      For example, in the route below we use a custom message converter when
      sending a message to the JMS order queue:

      [source,java]
      ----------------------------------------------------------------------------------------
      from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
      ----------------------------------------------------------------------------------------

      You can also use a custom message converter when consuming from a JMS
      destination.

      [[JMS-Controllingthemappingstrategyselected]]
      Controlling the mapping strategy selected
      +++++++++++++++++++++++++++++++++++++++++

      You can use the `jmsMessageType` option on the endpoint URL to force a
      specific message type for all messages.

      In the route below, we poll files from a folder and send them as
      `javax.jms.TextMessage` as we have forced the JMS producer endpoint to
      use text messages:

      [source,java]
      -----------------------------------------------------------------------
      from("file://inbox/order").to("jms:queue:order?jmsMessageType=Text");
      -----------------------------------------------------------------------

      You can also specify the message type to use for each message by setting
      the header with the key `CamelJmsMessageType`. For example:

      [source,java]
      ---------------------------------------------------------------------------------------------------------
      from("file://inbox/order").setHeader("CamelJmsMessageType", JmsMessageType.Text).to("jms:queue:order");
      ---------------------------------------------------------------------------------------------------------

      The possible values are defined in the `enum` class,
      `org.apache.camel.jms.JmsMessageType`.

      [[JMS-Messageformatwhensending]]
      Message format when sending
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The exchange that is sent over the JMS wire must conform to the
      http://java.sun.com/j2ee/1.4/docs/api/javax/jms/Message.html[JMS Message
      spec].

      For the `exchange.in.header` the following rules apply for the header
      **keys**:

      * Keys starting with `JMS` or `JMSX` are reserved.
      * `exchange.in.headers` keys must be literals and all be valid Java
      identifiers (do not use dots in the key name).
      * Camel replaces dots & hyphens and the reverse when when consuming JMS
      messages: +
       `.` is replaced by `_DOT_` and the reverse replacement when Camel
      consumes the message. +
       `-` is replaced by `_HYPHEN_` and the reverse replacement when Camel
      consumes the message.
      * See also the option `jmsKeyFormatStrategy`, which allows use of your
      own custom strategy for formatting keys.

      For the `exchange.in.header`, the following rules apply for the header
      **values**:

      * The values must be primitives or their counter objects (such as
      `Integer`, `Long`, `Character`). The types, `String`, `CharSequence`,
      `Date`, `BigDecimal` and `BigInteger` are all converted to their
      `toString()` representation. All other types are dropped.

      Camel will log with category `org.apache.camel.component.jms.JmsBinding`
      at *DEBUG* level if it drops a given header value. For example:

      ----------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-07-09 06:43:04,046 [main           ] DEBUG JmsBinding
        - Ignoring non primitive header: order of class: org.apache.camel.component.jms.issues.DummyOrder with value: DummyOrder{orderId=333, itemId=4444, quantity=2}
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[JMS-Messageformatwhenreceiving]]
      Message format when receiving
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Camel adds the following properties to the `Exchange` when it receives a
      message:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Property |Type |Description
      |`org.apache.camel.jms.replyDestination` |`javax.jms.Destination` |The
      reply destination.
      |=======================================================================

      Camel adds the following JMS properties to the In message headers when
      it receives a JMS message:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description
      |`JMSCorrelationID` |`String` |The JMS correlation ID.

      |`JMSDeliveryMode` |`int` |The JMS delivery mode.

      |`JMSDestination` |`javax.jms.Destination` |The JMS destination.

      |`JMSExpiration` |`long` |The JMS expiration.

      |`JMSMessageID` |`String` |The JMS unique message ID.

      |`JMSPriority` |`int` |The JMS priority (with 0 as the lowest priority
      and 9 as the highest).

      |`JMSRedelivered` |`boolean` |Is the JMS message redelivered.

      |`JMSReplyTo` |`javax.jms.Destination` |The JMS reply-to destination.

      |`JMSTimestamp` |`long` |The JMS timestamp.

      |`JMSType` |`String` |The JMS type.

      |`JMSXGroupID` |`String` |The JMS group ID.
      |=======================================================================

      As all the above information is standard JMS you can check the
      http://java.sun.com/javaee/5/docs/api/javax/jms/Message.html[JMS
      documentation] for further details.

      [[JMS-AboutusingCameltosendandreceivemessagesandJMSReplyTo]]
      About using Camel to send and receive messages and JMSReplyTo
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The JMS component is complex and you have to pay close attention to how
      it works in some cases. So this is a short summary of some of the
      areas/pitfalls to look for.

      When Camel sends a message using its `JMSProducer`, it checks the
      following conditions:

      * The message exchange pattern,
      * Whether a `JMSReplyTo` was set in the endpoint or in the message
      headers,
      * Whether any of the following options have been set on the JMS
      endpoint: `disableReplyTo`, `preserveMessageQos`, `explicitQosEnabled`.

      All this can be a tad complex to understand and configure to support
      your use case.

      [[JMS-JmsProducer]]
      JmsProducer
      +++++++++++

      The `JmsProducer` behaves as follows, depending on configuration:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Exchange Pattern |Other options |Description
      |_InOut_ |- |Camel will expect a reply, set a temporary `JMSReplyTo`,
      and after sending the message, it will start to listen for the reply
      message on the temporary queue.

      |_InOut_ |`JMSReplyTo` is set |Camel will expect a reply and, after
      sending the message, it will start to listen for the reply message on
      the specified `JMSReplyTo` queue.

      |_InOnly_ |- |Camel will send the message and *not* expect a reply.

      |_InOnly_ |`JMSReplyTo` is set |By default, Camel discards the
      `JMSReplyTo` destination and clears the `JMSReplyTo` header before
      sending the message. Camel then sends the message and does *not* expect
      a reply. Camel logs this in the log at `WARN` level (changed to `DEBUG`
      level from *Camel 2.6* onwards. You can use `preserveMessageQuo=true` to
      instruct Camel to keep the `JMSReplyTo`. In all situations the
      `JmsProducer` does *not* expect any reply and thus continue after
      sending the message.
      |=======================================================================

      [[JMS-JmsConsumer]]
      JmsConsumer
      +++++++++++

      The `JmsConsumer` behaves as follows, depending on configuration:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Exchange Pattern |Other options |Description
      |_InOut_ |- |Camel will send the reply back to the `JMSReplyTo` queue.

      |_InOnly_ |- |Camel will not send a reply back, as the pattern is
      __InOnly__.

      |- |`disableReplyTo=true` |This option suppresses replies.
      |=======================================================================

      So pay attention to the message exchange pattern set on your exchanges.

      If you send a message to a JMS destination in the middle of your route
      you can specify the exchange pattern to use, see more at
      link:request-reply.html[Request Reply]. +
       This is useful if you want to send an `InOnly` message to a JMS topic:

      [source,java]
      ------------------------------------------------------
      from("activemq:queue:in")
         .to("bean:validateOrder")
         .to(ExchangePattern.InOnly, "activemq:topic:order")
         .to("bean:handleOrder");
      ------------------------------------------------------

      [[JMS-Reuseendpointandsendtodifferentdestinationscomputedatruntime]]
      Reuse endpoint and send to different destinations computed at runtime
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If you need to send messages to a lot of different JMS destinations, it
      makes sense to reuse a JMS endpoint and specify the real destination in
      a message header. This allows Camel to reuse the same endpoint, but send
      to different destinations. This greatly reduces the number of endpoints
      created and economizes on memory and thread resources.

      You can specify the destination in the following headers:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=====================================================================
      |Header |Type |Description
      |`CamelJmsDestination` |`javax.jms.Destination` |A destination object.
      |`CamelJmsDestinationName` |`String` |The destination name.
      |=====================================================================

      For example, the following route shows how you can compute a destination
      at run time and use it to override the destination appearing in the JMS
      URL:

      [source,java]
      --------------------------------
      from("file://inbox")
        .to("bean:computeDestination")
        .to("activemq:queue:dummy");
      --------------------------------

      The queue name, `dummy`, is just a placeholder. It must be provided as
      part of the JMS endpoint URL, but it will be ignored in this example.

      In the `computeDestination` bean, specify the real destination by
      setting the `CamelJmsDestinationName` header as follows:

      [source,java]
      -------------------------------------------------------------------------
      public void setJmsHeader(Exchange exchange) {
         String id = ....
         exchange.getIn().setHeader("CamelJmsDestinationName", "order:" + id");
      }
      -------------------------------------------------------------------------

      Then Camel will read this header and use it as the destination instead
      of the one configured on the endpoint. So, in this example Camel sends
      the message to `activemq:queue:order:2`, assuming the `id` value was 2.

      If both the `CamelJmsDestination` and the `CamelJmsDestinationName`
      headers are set, `CamelJmsDestination` takes priority. Keep in mind that
      the JMS producer removes both `CamelJmsDestination` and
      `CamelJmsDestinationName` headers from the exchange and do not propagate
      them to the created JMS message??in order to avoid the accidental loops
      in the routes (in scenarios when the message will be forwarded to the
      another JMS endpoint).

      [[JMS-ConfiguringdifferentJMSproviders]]
      Configuring different JMS providers
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can configure your JMS provider in link:spring.html[Spring] XML as
      follows:

      Basically, you can configure as many JMS component instances as you wish
      and give them *a unique name using the* `id` **attribute**. The
      preceding example configures an `activemq` component. You could do the
      same to configure MQSeries, TibCo, BEA, Sonic and so on.

      Once you have a named JMS component, you can then refer to endpoints
      within that component using URIs. For example for the component name,
      `activemq`, you can then refer to destinations using the URI format,
      `activemq:[queue:|topic:]destinationName`. You can use the same approach
      for all other JMS providers.

      This works by the SpringCamelContext lazily fetching components from the
      spring context for the scheme name you use for
      link:endpoint.html[Endpoint] link:uris.html[URIs] and having the
      link:component.html[Component] resolve the endpoint URIs.

      [[JMS-UsingJNDItofindtheConnectionFactory]]
      Using JNDI to find the ConnectionFactory
      ++++++++++++++++++++++++++++++++++++++++

      If you are using a J2EE container, you might need to look up JNDI to
      find the JMS `ConnectionFactory` rather than use the usual `<bean>`
      mechanism in Spring. You can do this using Spring's factory bean or the
      new Spring XML namespace. For example:

      [source,xml]
      -----------------------------------------------------------------------------
      <bean id="weblogic" class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory" ref="myConnectionFactory"/>
      </bean>

      <jee:jndi-lookup id="myConnectionFactory" jndi-name="jms/connectionFactory"/>
      -----------------------------------------------------------------------------

      See
      http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/xsd-config.html#xsd-config-body-schemas-jee[The
      jee schema] in the Spring reference documentation for more details about
      JNDI lookup.

      [[JMS-ConcurrentConsuming]]
      Concurrent Consuming
      ^^^^^^^^^^^^^^^^^^^^

      A common requirement with JMS is to consume messages concurrently in
      multiple threads in order to make an application more responsive. You
      can set the `concurrentConsumers` option to specify the number of
      threads servicing the JMS endpoint, as follows:

      [source,java]
      ---------------------------------------------
      from("jms:SomeQueue?concurrentConsumers=20").
        bean(MyClass.class);
      ---------------------------------------------

      You can configure this option in one of the following ways:

      * On the `JmsComponent`,
      * On the endpoint URI or,
      * By invoking `setConcurrentConsumers()` directly on the `JmsEndpoint`.

      [[JMS-ConcurrentConsumingwithasyncconsumer]]
      Concurrent Consuming with async consumer
      ++++++++++++++++++++++++++++++++++++++++

      Notice that each concurrent consumer will only pickup the next available
      message from the JMS broker, when the current message has been fully
      processed. You can set the option `asyncConsumer=true` to let the
      consumer pickup the next message from the JMS queue, while the previous
      message is being processed asynchronously (by the
      link:asynchronous-routing-engine.html[Asynchronous Routing Engine]). See
      more details in the table on top of the page about the `asyncConsumer`
      option.

      [source,java]
      ----------------------------------------------------------------
      from("jms:SomeQueue?concurrentConsumers=20&asyncConsumer=true").
        bean(MyClass.class);
      ----------------------------------------------------------------

      [[JMS-Request-replyoverJMS]]
      Request-reply over JMS
      ^^^^^^^^^^^^^^^^^^^^^^

      Camel supports link:request-reply.html[Request Reply] over JMS. In
      essence the MEP of the Exchange should be `InOut` when you send a
      message to a JMS queue.

      Camel offers a number of options to configure request/reply over JMS
      that influence performance and clustered environments. The table below
      summaries the options.

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Option |Performance |Cluster |Description
      |`Temporary` |Fast |Yes |A temporary queue is used as reply queue, and
      automatic created by Camel. To use this do *not* specify a replyTo queue
      name. And you can optionally configure `replyToType=Temporary` to make
      it stand out that temporary queues are in use.

      |`Shared` |Slow |Yes |A shared persistent queue is used as reply queue.
      The queue must be created beforehand, although some brokers can create
      them on the fly such as Apache ActiveMQ. To use this you must specify
      the replyTo queue name. And you can optionally configure
      `replyToType=Shared` to make it stand out that shared queues are in use.
      A shared queue can be used in a clustered environment with multiple
      nodes running this Camel application at the same time. All using the
      same shared reply queue. This is possible because JMS Message selectors
      are used to correlate expected reply messages; this impacts performance
      though. JMS Message selectors is slower, and therefore not as fast as
      `Temporary` or `Exclusive` queues. See further below how to tweak this
      for better performance.

      |`Exclusive` |Fast |No (*Yes) |An exclusive persistent queue is used as
      reply queue. The queue must be created beforehand, although some brokers
      can create them on the fly such as Apache ActiveMQ. To use this you must
      specify the replyTo queue name. And you *must* configure
      `replyToType=Exclusive` to instruct Camel to use exclusive queues, as
      `Shared` is used by default, if a `replyTo` queue name was configured.
      When using exclusive reply queues, then JMS Message selectors are *not*
      in use, and therefore other applications must not use this queue as
      well. An exclusive queue *cannot* be used in a clustered environment
      with multiple nodes running this Camel application at the same time; as
      we do not have control if the reply queue comes back to the same node
      that sent the request message; that is why shared queues use JMS Message
      selectors to make sure of this. *Though* if you configure each Exclusive
      reply queue with an unique name per node, then you can run this in a
      clustered environment. As then the reply message will be sent back to
      that queue for the given node, that awaits the reply message.

      |`concurrentConsumers` |Fast |Yes |*Camel 2.10.3:* Allows to process
      reply messages concurrently using concurrent message listeners in use.
      You can specify a range using the `concurrentConsumers` and
      `maxConcurrentConsumers` options. *Notice:* That using `Shared` reply
      queues may not work as well with concurrent listeners, so use this
      option with care.

      |`maxConcurrentConsumers` |Fast |Yes |*Camel 2.10.3:* Allows to process
      reply messages concurrently using concurrent message listeners in use.
      You can specify a range using the `concurrentConsumers` and
      `maxConcurrentConsumers` options. *Notice:* That using `Shared` reply
      queues may not work as well with concurrent listeners, so use this
      option with care.
      |=======================================================================

      The `JmsProducer` detects the `InOut` and provides a `JMSReplyTo` header
      with the reply destination to be used. By default Camel uses a temporary
      queue, but you can use the `replyTo` option on the endpoint to specify a
      fixed reply queue (see more below about fixed reply queue).

      Camel will automatic setup a consumer which listen on the reply queue,
      so you should *not* do anything. +
       This consumer is a Spring `DefaultMessageListenerContainer` which
      listen for replies. However it's fixed to 1 concurrent consumer. +
       That means replies will be processed in sequence as there are only 1
      thread to process the replies. If you want to process replies faster,
      then we need to use concurrency. But *not* using the
      `concurrentConsumer` option. We should use the `threads` from the Camel
      DSL instead, as shown in the route below:

      Instead of using threads, then use concurrentConsumers option if using
      Camel 2.10.3 or better. See further below.

      [source,java]
      ---------------------------------
      from(xxx)
      .inOut().to("activemq:queue:foo")
      .threads(5)
      .to(yyy)
      .to(zzz);
      ---------------------------------

      In this route we instruct Camel to route replies
      link:async.html[asynchronously] using a thread pool with 5 threads.

      From *Camel 2.10.3* onwards you can now configure the listener to use
      concurrent threads using the `concurrentConsumers` and
      `maxConcurrentConsumers` options. This allows you to easier configure
      this in Camel as shown below:

      [source,java]
      -------------------------------------------------------
      from(xxx)
      .inOut().to("activemq:queue:foo?concurrentConsumers=5")
      .to(yyy)
      .to(zzz);
      -------------------------------------------------------

      [[JMS-Request-replyoverJMSandusingasharedfixedreplyqueue]]
      Request-reply over JMS and using a shared fixed reply queue
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      If you use a fixed reply queue when doing
      link:request-reply.html[Request Reply] over JMS as shown in the example
      below, then pay attention.

      [source,java]
      ---------------------------------------------
      from(xxx)
      .inOut().to("activemq:queue:foo?replyTo=bar")
      .to(yyy)
      ---------------------------------------------

      In this example the fixed reply queue named "bar" is used. By default
      Camel assumes the queue is shared when using fixed reply queues, and
      therefore it uses a `JMSSelector` to only pickup the expected reply
      messages (eg based on the `JMSCorrelationID`). See next section for
      exclusive fixed reply queues. That means its not as fast as temporary
      queues. You can speedup how often Camel will pull for reply messages
      using the `receiveTimeout` option. By default its 1000 millis. So to
      make it faster you can set it to 250 millis to pull 4 times per second
      as shown:

      [source,java]
      ----------------------------------------------------------------
      from(xxx)
      .inOut().to("activemq:queue:foo?replyTo=bar&receiveTimeout=250")
      .to(yyy)
      ----------------------------------------------------------------

      Notice this will cause the Camel to send pull requests to the message
      broker more frequent, and thus require more network traffic. +
       It is generally recommended to use temporary queues if possible.

      [[JMS-Request-replyoverJMSandusinganexclusivefixedreplyqueue]]
      Request-reply over JMS and using an exclusive fixed reply queue
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      *Available as of Camel 2.9*

      In the previous example, Camel would anticipate the fixed reply queue
      named "bar" was shared, and thus it uses a `JMSSelector` to only consume
      reply messages which it expects. However there is a drawback doing this
      as JMS selectos is slower. Also the consumer on the reply queue is
      slower to update with new JMS selector ids. In fact it only updates when
      the `receiveTimeout` option times out, which by default is 1 second. So
      in theory the reply messages could take up till about 1 sec to be
      detected. On the other hand if the fixed reply queue is exclusive to the
      Camel reply consumer, then we can avoid using the JMS selectors, and
      thus be more performant. In fact as fast as using temporary queues. So
      in *Camel 2.9* onwards we introduced the `ReplyToType` option which you
      can configure to `Exclusive` +
       to tell Camel that the reply queue is exclusive as shown in the example
      below:

      [source,java]
      -------------------------------------------------------------------
      from(xxx)
      .inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
      .to(yyy)
      -------------------------------------------------------------------

      Mind that the queue must be exclusive to each and every endpoint. So if
      you have two routes, then they each need an unique reply queue as shown
      in the next example:

      [source,java]
      -----------------------------------------------------------------------------
      from(xxx)
      .inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
      .to(yyy)

      from(aaa)
      .inOut().to("activemq:queue:order?replyTo=order.reply&replyToType=Exclusive")
      .to(bbb)
      -----------------------------------------------------------------------------

      The same applies if you run in a clustered environment. Then each node
      in the cluster must use an unique reply queue name. As otherwise each
      node in the cluster may pickup messages which was intended as a reply on
      another node. For clustered environments its recommended to use shared
      reply queues instead.

      [[JMS-Synchronizingclocksbetweensendersandreceivers]]
      Synchronizing clocks between senders and receivers
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When doing messaging between systems, its desirable that the systems
      have synchronized clocks. For example when sending a link:jms.html[JMS]
      message, then you can set a time to live value on the message. Then the
      receiver can inspect this value, and determine if the message is already
      expired, and thus drop the message instead of consume and process it.
      However this requires that both sender and receiver have synchronized
      clocks. If you are using http://activemq.apache.org/[ActiveMQ] then you
      can use the http://activemq.apache.org/timestampplugin.html[timestamp
      plugin] to synchronize clocks.

      [[JMS-Abouttimetolive]]
      About time to live
      ^^^^^^^^^^^^^^^^^^

      Read first above about synchronized clocks.

      When you do request/reply (InOut) over link:jms.html[JMS] with Camel
      then Camel uses a timeout on the sender side, which is default 20
      seconds from the `requestTimeout` option. You can control this by
      setting a higher/lower value. However the time to live value is still
      set on the link:jms.html[JMS] message being send. So that requires the
      clocks to be synchronized between the systems. If they are not, then you
      may want to disable the time to live value being set. This is now
      possible using the `disableTimeToLive` option from *Camel 2.8* onwards.
      So if you set this option to `disableTimeToLive=true`, then Camel does
      *not* set any time to live value when sending link:jms.html[JMS]
      messages. *But* the request timeout is still active. So for example if
      you do request/reply over link:jms.html[JMS] and have disabled time to
      live, then Camel will still use a timeout by 20 seconds (the
      `requestTimeout` option). That option can of course also be configured.
      So the two options `requestTimeout` and `disableTimeToLive` gives you
      fine grained control when doing request/reply.

      From *Camel 2.13/2.12.3* onwards you can provide a header in the message
      to override and use as the request timeout value instead of the endpoint
      configured value. For example:

      [source,java]
      --------------------------------------------------------
         from("direct:someWhere")
           .to("jms:queue:foo?replyTo=bar&requestTimeout=30s")
           .to("bean:processReply");
      --------------------------------------------------------

      In the route above we have a endpoint configured `requestTimeout` of 30
      seconds. So Camel will wait up till 30 seconds for that reply message to
      come back on the bar queue. If no reply message is received then a
      `org.apache.camel.ExchangeTimedOutException` is set on the
      link:exchange.html[Exchange] and Camel continues routing the message,
      which would then fail due the exception, and Camel's error handler
      reacts.

      If you want to use a per message timeout value, you can set the header
      with key
      `org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT` which
      has constant value `"CamelJmsRequestTimeout"` with a timeout value as
      long type.

      For example we can use a bean to compute the timeout value per
      individual message, such as calling the `"whatIsTheTimeout"` method on
      the service bean as shown below:

      [source,java]
      ----------------------------------------------------------------------------------------
         from("direct:someWhere")
           .setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout"))
           .to("jms:queue:foo?replyTo=bar&requestTimeout=30s")
           .to("bean:processReply");
      ----------------------------------------------------------------------------------------

      When you do fire and forget (InOut) over link:jms.html[JMS] with Camel
      then Camel by default does *not* set any time to live value on the
      message. You can configure a value by using the `timeToLive` option. For
      example to indicate a 5 sec., you set `timeToLive=5000`. The option
      `disableTimeToLive` can be used to force disabling the time to live,
      also for InOnly messaging. The `requestTimeout` option is not being used
      for InOnly messaging.

      [[JMS-EnablingTransactedConsumption]]
      Enabling Transacted Consumption
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      A common requirement is to consume from a queue in a transaction and
      then process the message using the Camel route. To do this, just ensure
      that you set the following properties on the component/endpoint:

      * `transacted` = true
      * `transactionManager` = a _Transsaction Manager_ - typically the
      `JmsTransactionManager`

      See the link:transactional-client.html[Transactional Client] EIP pattern
      for further details.

      Transactions and [Request Reply] over JMS

      When using link:request-reply.html[Request Reply] over JMS you cannot
      use a single transaction; JMS will not send any messages until a commit
      is performed, so the server side won't receive anything at all until the
      transaction commits. Therefore to use link:request-reply.html[Request
      Reply] you must commit a transaction after sending the request and then
      use a separate transaction for receiving the response.

      To address this issue the JMS component uses different properties to
      specify transaction use for oneway messaging and request reply
      messaging:

      The `transacted` property applies *only* to the InOnly message
      link:exchange-pattern.html[Exchange Pattern] (MEP).

      The `transactedInOut` property applies to the
      InOut(link:request-reply.html[Request Reply]) message
      link:exchange-pattern.html[Exchange Pattern] (MEP).

      If you want to use transactions for link:request-reply.html[Request
      Reply](InOut MEP), you *must* set `transactedInOut=true`.

      *Available as of Camel 2.10*

      You can leverage the
      http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/jms/listener/AbstractPollingMessageListenerContainer.html#setSessionTransacted(boolean)[DMLC
      transacted session API] using the following properties on
      component/endpoint:

      * `transacted` = true
      * `lazyCreateTransactionManager` = false

      The benefit of doing so is that the cacheLevel setting will be honored
      when using local transactions without a configured TransactionManager.
      When a TransactionManager is configured, no caching happens at DMLC
      level and its necessary to rely on a pooled connection factory. For more
      details about this kind of setup see
      http://tmielke.blogspot.com/2012/03/camel-jms-with-transactions-lessons.html[here]
      and
      http://forum.springsource.org/showthread.php?123631-JMS-DMLC-not-caching%20connection-when-using-TX-despite-cacheLevel-CACHE_CONSUMER&p=403530&posted=1#post403530[here].

      [[JMS-UsingJMSReplyToforlatereplies]]
      Using JMSReplyTo for late replies
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When using Camel as a JMS listener, it sets an Exchange property with
      the value of the ReplyTo `javax.jms.Destination` object, having the key
      `ReplyTo`. You can obtain this `Destination` as follows:

      [source,java]
      -----------------------------------------------------------------------------------------------------------------
      Destination replyDestination = exchange.getIn().getHeader(JmsConstants.JMS_REPLY_DESTINATION, Destination.class);
      -----------------------------------------------------------------------------------------------------------------

      And then later use it to send a reply using regular JMS or Camel.

      [source,java]
      ----------------------------------------------------------------------------------------
          // we need to pass in the JMS component, and in this sample we use ActiveMQ
          JmsEndpoint endpoint = JmsEndpoint.newInstance(replyDestination, activeMQComponent);
          // now we have the endpoint we can use regular Camel API to send a message to it
          template.sendBody(endpoint, "Here is the late reply.");
      ----------------------------------------------------------------------------------------

      A different solution to sending a reply is to provide the
      `replyDestination` object in the same Exchange property when sending.
      Camel will then pick up this property and use it for the real
      destination. The endpoint URI must include a dummy destination, however.
      For example:

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------------
          // we pretend to send it to some non existing dummy queue
          template.send("activemq:queue:dummy, new Processor() {
              public void process(Exchange exchange) throws Exception {
                  // and here we override the destination with the ReplyTo destination object so the message is sent to there instead of dummy
                  exchange.getIn().setHeader(JmsConstants.JMS_DESTINATION, replyDestination);
                  exchange.getIn().setBody("Here is the late reply.");
              }
          }
      ----------------------------------------------------------------------------------------------------------------------------------------

      [[JMS-Usingarequesttimeout]]
      Using a request timeout
      ^^^^^^^^^^^^^^^^^^^^^^^

      In the sample below we send a link:request-reply.html[Request Reply]
      style message link:exchange.html[Exchange] (we use the `requestBody`
      method = `InOut`) to the slow queue for further processing in Camel and
      we wait for a return reply:

      [[JMS-Samples]]
      Samples
      ^^^^^^^

      JMS is used in many examples for other components as well. But we
      provide a few samples below to get started.

      [[JMS-ReceivingfromJMS]]
      Receiving from JMS
      ++++++++++++++++++

      In the following sample we configure a route that receives JMS messages
      and routes the message to a POJO:

      [source,java]
      --------------------------------
         from("jms:queue:foo").
           to("bean:myBusinessLogic");
      --------------------------------

      You can of course use any of the EIP patterns so the route can be
      context based. For example, here's how to filter an order topic for the
      big spenders:

      [source,java]
      ----------------------------------------------
      from("jms:topic:OrdersTopic").
        filter().method("myBean", "isGoldCustomer").
          to("jms:queue:BigSpendersQueue");
      ----------------------------------------------

      [[JMS-SendingtoJMS]]
      Sending to JMS
      ++++++++++++++

      In the sample below we poll a file folder and send the file content to a
      JMS topic. As we want the content of the file as a `TextMessage` instead
      of a `BytesMessage`, we need to convert the body to a `String`:

      [source,java]
      ------------------------------
      from("file://orders").
        convertBodyTo(String.class).
        to("jms:topic:OrdersTopic");
      ------------------------------

      [[JMS-UsingAnnotations]]
      Using link:bean-integration.html[Annotations]
      +++++++++++++++++++++++++++++++++++++++++++++

      Camel also has annotations so you can use link:pojo-consuming.html[POJO
      Consuming] and link:pojo-producing.html[POJO Producing].

      [[JMS-SpringDSLsample]]
      Spring DSL sample
      +++++++++++++++++

      The preceding examples use the Java DSL. Camel also supports Spring XML
      DSL. Here is the big spender sample using Spring DSL:

      [source,xml]
      ---------------------------------------------------
      <route>
        <from uri="jms:topic:OrdersTopic"/>
        <filter>
          <method bean="myBean" method="isGoldCustomer"/>
          <to uri="jms:queue:BigSpendersQueue"/>
        </filter>
      </route>
      ---------------------------------------------------

      [[JMS-Othersamples]]
      Other samples
      +++++++++++++

      JMS appears in many of the examples for other components and EIP
      patterns, as well in this Camel documentation. So feel free to browse
      the documentation. If you have time, check out the this tutorial that
      uses JMS but focuses on how well Spring Remoting and Camel works
      together link:tutorial-jmsremoting.html[Tutorial-JmsRemoting].

      [[JMS-UsingJMSasaDeadLetterQueuestoringExchange]]
      Using JMS as a Dead Letter Queue storing Exchange
      +++++++++++++++++++++++++++++++++++++++++++++++++

      Normally, when using link:jms.html[JMS] as the transport, it only
      transfers the body and headers as the payload. If you want to use
      link:jms.html[JMS] with a link:dead-letter-channel.html[Dead Letter
      Channel], using a JMS queue as the Dead Letter Queue, then normally the
      caused Exception is not stored in the JMS message. You can, however, use
      the `transferExchange` option on the JMS dead letter queue to instruct
      Camel to store the entire link:exchange.html[Exchange] in the queue as a
      `javax.jms.ObjectMessage` that holds a
      `org.apache.camel.impl.DefaultExchangeHolder`. This allows you to
      consume from the Dead Letter Queue and retrieve the caused exception
      from the Exchange property with the key `Exchange.EXCEPTION_CAUGHT`. The
      demo below illustrates this:

      [source,java]
      ------------------------------------------------------------------------
      // setup error handler to use JMS as queue and store the entire Exchange
      errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));
      ------------------------------------------------------------------------

      Then you can consume from the JMS queue and analyze the problem:

      [source,java]
      -----------------------------------------------------------------------------------
      from("jms:queue:dead").to("bean:myErrorAnalyzer");

      // and in our bean
      String body = exchange.getIn().getBody();
      Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
      // the cause message is
      String problem = cause.getMessage();
      -----------------------------------------------------------------------------------

      [[JMS-UsingJMSasaDeadLetterChannelstoringerroronly]]
      Using JMS as a Dead Letter Channel storing error only
      +++++++++++++++++++++++++++++++++++++++++++++++++++++

      You can use JMS to store the cause error message or to store a custom
      body, which you can initialize yourself. The following example uses the
      link:message-translator.html[Message Translator] EIP to do a
      transformation on the failed exchange before it is moved to the
      link:jms.html[JMS] dead letter queue:

      [source,java]
      --------------------------------------------------------------------------------------------------
      // we sent it to a seda dead queue first
      errorHandler(deadLetterChannel("seda:dead"));

      // and on the seda dead queue we can do the custom transformation before its sent to the JMS queue
      from("seda:dead").transform(exceptionMessage()).to("jms:queue:dead");
      --------------------------------------------------------------------------------------------------

      Here we only store the original cause error message in the transform.
      You can, however, use any link:expression.html[Expression] to send
      whatever you like. For example, you can invoke a method on a Bean or use
      a custom processor.

      [[JMS-SendinganInOnlymessageandkeepingtheJMSReplyToheader]]
      Sending an InOnly message and keeping the JMSReplyTo header
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When sending to a link:jms.html[JMS] destination using *camel-jms* the
      producer will use the MEP to detect if its _InOnly_ or _InOut_ messaging.
      However there can be times where you want to send an _InOnly_ message but
      keeping the `JMSReplyTo` header. To do so you have to instruct Camel to
      keep it, otherwise the `JMSReplyTo` header will be dropped.

      For example to send an _InOnly_ message to the foo queue, but with a
      `JMSReplyTo` with bar queue you can do as follows:

      [source,java]
      -------------------------------------------------------------------------------------
              template.send("activemq:queue:foo?preserveMessageQos=true", new Processor() {
                  public void process(Exchange exchange) throws Exception {
                      exchange.getIn().setBody("World");
                      exchange.getIn().setHeader("JMSReplyTo", "bar");
                  }
              });
      -------------------------------------------------------------------------------------

      Notice we use `preserveMessageQos=true` to instruct Camel to keep the
      `JMSReplyTo` header.

      [[JMS-SettingJMSprovideroptionsonthedestination]]
      Setting JMS provider options on the destination
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Some JMS providers, like IBM's WebSphere MQ need options to be set on
      the JMS destination. For example, you may need to specify the
      `targetClient` option. Since `targetClient` is a WebSphere MQ option and not
      a Camel URI option, you need to set that on the JMS destination name
      like so:

      [source,java]
      -----------------------------------------------------------------------------------
      // ...
      .setHeader("CamelJmsDestinationName", constant("queue:///MY_QUEUE?targetClient=1"))
      .to("wmq:queue:MY_QUEUE?useMessageIDAsCorrelationID=true");
      -----------------------------------------------------------------------------------

      Some versions of WMQ won't accept this option on the destination name
      and you will get an exception like:

      [source]
      ----------------------------------------------------------------------------------------------------------------------------------
      com.ibm.msg.client.jms.DetailedJMSException: JMSCC0005: The specified
      value 'MY_QUEUE?targetClient=1' is not allowed for
      'XMSC_DESTINATION_NAME'
      ----------------------------------------------------------------------------------------------------------------------------------

      A workaround is to use a custom DestinationResolver:

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      JmsComponent wmq = new JmsComponent(connectionFactory);

      wmq.setDestinationResolver(new DestinationResolver() {
          public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) throws JMSException {
              MQQueueSession wmqSession = (MQQueueSession) session;
              return wmqSession.createQueue("queue:///" + destinationName + "?targetClient=1");
          }
      });
      ----------------------------------------------------------------------------------------------------------------------------------

      [[JMS-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:transactional-client.html[Transactional Client]
      * link:bean-integration.html[Bean Integration]
      * link:tutorial-jmsremoting.html[Tutorial-JmsRemoting]
      * http://activemq.apache.org/jmstemplate-gotchas.html[JMSTemplate
      gotchas]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jmx
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jmx
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jmx
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jmx
          spec:
            containers:
            - image: fabric8/connector-jmx:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jmx
        syntax: jmx:serverURL
        title: JMX
        description: The jmx component allows to receive JMX notifications.
        label: monitoring
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.jmx.JMXComponent
        groupId: org.apache.camel
        artifactId: camel-jmx
        version: 2.18.1
      componentProperties: {}
      properties:
        serverURL:
          kind: path
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: server url comes from the remaining endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        format:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          enum:
          - xml
          - raw
          deprecated: false
          secret: false
          defaultValue: xml
          description: 'URI Property: Format for the message body. Either xml or raw. If
            xml the notification is serialized to xml. If raw then the raw java object is
            set as the body.'
        granularityPeriod:
          kind: parameter
          group: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: 'URI Property: monitor types only The frequency to poll the bean
            to check the monitor.'
        monitorType:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          enum:
          - counter
          - gauge
          - string
          deprecated: false
          secret: false
          description: 'URI Property: monitor types only The type of monitor to create.
            One of string gauge counter.'
        objectDomain:
          kind: parameter
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'URI Property: The domain for the mbean you''re connecting to'
        objectName:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'URI Property: The name key for the mbean you''re connecting to.
            This value is mutually exclusive with the object properties that get passed.'
        observedAttribute:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'URI Property: monitor types only The attribute to observe for the
            monitor bean.'
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        handback:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.lang.Object
          deprecated: false
          secret: false
          description: 'URI Property: Value to handback to the listener when a notification
            is received. This value will be put in the message header with the key jmx.handback'
        notificationFilter:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.management.NotificationFilter
          deprecated: false
          secret: false
          description: 'URI Property: Reference to a bean that implements the NotificationFilter.'
        objectProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          prefix: key.
          multiValue: true
          deprecated: false
          secret: false
          description: 'URI Property: properties for the object name. These values will
            be used if the objectName param is not set'
        reconnectDelay:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: 'URI Property: The number of seconds to wait before attempting to
            retry establishment of the initial connection or attempt to reconnect a lost
            connection'
        reconnectOnConnectionFailure:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'URI Property: If true the consumer will attempt to reconnect to
            the JMX server when any connection failure occurs. The consumer will attempt
            to re-establish the JMX connection every ''x'' seconds until the connection
            is made-- where ''x'' is the configured reconnectionDelay'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        testConnectionOnStartup:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'URI Property: If true the consumer will throw an exception if unable
            to establish the JMX connection upon startup. If false the consumer will attempt
            to establish the JMX connection every ''x'' seconds until the connection is
            made -- where ''x'' is the configured reconnectionDelay'
        initThreshold:
          kind: parameter
          group: counter
          label: counter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'URI Property: counter monitor only Initial threshold for the monitor.
            The value must exceed this before notifications are fired.'
        modulus:
          kind: parameter
          group: counter
          label: counter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'URI Property: counter monitor only The value at which the counter
            is reset to zero'
        offset:
          kind: parameter
          group: counter
          label: counter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'URI Property: counter monitor only The amount to increment the threshold
            after it''s been exceeded.'
        differenceMode:
          kind: parameter
          group: gauge
          label: counter,gauge
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'URI Property: counter gauge monitor only If true then the value
            reported in the notification is the difference from the threshold as opposed
            to the value itself.'
        notifyHigh:
          kind: parameter
          group: gauge
          label: gauge
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'URI Property: gauge monitor only If true the gauge will fire a notification
            when the high threshold is exceeded'
        notifyLow:
          kind: parameter
          group: gauge
          label: gauge
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'URI Property: gauge monitor only If true the gauge will fire a notification
            when the low threshold is exceeded'
        thresholdHigh:
          kind: parameter
          group: gauge
          label: gauge
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          description: 'URI Property: gauge monitor only Value for the gauge''s high threshold'
        thresholdLow:
          kind: parameter
          group: gauge
          label: gauge
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          description: 'URI Property: gauge monitor only Value for the gauge''s low threshold'
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: 'URI Property: credentials for making a remote connection'
        user:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: 'URI Property: credentials for making a remote connection'
        notifyDiffer:
          kind: parameter
          group: string
          label: string
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'URI Property: string monitor only If true the string monitor will
            fire a notification when the string attribute differs from the string to compare.'
        notifyMatch:
          kind: parameter
          group: string
          label: string
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'URI Property: string monitor only If true the string monitor will
            fire a notification when the string attribute matches the string to compare.'
        stringToCompare:
          kind: parameter
          group: string
          label: string
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'URI Property: string monitor only Value for the string monitor''s
            string to compare.'
    documentation.adoc: |
      ifdef::env-github[]
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      [[CamelJMX-CamelJMX]]
      Camel JMX
      ~~~~~~~~~

      Apache Camel has extensive support for JMX to allow you to monitor and
      control the Camel managed objects with a JMX client.

      Camel also provides a link:jmx.html[JMX] component that allows you to
      subscribe to MBean notifications. This page is about how to manage and
      monitor Camel using JMX.


      [[CamelJMX-Options]]
      Options
      ^^^^^^^

      // component options: START
      The JMX component has no options.
      // component options: END

      // endpoint options: START
      The JMX component supports 30 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | serverURL | consumer |  | String | server url comes from the remaining endpoint
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | format | consumer | xml | String | URI Property: Format for the message body. Either xml or raw. If xml the notification is serialized to xml. If raw then the raw java object is set as the body.
      | granularityPeriod | consumer | 10000 | long | URI Property: monitor types only The frequency to poll the bean to check the monitor.
      | monitorType | consumer |  | String | URI Property: monitor types only The type of monitor to create. One of string gauge counter.
      | objectDomain | consumer |  | String | *Required* URI Property: The domain for the mbean you're connecting to
      | objectName | consumer |  | String | URI Property: The name key for the mbean you're connecting to. This value is mutually exclusive with the object properties that get passed.
      | observedAttribute | consumer |  | String | URI Property: monitor types only The attribute to observe for the monitor bean.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | handback | advanced |  | Object | URI Property: Value to handback to the listener when a notification is received. This value will be put in the message header with the key jmx.handback
      | notificationFilter | advanced |  | NotificationFilter | URI Property: Reference to a bean that implements the NotificationFilter.
      | objectProperties | advanced |  | Map | URI Property: properties for the object name. These values will be used if the objectName param is not set
      | reconnectDelay | advanced | 10 | int | URI Property: The number of seconds to wait before attempting to retry establishment of the initial connection or attempt to reconnect a lost connection
      | reconnectOnConnectionFailure | advanced | false | boolean | URI Property: If true the consumer will attempt to reconnect to the JMX server when any connection failure occurs. The consumer will attempt to re-establish the JMX connection every 'x' seconds until the connection is made-- where 'x' is the configured reconnectionDelay
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | testConnectionOnStartup | advanced | true | boolean | URI Property: If true the consumer will throw an exception if unable to establish the JMX connection upon startup. If false the consumer will attempt to establish the JMX connection every 'x' seconds until the connection is made -- where 'x' is the configured reconnectionDelay
      | initThreshold | counter |  | int | URI Property: counter monitor only Initial threshold for the monitor. The value must exceed this before notifications are fired.
      | modulus | counter |  | int | URI Property: counter monitor only The value at which the counter is reset to zero
      | offset | counter |  | int | URI Property: counter monitor only The amount to increment the threshold after it's been exceeded.
      | differenceMode | gauge | false | boolean | URI Property: counter gauge monitor only If true then the value reported in the notification is the difference from the threshold as opposed to the value itself.
      | notifyHigh | gauge | false | boolean | URI Property: gauge monitor only If true the gauge will fire a notification when the high threshold is exceeded
      | notifyLow | gauge | false | boolean | URI Property: gauge monitor only If true the gauge will fire a notification when the low threshold is exceeded
      | thresholdHigh | gauge |  | Double | URI Property: gauge monitor only Value for the gauge's high threshold
      | thresholdLow | gauge |  | Double | URI Property: gauge monitor only Value for the gauge's low threshold
      | password | security |  | String | URI Property: credentials for making a remote connection
      | user | security |  | String | URI Property: credentials for making a remote connection
      | notifyDiffer | string | false | boolean | URI Property: string monitor only If true the string monitor will fire a notification when the string attribute differs from the string to compare.
      | notifyMatch | string | false | boolean | URI Property: string monitor only If true the string monitor will fire a notification when the string attribute matches the string to compare.
      | stringToCompare | string |  | String | URI Property: string monitor only Value for the string monitor's string to compare.
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[CamelJMX-ActivatingJMXinCamel]]
      Activating JMX in Camel
      ^^^^^^^^^^^^^^^^^^^^^^^

      [NOTE]
      ====
      *Spring JAR dependency, required for Camel 2.8 or older*

      `spring-context.jar`, `spring-aop.jar`, `spring-beans.jar`, and
      `spring-core.jar` are needed on the classpath by Camel to be able to use
      JMX instrumentation. If these .jars are not on the classpath, Camel will
      fallback to non JMX mode. This situation is logged at `WARN` level using
      logger name `org.apache.camel.impl.DefaultCamelContext`.

      From *Camel 2.9* onwards, the Spring JARs are *no* longer required to
      run Camel in JMX mode.
      ====

      [[CamelJMX-UsingJMXtomanageApacheCamel]]
      Using JMX to manage Apache Camel
      ++++++++++++++++++++++++++++++++

      By default, JMX instrumentation agent is enabled in Camel, which means
      that Camel runtime creates and registers MBean management objects with a
      `MBeanServer` instance in the VM. This allows Camel users to instantly
      obtain insights into how Camel routes perform down to the individual
      processor level.

      The supported types of management objects are
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/management/mbean/ManagedEndpoint.html[endpoint],
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/management/mbean/ManagedRoute.html[route],
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/management/mbean/ManagedService.html[service],
      and
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/management/mbean/ManagedProcessor.html[processor].
      Some of these management objects also expose lifecycle operations in
      addition to performance counter attributes.

      The
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/management/DefaultManagementNamingStrategy.html[`DefaultManagementNamingStrategy`]
      is the default naming strategy which builds object names used for MBean
      registration. By default, `org.apache.camel` is the domain name for all
      object names created by `CamelNamingStrategy`. The domain name of the
      MBean object can be configured by Java VM system property:

      [source]
      ----
      -Dorg.apache.camel.jmx.mbeanObjectDomainName=your.domain.name
      ----

      Or, by adding a `jmxAgent` element inside the camelContext element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" mbeanObjectDomainName="your.domain.name"/>
          ...
      </camelContext>
      ----

      Spring configuration always takes precedence over system properties when
      they both present. It is true for all JMX related configurations.

      [[CamelJMX-DisablingJMXinstrumentationagentinCamel]]
      Disabling JMX instrumentation agent in Camel
      ++++++++++++++++++++++++++++++++++++++++++++

      You can disable JMX instrumentation agent by setting the Java VM system
      property as follow:

      [source]
      ----
      -Dorg.apache.camel.jmx.disabled=true
      ----

      The property value is treated as `boolean`.

      Or, by adding a `jmxAgent` element inside the `camelContext` element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" disabled="true"/>
          ...
      </camelContext>
      ----

      Or in *Camel 2.1* its a bit easier (not having to use JVM system
      property) if using pure Java as you can disable it as follows:

      [source,java]
      ----
      CamelContext camel = new DefaultCamelContext();
      camel.disableJMX();
      ----

      [[CamelJMX-LocatingaMBeanServerintheJavaVM]]
      Locating a MBeanServer in the Java VM
      +++++++++++++++++++++++++++++++++++++

      Each CamelContext can have an instance of
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/spi/InstrumentationAgent.html[`InstrumentationAgent`]
      wrapped inside the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/management/InstrumentationLifecycleStrategy.html[`InstrumentationLifecycleStrategy`].
      The InstrumentationAgent is the object that interfaces with a
      http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServer.html[`MBeanServer`]
      to register / unregister Camel MBeans. Multiple
      CamelContexts / InstrumentationAgents can / should share a `MBeanServer`. By
      default, Camel runtime picks the first `MBeanServer` returned by
      http://java.sun.com/j2se/1.5.0/docs/api/javax/management/MBeanServerFactory.html#findMBeanServer(java.lang.String)[MBeanServerFactory.findMBeanServer
      method] that matches the default domain name of `org.apache.camel`.

      You may want to change the default domain name to match the
      `MBeanServer` instance that you are already using in your application.
      Especially, if your `MBeanServer` is attached to a JMX connector server,
      you will not need to create a connector server in Camel.

      You can configure the matching default domain name via system property.

      [source]
      ----
      -Dorg.apache.camel.jmx.mbeanServerDefaultDomain=<your.domain.name>
      ----

      Or, by adding a `jmxAgent` element inside the camelContext element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" mbeanServerDefaultDomain="your.domain.name"/>
          ...
      </camelContext>
      ----

      If no matching `MBeanServer` can be found, a new one is created and the
      new `MBeanServer`'s default domain name is set according to the default
      and configuration as mentioned above.

      It is also possible to use the
      http://java.sun.com/j2se/1.5.0/docs/api/java/lang/management/ManagementFactory.html#getPlatformMBeanServer()[`PlatformMBeanServer`]
      when it is desirable to manage JVM MBeans by setting the system
      property. The `MBeanServer` default domain name configuration is ignored
      as it is not applicable.

      [CAUTION]
      Starting in next release (1.5), the default
      value of `usePlatformMBeanServer` will be changed to `true`. You can set
      the property to `false` to disable using platform `MBeanServer`.

      [source]
      ----
      -Dorg.apache.camel.jmx.usePlatformMBeanServer=True
      ----

      Or, by adding a `jmxAgent` element inside the `camelContext` element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" usePlatformMBeanServer="true"/>
          ...
      </camelContext>
      ----

      [[CamelJMX-CreatingJMXRMIConnectorServer]]
      Creating JMX RMI Connector Server
      +++++++++++++++++++++++++++++++++

      JMX connector server enables MBeans to be remotely managed by a JMX
      client such as JConsole; Camel JMX RMI connector server can be
      optionally turned on by setting system property and the `MBeanServer`
      used by Camel is attached to that connector server.

      [source]
      ----
      -Dorg.apache.camel.jmx.createRmiConnector=True
      ----

      Or, by adding a `jmxAgent` element inside the `camelContext` element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" createConnector="true"/>
          ...
      </camelContext>
      ----

      [[CamelJMX-JMXServiceURL]]
      JMX Service URL
      +++++++++++++++

      The default JMX Service URL has the format:

      [source]
      ----
      service:jmx:rmi:///jndi/rmi://localhost:<registryPort>/<serviceUrlPath>
      ----

      `registryPort` is the RMI registry port and the default value is
      `1099`.

      You can set the RMI registry port by system property.

      [source]
      ----
      -Dorg.apache.camel.jmx.rmiConnector.registryPort=<port number>
      ----

      Or, by adding a `jmxAgent` element inside the `camelContext` element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" createConnector="true" registryPort="port number"/>
          ...
      </camelContext>
      ----

      `serviceUrlPath` is the path name in the URL and the default value is
      `/jmxrmi/camel`.

      You can set the service URL path by system property.

      [source]
      ----
      -Dorg.apache.camel.jmx.serviceUrlPath=<path>
      ----

      [TIP]
      ====
      *Setting ManagementAgent settings in Java*

      In *Camel 2.4* onwards you can also set the various options on the
      `ManagementAgent`:

      [source,java]
      ----
      context.getManagementStrategy().getManagementAgent().setServiceUrlPath("/foo/bar");
      context.getManagementStrategy().getManagementAgent().setRegistryPort(2113);
      context.getManagementStrategy().getManagementAgent().setCreateConnector(true);
      ----

      ====

      Or, by adding a `jmxAgent` element inside the camelContext element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" createConnector="true" serviceUrlPath="path"/>
          ...
      </camelContext>
      ----

      By default, RMI server object listens on a dynamically generated port,
      which can be a problem for connections established through a firewall.
      In such situations, RMI connection port can be explicitly set by the
      system property.

      [source]
      ----
      -Dorg.apache.camel.jmx.rmiConnector.connectorPort=<port number>
      ----

      Or, by adding a `jmxAgent` element inside the `camelContext` element in
      Spring configuration:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
        <jmxAgent id="agent" createConnector="true" connectorPort="port number"/>
          ...
      </camelContext>
      ----

      When the connector port option is set, the JMX service URL will become:

      [source]
      ----
      service:jmx:rmi://localhost:<connectorPort>/jndi/rmi://localhost:<registryPort>/<serviceUrlPath>
      ----

      [[CamelJMX-TheSystemPropertiesforCamelJMXsupport]]
      The System Properties for Camel JMX support
      +++++++++++++++++++++++++++++++++++++++++++

      [width="100%",cols="1m,1,3",options="header",]
      |=======================================================================
      |Property Name |value |Description
      |org.apache.camel.jmx |`true` or `false` |if is `true`, it will enable jmx
      feature in Camel
      |=======================================================================

      See more system properties in this section below: _jmxAgent Properties
      Reference_.

      [[CamelJMX-HowtouseauthenticationwithJMX]]
      How to use authentication with JMX
      ++++++++++++++++++++++++++++++++++

      JMX in the JDK have features for authentication and also for using
      secure connections over SSL. You have to refer to the SUN documentation
      how to use this:

      * http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html
      * http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html

      [[CamelJMX-JMXinsideanApplicationServer]]
      JMX inside an Application Server
      ++++++++++++++++++++++++++++++++

      [[CamelJMX-Tomcat6]]
      Tomcat 6
      ++++++++

      See http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html[this page]
      for details about enabling JMX in Tomcat.

      In short, modify your catalina.sh (or catalina.bat in Windows) file to
      set the following options...

      [source]
      ----
       set CATALINA_OPTS=-Dcom.sun.management.jmxremote \
          -Dcom.sun.management.jmxremote.port=1099 \
          -Dcom.sun.management.jmxremote.ssl=false \
          -Dcom.sun.management.jmxremote.authenticate=false
      ----

      [[CamelJMX-JBossAS4]]
      JBoss AS 4
      ++++++++++

      By default JBoss creates its own `MBeanServer`. To allow Camel to expose
      to the same server follow these steps:

      . Tell Camel to use the Platform `MBeanServer` (This defaults to true
      in Camel 1.5)

      [source,xml]
      ----
      <camel:camelContext id="camelContext">
        <camel:jmxAgent id="jmxAgent" mbeanObjectDomainName="org.yourname" usePlatformMBeanServer="true"  />
      </camel:camelContext>
      ----

      . Alter your JBoss instance to use the Platform `MBeanServer`. +
      Add the following property to your `JAVA_OPTS` by editing `run.sh` or
      `run.conf` `-Djboss.platform.mbeanserver`. See
      http://wiki.jboss.org/wiki/JBossMBeansInJConsole

      [[CamelJMX-WebSphere]]
      WebSphere
      +++++++++

      Alter the `mbeanServerDefaultDomain` to be `WebSphere`:

      [source,xml]
      ----
      <camel:jmxAgent id="agent" createConnector="true" mbeanObjectDomainName="org.yourname" usePlatformMBeanServer="false" mbeanServerDefaultDomain="WebSphere"/>
      ----

      [[CamelJMX-OracleOC4j]]
      Oracle OC4j
      +++++++++++

      The Oracle OC4J J2EE application server will not allow Camel to access
      the platform `MBeanServer`. You can identify this in the log as Camel
      will log a `WARNING`.

      [source]
      ----
      xxx xx, xxxx xx:xx:xx xx org.apache.camel.management.InstrumentationLifecycleStrategy onContextStart
      WARNING: Could not register CamelContext MBean
      java.lang.SecurityException: Unauthorized access from application: xx to MBean: java.lang:type=ClassLoading
              at oracle.oc4j.admin.jmx.shared.UserMBeanServer.checkRegisterAccess(UserMBeanServer.java:873)
      ----

      To resolve this you should disable the JMX agent in Camel, see section
      _Disabling JMX instrumentation agent in Camel_.

      [[CamelJMX-AdvancedJMXConfiguration]]
      Advanced JMX Configuration
      ++++++++++++++++++++++++++

      The Spring configuration file allows you to configure how Camel is
      exposed to JMX for management. In some cases, you could specify more
      information here, like the connector's port or the path name.

      [[CamelJMX-Example:]]
      Example:
      ++++++++

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <jmxAgent id="agent" createConnector="true" registryPort="2000" mbeanServerDefaultDomain="org.apache.camel.test"/>
          <route>
            <from uri="seda:start"/>
            <to uri="mock:result"/>
          </route>
      </camelContext>
      ----

      If you wish to change the Java 5 JMX settings you can use various
      http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html#properties[JMX
      system properties]

      For example you can enable remote JMX connections to the Sun JMX
      connector, via setting the following environment variable (using *set*
      or *export* depending on your platform). These settings only configure
      the Sun JMX connector within Java 1.5+, not the JMX connector that Camel
      creates by default.

      [source]
      ----
      SUNJMX=-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=1616 \
      -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false
      ----

      (The SUNJMX environment variable is simple used by the startup script
      for Camel, as additional startup parameters for the JVM. If you start
      Camel directly, you'll have to pass these parameters yourself.)

      [[CamelJMX-jmxAgentPropertiesReference]]
      `jmxAgent` Properties Reference
      +++++++++++++++++++++++++++++++

      [width="100%",cols="25%,25%,25%,25%",options="header",]
      |=======================================================================
      |Spring property |System property |Default Value |Description
      |`id` |?? |?? |The JMX agent name, and it is not optional

      |`usePlatformMBeanServer` |`org.apache.camel.jmx.usePlatformMBeanServer`
      |`false`, `true` - Release 1.5 or later |If `true`, it will use the
      `MBeanServer` from the JVM

      |`mbeanServerDefaultDomain`
      |`org.apache.camel.jmx.mbeanServerDefaultDomain` |`org.apache.camel`
      |The default JMX domain of the `MBeanServer`

      |`mbeanObjectDomainName` |`org.apache.camel.jmx.mbeanObjectDomainName`
      |`org.apache.camel` |The JMX domain that all object names will use

      |`createConnector` |`org.apache.camel.jmx.createRmiConnect` |`false` |If
      we should create a JMX connector (to allow remote management) for the
      `MBeanServer`

      |`registryPort` |`org.apache.camel.jmx.rmiConnector.registryPort`
      |`1099` |The port that the JMX RMI registry will use

      |`connectorPort` |`org.apache.camel.jmx.rmiConnector.connectorPort` |-1
      (dynamic) |The port that the JMX RMI server will use

      |`serviceUrlPath` |`org.apache.camel.jmx.serviceUrlPath`
      |`/jmxrmi/camel` |The path that JMX connector will be registered under

      |`onlyRegisterProcessorWithCustomId`
      |`org.apache.camel.jmx.onlyRegisterProcessorWithCustomId` |`false`
      |*Camel 2.0:* If this option is enabled then only processors with a
      custom id set will be registered. This allows you to filer out unwanted
      processors in the JMX console.

      |`statisticsLevel` |?? |`All / Default` |*Camel 2.1:* Configures the
      level for whether performance statistics is enabled for the MBean. See
      section _Configuring level of granularity for performance statistics_
      for more details. From *Camel 2.16* onwards the All option is renamed to
      Default, and a new Extended option has been introduced which allows
      gathered additional runtime JMX metrics.

      |`includeHostName` |`org.apache.camel.jmx.includeHostName` |?? |*Camel
      2.13:* Whether to include the hostname in the MBean naming. From Camel
      2.13 onwards this is default `false`, where as in older releases its
      default `true`. You can use this option to restore old behavior if
      really needed.

      |`useHostIPAddress` |`org.apache.camel.jmx.useHostIPAddress` |`false`
      |*Camel 2.16:* Whether to use hostname or IP Address in the service url
      when creating the remote connector. By default the hostname will be
      used.

      |`loadStatisticsEnabled` |`org.apache.camel.jmx.loadStatisticsEnabled`
      |`false` |**Camel 2.16:**Whether load statistics is enabled (gathers
      load statistics using a background thread per CamelContext).

      |`endpointRuntimeStatisticsEnabled`
      |`org.apache.camel.jmx.endpointRuntimeStatisticsEnabled` |`true` |*Camel
      2.16:* Whether endpoint runtime statistics is enabled (gathers runtime
      usage of each incoming and outgoing endpoints).
      |=======================================================================


      [[CamelJMX-ConfiguringwhethertoregisterMBeansalways,fornewroutesorjustbydefault]]
      Configuring whether to register MBeans always, for new routes or just by default
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


      *Available as of Camel 2.7*

      Camel now offers 2 settings to control whether or not to register mbeans

      [width="100%",cols="34%,33%,33%",options="header",]
      |=======================================================================
      |Option |Default |Description
      |`registerAlways` |`false` |If enabled then MBeans is always registered.

      |`registerNewRoutes` |`true` |If enabled then adding new routes after
      link:camelcontext.html[CamelContext] has been started will also register
      MBeans from that given route.
      |=======================================================================

      By default Camel registers MBeans for all the routes configured when its
      starting. The `registerNewRoutes` option control if MBeans should also
      be registered if you add new routes thereafter. You can disable this, if
      you for example add and remove temporary routes where management is not
      needed.

      Be a bit caution to use the `registerAlways` option when using dynamic
      link:eip.html[EIP] patterns such as the
      link:recipient-list.html[Recipient List] having unique endpoints. If so
      then each unique endpoint and its associated services/producers would
      also be registered. This could potential lead to system degration due
      the rising number of mbeans in the registry. A MBean is not a
      light-weight object and thus consumes memory.

      [[CamelJMX-MonitoringCamelusingJMX]]
      Monitoring Camel using JMX
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      [[CamelJMX-UsingJConsoletomonitorCamel]]
      Using JConsole to monitor Camel
      +++++++++++++++++++++++++++++++

      The `CamelContext` should appear in the list of local connections, if
      you are running JConsole on the same host as Camel.

      To connect to a remote Camel instance, or if the local process does not
      show up, use Remote Process option, and enter an URL. Here is an example
      localhost `URL:service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi/camel`.

      Using the Apache Camel with JConsole:

      image:camel-jmx.png[image]

      [[CamelJMX-Whichendpointsareregistered]]
      Which endpoints are registered
      ++++++++++++++++++++++++++++++

      In *Camel 2.1* onwards *only* `singleton` endpoints are registered as
      the overhead for non singleton will be substantial in cases where
      thousands or millions of endpoints are used. This can happens when using
      a link:recipient-list.html[Recipient List] EIP or from a
      `ProducerTemplate` that sends a lot of messages.

      [[CamelJMX-Whichprocessorsareregistered]]
      Which processors are registered
      +++++++++++++++++++++++++++++++

      See link:why-is-my-processor-not-showing-up-in-jconsole.html[this FAQ].

      [[CamelJMX-HowtousetheJMXNotificationListenertolistenthecamelevents]]
      How to use the JMX NotificationListener to listen the camel events?
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      The Camel notification events give a coarse grained overview what is
      happening. You can see lifecycle event from context and endpoints and
      you can see exchanges being received by and sent to endpoints.

      From *Camel 2.4* you can use a custom JMX NotificationListener to listen
      the camel events.

      First you need to set up a `JmxNotificationEventNotifier` before you start
      the CamelContext:

      [source,java]
      ----
      // Set up the JmxNotificationEventNotifier
      notifier = new JmxNotificationEventNotifier();
      notifier.setSource("MyCamel");
      notifier.setIgnoreCamelContextEvents(true);
      notifier.setIgnoreRouteEvents(true);
      notifier.setIgnoreServiceEvents(true);

      CamelContext context = new DefaultCamelContext(createRegistry());
      context.getManagementStrategy().addEventNotifier(notifier);
      ----

      Second you can register your listener for listening the event:

      [source,java]
      ----
      // register the NotificationListener
      ObjectName on = ObjectName.getInstance("org.apache.camel:context=camel-1,type=eventnotifiers,name=JmxEventNotifier");
      MyNotificationListener listener = new MyNotificationListener();
      context.getManagementStrategy().getManagementAgent().getMBeanServer().addNotificationListener(on,
          listener,
          new NotificationFilter() {
              private static final long serialVersionUID = 1L;

              public boolean isNotificationEnabled(Notification notification) {
                  return notification.getSource().equals("MyCamel");
              }
          }, null);
      ----

      [[CamelJMX-UsingtheTracerMBeantogetfinegrainedtracing]]
      Using the Tracer MBean to get fine grained tracing
      ++++++++++++++++++++++++++++++++++++++++++++++++++

      Additionally to the coarse grained notifications above *Camel 2.9.0*
      support JMX Notification for fine grained trace events.

      These can be found in the Tracer MBean. To activate fine grained tracing
      you first need to activate tracing on the context or on a route.

      This can either be done when configuring the context or on the context /
      route MBeans.

      As a second step you have to set the `jmxTraceNotifications` attribute
      to `true` on the tracer. This can again be done when configuring the
      context or at runtime on the tracer MBean.

      Now you can register for TraceEvent Notifications on the Tracer MBean
      using JConsole. There will be one Notification for every step on the
      route with all exchange and message details:

      image:jconsole_trace_notifications.png[image]

      [[CamelJMX-UsingJMXforyourownCamelCode]]
      Using JMX for your own Camel Code
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [[CamelJMX-RegisteringyourownManagedEndpoints]]
      Registering your own Managed Endpoints
      ++++++++++++++++++++++++++++++++++++++

      *Available as of Camel 2.0* +
      You can decorate your own endpoints with Spring managed annotations
      `@ManagedResource` to allow to register them in the Camel `MBeanServer`
      and thus access your custom MBeans using JMX.

      [NOTE]
      ====
      In *Camel 2.1* we have changed this to apply other than just
      endpoints but then you need to implement the interface
      `org.apache.camel.spi.ManagementAware` as well. More about this later.
      ====

      For example we have the following custom endpoint where we define some
      options to be managed:

      [source,java]
      ----
      @ManagedResource(description = "Our custom managed endpoint")
      public class CustomEndpoint extends MockEndpoint implements ManagementAware<CustomEndpoint> {

          public CustomEndpoint(final String endpointUri, final Component component) {
              super(endpointUri, component);
          }

          public Object getManagedObject(CustomEndpoint object) {
              return this;
          }

          public boolean isSingleton() {
              return true;
          }

          protected String createEndpointUri() {
              return "custom";
          }

          @ManagedAttribute
          public String getFoo() {
              return "bar";
          }

          @ManagedAttribute
          public String getEndpointUri() {
              return super.getEndpointUri();
          }
      }
      ----

      Notice from *Camel 2.9* onwards its encouraged to use the
      `@ManagedResource`, `@ManagedAttribute`, and `@ManagedOperation` from
      the `org.apache.camel.api.management` package. This allows your custom
      code to not depend on Spring JARs.

      [[CamelJMX-ProgrammingyourownManagedServices]]
      Programming your own Managed Services
      +++++++++++++++++++++++++++++++++++++

      *Available as of Camel 2.1*

      Camel now offers to use your own MBeans when registering services for
      management. What that means is for example you can develop a custom
      Camel component and have it expose MBeans for endpoints, consumers and
      producers etc. All you need to do is to implement the interface
      `org.apache.camel.spi.ManagementAware` and return the managed object
      Camel should use.

      Now before you think oh boys the JMX API is really painful and terrible,
      then yeah you are right. Lucky for us Spring though too and they created
      a range of annotations you can use to export management on an existing
      bean. That means that you often use that and just return `this` in the
      `getManagedObject` from the `ManagementAware` interface. For an example
      see the code example above with the `CustomEndpoint`.

      Now in *Camel 2.1* you can do this for all the objects that Camel
      registers for management which are quite a bunch, but not all.

      For services which do not implement this `ManagementAware` interface
      then Camel will fallback to using default wrappers as defined in the
      table below:

      [width="100%",cols="1m,2m",options="header",]
      |=================================
      |Type |MBean wrapper
      |CamelContext |ManagedCamelContext
      |Component |ManagedComponent
      |Endpoint |ManagedEndpoint
      |Consumer |ManagedConsumer
      |Producer |ManagedProducer
      |Route |ManagedRoute
      |Processor |ManagedProcessor
      |Tracer |ManagedTracer
      |Service |ManagedService
      |=================================

      In addition to that there are some extended wrappers for specialized
      types such as:

      [width="100%",cols="1m,2m",options="header",]
      |===================================================
      |Type |MBean wrapper
      |ScheduledPollConsumer |ManagedScheduledPollConsumer
      |BrowsableEndpoint |ManagedBrowseableEndpoint
      |Throttler |ManagedThrottler
      |Delayer |ManagedDelayer
      |SendProcessor |ManagedSendProcessor
      |===================================================

      And in the future we will add additional wrappers for more EIP patterns.

      [[CamelJMX-ManagementNamingStrategy]]
      ManagementNamingStrategy
      ++++++++++++++++++++++++

      *Available as of Camel 2.1*

      Camel provides a pluggable API for naming strategy by
      `org.apache.camel.spi.ManagementNamingStrategy`. A default
      implementation is used to compute the MBean names that all MBeans are
      registered with.

      [[CamelJMX-Managementnamingpattern]]
      Management naming pattern
      +++++++++++++++++++++++++

      *Available as of Camel 2.10*

      From *Camel 2.10* onwards we made it easier to configure a naming
      pattern for the MBeans. The pattern is used as part of the `ObjectName`
      as they key after the domain name.

      By default Camel will use MBean names for the `ManagedCamelContextMBean`
      as follows:

      [source]
      ----
      org.apache.camel:context=localhost/camel-1,type=context,name=camel-1
      ----

      And from *Camel 2.13* onwards the hostname is not included in the MBean
      names, so the above example would be as follows:

      [source]
      ----
      org.apache.camel:context=camel-1,type=context,name=camel-1
      ----

      If you configure a name on the `CamelContext` then that name is part of
      the `ObjectName` as well. For example if we have

      [source,xml]
      ----
      <camelContext id="myCamel" ...>
      ----

      Then the MBean names will be as follows:

      [source]
      ----
      org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
      ----

      Now if there is a naming clash in the JVM, such as there already exists
      a MBean with that given name above, then Camel will by default try to
      auto correct this by finding a new free name in the `JMXMBeanServer` by
      using a counter. As shown below the counter is now appended, so we have
      `myCamel-1` as part of the `ObjectName`:

      [source]
      ----
      org.apache.camel:context=localhost/myCamel-1,type=context,name=myCamel
      ----

      This is possible because Camel uses a naming pattern by default that
      supports the following tokens:

      * `#camelId#` = the CamelContext id (eg the name)
      * `#name#` - same as `#camelId#`
      * `#counter#` - an incrementing counter
      `* #bundleId#` - the OSGi bundle id (only for OSGi environments)
      * `#symbolicName#` - the OSGi symbolic name (only for OSGi environments)
      * `#version#` - the OSGi bundle version (only for OSGi environments)

      The default naming pattern is differentiated between OSGi and non-OSGi
      as follows:

      * non OSGI: `#name#`
      * OSGi: `#bundleId#-#name#`
      * OSGi *Camel 2.13:* `#symbolicName#`

      However if there is a naming clash in the `JMXMBeanServer` then Camel
      will automatic fallback and use the `#counter#` in the pattern to remedy
      this. And thus the following patterns will then be used:

      * non OSGI: `#name#-#counter#`
      * OSGi: `#bundleId#-#name#-#counter#`
      * OSGi *Camel 2.13:* `#symbolicName#-#counter#`

      If you set an explicit naming pattern, then that pattern is always used,
      and the default patterns above is *not* used.

      This allows us to have full control, very easily, of the naming for both
      the `CamelContext` id in the link:registry.html[Registry] as well the
      JMX MBeans in the `JMXMBeanRegistry`.

      From??*Camel 2.15* onwards you can configure the default management
      name pattern using a JVM system property, to configure this globally for
      the JVM. Notice that you can override this pattern by configure it
      explicit, as shown in the examples further below.

      Set a JVM system property to use a default management name pattern that
      prefixes the name with cool.

      [source,java]
      ----
      System.setProperty(JmxSystemPropertyKeys.MANAGEMENT_NAME_PATTERN, "cool-#name#");
      ----

      So if we want to explicit name both the `CamelContext` and to use fixed
      MBean names, that do not change (eg has no counters), then we can use
      the new `managementNamePattern` attribute:

      [source,xml]
      ----
      <camelContext id="myCamel" managementNamePattern="#name#">
      ----

      Then the MBean names will always be as follows:

      [source]
      ----
      org.apache.camel:context=localhost/myCamel,type=context,name=myCamel
      ----

      In Java, you can configure the `managementNamePattern` as follows:

      [source,java]
      ----
      context.getManagementNameStrategy().setNamePattern("#name#");
      ----

      You can also use a different name in the `managementNamePattern` than
      the id, so for example we can do:

      [source,xml]
      ----
      <camelContext id="myCamel" managementNamePattern="coolCamel">
      ----

      You may want to do this in OSGi environments in case you do not want the
      OSGi bundle id as part of the MBean names. As the OSGi bundle id can
      change if you restart the server, or uninstall and install the same
      application. You can then do as follows to not use the OSGi bundle id as
      part of the name:

      [source,xml]
      ----
      <camelContext id="myCamel" managementNamePattern="#name#">
      ----

      Note this requires that `myCamel` is unique in the entire JVM. If you
      install a 2nd Camel application that has the same `CamelContext` id and
      `managementNamePattern` then Camel will fail upon starting, and report a
      MBean already exists exception.

      [[CamelJMX-ManagementStrategy]]
      ManagementStrategy
      ++++++++++++++++++

      *Available as of Camel 2.1*

      Camel now provides a totally pluggable management strategy that allows
      you to be 100% in control of management. It is a rich interface with
      many methods for management. Not only for adding and removing managed
      objects from the `MBeanServer`, but also event notification is provided
      as well using the `org.apache.camel.spi.EventNotifier` API. What it
      does, for example, is make it easier to provide an adapter for other
      management products. In addition, it also allows you to provide more
      details and features that are provided out of the box at Apache.

      [[CamelJMX-Configuringlevelofgranularityforperformancestatistics]]
      Configuring level of granularity for performance statistics
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      *Available as of Camel 2.1*

      You can now set a pre set level whether performance statistics is
      enabled or not when Camel start ups. The levels are

      * `Extended`??- As default but with additional statistics gathered during
      runtime such as fine grained level of usage of endpoints and more. This
      options requires??Camel 2.16
      * `All` / `Default`??- Camel will enable statistics for both routes and
      processors (fine grained). From??*Camel 2.16* onwards the All option
      was renamed to Default.
      * `RoutesOnly` - Camel will only enable statistics for routes (coarse
      grained)
      * `Off` - Camel will not enable statistics for any.

      From *Camel 2.9* onwards the performance statistics also include average
      load statistics per CamelContext and Route MBeans. The statistics is
      average load based on the number of in-flight exchanges, on a per 1, 5,
      and 15 minute rate. This is similar to load statistics on Unix systems.
      *Camel 2.11* onwards allows you to explicit disable load performance
      statistics by setting `loadStatisticsEnabled=false` on the `<jmxAgent>`.
      Note that it will be off if the statics level is configured to off as
      well. From *Camel 2.13* onwards the load performance statistics is by
      default disabled. You can enable this by
      setting??`loadStatisticsEnabled=true`??on the `<jmxAgent>`.

      At runtime you can always use the management console (such as JConsole)
      to change on a given route or processor whether its statistics are
      enabled or not.

      [NOTE]
      ====
      *What does statistics enabled mean?*

      Statistics enabled means that Camel will do fine grained performance
      statistics for that particular MBean. The statistics you can see are
      many, such as: number of exchanges completed/failed,
      last/total/mina/max/mean processing time, first/last failed time, etc.

      ====

      Using Java DSL you set this level by:

      [source,java]
      ----
      // only enable routes when Camel starts
      context.getManagementStrategy().setStatisticsLevel(ManagementStatisticsLevel.RoutesOnly);
      ----

      And from Spring DSL you do:

      [source,xml]
      ----
      <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
          <jmxAgent id="agent" statisticsLevel="RoutesOnly"/>
       ...
      </camelContext>
      ----

      [[CamelJMX-Hidingsensitiveinformation]]
      Hiding sensitive information
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.12*

      By default, Camel enlists MBeans in JMX such as endpoints configured
      using link:uris.html[URIs]. In this configuration, there may be
      sensitive information such as passwords.

      This information can be hidden by enabling the `mask` option as shown
      below:

      Using Java DSL you turn this on by:

      [source,java]
      ----
        // only enable routes when Camel starts
        context.getManagementStrategy().getManagementAgent().setMask(true);
      ----

      And from Spring DSL you do:

      [source,xml]
      ----
          <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
              <jmxAgent id="agent" mask="true"/>
           ...
          </camelContext>
      ----

      This will mask link:uris.html[URIs] having options such as password and
      passphrase, and use `xxxxxx` as the replacement value.

      [[CamelJMX-DeclaringwhichJMXattributesandoperationstomask]]
      Declaring which JMX attributes and operations to mask
      +++++++++++++++++++++++++++++++++++++++++++++++++++++

      On the `org.apache.camel.api.management.ManagedAttribute` and
      `org.apache.camel.api.management.ManagedOperation`, the attribute `mask`
      can be set to `true` to indicate that the result of this JMX
      attribute/operation should be masked (if enabled on JMX agent, see
      above).

      For example, on the default managed endpoints from camel-core
      `org.apache.camel.api.management.mbean.ManagedEndpointMBean`, we have
      declared that the `EndpointUri` JMX attribute is masked:

      [source,java]
      ----
      @ManagedAttribute(description = "Endpoint URI", mask = true)
      String getEndpointUri();
      ----

      [[CamelJMX-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:management-example.html[Management Example]
      * link:why-is-my-processor-not-showing-up-in-jconsole.html[Why is my
      processor not showing up in JConsole]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jolt
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jolt
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jolt
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jolt
          spec:
            containers:
            - image: fabric8/connector-jolt:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jolt
        syntax: jolt:resourceUri
        title: JOLT
        description: The jolt component allows you to process a JSON messages using an JOLT specification (such as JSON-JSON transformation).
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.jolt.JoltComponent
        groupId: org.apache.camel
        artifactId: camel-jolt
        version: 2.18.1
      componentProperties:
        transform:
          kind: property
          type: object
          javaType: com.bazaarvoice.jolt.Transform
          deprecated: false
          secret: false
          description: Explicitly sets the Transform to use. If not set a Transform specified by the transformDsl will be created
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        inputType:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.jolt.JoltInputOutputType
          enum:
          - Hydrated
          - JsonString
          deprecated: false
          secret: false
          defaultValue: Hydrated
          description: Specifies if the input is hydrated JSON or a JSON String.
        outputType:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.jolt.JoltInputOutputType
          enum:
          - Hydrated
          - JsonString
          deprecated: false
          secret: false
          defaultValue: Hydrated
          description: Specifies if the output should be hydrated JSON or a JSON String.
        transformDsl:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.jolt.JoltTransformType
          enum:
          - Chainr
          - Shiftr
          - Defaultr
          - Removr
          - Sortr
          deprecated: false
          secret: false
          defaultValue: Chainr
          description: Specifies the Transform DSL of the endpoint resource. If none is specified Chainr will be used.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[JOLT-JOLTComponent]]
      JOLT Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      The??*jolt:*??component allows you to process a JSON messages using an
      http://bazaarvoice.github.io/jolt/[JOLT] specification. This can be
      ideal when doing JSON to JSON transformation.

      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-jolt</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      ??

      [[JOLT-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------
      jolt:specName[?options]
      -----------------------

      Where??*specName*??is the classpath-local URI of the specification to
      invoke; or the complete URL of the remote specification
      (eg:??file://folder/myfile.vm[file://folder/myfile.json]).

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

      [[JOLT-Options]]
      Options
      ^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | transform | Transform | Explicitly sets the Transform to use. If not set a Transform specified by the transformDsl will be created
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The JOLT component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
      | inputType | producer | Hydrated | JoltInputOutputType | Specifies if the input is hydrated JSON or a JSON String.
      | outputType | producer | Hydrated | JoltInputOutputType | Specifies if the output should be hydrated JSON or a JSON String.
      | transformDsl | producer | Chainr | JoltTransformType | Specifies the Transform DSL of the endpoint resource. If none is specified Chainr will be used.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[JOLT-Samples]]
      Samples
      ^^^^^^^

      For example you could use something like

      [source,java]
      --------------------------------------
      from("activemq:My.Queue").
        to("jolt:com/acme/MyResponse.json");
      --------------------------------------

      And a file based resource:

      [source,java]
      ---------------------------------------------------------------
      from("activemq:My.Queue").
        to("jolt:file://myfolder/MyResponse.json?contentCache=true").
        to("activemq:Another.Queue");
      ---------------------------------------------------------------

      You can also specify what specification the component should use
      dynamically via a header, so for example:

      [source,java]
      ---------------------------------------------------------------------
      from("direct:in").
        setHeader("CamelJoltResourceUri").constant("path/to/my/spec.json").
        to("jolt:dummy");
      ---------------------------------------------------------------------

      ??

      [[JOLT-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jpa
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jpa
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jpa
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jpa
          spec:
            containers:
            - image: fabric8/connector-jpa:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jpa
        syntax: jpa:entityType
        title: JPA
        description: The jpa component enables you to store and retrieve Java objects from databases using JPA.
        label: database,sql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jpa.JpaComponent
        groupId: org.apache.camel
        artifactId: camel-jpa
        version: 2.18.1
      componentProperties:
        entityManagerFactory:
          kind: property
          type: object
          javaType: javax.persistence.EntityManagerFactory
          deprecated: false
          secret: false
          description: To use the EntityManagerFactory. This is strongly recommended to configure.
        transactionManager:
          kind: property
          type: object
          javaType: org.springframework.transaction.PlatformTransactionManager
          deprecated: false
          secret: false
          description: To use the PlatformTransactionManager for managing transactions.
        joinTransaction:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: The camel-jpa component will join transaction by default. You can use this option to turn this off for example if you use LOCAL_RESOURCE and join transaction doesn't work with your JPA provider. This option can also be set globally on the JpaComponent instead of having to set it on all endpoints.
        sharedEntityManager:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to use Spring's SharedEntityManager for the consumer/producer. Note in most cases joinTransaction should be set to false as this is not an EXTENDED EntityManager.
      properties:
        entityType:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.Class<?>
          deprecated: false
          secret: false
          description: The JPA annotated class to use as entity.
        joinTransaction:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: The camel-jpa component will join transaction by default. You can use this option to turn this off for example if you use LOCAL_RESOURCE and join transaction doesn't work with your JPA provider. This option can also be set globally on the JpaComponent instead of having to set it on all endpoints.
        persistenceUnit:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel
          description: The JPA persistence unit used by default.
        sharedEntityManager:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use Spring's SharedEntityManager for the consumer/producer. Note in most cases joinTransaction should be set to false as this is not an EXTENDED EntityManager.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        consumeDelete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true the entity is deleted after it is consumed; if false the entity is not deleted.
        consumeLockEntity:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether or not to set an exclusive lock on each entity bean while processing the results from polling.
        deleteHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.jpa.DeleteHandler<java.lang.Object>
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To use a custom DeleteHandler to delete the row after the consumer is done processing the exchange
        lockModeType:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: javax.persistence.LockModeType
          enum:
          - READ
          - WRITE
          - OPTIMISTIC
          - OPTIMISTIC_FORCE_INCREMENT
          - PESSIMISTIC_READ
          - PESSIMISTIC_WRITE
          - PESSIMISTIC_FORCE_INCREMENT
          - NONE
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: PESSIMISTIC_WRITE
          description: To configure the lock mode on the consumer.
        maximumResults:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Set the maximum number of results to retrieve on the Query.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: An integer value to define the maximum number of messages to gather per poll. By default no maximum is set. Can be used to avoid polling many thousands of messages when starting up the server. Set a value of 0 or negative to disable.
        namedQuery:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To use a named query when consuming data.
        nativeQuery:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To use a custom native query when consuming data. You may want to use the option consumer.resultClass also when using native queries.
        parameters:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          optionalPrefix: consumer.
          multiValue: true
          deprecated: false
          secret: false
          description: This key/value mapping is used for building the query parameters. It's is expected to be of the generic type java.util.Map where the keys are the named parameters of a given JPA query and the values are their corresponding effective values you want to select for.
        preDeleteHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.jpa.DeleteHandler<java.lang.Object>
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To use a custom Pre-DeleteHandler to delete the row after the consumer has read the entity.
        query:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To use a custom query when consuming data.
        resultClass:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.Class<?>
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Defines the type of the returned payload (we will call entityManager.createNativeQuery(nativeQuery resultClass) instead of entityManager.createNativeQuery(nativeQuery)). Without this option we will return an object array. Only has an affect when using in conjunction with native query when consuming data.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipLockedEntity:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: To configure whether to use NOWAIT on lock and silently skip the entity.
        transacted:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to run the consumer in transacted mode by which all messages will either commit or rollback when the entire batch has been processed. The default behavior (false) is to commit all the previously successfully processed messages and only rollback the last failed message.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        flushOnSend:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Flushes the EntityManager after the entity bean has been persisted.
        remove:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Indicates to use entityManager.remove(entity).
        usePassedInEntityManager:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true then Camel will use the EntityManager from the header JpaConstants.ENTITYMANAGER instead of the configured entity manager on the component/endpoint. This allows end users to control which entity manager will be in use.
        usePersist:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Indicates to use entityManager.persist(entity) instead of entityManager.merge(entity).
            Note: entityManager.persist(entity) doesn''t work for detached entities (where
            the EntityManager has to execute an UPDATE instead of an INSERT query)!'
        entityManagerProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: emf.
          multiValue: true
          deprecated: false
          secret: false
          description: Additional properties for the entity manager to use.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: "[[JPA-JPAComponent]]\nJPA Component\n~~~~~~~~~~~~~\n\nThe\
      \ *jpa* component enables you to store and retrieve Java objects from\npersistent\
      \ storage using EJB 3's Java Persistence Architecture (JPA),\nwhich is a standard\
      \ interface layer that wraps Object/Relational Mapping\n(ORM) products such\
      \ as OpenJPA, Hibernate, TopLink, and so on.\n\nMaven users will need to add\
      \ the following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-jpa</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[JPA-Sendingtotheendpoint]]\nSending to the endpoint\n^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nYou can store a Java entity bean in a database by sending it to a JPA\nproducer\
      \ endpoint. The body of the _In_ message is assumed to be an\nentity bean (that\
      \ is, a POJO with an\nhttp://java.sun.com/javaee/5/docs/api/javax/persistence/Entity.html[@Entity]\n\
      annotation on it) or a collection or array of entity beans.\n\nIf the body is\
      \ a List of entities, make sure to use\n*entityType=java.util.ArrayList* as\
      \ a configuration passed to the\nproducer endpoint.\n\nIf the body does not\
      \ contain one of the previous listed types, put a\nlink:message-translator.html[Message\
      \ Translator] in front of the\nendpoint to perform the necessary conversion\
      \ first.\n\n[[JPA-Consumingfromtheendpoint]]\nConsuming from the endpoint\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nConsuming messages from a JPA consumer endpoint\
      \ removes (or updates)\nentity beans in the database. This allows you to use\
      \ a database table as\na logical queue: consumers take messages from the queue\
      \ and then\ndelete/update them to logically remove them from the queue.\n\n\
      If you do not wish to delete the entity bean when it has been processed\n(and\
      \ when routing is done), you can specify `consumeDelete=false` on the\nURI.\
      \ This will result in the entity being processed each poll.\n\nIf you would\
      \ rather perform some update on the entity to mark it as\nprocessed (such as\
      \ to exclude it from a future query) then you can\nannotate a method with\n\
      http://camel.apache.org/maven/current/camel-jpa/apidocs/org/apache/camel/component/jpa/Consumed.html[@Consumed]\n\
      which will be invoked on your entity bean when the entity bean when it\nhas\
      \ been processed (and when routing is done).\n\nFrom *Camel 2.13* onwards you\
      \ can use\nhttp://camel.apache.org/maven/current/camel-jpa/apidocs/org/apache/camel/component/jpa/PreConsumed.html[@PreConsumed]\n\
      which will be invoked on your entity bean before it has been processed\n(before\
      \ routing).\n\nIf you are consuming a lot (100K+) of rows and experience OutOfMemory\n\
      problems you should set the maximumResults to sensible value.\n\n[[JPA-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source,java]\n-----------------------------\njpa:entityClassName[?options]\n\
      -----------------------------\n\nFor sending to the endpoint, the _entityClassName_\
      \ is optional. If\nspecified, it helps the link:type-converter.html[Type Converter]\
      \ to\nensure the body is of the correct type.\n\nFor consuming, the _entityClassName_\
      \ is mandatory.\n\nYou can append query options to the URI in the following\
      \ format,\n`?option=value&option=value&...`\n\n[[JPA-Options]]\nOptions\n^^^^^^^\n\
      \n\n\n\n// component options: START\nThe JPA component supports 4 options which\
      \ are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| entityManagerFactory | EntityManagerFactory\
      \ | To use the EntityManagerFactory. This is strongly recommended to configure.\n\
      | transactionManager | PlatformTransactionManager | To use the PlatformTransactionManager\
      \ for managing transactions.\n| joinTransaction | boolean | The camel-jpa component\
      \ will join transaction by default. You can use this option to turn this off\
      \ for example if you use LOCAL_RESOURCE and join transaction doesn't work with\
      \ your JPA provider. This option can also be set globally on the JpaComponent\
      \ instead of having to set it on all endpoints.\n| sharedEntityManager | boolean\
      \ | Whether to use Spring's SharedEntityManager for the consumer/producer. Note\
      \ in most cases joinTransaction should be set to false as this is not an EXTENDED\
      \ EntityManager.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe JPA component supports 42 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| entityType | common |\
      \  | Class<?> | *Required* The JPA annotated class to use as entity.\n| joinTransaction\
      \ | common | true | boolean | The camel-jpa component will join transaction\
      \ by default. You can use this option to turn this off for example if you use\
      \ LOCAL_RESOURCE and join transaction doesn't work with your JPA provider. This\
      \ option can also be set globally on the JpaComponent instead of having to set\
      \ it on all endpoints.\n| persistenceUnit | common | camel | String | *Required*\
      \ The JPA persistence unit used by default.\n| sharedEntityManager | common\
      \ | false | boolean | Whether to use Spring's SharedEntityManager for the consumer/producer.\
      \ Note in most cases joinTransaction should be set to false as this is not an\
      \ EXTENDED EntityManager.\n| bridgeErrorHandler | consumer | false | boolean\
      \ | 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/ERROR level and ignored.\n\
      | consumeDelete | consumer | true | boolean | If true the entity is deleted\
      \ after it is consumed; if false the entity is not deleted.\n| consumeLockEntity\
      \ | consumer | true | boolean | Specifies whether or not to set an exclusive\
      \ lock on each entity bean while processing the results from polling.\n| deleteHandler\
      \ | consumer |  | Object> | To use a custom DeleteHandler to delete the row\
      \ after the consumer is done processing the exchange\n| lockModeType | consumer\
      \ | PESSIMISTIC_WRITE | LockModeType | To configure the lock mode on the consumer.\n\
      | maximumResults | consumer | -1 | int | Set the maximum number of results to\
      \ retrieve on the Query.\n| maxMessagesPerPoll | consumer |  | int | An integer\
      \ value to define the maximum number of messages to gather per poll. By default\
      \ no maximum is set. Can be used to avoid polling many thousands of messages\
      \ when starting up the server. Set a value of 0 or negative to disable.\n| namedQuery\
      \ | consumer |  | String | To use a named query when consuming data.\n| nativeQuery\
      \ | consumer |  | String | To use a custom native query when consuming data.\
      \ You may want to use the option consumer.resultClass also when using native\
      \ queries.\n| parameters | consumer |  | Map | This key/value mapping is used\
      \ for building the query parameters. It's is expected to be of the generic type\
      \ java.util.Map where the keys are the named parameters of a given JPA query\
      \ and the values are their corresponding effective values you want to select\
      \ for.\n| preDeleteHandler | consumer |  | Object> | To use a custom Pre-DeleteHandler\
      \ to delete the row after the consumer has read the entity.\n| query | consumer\
      \ |  | String | To use a custom query when consuming data.\n| resultClass |\
      \ consumer |  | Class<?> | Defines the type of the returned payload (we will\
      \ call entityManager.createNativeQuery(nativeQuery resultClass) instead of entityManager.createNativeQuery(nativeQuery)).\
      \ Without this option we will return an object array. Only has an affect when\
      \ using in conjunction with native query when consuming data.\n| sendEmptyMessageWhenIdle\
      \ | consumer | false | boolean | If the polling consumer did not poll any files\
      \ you can enable this option to send an empty message (no body) instead.\n|\
      \ skipLockedEntity | consumer | false | boolean | To configure whether to use\
      \ NOWAIT on lock and silently skip the entity.\n| transacted | consumer | false\
      \ | boolean | Whether to run the consumer in transacted mode by which all messages\
      \ will either commit or rollback when the entire batch has been processed. The\
      \ default behavior (false) is to commit all the previously successfully processed\
      \ messages and only rollback the last failed message.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| pollStrategy | consumer (advanced) |\
      \  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel.\n| flushOnSend | producer | true | boolean | Flushes\
      \ the EntityManager after the entity bean has been persisted.\n| remove | producer\
      \ | false | boolean | Indicates to use entityManager.remove(entity).\n| usePassedInEntityManager\
      \ | producer | false | boolean | If set to true then Camel will use the EntityManager\
      \ from the header JpaConstants.ENTITYMANAGER instead of the configured entity\
      \ manager on the component/endpoint. This allows end users to control which\
      \ entity manager will be in use.\n| usePersist | producer | false | boolean\
      \ | Indicates to use entityManager.persist(entity) instead of entityManager.merge(entity).\
      \ Note: entityManager.persist(entity) doesn't work for detached entities (where\
      \ the EntityManager has to execute an UPDATE instead of an INSERT query)!\n\
      | entityManagerProperties | advanced |  | Map | Additional properties for the\
      \ entity manager to use.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n| backoffErrorThreshold |\
      \ scheduler |  | int | The number of subsequent error polls (failed due some\
      \ error) that should happen before the backoffMultipler should kick-in.\n| backoffIdleThreshold\
      \ | scheduler |  | int | The number of subsequent idle polls that should happen\
      \ before the backoffMultipler should kick-in.\n| backoffMultiplier | scheduler\
      \ |  | int | To let the scheduled polling consumer backoff if there has been\
      \ a number of subsequent idles/errors in a row. The multiplier is then the number\
      \ of polls that will be skipped before the next actual attempt is happening\
      \ again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold\
      \ must also be configured.\n| delay | scheduler | 500 | long | Milliseconds\
      \ before the next poll. You can also specify time values using units such as\
      \ 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| greedy\
      \ | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer\
      \ will run immediately again if the previous run polled 1 or more messages.\n\
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll\
      \ starts. You can also specify time values using units such as 60s (60 seconds)\
      \ 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| runLoggingLevel | scheduler\
      \ | TRACE | LoggingLevel | The consumer logs a start/complete log line when\
      \ it polls. This option allows you to configure the logging level for that.\n\
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows\
      \ for configuring a custom/shared thread pool to use for the consumer. By default\
      \ each consumer has its own single threaded thread pool.\n| scheduler | scheduler\
      \ | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either\
      \ camel-spring or camel-quartz2 component\n| schedulerProperties | scheduler\
      \ |  | Map | To configure additional properties when using a custom scheduler\
      \ or any of the Quartz2 Spring based scheduler.\n| startScheduler | scheduler\
      \ | true | boolean | Whether the scheduler should be auto started.\n| timeUnit\
      \ | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay\
      \ options.\n| useFixedDelay | scheduler | true | boolean | Controls if fixed\
      \ delay or fixed rate is used. See ScheduledExecutorService in JDK for details.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n\n\n\n[[JPA-MessageHeaders]]\nMessage\
      \ Headers\n^^^^^^^^^^^^^^^\n\nCamel adds the following message headers to the\
      \ exchange:\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelJpaTemplate` |`JpaTemplate` |*Not supported\
      \ anymore since Camel 2.12:* The `JpaTemplate` object that\nis used to access\
      \ the entity bean. You need this object in some\nsituations, for instance in\
      \ a type converter or when you are doing some\ncustom processing. See\nhttps://issues.apache.org/jira/browse/CAMEL-5932[CAMEL-5932]\
      \ for the\nreason why the support for this header has been dropped.\n\n|`CamelEntityManager`\
      \ |`EntityManager` |*Camel 2.12: JPA consumer / Camel 2.12.2: JPA producer:*\
      \ The JPA\n`EntityManager` object being used by `JpaConsumer` or `JpaProducer`.\n\
      \n|=======================================================================\n\
      \n[[JPA-ConfiguringEntityManagerFactory]]\nConfiguring EntityManagerFactory\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIts strongly advised to configure the JPA\
      \ component to use a specific\n`EntityManagerFactory` instance. If failed to\
      \ do so each `JpaEndpoint`\nwill auto create their own instance of `EntityManagerFactory`\
      \ which most\noften is not what you want.\n\nFor example, you can instantiate\
      \ a JPA component that references the\n`myEMFactory` entity manager factory,\
      \ as follows:\n\n[source,xml]\n-------------------------------------------------------------------\n\
      <bean id=\"jpa\" class=\"org.apache.camel.component.jpa.JpaComponent\">\n  \
      \ <property name=\"entityManagerFactory\" ref=\"myEMFactory\"/>\n</bean>\n-------------------------------------------------------------------\n\
      \nIn *Camel 2.3* the `JpaComponent` will auto lookup the\n`EntityManagerFactory`\
      \ from the link:registry.html[Registry] which means\nyou do not need to configure\
      \ this on the `JpaComponent` as shown above.\nYou only need to do so if there\
      \ is ambiguity, in which case Camel will\nlog a WARN.\n\n[[JPA-ConfiguringTransactionManager]]\n\
      Configuring TransactionManager\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSince *Camel\
      \ 2.3* the `JpaComponent` will auto lookup the\n`TransactionManager` from the\
      \ link:registry.html[Registry.] If Camel\nwon't find any `TransactionManager`\
      \ instance registered, it will also\nlook up for the??`TransactionTemplate`\
      \ and try to\nextract??`TransactionManager` from it.\n\nIf none `TransactionTemplate`\
      \ is available in the registry,\n`JpaEndpoint` will auto create their own instance\
      \ of\n`TransactionManager` which most often is not what you want.\n\nIf more\
      \ than single instance of the `TransactionManager` is found, Camel\nwill log\
      \ a WARN. In such cases you might want to instantiate and\nexplicitly configure\
      \ a JPA component that references the\n`myTransactionManager` transaction manager,\
      \ as follows:\n\n[source,xml]\n-------------------------------------------------------------------\n\
      <bean id=\"jpa\" class=\"org.apache.camel.component.jpa.JpaComponent\">\n  \
      \ <property name=\"entityManagerFactory\" ref=\"myEMFactory\"/>\n   <property\
      \ name=\"transactionManager\" ref=\"myTransactionManager\"/>\n</bean>\n-------------------------------------------------------------------\n\
      \n[[JPA-Usingaconsumerwithanamedquery]]\nUsing a consumer with a named query\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nFor consuming only selected entities,\
      \ you can use the\n`consumer.namedQuery` URI query option. First, you have to\
      \ define the\nnamed query in the JPA Entity class:\n\n[source,java]\n----------------------------------------------------------------------------------\n\
      @Entity\n@NamedQuery(name = \"step1\", query = \"select x from MultiSteps x\
      \ where x.step = 1\")\npublic class MultiSteps {\n   ...\n}\n----------------------------------------------------------------------------------\n\
      \nAfter that you can define a consumer uri like this one:\n\n[source,java]\n\
      ----------------------------------------------------------------------------\n\
      from(\"jpa://org.apache.camel.examples.MultiSteps?consumer.namedQuery=step1\"\
      )\n.to(\"bean:myBusinessLogic\");\n----------------------------------------------------------------------------\n\
      \n[[JPA-Usingaconsumerwithaquery]]\nUsing a consumer with a query\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nFor consuming only selected entities, you can use the `consumer.query`\nURI\
      \ query option. You only have to define the query option:\n\n[source,java]\n\
      ---------------------------------------------------------------------------------------------------------------------------------------\n\
      from(\"jpa://org.apache.camel.examples.MultiSteps?consumer.query=select o from\
      \ org.apache.camel.examples.MultiSteps o where o.step = 1\")\n.to(\"bean:myBusinessLogic\"\
      );\n---------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[JPA-Usingaconsumerwithanativequery]]\nUsing a consumer with a native query\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nFor consuming only selected entities,\
      \ you can use the\n`consumer.nativeQuery` URI query option. You only have to\
      \ define the\nnative query option:\n\n[source,java]\n---------------------------------------------------------------------------------------------------------------\n\
      from(\"jpa://org.apache.camel.examples.MultiSteps?consumer.nativeQuery=select\
      \ * from MultiSteps where step = 1\")\n.to(\"bean:myBusinessLogic\");\n---------------------------------------------------------------------------------------------------------------\n\
      \nIf you use the native query option, you will receive an object array in\n\
      the message body.\n\n[[JPA-Example]]\nExample\n^^^^^^^\n\nSee link:tracer-example.html[Tracer\
      \ Example] for an example using\nlink:jpa.html[JPA] to store traced messages\
      \ into a database.\n\n[[JPA-UsingtheJPAbasedidempotentrepository]]\nUsing the\
      \ JPA based idempotent repository\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIn this section we will use the JPA based idempotent repository.\n\nFirst\
      \ we need to setup a `persistence-unit` in the persistence.xml file:\n\nSecond\
      \ we have to setup a `org.springframework.orm.jpa.JpaTemplate`\nwhich is used\
      \ by the\n`org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository`:\n\
      \nError formatting macro: snippet: java.lang.IndexOutOfBoundsException:\nIndex:\
      \ 20, Size: 20\n\nAfterwards we can configure our\n`org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository`:\n\
      \nAnd finally we can create our JPA idempotent repository in the spring\nXML\
      \ file as well:\n\n[source,xml]\n---------------------------------------------------------------\n\
      <camelContext xmlns=\"http://camel.apache.org/schema/spring\">   \n    <route\
      \ id=\"JpaMessageIdRepositoryTest\">\n        <from uri=\"direct:start\" />\n\
      \        <idempotentConsumer messageIdRepositoryRef=\"jpaStore\">\n        \
      \    <header>messageId</header>\n            <to uri=\"mock:result\" />\n  \
      \      </idempotentConsumer>\n    </route>\n</camelContext>\n---------------------------------------------------------------\n\
      \n*When running this Camel component tests inside your IDE*\n\nIn case you run\
      \ the\nhttps://svn.apache.org/repos/asf/camel/trunk/components/camel-jpa/src/test[tests\n\
      of this component] directly inside your IDE (and not necessarily through\nMaven\
      \ itself) then you could spot exceptions like:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      org.springframework.transaction.CannotCreateTransactionException: Could not\
      \ open JPA EntityManager for transaction; nested exception is\n<openjpa-2.2.1-r422266:1396819\
      \ nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This\
      \ configuration disallows runtime optimization,\nbut the following listed types\
      \ were not enhanced at build time or at class load time with a javaagent: \"\
      org.apache.camel.examples.SendEmail\".\n    at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:427)\n\
      \    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371)\n\
      \    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127)\n\
      \    at org.apache.camel.processor.jpa.JpaRouteTest.cleanupRepository(JpaRouteTest.java:96)\n\
      \    at org.apache.camel.processor.jpa.JpaRouteTest.createCamelContext(JpaRouteTest.java:67)\n\
      \    at org.apache.camel.test.junit4.CamelTestSupport.doSetUp(CamelTestSupport.java:238)\n\
      \    at org.apache.camel.test.junit4.CamelTestSupport.setUp(CamelTestSupport.java:208)\n\
      --------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nThe problem here is that the source has been compiled/recompiled through\n\
      your IDE and not through Maven itself which would\nhttps://svn.apache.org/repos/asf/camel/trunk/components/camel-jpa/pom.xml[enhance\n\
      the byte-code at build time]. To overcome this you would need to enable\nhttp://openjpa.apache.org/entity-enhancement.html#dynamic-enhancement[dynamic\n\
      byte-code enhancement of OpenJPA]. As an example assuming the current\nOpenJPA\
      \ version being used in Camel itself is 2.2.1, then as running the\ntests inside\
      \ your favorite IDE you would need to pass the following\nargument to the JVM:\n\
      \n[source,java]\n-------------------------------------------------------------------------------------------\n\
      \ \n-javaagent:<path_to_your_local_m2_cache>/org/apache/openjpa/openjpa/2.2.1/openjpa-2.2.1.jar\n\
      -------------------------------------------------------------------------------------------\n\
      \nThen it will all become green again\nimage:https://cwiki.apache.org/confluence/s/en_GB/5982/f2b47fb3d636c8bc9fd0b11c0ec6d0ae18646be7.1/_/images/icons/emoticons/smile.png[(smile)]\n\
      \n[[JPA-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:tracer-example.html[Tracer\
      \ Example]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-jt400
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: jt400
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: jt400
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: jt400
          spec:
            containers:
            - image: fabric8/connector-jt400:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: jt400
        syntax: jt400:userID:password/systemName/objectPath.type
        title: JT400
        description: The jt400 component allows you to exchanges messages with an AS/400 system using data queues or program call.
        label: messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.jt400.Jt400Component
        groupId: org.apache.camel
        artifactId: camel-jt400
        version: 2.18.1
      componentProperties:
        connectionPool:
          kind: property
          type: object
          javaType: com.ibm.as400.access.AS400ConnectionPool
          deprecated: false
          secret: false
          description: Returns the default connection pool used by this component.
      properties:
        userID:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Returns the ID of the AS/400 user.
        password:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Returns the password of the AS/400 user.
        systemName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Returns the name of the AS/400 system.
        objectPath:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Returns the fully qualified integrated file system path name of the target object of this endpoint.
        type:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.jt400.Jt400Type
          enum:
          - DTAQ
          - PGM
          deprecated: false
          secret: false
          description: Whether to work with data queues or remote program call
        ccsid:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the CCSID to use for the connection with the AS/400 system.
        format:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.jt400.Jt400Configuration.Format
          deprecated: false
          secret: false
          defaultValue: text
          description: Sets the data format for sending messages.
        guiAvailable:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether AS/400 prompting is enabled in the environment running Camel.
        keyed:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use keyed or non-keyed data queues.
        outputFieldsIdxArray:
          kind: parameter
          group: common
          type: object
          javaType: java.lang.Integer[]
          deprecated: false
          secret: false
          description: Specifies which fields (program parameters) are output parameters.
        outputFieldsLengthArray:
          kind: parameter
          group: common
          type: object
          javaType: java.lang.Integer[]
          deprecated: false
          secret: false
          description: Specifies the fields (program parameters) length as in the AS/400 program definition.
        searchKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Search key for keyed data queues.
        searchType:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.jt400.Jt400Configuration.SearchType
          deprecated: false
          secret: false
          defaultValue: EQ
          description: Search type such as EQ for equal etc.
        secured:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether connections to AS/400 are secured with SSL.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        readTimeout:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout in millis the consumer will wait while trying to read a new message of the data queue.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[JT400-JT400Component]]
      JT/400 Component
      ~~~~~~~~~~~~~~~~

      The *`jt400`* component allows you to exchanges messages with an AS/400
      system using data queues.

      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-jt400</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[JT400-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------------------------------------------
      jt400://user:password@system/QSYS.LIB/LIBRARY.LIB/QUEUE.DTAQ[?options]
      ----------------------------------------------------------------------

      To call remote program (*Camel 2.7*)

      [source,java]
      -----------------------------------------------------------------------
      jt400://user:password@system/QSYS.LIB/LIBRARY.LIB/program.PGM[?options]
      -----------------------------------------------------------------------

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

      [[JT400-options]]
      JT400 options
      ^^^^^^^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | connectionPool | AS400ConnectionPool | Returns the default connection pool used by this component.
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The JT400 component supports 34 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | userID | common |  | String | *Required* Returns the ID of the AS/400 user.
      | password | common |  | String | *Required* Returns the password of the AS/400 user.
      | systemName | common |  | String | *Required* Returns the name of the AS/400 system.
      | objectPath | common |  | String | *Required* Returns the fully qualified integrated file system path name of the target object of this endpoint.
      | type | common |  | Jt400Type | *Required* Whether to work with data queues or remote program call
      | ccsid | common |  | int | Sets the CCSID to use for the connection with the AS/400 system.
      | format | common | text | Format | Sets the data format for sending messages.
      | guiAvailable | common | false | boolean | Sets whether AS/400 prompting is enabled in the environment running Camel.
      | keyed | common | false | boolean | Whether to use keyed or non-keyed data queues.
      | outputFieldsIdxArray | common |  | Integer[] | Specifies which fields (program parameters) are output parameters.
      | outputFieldsLengthArray | common |  | Integer[] | Specifies the fields (program parameters) length as in the AS/400 program definition.
      | searchKey | common |  | String | Search key for keyed data queues.
      | searchType | common | EQ | SearchType | Search type such as EQ for equal etc.
      | secured | common | false | boolean | Whether connections to AS/400 are secured with SSL.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | readTimeout | consumer | 30000 | int | Timeout in millis the consumer will wait while trying to read a new message of the data queue.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[JT400-Usage]]
      Usage
      ^^^^^

      When configured as a consumer endpoint, the endpoint will poll a data
      queue on a remote system. For every entry on the data queue, a new
      `Exchange` is sent with the entry's data in the _In_ message's body,
      formatted either as a `String` or a `byte[]`, depending on the format.
      For a provider endpoint, the _In_ message body contents will be put on
      the data queue as either raw bytes or text.

      [[JT400-Connectionpool]]
      Connection pool
      ^^^^^^^^^^^^^^^

      *Available as of Camel 2.10*

      Connection pooling is in use from Camel 2.10 onwards. You can explicit
      configure a connection pool on the Jt400Component, or as an uri option
      on the endpoint.

      [[JT400-Remoteprogramcall]]
      Remote program call (*Camel 2.7*)
      +++++++++++++++++++++++++++++++++

      This endpoint expects the input to be either a String array or byte[]
      array (depending on format) and handles all the CCSID handling through
      the native jt400 library mechanisms. A parameter can be _omitted_ by
      passing null as the value in its position (the remote program has to
      support it). After the program execution the endpoint returns either a
      String array or byte[] array with the values as they were returned by
      the program (the input only parameters will contain the same data as the
      beginning of the invocation). This endpoint does not implement a provider endpoint!

      [[JT400-Example]]
      Example
      ^^^^^^^

      In the snippet below, the data for an exchange sent to the
      `direct:george` endpoint will be put in the data queue `PENNYLANE` in
      library `BEATLES` on a system named `LIVERPOOL`.  +
       Another user connects to the same data queue to receive the information
      from the data queue and forward it to the `mock:ringo` endpoint.

      [source,java]
      -------------------------------------------------------------------------------------------------------
      public class Jt400RouteBuilder extends RouteBuilder {
          @Override
          public void configure() throws Exception {
             from("direct:george").to("jt400://GEORGE:EGROEG@LIVERPOOL/QSYS.LIB/BEATLES.LIB/PENNYLANE.DTAQ");
             from("jt400://RINGO:OGNIR@LIVERPOOL/QSYS.LIB/BEATLES.LIB/PENNYLANE.DTAQ").to("mock:ringo");
          }
      }
      -------------------------------------------------------------------------------------------------------

      [[JT400-Remoteprogramcallexample]]
      Remote program call example (*Camel 2.7*)
      +++++++++++++++++++++++++++++++++++++++++

      In the snippet below, the data Exchange sent to the direct:work endpoint
      will contain three string that will be used as the arguments for the
      program ???compute??? in the library ???assets???. This program will write the
      output values in the 2nd and 3rd parameters. All the parameters will be
      sent to the direct:play endpoint.

      [source,java]
      ---------------------------------------------------------------------------------------------------------------------------------------------------------
      public class Jt400RouteBuilder extends RouteBuilder {
          @Override
          public void configure() throws Exception {
             from("direct:work").to("jt400://GRUPO:ATWORK@server/QSYS.LIB/assets.LIB/compute.PGM?fieldsLength=10,10,512&ouputFieldsIdx=2,3").to(???direct:play???);
          }
      }
      ---------------------------------------------------------------------------------------------------------------------------------------------------------

      [[JT400-Writingtokeyeddataqueues]]
      Writing to keyed data queues
      ++++++++++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------------
      from("jms:queue:input")
      .to("jt400://username:password@system/lib.lib/MSGINDQ.DTAQ?keyed=true");
      ------------------------------------------------------------------------

      [[JT400-Readingfromkeyeddataqueues]]
      Reading from keyed data queues
      ++++++++++++++++++++++++++++++

      [source,java]
      -------------------------------------------------------------------------------------------------------
      from("jt400://username:password@system/lib.lib/MSGOUTDQ.DTAQ?keyed=true&searchKey=MYKEY&searchType=GE")
      .to("jms:queue:output");
      -------------------------------------------------------------------------------------------------------

      [[JT400-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-kafka
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: kafka
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: kafka
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: kafka
          spec:
            containers:
            - image: fabric8/connector-kafka:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: kafka
        syntax: kafka:brokers
        title: Kafka
        description: The kafka component allows messages to be sent to (or consumed from) Apache Kafka brokers.
        label: messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.kafka.KafkaComponent
        groupId: org.apache.camel
        artifactId: camel-kafka
        version: 2.18.1
      componentProperties:
        workerPool:
          kind: property
          type: object
          javaType: java.util.concurrent.ExecutorService
          deprecated: false
          secret: false
          description: To use a shared custom worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing. If using this option then you must handle the lifecycle of the thread pool to shut the pool down when no longer needed.
      properties:
        brokers:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This is for bootstrapping and the producer will only use it for getting metadata (topics partitions and replicas). The socket connections for sending the actual data will be established based on the broker information returned in the metadata. The format is host1:port1host2:port2 and the list can be a subset of brokers or a VIP pointing to a subset of brokers. This option is known as metadata.broker.list in the Kafka documentation.
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The client id is a user-specified string sent in each request to help trace calls. It should logically identify the application making the request.
        groupId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A string that uniquely identifies the group of consumer processes to which this consumer belongs. By setting the same group id multiple processes indicate that they are all part of the same consumer group.
        partitioner:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: org.apache.kafka.clients.producer.internals.DefaultPartitioner
          description: The partitioner class for partitioning messages amongst sub-topics. The default partitioner is based on the hash of the key.
        topic:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the topic to use.
        autoCommitEnable:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true periodically commit to ZooKeeper the offset of messages already fetched by the consumer. This committed offset will be used when the process fails as the position from which the new consumer will begin.
        autoCommitIntervalMs:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: The frequency in ms that the consumer offsets are committed to zookeeper.
        autoOffsetReset:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - latest
          - earliest
          - none
          deprecated: false
          secret: false
          defaultValue: latest
          description: 'What to do when there is no initial offset in ZooKeeper or if an
            offset is out of range: smallest : automatically reset the offset to the smallest
            offset largest : automatically reset the offset to the largest offset fail:
            throw exception to the consumer'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        checkCrcs:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Automatically check the CRC32 of the records consumed. This ensures no on-the-wire or on-disk corruption to the messages occurred. This check adds some overhead so it may be disabled in cases seeking extreme performance.
        consumerId:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Generated automatically if not set.
        consumerRequestTimeoutMs:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "40000"
          description: The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.
        consumersCount:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: The number of consumers that connect to kafka server
        consumerStreams:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Number of concurrent consumers on the consumer
        fetchMinBytes:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: The minimum amount of data the server should return for a fetch request. If insufficient data is available the request will wait for that much data to accumulate before answering the request.
        fetchWaitMaxMs:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "500"
          description: The maximum amount of time the server will block before answering the fetch request if there isn't sufficient data to immediately satisfy fetch.min.bytes
        heartbeatIntervalMs:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "3000"
          description: The expected time between heartbeats to the consumer coordinator when using Kafka's group management facilities. Heartbeats are used to ensure that the consumer's session stays active and to facilitate rebalancing when new consumers join or leave the group. The value must be set lower than session.timeout.ms but typically should be set no higher than 1/3 of that value. It can be adjusted even lower to control the expected time for normal rebalances.
        keyDeserializer:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: org.apache.kafka.common.serialization.StringDeserializer
          description: Deserializer class for key that implements the Deserializer interface.
        maxPartitionFetchBytes:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "1048576"
          description: The maximum amount of data per-partition the server will return. The maximum total memory used for a request will be partitions max.partition.fetch.bytes. This size must be at least as large as the maximum message size the server allows or else it is possible for the producer to send messages larger than the consumer can fetch. If that happens the consumer can get stuck trying to fetch a large message on a certain partition.
        maxPollRecords:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: A unique string that identifies the consumer group this consumer belongs to. This property is required if the consumer uses either the group management functionality by using subscribe(topic) or the Kafka-based offset management strategy.
        partitionAssignor:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: org.apache.kafka.clients.consumer.RangeAssignor
          description: The class name of the partition assignment strategy that the client will use to distribute partition ownership amongst consumer instances when group management is used
        pollTimeoutMs:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: The timeout used when polling the KafkaConsumer.
        seekToBeginning:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true then KafkaConsumer will read from beginning on startup.
        sessionTimeoutMs:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The timeout used to detect failures when using Kafka's group management facilities.
        valueDeserializer:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: org.apache.kafka.common.serialization.StringDeserializer
          description: Deserializer class for value that implements the Deserializer interface.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true then KafkaProducer will ignore the KafkaConstants.TOPIC header setting of the inbound message.
        bufferMemorySize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "33554432"
          description: The total bytes of memory the producer can use to buffer records waiting to be sent to the server. If records are sent faster than they can be delivered to the server the producer will either block or throw an exception based on the preference specified by block.on.buffer.full.This setting should correspond roughly to the total memory the producer will use but is not a hard bound since not all memory the producer uses is used for buffering. Some additional memory will be used for compression (if compression is enabled) as well as for maintaining in-flight requests.
        compressionCodec:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - none
          - gzip
          - snappy
          - lz4
          deprecated: false
          secret: false
          defaultValue: none
          description: This parameter allows you to specify the compression codec for all data generated by this producer. Valid values are none gzip and snappy.
        connectionMaxIdleMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "540000"
          description: Close idle connections after the number of milliseconds specified by this config.
        keySerializerClass:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The serializer class for keys (defaults to the same as for messages if nothing is given).
        lingerMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "0"
          description: 'The producer groups together any records that arrive in between
            request transmissions into a single batched request. Normally this occurs only
            under load when records arrive faster than they can be sent out. However in
            some circumstances the client may want to reduce the number of requests even
            under moderate load. This setting accomplishes this by adding a small amount
            of artificial delaythat is rather than immediately sending out a record the
            producer will wait for up to the given delay to allow other records to be sent
            so that the sends can be batched together. This can be thought of as analogous
            to Nagle''s algorithm in TCP. This setting gives the upper bound on the delay
            for batching: once we get batch.size worth of records for a partition it will
            be sent immediately regardless of this setting however if we have fewer than
            this many bytes accumulated for this partition we will ''linger'' for the specified
            time waiting for more records to show up. This setting defaults to 0 (i.e. no
            delay). Setting linger.ms=5 for example would have the effect of reducing the
            number of requests sent but would add up to 5ms of latency to records sent in
            the absense of load.'
        maxBlockMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: 'The configuration controls how long sending to kafka will block.
            These methods can be blocked for multiple reasons. For e.g: buffer full metadata
            unavailable.This configuration imposes maximum limit on the total time spent
            in fetching metadata serialization of key and value partitioning and allocation
            of buffer memory when doing a send(). In case of partitionsFor() this configuration
            imposes a maximum time threshold on waiting for metadata'
        maxInFlightRequest:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "5"
          description: The maximum number of unacknowledged requests the client will send on a single connection before blocking. Note that if this setting is set to be greater than 1 and there are failed sends there is a risk of message re-ordering due to retries (i.e. if retries are enabled).
        maxRequestSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "1048576"
          description: The maximum size of a request. This is also effectively a cap on the maximum record size. Note that the server has its own cap on record size which may be different from this. This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests.
        metadataMaxAgeMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: The period of time in milliseconds after which we force a refresh of metadata even if we haven't seen any partition leadership changes to proactively discover any new brokers or partitions.
        metricReporters:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of classes to use as metrics reporters. Implementing the MetricReporter interface allows plugging in classes that will be notified of new metric creation. The JmxReporter is always included to register JMX statistics.
        metricsSampleWindowMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The number of samples maintained to compute metrics.
        noOfMetricsSample:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2"
          description: The number of samples maintained to compute metrics.
        producerBatchSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "16384"
          description: The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition. This helps performance on both the client and the server. This configuration controls the default batch size in bytes. No attempt will be made to batch records larger than this size.Requests sent to brokers will contain multiple batches one for each partition with data available to be sent.A small batch size will make batching less common and may reduce throughput (a batch size of zero will disable batching entirely). A very large batch size may use memory a bit more wastefully as we will always allocate a buffer of the specified batch size in anticipation of additional records.
        queueBufferingMaxMessages:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: The maximum number of unsent messages that can be queued up the producer when using async mode before either the producer must be blocked or data must be dropped.
        receiveBufferBytes:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "32768"
          description: The size of the TCP receive buffer (SO_RCVBUF) to use when reading data.
        reconnectBackoffMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "50"
          description: The amount of time to wait before attempting to reconnect to a given host. This avoids repeatedly connecting to a host in a tight loop. This backoff applies to all requests sent by the consumer to the broker.
        recordMetadata:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the producer should store the RecordMetadata results from sending to Kafka. The results are stored in a List containing the RecordMetadata metadata's. The list is stored on a header with the key link KafkaConstantsKAFKA_RECORDMETA
        requestRequiredAcks:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - -1
          - "0"
          - "1"
          - all
          deprecated: false
          secret: false
          defaultValue: "1"
          description: 'The number of acknowledgments the producer requires the leader to
            have received before considering a request complete. This controls the durability
            of records that are sent. The following settings are common: acks=0 If set to
            zero then the producer will not wait for any acknowledgment from the server
            at all. The record will be immediately added to the socket buffer and considered
            sent. No guarantee can be made that the server has received the record in this
            case and the retries configuration will not take effect (as the client won''t
            generally know of any failures). The offset given back for each record will
            always be set to -1. acks=1 This will mean the leader will write the record
            to its local log but will respond without awaiting full acknowledgement from
            all followers. In this case should the leader fail immediately after acknowledging
            the record but before the followers have replicated it then the record will
            be lost. acks=all This means the leader will wait for the full set of in-sync
            replicas to acknowledge the record. This guarantees that the record will not
            be lost as long as at least one in-sync replica remains alive. This is the strongest
            available guarantee.'
        requestTimeoutMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The amount of time the broker will wait trying to meet the request.required.acks requirement before sending back an error to the client.
        retries:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error. Note that this retry is no different than if the client resent the record upon receiving the error. Allowing retries will potentially change the ordering of records because if two records are sent to a single partition and the first fails and is retried but the second succeeds then the second record may appear first.
        retryBackoffMs:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Before each retry the producer refreshes the metadata of relevant topics to see if a new leader has been elected. Since leader election takes a bit of time this property specifies the amount of time that the producer waits before refreshing the metadata.
        sendBufferBytes:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "131072"
          description: Socket write buffer size
        serializerClass:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The serializer class for messages. The default encoder takes a byte and returns the same byte. The default class is kafka.serializer.DefaultEncoder
        workerPool:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: java.util.concurrent.ExecutorService
          deprecated: false
          secret: false
          description: To use a custom worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing.
        workerPoolCoreSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Number of core threads for the worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing.
        workerPoolMaxSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "20"
          description: Maximum number of threads for the worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        kerberosBeforeReloginMinTime:
          kind: parameter
          group: security
          label: common,security
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Login thread sleep time between refresh attempts.
        kerberosInitCmd:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: /usr/bin/kinit
          description: Kerberos kinit command path. Default is /usr/bin/kinit
        kerberosPrincipalToLocalRules:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: DEFAULT
          description: A list of rules for mapping from principal names to short names (typically operating system usernames). The rules are evaluated in order and the first rule that matches a principal name is used to map it to a short name. Any later rules in the list are ignored. By default principal names of the form username/hostnameREALM are mapped to username. For more details on the format please see security authorization and acls. Multiple values can be separated by comma
        kerberosRenewJitter:
          kind: parameter
          group: security
          label: common,security
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          defaultValue: "0.05"
          description: Percentage of random jitter added to the renewal time.
        kerberosRenewWindowFactor:
          kind: parameter
          group: security
          label: common,security
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          defaultValue: "0.8"
          description: Login thread will sleep until the specified window factor of time from last refresh to ticket's expiry has been reached at which time it will try to renew the ticket.
        saslKerberosServiceName:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Kerberos principal name that Kafka runs as. This can be defined either in Kafka's JAAS config or in Kafka's config.
        saslMechanism:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: GSSAPI
          description: The Simple Authentication and Security Layer (SASL) Mechanism used. For the valid values see http://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml
        securityProtocol:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: PLAINTEXT
          description: Protocol used to communicate with brokers. Currently only PLAINTEXT and SSL are supported.
        sslCipherSuites:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of cipher suites. This is a named combination of authentication encryption MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS or SSL network protocol.By default all the available cipher suites are supported.
        sslEnabledProtocols:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLSv1.2,TLSv1.1,TLSv1
          description: The list of protocols enabled for SSL connections. TLSv1.2 TLSv1.1 and TLSv1 are enabled by default.
        sslEndpointAlgorithm:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The endpoint identification algorithm to validate server hostname using server certificate.
        sslKeymanagerAlgorithm:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: SunX509
          description: The algorithm used by key manager factory for SSL connections. Default value is the key manager factory algorithm configured for the Java Virtual Machine.
        sslKeyPassword:
          kind: parameter
          group: security
          label: producer,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password of the private key in the key store file. This is optional for client.
        sslKeystoreLocation:
          kind: parameter
          group: security
          label: producer,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The location of the key store file. This is optional for client and can be used for two-way authentication for client.
        sslKeystorePassword:
          kind: parameter
          group: security
          label: producer,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The store password for the key store file.This is optional for client and only needed if ssl.keystore.location is configured.
        sslKeystoreType:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: JKS
          description: The file format of the key store file. This is optional for client. Default value is JKS
        sslProtocol:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLS
          description: The SSL protocol used to generate the SSLContext. Default setting is TLS which is fine for most cases. Allowed values in recent JVMs are TLS TLSv1.1 and TLSv1.2. SSL SSLv2 and SSLv3 may be supported in older JVMs but their usage is discouraged due to known security vulnerabilities.
        sslProvider:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the security provider used for SSL connections. Default value is the default security provider of the JVM.
        sslTrustmanagerAlgorithm:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: PKIX
          description: The algorithm used by trust manager factory for SSL connections. Default value is the trust manager factory algorithm configured for the Java Virtual Machine.
        sslTruststoreLocation:
          kind: parameter
          group: security
          label: producer,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The location of the trust store file.
        sslTruststorePassword:
          kind: parameter
          group: security
          label: producer,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password for the trust store file.
        sslTruststoreType:
          kind: parameter
          group: security
          label: common,security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: JKS
          description: The file format of the trust store file. Default value is JKS.
    documentation.adoc: |+
      [[Kafka-KafkaComponent]]
      Kafka Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.13*

      The *kafka:* component is used for communicating with
      http://kafka.apache.org/[Apache Kafka]??message broker.

      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-kafka</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Kafka-Camel2.17ornewer]]
      Camel 2.17 or newer
      +++++++++++++++++++

      Scala is no longer used, as we use the kafka java client.

      [[Kafka-Camel2.16orolder]]
      Camel 2.16 or older
      +++++++++++++++++++

      And then the Scala libraries of choice. camel-kafka does not include
      that dependency, but assumes it is provided. For example to use Scala
      2.10.4 add:

      [source,xml]
      --------------------------------------------
          <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.10.4</version>
          </dependency>
      --------------------------------------------

      [[Kafka-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------
      kafka:server:port[?options]
      ---------------------------

      ??

      [[Kafka-Options]]
      Options (Camel 2.16 or older)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^





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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | workerPool | ExecutorService | To use a shared custom worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing. If using this option then you must handle the lifecycle of the thread pool to shut the pool down when no longer needed.
      |=======================================================================
      {% endraw %}
      // component options: END





















      // endpoint options: START
      The Kafka component supports 77 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | brokers | common |  | String | *Required* This is for bootstrapping and the producer will only use it for getting metadata (topics partitions and replicas). The socket connections for sending the actual data will be established based on the broker information returned in the metadata. The format is host1:port1host2:port2 and the list can be a subset of brokers or a VIP pointing to a subset of brokers. This option is known as metadata.broker.list in the Kafka documentation.
      | clientId | common |  | String | The client id is a user-specified string sent in each request to help trace calls. It should logically identify the application making the request.
      | groupId | common |  | String | A string that uniquely identifies the group of consumer processes to which this consumer belongs. By setting the same group id multiple processes indicate that they are all part of the same consumer group.
      | partitioner | common | org.apache.kafka.clients.producer.internals.DefaultPartitioner | String | The partitioner class for partitioning messages amongst sub-topics. The default partitioner is based on the hash of the key.
      | topic | common |  | String | *Required* Name of the topic to use.
      | autoCommitEnable | consumer | true | Boolean | If true periodically commit to ZooKeeper the offset of messages already fetched by the consumer. This committed offset will be used when the process fails as the position from which the new consumer will begin.
      | autoCommitIntervalMs | consumer | 5000 | Integer | The frequency in ms that the consumer offsets are committed to zookeeper.
      | autoOffsetReset | consumer | latest | String | What to do when there is no initial offset in ZooKeeper or if an offset is out of range: smallest : automatically reset the offset to the smallest offset largest : automatically reset the offset to the largest offset fail: throw exception to the consumer
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | checkCrcs | consumer | true | Boolean | Automatically check the CRC32 of the records consumed. This ensures no on-the-wire or on-disk corruption to the messages occurred. This check adds some overhead so it may be disabled in cases seeking extreme performance.
      | consumerId | consumer |  | String | Generated automatically if not set.
      | consumerRequestTimeoutMs | consumer | 40000 | Integer | The configuration controls the maximum amount of time the client will wait for the response of a request. If the response is not received before the timeout elapses the client will resend the request if necessary or fail the request if retries are exhausted.
      | consumersCount | consumer | 1 | int | The number of consumers that connect to kafka server
      | consumerStreams | consumer | 10 | int | Number of concurrent consumers on the consumer
      | fetchMinBytes | consumer | 1024 | Integer | The minimum amount of data the server should return for a fetch request. If insufficient data is available the request will wait for that much data to accumulate before answering the request.
      | fetchWaitMaxMs | consumer | 500 | Integer | The maximum amount of time the server will block before answering the fetch request if there isn't sufficient data to immediately satisfy fetch.min.bytes
      | heartbeatIntervalMs | consumer | 3000 | Integer | The expected time between heartbeats to the consumer coordinator when using Kafka's group management facilities. Heartbeats are used to ensure that the consumer's session stays active and to facilitate rebalancing when new consumers join or leave the group. The value must be set lower than session.timeout.ms but typically should be set no higher than 1/3 of that value. It can be adjusted even lower to control the expected time for normal rebalances.
      | keyDeserializer | consumer | org.apache.kafka.common.serialization.StringDeserializer | String | Deserializer class for key that implements the Deserializer interface.
      | maxPartitionFetchBytes | consumer | 1048576 | Integer | The maximum amount of data per-partition the server will return. The maximum total memory used for a request will be partitions max.partition.fetch.bytes. This size must be at least as large as the maximum message size the server allows or else it is possible for the producer to send messages larger than the consumer can fetch. If that happens the consumer can get stuck trying to fetch a large message on a certain partition.
      | maxPollRecords | consumer | 2147483647 | Integer | A unique string that identifies the consumer group this consumer belongs to. This property is required if the consumer uses either the group management functionality by using subscribe(topic) or the Kafka-based offset management strategy.
      | partitionAssignor | consumer | org.apache.kafka.clients.consumer.RangeAssignor | String | The class name of the partition assignment strategy that the client will use to distribute partition ownership amongst consumer instances when group management is used
      | pollTimeoutMs | consumer | 5000 | Long | The timeout used when polling the KafkaConsumer.
      | seekToBeginning | consumer | false | boolean | If the option is true then KafkaConsumer will read from beginning on startup.
      | sessionTimeoutMs | consumer | 30000 | Integer | The timeout used to detect failures when using Kafka's group management facilities.
      | valueDeserializer | consumer | org.apache.kafka.common.serialization.StringDeserializer | String | Deserializer class for value that implements the Deserializer interface.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | bridgeEndpoint | producer | false | boolean | If the option is true then KafkaProducer will ignore the KafkaConstants.TOPIC header setting of the inbound message.
      | bufferMemorySize | producer | 33554432 | Integer | The total bytes of memory the producer can use to buffer records waiting to be sent to the server. If records are sent faster than they can be delivered to the server the producer will either block or throw an exception based on the preference specified by block.on.buffer.full.This setting should correspond roughly to the total memory the producer will use but is not a hard bound since not all memory the producer uses is used for buffering. Some additional memory will be used for compression (if compression is enabled) as well as for maintaining in-flight requests.
      | compressionCodec | producer | none | String | This parameter allows you to specify the compression codec for all data generated by this producer. Valid values are none gzip and snappy.
      | connectionMaxIdleMs | producer | 540000 | Integer | Close idle connections after the number of milliseconds specified by this config.
      | keySerializerClass | producer |  | String | The serializer class for keys (defaults to the same as for messages if nothing is given).
      | lingerMs | producer | 0 | Integer | The producer groups together any records that arrive in between request transmissions into a single batched request. Normally this occurs only under load when records arrive faster than they can be sent out. However in some circumstances the client may want to reduce the number of requests even under moderate load. This setting accomplishes this by adding a small amount of artificial delaythat is rather than immediately sending out a record the producer will wait for up to the given delay to allow other records to be sent so that the sends can be batched together. This can be thought of as analogous to Nagle's algorithm in TCP. This setting gives the upper bound on the delay for batching: once we get batch.size worth of records for a partition it will be sent immediately regardless of this setting however if we have fewer than this many bytes accumulated for this partition we will 'linger' for the specified time waiting for more records to show up. This setting defaults to 0 (i.e. no delay). Setting linger.ms=5 for example would have the effect of reducing the number of requests sent but would add up to 5ms of latency to records sent in the absense of load.
      | maxBlockMs | producer | 60000 | Integer | The configuration controls how long sending to kafka will block. These methods can be blocked for multiple reasons. For e.g: buffer full metadata unavailable.This configuration imposes maximum limit on the total time spent in fetching metadata serialization of key and value partitioning and allocation of buffer memory when doing a send(). In case of partitionsFor() this configuration imposes a maximum time threshold on waiting for metadata
      | maxInFlightRequest | producer | 5 | Integer | The maximum number of unacknowledged requests the client will send on a single connection before blocking. Note that if this setting is set to be greater than 1 and there are failed sends there is a risk of message re-ordering due to retries (i.e. if retries are enabled).
      | maxRequestSize | producer | 1048576 | Integer | The maximum size of a request. This is also effectively a cap on the maximum record size. Note that the server has its own cap on record size which may be different from this. This setting will limit the number of record batches the producer will send in a single request to avoid sending huge requests.
      | metadataMaxAgeMs | producer | 300000 | Integer | The period of time in milliseconds after which we force a refresh of metadata even if we haven't seen any partition leadership changes to proactively discover any new brokers or partitions.
      | metricReporters | producer |  | String | A list of classes to use as metrics reporters. Implementing the MetricReporter interface allows plugging in classes that will be notified of new metric creation. The JmxReporter is always included to register JMX statistics.
      | metricsSampleWindowMs | producer | 30000 | Integer | The number of samples maintained to compute metrics.
      | noOfMetricsSample | producer | 2 | Integer | The number of samples maintained to compute metrics.
      | producerBatchSize | producer | 16384 | Integer | The producer will attempt to batch records together into fewer requests whenever multiple records are being sent to the same partition. This helps performance on both the client and the server. This configuration controls the default batch size in bytes. No attempt will be made to batch records larger than this size.Requests sent to brokers will contain multiple batches one for each partition with data available to be sent.A small batch size will make batching less common and may reduce throughput (a batch size of zero will disable batching entirely). A very large batch size may use memory a bit more wastefully as we will always allocate a buffer of the specified batch size in anticipation of additional records.
      | queueBufferingMaxMessages | producer | 10000 | Integer | The maximum number of unsent messages that can be queued up the producer when using async mode before either the producer must be blocked or data must be dropped.
      | receiveBufferBytes | producer | 32768 | Integer | The size of the TCP receive buffer (SO_RCVBUF) to use when reading data.
      | reconnectBackoffMs | producer | 50 | Integer | The amount of time to wait before attempting to reconnect to a given host. This avoids repeatedly connecting to a host in a tight loop. This backoff applies to all requests sent by the consumer to the broker.
      | recordMetadata | producer | true | boolean | Whether the producer should store the RecordMetadata results from sending to Kafka. The results are stored in a List containing the RecordMetadata metadata's. The list is stored on a header with the key link KafkaConstantsKAFKA_RECORDMETA
      | requestRequiredAcks | producer | 1 | String | The number of acknowledgments the producer requires the leader to have received before considering a request complete. This controls the durability of records that are sent. The following settings are common: acks=0 If set to zero then the producer will not wait for any acknowledgment from the server at all. The record will be immediately added to the socket buffer and considered sent. No guarantee can be made that the server has received the record in this case and the retries configuration will not take effect (as the client won't generally know of any failures). The offset given back for each record will always be set to -1. acks=1 This will mean the leader will write the record to its local log but will respond without awaiting full acknowledgement from all followers. In this case should the leader fail immediately after acknowledging the record but before the followers have replicated it then the record will be lost. acks=all This means the leader will wait for the full set of in-sync replicas to acknowledge the record. This guarantees that the record will not be lost as long as at least one in-sync replica remains alive. This is the strongest available guarantee.
      | requestTimeoutMs | producer | 30000 | Integer | The amount of time the broker will wait trying to meet the request.required.acks requirement before sending back an error to the client.
      | retries | producer | 0 | Integer | Setting a value greater than zero will cause the client to resend any record whose send fails with a potentially transient error. Note that this retry is no different than if the client resent the record upon receiving the error. Allowing retries will potentially change the ordering of records because if two records are sent to a single partition and the first fails and is retried but the second succeeds then the second record may appear first.
      | retryBackoffMs | producer | 100 | Integer | Before each retry the producer refreshes the metadata of relevant topics to see if a new leader has been elected. Since leader election takes a bit of time this property specifies the amount of time that the producer waits before refreshing the metadata.
      | sendBufferBytes | producer | 131072 | Integer | Socket write buffer size
      | serializerClass | producer |  | String | The serializer class for messages. The default encoder takes a byte and returns the same byte. The default class is kafka.serializer.DefaultEncoder
      | workerPool | producer |  | ExecutorService | To use a custom worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing.
      | workerPoolCoreSize | producer | 10 | Integer | Number of core threads for the worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing.
      | workerPoolMaxSize | producer | 20 | Integer | Maximum number of threads for the worker pool for continue routing Exchange after kafka server has acknowledge the message that was sent to it from KafkaProducer using asynchronous non-blocking processing.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | kerberosBeforeReloginMinTime | security | 60000 | Integer | Login thread sleep time between refresh attempts.
      | kerberosInitCmd | security | /usr/bin/kinit | String | Kerberos kinit command path. Default is /usr/bin/kinit
      | kerberosPrincipalToLocalRules | security | DEFAULT | String | A list of rules for mapping from principal names to short names (typically operating system usernames). The rules are evaluated in order and the first rule that matches a principal name is used to map it to a short name. Any later rules in the list are ignored. By default principal names of the form username/hostnameREALM are mapped to username. For more details on the format please see security authorization and acls. Multiple values can be separated by comma
      | kerberosRenewJitter | security | 0.05 | Double | Percentage of random jitter added to the renewal time.
      | kerberosRenewWindowFactor | security | 0.8 | Double | Login thread will sleep until the specified window factor of time from last refresh to ticket's expiry has been reached at which time it will try to renew the ticket.
      | saslKerberosServiceName | security |  | String | The Kerberos principal name that Kafka runs as. This can be defined either in Kafka's JAAS config or in Kafka's config.
      | saslMechanism | security | GSSAPI | String | The Simple Authentication and Security Layer (SASL) Mechanism used. For the valid values see http://www.iana.org/assignments/sasl-mechanisms/sasl-mechanisms.xhtml
      | securityProtocol | security | PLAINTEXT | String | Protocol used to communicate with brokers. Currently only PLAINTEXT and SSL are supported.
      | sslCipherSuites | security |  | String | A list of cipher suites. This is a named combination of authentication encryption MAC and key exchange algorithm used to negotiate the security settings for a network connection using TLS or SSL network protocol.By default all the available cipher suites are supported.
      | sslEnabledProtocols | security | TLSv1.2,TLSv1.1,TLSv1 | String | The list of protocols enabled for SSL connections. TLSv1.2 TLSv1.1 and TLSv1 are enabled by default.
      | sslEndpointAlgorithm | security |  | String | The endpoint identification algorithm to validate server hostname using server certificate.
      | sslKeymanagerAlgorithm | security | SunX509 | String | The algorithm used by key manager factory for SSL connections. Default value is the key manager factory algorithm configured for the Java Virtual Machine.
      | sslKeyPassword | security |  | String | The password of the private key in the key store file. This is optional for client.
      | sslKeystoreLocation | security |  | String | The location of the key store file. This is optional for client and can be used for two-way authentication for client.
      | sslKeystorePassword | security |  | String | The store password for the key store file.This is optional for client and only needed if ssl.keystore.location is configured.
      | sslKeystoreType | security | JKS | String | The file format of the key store file. This is optional for client. Default value is JKS
      | sslProtocol | security | TLS | String | The SSL protocol used to generate the SSLContext. Default setting is TLS which is fine for most cases. Allowed values in recent JVMs are TLS TLSv1.1 and TLSv1.2. SSL SSLv2 and SSLv3 may be supported in older JVMs but their usage is discouraged due to known security vulnerabilities.
      | sslProvider | security |  | String | The name of the security provider used for SSL connections. Default value is the default security provider of the JVM.
      | sslTrustmanagerAlgorithm | security | PKIX | String | The algorithm used by trust manager factory for SSL connections. Default value is the trust manager factory algorithm configured for the Java Virtual Machine.
      | sslTruststoreLocation | security |  | String | The location of the trust store file.
      | sslTruststorePassword | security |  | String | The password for the trust store file.
      | sslTruststoreType | security | JKS | String | The file format of the trust store file. Default value is JKS.
      |=======================================================================
      {% endraw %}
      // endpoint options: END

















      For more information about Producer/Consumer configuration:

      http://kafka.apache.org/documentation.html#newconsumerconfigs[http://kafka.apache.org/documentation.html#newconsumerconfigs]
      http://kafka.apache.org/documentation.html#producerconfigs[http://kafka.apache.org/documentation.html#producerconfigs]

      [[Kafka-Samples]]
      Samples
      ^^^^^^^

      [[Kafka-Camel2.16orolder.1]]
      Camel 2.16 or older
      +++++++++++++++++++

      Consuming messages:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------
      from("kafka:localhost:9092?topic=test&zookeeperHost=localhost&zookeeperPort=2181&groupId=group1").to("log:input");
      ------------------------------------------------------------------------------------------------------------------

      Producing messages:

      See unit tests of camel-kafka for more examples

      [[Kafka-Camel2.17ornewer]]
      Camel 2.17 or newer
      +++++++++++++++++++

      Consuming messages:

      [source,java]
      -------------------------------------------------------------------------------------------------
      from("kafka:localhost:9092?topic=test&groupId=testing&autoOffsetReset=earliest&consumersCount=1")
                              .process(new Processor() {
                                  @Override
                                  public void process(Exchange exchange)
                                          throws Exception {
                                      String messageKey = "";
                                      if (exchange.getIn() != null) {
                                          Message message = exchange.getIn();
                                          Integer partitionId = (Integer) message
                                                  .getHeader(KafkaConstants.PARTITION);
                                          String topicName = (String) message
                                                  .getHeader(KafkaConstants.TOPIC);
                                          if (message.getHeader(KafkaConstants.KEY) != null)
                                              messageKey = (String) message
                                                      .getHeader(KafkaConstants.KEY);
                                          Object data = message.getBody();


                                          System.out.println("topicName :: "
                                                  + topicName + " partitionId :: "
                                                  + partitionId + " messageKey :: "
                                                  + messageKey + " message :: "
                                                  + data + "\n");
                                      }
                                  }
                              }).to("log:input");
      -------------------------------------------------------------------------------------------------

      ??

      Producing messages:

      [source,java]
      ---------------------------------------------------------------------------------------------------------------
      from("direct:start").process(new Processor() {
                          @Override
                          public void process(Exchange exchange) throws Exception {
                              exchange.getIn().setBody("Test Message from Camel Kafka Component Final",String.class);
                              exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, 0);
                              exchange.getIn().setHeader(KafkaConstants.KEY, "1");
                          }
                      }).to("kafka:localhost:9092?topic=test");
      ---------------------------------------------------------------------------------------------------------------

      ??

      [[Kafka-Endpoints]]
      Endpoints
      ~~~~~~~~~

      Camel supports the link:message-endpoint.html[Message Endpoint] pattern
      using the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html[Endpoint]
      interface. Endpoints are usually created by a
      link:component.html[Component] and Endpoints are usually referred to in
      the link:dsl.html[DSL] via their link:uris.html[URIs].

      From an Endpoint you can use the following methods

      * http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createProducer()[createProducer()]
      will create a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Producer.html[Producer]
      for sending message exchanges to the endpoint

      * http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createConsumer(org.apache.camel.Processor)[createConsumer()]
      implements the link:event-driven-consumer.html[Event Driven Consumer]
      pattern for consuming message exchanges from the endpoint via a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
      when creating a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Consumer.html[Consumer]

      * http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createPollingConsumer()[createPollingConsumer()]
      implements the link:polling-consumer.html[Polling Consumer] pattern for
      consuming message exchanges from the endpoint via a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/PollingConsumer.html[PollingConsumer]

      [[Kafka-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:message-endpoint.html[Message Endpoint] pattern
      * link:uris.html[URIs]
      * link:writing-components.html[Writing Components]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-kestrel
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: kestrel
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: kestrel
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: kestrel
          spec:
            containers:
            - image: fabric8/connector-kestrel:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: kestrel
        syntax: kestrel:addresses/queue
        title: Kestrel
        description: The kestrel component allows messages to be sent to (or consumed from) Kestrel brokers.
        label: messaging
        deprecated: true
        async: false
        javaType: org.apache.camel.component.kestrel.KestrelComponent
        groupId: org.apache.camel
        artifactId: camel-kestrel
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.kestrel.KestrelConfiguration
          deprecated: false
          secret: false
          description: To use a shared configured configuration as base for creating new endpoints.
      properties:
        addresses:
          kind: path
          group: common
          type: array
          javaType: java.lang.String[]
          deprecated: false
          secret: false
          defaultValue: localhost:22133
          description: The address(es) on which kestrel is running
        queue:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The queue we are polling
        concurrentConsumers:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: How many concurrent listeners to schedule for the thread pool
        waitTimeMs:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: How long a given wait should block (server side) in milliseconds
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Kestrel-KestrelComponent]]
      Kestrel Component
      ~~~~~~~~~~~~~~~~~

      The Kestrel component allows messages to be sent to a
      https://github.com/robey/kestrel[Kestrel] queue, or messages to be
      consumed from a Kestrel queue. This component uses the
      http://code.google.com/p/spymemcached/[spymemcached] client for
      memcached protocol communication with Kestrel servers.

      WARNING: The kestrel project is inactive and the Camel team regard this
      components as deprecated.


      [[Kestrel-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------------
      kestrel://[addresslist/]queuename[?options]
      -------------------------------------------

      Where *queuename* is the name of the queue on Kestrel. The *addresslist*
      part of the URI may include one or more `host:port` pairs. For example,
      to connect to the queue `foo` on `kserver01:22133`, use:

      [source,java]
      -----------------------------
      kestrel://kserver01:22133/foo
      -----------------------------

      If the addresslist is omitted, `localhost:22133` is assumed, i.e.:

      [source,java]
      -------------
      kestrel://foo
      -------------

      Likewise, if a port is omitted from a `host:port` pair in addresslist,
      the default port 22133 is assumed, i.e.:

      [source,java]
      -----------------------
      kestrel://kserver01/foo
      -----------------------

      Here is an example of a Kestrel endpoint URI used for producing to a
      clustered queue:

      [source,java]
      -----------------------------------------------------------------
      kestrel://kserver01:22133,kserver02:22133,kserver03:22133/massive
      -----------------------------------------------------------------

      Here is an example of a Kestrel endpoint URI used for consuming
      concurrently from a queue:

      [source,java]
      -----------------------------------------------------------------------
      kestrel://kserver03:22133/massive?concurrentConsumers=25&waitTimeMs=500
      -----------------------------------------------------------------------

      [[Kestrel-Options]]
      Options
      ^^^^^^^





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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | KestrelConfiguration | To use a shared configured configuration as base for creating new endpoints.
      |=======================================================================
      {% endraw %}
      // component options: END







      // endpoint options: START
      The Kestrel component supports 8 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | addresses | common | localhost:22133 | String[] | The address(es) on which kestrel is running
      | queue | common |  | String | *Required* The queue we are polling
      | concurrentConsumers | common | 1 | int | How many concurrent listeners to schedule for the thread pool
      | waitTimeMs | common | 100 | int | How long a given wait should block (server side) in milliseconds
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Kestrel-ConfiguringtheKestrelcomponentusingSpringXML]]
      Configuring the Kestrel component using Spring XML
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The simplest form of explicit configuration is as follows:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

        <bean id="kestrel" class="org.apache.camel.component.kestrel.KestrelComponent"/>

        <camelContext xmlns="http://camel.apache.org/schema/spring">
        </camelContext>

      </beans>
      ---------------------------------------------------------------------------------------------------------------

      That will enable the Kestrel component with all default settings, i.e.
      it will use `localhost:22133`, 100ms wait time, and a single
      non-concurrent consumer by default.

      To use specific options in the base configuration (which supplies
      configuration to endpoints whose `?properties` are not specified), you
      can set up a KestrelConfiguration POJO as follows:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

        <bean id="kestrelConfiguration" class="org.apache.camel.component.kestrel.KestrelConfiguration">
          <property name="addresses" value="kestrel01:22133"/>
          <property name="waitTimeMs" value="100"/>
          <property name="concurrentConsumers" value="1"/>
        </bean>

        <bean id="kestrel" class="org.apache.camel.component.kestrel.KestrelComponent">
          <property name="configuration" ref="kestrelConfiguration"/>
        </bean>

        <camelContext xmlns="http://camel.apache.org/schema/spring">
        </camelContext>

      </beans>
      ---------------------------------------------------------------------------------------------------------------

      [[Kestrel-UsageExamples]]
      Usage Examples
      ^^^^^^^^^^^^^^

      [[Kestrel-Example1:Consuming]]
      Example 1: Consuming
      ++++++++++++++++++++

      [source,java]
      -------------------------------------------------------------------------------
      from("kestrel://kserver02:22133/massive?concurrentConsumers=10&waitTimeMs=500")
        .bean("myConsumer", "onMessage");
      -------------------------------------------------------------------------------

      [source,java]
      -------------------------------------------
      public class MyConsumer {
          public void onMessage(String message) {
              ...
          }
      }
      -------------------------------------------

      [[Kestrel-Example2:Producing]]
      Example 2: Producing
      ++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------------------
      public class MyProducer {
          @EndpointInject(uri = "kestrel://kserver01:22133,kserver02:22133/myqueue")
          ProducerTemplate producerTemplate;

          public void produceSomething() {
              producerTemplate.sendBody("Hello, world.");
          }
      }
      ------------------------------------------------------------------------------

      [[Kestrel-Example3:SpringXMLConfiguration]]
      Example 3: Spring XML Configuration
      +++++++++++++++++++++++++++++++++++

      [source,xml]
      ----------------------------------------------------------------------------------------
        <camelContext xmlns="http://camel.apache.org/schema/spring">
          <route>
            <from uri="kestrel://ks01:22133/sequential?concurrentConsumers=1&waitTimeMs=500"/>
            <bean ref="myBean" method="onMessage"/>
          </route>
          <route>
            <from uri="direct:start"/>
            <to uri="kestrel://ks02:22133/stuff"/>
          </route>
        </camelContext>
      ----------------------------------------------------------------------------------------

      [source,java]
      -------------------------------------------
      public class MyBean {
          public void onMessage(String message) {
              ...
          }
      }
      -------------------------------------------

      [[Kestrel-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      The Kestrel component has the following dependencies:

      * `spymemcached` 2.5 (or greater)

      [[Kestrel-spymemcached]]
      spymemcached
      ++++++++++++

      You *must* have the `spymemcached` jar on your classpath. Here is a
      snippet you can use in your pom.xml:

      [source,java]
      ------------------------------------
      <dependency>
        <groupId>spy</groupId>
        <artifactId>memcached</artifactId>
        <version>2.5</version>
      </dependency>
      ------------------------------------

      Alternatively, you can
      http://code.google.com/p/spymemcached/downloads/list[download the jar]
      directly.

      Warning: Limitations

      NOTE: The spymemcached client library does *not* work properly with
      kestrel when JVM assertions are enabled. There is a known issue with
      spymemcached when assertions are enabled and a requested key contains
      the `/t=...` extension (i.e. if you're using the `waitTimeMs` option on
      an endpoint URI, which is highly encouraged).
      Fortunately, JVM assertions are *disabled by default*, unless you
      http://download.oracle.com/javase/1.4.2/docs/guide/lang/assert.html[explicitly
      enable them], so this should not present a problem under normal
      circumstances.
      Something to note is that Maven's Surefire test plugin *enables*
      assertions. If you're using this component in a Maven test environment,
      you may need to set `enableAssertions` to `false`. Please refer to the
      http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html[surefire:test
      reference] for details.

      [[Kestrel-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-krati
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: krati
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: krati
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: krati
          spec:
            containers:
            - image: fabric8/connector-krati:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: krati
        syntax: krati:path
        title: Krati
        description: The krati allows the use krati datastores and datasets inside Camel.
        label: database,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.krati.KratiComponent
        groupId: org.apache.camel
        artifactId: camel-krati
        version: 2.18.1
      componentProperties: {}
      properties:
        path:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path of the datastore is the relative path of the folder that krati will use for its datastore.
        hashFunction:
          kind: parameter
          group: common
          type: object
          javaType: krati.util.HashFunction<byte[]>
          deprecated: false
          secret: false
          description: The hash function to use.
        initialCapacity:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: The inital capcity of the store.
        keySerializer:
          kind: parameter
          group: common
          type: object
          javaType: krati.io.Serializer<java.lang.Object>
          deprecated: false
          secret: false
          description: The serializer that will be used to serialize the key.
        segmentFactory:
          kind: parameter
          group: common
          type: object
          javaType: krati.core.segment.SegmentFactory
          deprecated: false
          secret: false
          description: Sets the segment factory of the target store.
        segmentFileSize:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "64"
          description: Data store segments size in MB.
        valueSerializer:
          kind: parameter
          group: common
          type: object
          javaType: krati.io.Serializer<java.lang.Object>
          deprecated: false
          secret: false
          description: The serializer that will be used to serialize the value.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The maximum number of messages which can be received in one poll. This can be used to avoid reading in too much data and taking up too much memory.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        key:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The key.
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - CamelKratiPut
          - CamelKratiGet
          - CamelKratiDelete
          - CamelKratiDeleteAll
          deprecated: false
          secret: false
          description: Specifies the type of operation that will be performed to the datastore.
        value:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Value.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: "[[Krati-KratiComponent]]\nKrati Component\n~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.9*\n\nThis component allows the use krati datastores\
      \ and datasets inside\nCamel. Krati is a simple persistent data store with very\
      \ low latency and\nhigh throughput. It is designed for easy integration with\n\
      read-write-intensive applications with little effort in tuning\nconfiguration,\
      \ performance and JVM garbage collection.\n\nCamel provides a producer and consumer\
      \ for krati datastore_(key/value\nengine)_. It also provides an idempotent repository\
      \ for filtering out\nduplicate messages.\n\nMaven users will need to add the\
      \ following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-krati</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Krati-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------------------\n\
      krati:[the path of the datastore][?options]\n-------------------------------------------\n\
      \nThe *path of the datastore* is the relative path of the folder that\nkrati\
      \ will use for its datastore.\n\nYou can append query options to the URI in\
      \ the following format,\n`?option=value&option=value&...`\n\n[[Krati-KratiOptions]]\n\
      Krati Options\n^^^^^^^^^^^^^\n\n\n// component options: START\nThe Krati component\
      \ has no options.\n// component options: END\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Krati component supports 30 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| path | common |  | String\
      \ | *Required* Path of the datastore is the relative path of the folder that\
      \ krati will use for its datastore.\n| hashFunction | common |  | HashFunction<byte[]>\
      \ | The hash function to use.\n| initialCapacity | common | 100 | int | The\
      \ inital capcity of the store.\n| keySerializer | common |  | Object> | The\
      \ serializer that will be used to serialize the key.\n| segmentFactory | common\
      \ |  | SegmentFactory | Sets the segment factory of the target store.\n| segmentFileSize\
      \ | common | 64 | int | Data store segments size in MB.\n| valueSerializer |\
      \ common |  | Object> | The serializer that will be used to serialize the value.\n\
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | maxMessagesPerPoll | consumer |  | int | The maximum number of messages which\
      \ can be received in one poll. This can be used to avoid reading in too much\
      \ data and taking up too much memory.\n| sendEmptyMessageWhenIdle | consumer\
      \ | false | boolean | If the polling consumer did not poll any files you can\
      \ enable this option to send an empty message (no body) instead.\n| exceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| pollStrategy | consumer (advanced) |\
      \  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel.\n| key | producer |  | String | The key.\n| operation\
      \ | producer |  | String | Specifies the type of operation that will be performed\
      \ to the datastore.\n| value | producer |  | String | The Value.\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error\
      \ polls (failed due some error) that should happen before the backoffMultipler\
      \ should kick-in.\n| backoffIdleThreshold | scheduler |  | int | The number\
      \ of subsequent idle polls that should happen before the backoffMultipler should\
      \ kick-in.\n| backoffMultiplier | scheduler |  | int | To let the scheduled\
      \ polling consumer backoff if there has been a number of subsequent idles/errors\
      \ in a row. The multiplier is then the number of polls that will be skipped\
      \ before the next actual attempt is happening again. When this option is in\
      \ use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.\n\
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can\
      \ also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes\
      \ and 30 seconds) and 1h (1 hour).\n| greedy | scheduler | false | boolean |\
      \ If greedy is enabled then the ScheduledPollConsumer will run immediately again\
      \ if the previous run polled 1 or more messages.\n| initialDelay | scheduler\
      \ | 1000 | long | Milliseconds before the first poll starts. You can also specify\
      \ time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds)\
      \ and 1h (1 hour).\n| runLoggingLevel | scheduler | TRACE | LoggingLevel | The\
      \ consumer logs a start/complete log line when it polls. This option allows\
      \ you to configure the logging level for that.\n| scheduledExecutorService |\
      \ scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared\
      \ thread pool to use for the consumer. By default each consumer has its own\
      \ single threaded thread pool.\n| scheduler | scheduler | none | ScheduledPollConsumerScheduler\
      \ | To use a cron scheduler from either camel-spring or camel-quartz2 component\n\
      | schedulerProperties | scheduler |  | Map | To configure additional properties\
      \ when using a custom scheduler or any of the Quartz2 Spring based scheduler.\n\
      | startScheduler | scheduler | true | boolean | Whether the scheduler should\
      \ be auto started.\n| timeUnit | scheduler | MILLISECONDS | TimeUnit | Time\
      \ unit for initialDelay and delay options.\n| useFixedDelay | scheduler | true\
      \ | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService\
      \ in JDK for details.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n[source,java]\n------------------------------------------------------------------------------------------------\n\
      krati:/tmp/krati?operation=CamelKratiGet&initialCapacity=10000&keySerializer=#myCustomSerializer\n\
      ------------------------------------------------------------------------------------------------\n\
      \nFor producer endpoint you can override all of the above URI options by\npassing\
      \ the appropriate headers to the message.\n\n[[Krati-MessageHeadersfordatastore]]\n\
      Message Headers for datastore\n+++++++++++++++++++++++++++++\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Description\n\n|`CamelKratiOperation` |The operation to be performed\
      \ on the datastore. The valid options are CamelKratiAdd, CamelKratiGet, \nCamelKratiDelete,\
      \ CamelKratiDeleteAll\n\n|`CamelKratiKey` |The key.\n\n|`CamelKratiValue` |The\
      \ value.\n|=======================================================================\n\
      \n[[Krati-UsageSamples]]\nUsage Samples\n^^^^^^^^^^^^^\n\n[[Krati-Example1:Puttingtothedatastore.]]\n\
      Example 1: Putting to the datastore.\n++++++++++++++++++++++++++++++++++++\n\
      \nThis example will show you how you can store any message inside a\ndatastore.\n\
      \n[source,java]\n--------------------------------------------------------\n\
      from(\"direct:put\").to(\"krati:target/test/producertest\");\n--------------------------------------------------------\n\
      \nIn the above example you can override any of the URI parameters with\nheaders\
      \ on the message. +\n Here is how the above example would look like using xml\
      \ to define our\nroute.\n\n[source,xml]\n------------------------------------------------------------\n\
      \        <route>\n            <from uri=\"direct:put\"/>\n            <to uri=\"\
      krati:target/test/producerspringtest\"/>\n        </route>\n------------------------------------------------------------\n\
      \n[[Krati-Example2:GettingReadingfromadatastore]]\nExample 2: Getting/Reading\
      \ from a datastore\n+++++++++++++++++++++++++++++++++++++++++++\n\nThis example\
      \ will show you how you can read the contnet of a datastore.\n\n[source,java]\n\
      --------------------------------------------------------------------------------------------\n\
      from(\"direct:get\")\n    .setHeader(KratiConstants.KRATI_OPERATION, constant(KratiConstants.KRATI_OPERATION_GET))\n\
      \    .to(\"krati:target/test/producertest\");\n--------------------------------------------------------------------------------------------\n\
      \nIn the above example you can override any of the URI parameters with\nheaders\
      \ on the message. +\n Here is how the above example would look like using xml\
      \ to define our\nroute.\n\n[source,xml]\n-----------------------------------------------------------------------------\n\
      <route>\n     <from uri=\"direct:get\"/>\n     <to uri=\"krati:target/test/producerspringtest?operation=CamelKratiGet\"\
      />\n</route>\n-----------------------------------------------------------------------------\n\
      \n[[Krati-Example3:Consumingfromadatastore]]\nExample 3: Consuming from a datastore\n\
      +++++++++++++++++++++++++++++++++++++\n\nThis example will consume all items\
      \ that are under the specified\ndatastore.\n\n[source,java]\n------------------------------------------\n\
      \    from(\"krati:target/test/consumertest\")\n        .to(\"direct:next\");\n\
      ------------------------------------------\n\nYou can achieve the same goal\
      \ by using xml, as you can see below.\n\n[source,xml]\n------------------------------------------------------\n\
      <route>\n    <from uri=\"krati:target/test/consumerspringtest\"/>\n    <to uri=\"\
      mock:results\"/>\n</route>\n------------------------------------------------------\n\
      \n[[Krati-IdempotentRepository]]\nIdempotent Repository\n^^^^^^^^^^^^^^^^^^^^^\n\
      \nAs already mentioned this component also offers and idemptonet\nrepository\
      \ which can be used for filtering out duplicate messages.\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------------------------------------------\n\
      from(\"direct://in\").idempotentConsumer(header(\"messageId\"), new KratiIdempotentRepositroy(\"\
      /tmp/idempotent\").to(\"log://out\");\n-----------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Krati-Seealso]]\nSee also\n++++++++\n\nhttp://sna-projects.com/krati/[Krati\
      \ Website]\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-kubernetes
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: kubernetes
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: kubernetes
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: kubernetes
          spec:
            containers:
            - image: fabric8/connector-kubernetes:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: kubernetes
        syntax: kubernetes:masterUrl
        title: Kubernetes
        description: The kubernetes component allows to work with Kubernetes PaaS.
        label: container,cloud,paas
        deprecated: false
        async: false
        javaType: org.apache.camel.component.kubernetes.KubernetesComponent
        groupId: org.apache.camel
        artifactId: camel-kubernetes
        version: 2.18.1
      componentProperties: {}
      properties:
        masterUrl:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Kubernetes Master url
        apiVersion:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Kubernetes API Version to use
        category:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - namespaces
          - services
          - replicationControllers
          - pods
          - persistentVolumes
          - persistentVolumesClaims
          - secrets
          - resourcesQuota
          - serviceAccounts
          - nodes
          - configMaps
          - builds
          - buildConfigs
          deprecated: false
          secret: false
          description: Kubernetes Producer and Consumer category
        dnsDomain:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The dns domain used for ServiceCall EIP
        kubernetesClient:
          kind: parameter
          group: common
          type: object
          javaType: io.fabric8.kubernetes.client.DefaultKubernetesClient
          deprecated: false
          secret: false
          description: Default KubernetesClient to use if provided
        portName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The port name used for ServiceCall EIP
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        labelKey:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Consumer Label key when watching at some resources
        labelValue:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Consumer Label value when watching at some resources
        namespace:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The namespace
        poolSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: The Consumer pool size
        resourceName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Consumer Resource Name we would like to watch
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - listNamespaces
          - listNamespacesByLabels
          - getNamespace
          - createNamespace
          - deleteNamespace
          - listServices
          - listServicesByLabels
          - getService
          - createService
          - deleteService
          - listReplicationControllers
          - listReplicationControllersByLabels
          - getReplicationController
          - createReplicationController
          - deleteReplicationController
          - scaleReplicationController
          - listPods
          - listPodsByLabels
          - getPod
          - createPod
          - deletePod
          - listPersistentVolumes
          - listPersistentVolumesByLabels
          - getPersistentVolume
          - listPersistentVolumesClaims
          - listPersistentVolumesClaimsByLabels
          - getPersistentVolumeClaim
          - createPersistentVolumeClaim
          - deletePersistentVolumeClaim
          - listSecrets
          - listSecretsByLabels
          - getSecret
          - createSecret
          - deleteSecret
          - listResourcesQuota
          - listResourcesQuotaByLabels
          - getResourceQuota
          - createResourceQuota
          - deleteResourceQuota
          - listServiceAccounts
          - listServiceAccountsByLabels
          - getServiceAccount
          - createServiceAccount
          - deleteServiceAccount
          - listNodes
          - listNodesByLabels
          - getNode
          - listConfigMaps
          - listConfigMapsByLabels
          - getConfigMap
          - createConfigMap
          - deleteConfigMap
          - listBuilds
          - listBuildsByLabels
          - getBuild
          - listBuildConfigs
          - listBuildConfigsByLabels
          - getBuildConfig
          deprecated: false
          secret: false
          description: Producer operation to do on Kubernetes
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        caCertData:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The CA Cert Data
        caCertFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The CA Cert File
        clientCertData:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Client Cert Data
        clientCertFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Client Cert File
        clientKeyAlgo:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Key Algorithm used by the client
        clientKeyData:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Client Key data
        clientKeyFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Client Key file
        clientKeyPassphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Client Key Passphrase
        oauthToken:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The Auth Token
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to connect to Kubernetes
        trustCerts:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: true
          description: Define if the certs we used are trusted anyway or not
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to connect to Kubernetes
    documentation.adoc: |
      [[Kubernetes-KubernetesComponent]]
      Kubernetes Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.17*

      The *Kubernetes*??component is a component for integrating your
      application with Kubernetes standalone or on top of Openshift.??

      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-kubernetes</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Kubernetes-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------
      kubernetes:masterUrl[?options]
      ------------------------------

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

      [[Kubernetes-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Kubernetes component has no options.
      // component options: END








      // endpoint options: START
      The Kubernetes component supports 28 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | masterUrl | common |  | String | *Required* Kubernetes Master url
      | apiVersion | common |  | String | The Kubernetes API Version to use
      | category | common |  | String | *Required* Kubernetes Producer and Consumer category
      | dnsDomain | common |  | String | The dns domain used for ServiceCall EIP
      | kubernetesClient | common |  | DefaultKubernetesClient | Default KubernetesClient to use if provided
      | portName | common |  | String | The port name used for ServiceCall EIP
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | labelKey | consumer |  | String | The Consumer Label key when watching at some resources
      | labelValue | consumer |  | String | The Consumer Label value when watching at some resources
      | namespace | consumer |  | String | The namespace
      | poolSize | consumer | 1 | int | The Consumer pool size
      | resourceName | consumer |  | String | The Consumer Resource Name we would like to watch
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | operation | producer |  | String | Producer operation to do on Kubernetes
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | caCertData | security |  | String | The CA Cert Data
      | caCertFile | security |  | String | The CA Cert File
      | clientCertData | security |  | String | The Client Cert Data
      | clientCertFile | security |  | String | The Client Cert File
      | clientKeyAlgo | security |  | String | The Key Algorithm used by the client
      | clientKeyData | security |  | String | The Client Key data
      | clientKeyFile | security |  | String | The Client Key file
      | clientKeyPassphrase | security |  | String | The Client Key Passphrase
      | oauthToken | security |  | String | The Auth Token
      | password | security |  | String | Password to connect to Kubernetes
      | trustCerts | security |  | Boolean | Define if the certs we used are trusted anyway or not
      | username | security |  | String | Username to connect to Kubernetes
      |=======================================================================
      {% endraw %}
      // endpoint options: END







      [[Kubernetes-Headers]]
      Headers
      ^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |CamelKubernetesOperation |String |The Producer operation

      |CamelKubernetesNamespaceName |String |The Namespace name

      |CamelKubernetesNamespaceLabels |Map |The Namespace Labels

      |CamelKubernetesServiceLabels |Map |The Service labels

      |CamelKubernetesServiceName |String |The Service name

      |CamelKubernetesServiceSpec |io.fabric8.kubernetes.api.model.ServiceSpec |The Spec for a Service

      |CamelKubernetesReplicationControllersLabels |Map |Replication controller labels

      |CamelKubernetesReplicationControllerName |String |Replication controller name

      |CamelKubernetesReplicationControllerSpec |io.fabric8.kubernetes.api.model.ReplicationControllerSpec |The Spec for a Replication Controller

      |CamelKubernetesReplicationControllerReplicas |Integer |The number of replicas for a Replication Controller during the Scale operation

      |CamelKubernetesPodsLabels |Map |Pod labels

      |CamelKubernetesPodName |String |Pod name

      |CamelKubernetesPodSpec |io.fabric8.kubernetes.api.model.PodSpec |The Spec for a Pod

      |CamelKubernetesPersistentVolumesLabels |Map |Persistent Volume labels

      |CamelKubernetesPersistentVolumesName |String |Persistent Volume name

      |CamelKubernetesPersistentVolumesClaimsLabels |Map |Persistent Volume Claim labels

      |CamelKubernetesPersistentVolumesClaimsName |String |Persistent Volume Claim name

      |CamelKubernetesPersistentVolumesClaimsSpec |io.fabric8.kubernetes.api.model.PersistentVolumeClaimSpec |The Spec for a Persistent Volume claim

      |CamelKubernetesSecretsLabels |Map |Secret labels

      |CamelKubernetesSecretsName |String |Secret name

      |CamelKubernetesSecret |io.fabric8.kubernetes.api.model.Secret |A Secret Object

      |CamelKubernetesResourcesQuotaLabels |Map |Resource Quota labels

      |CamelKubernetesResourcesQuotaName |String |Resource Quota name

      |CamelKubernetesResourceQuotaSpec |io.fabric8.kubernetes.api.model.ResourceQuotaSpec |The Spec for a Resource Quota

      |CamelKubernetesServiceAccountsLabels |Map |Service Account labels

      |CamelKubernetesServiceAccountName |String |Service Account name

      |CamelKubernetesServiceAccount |io.fabric8.kubernetes.api.model.ServiceAccount |A Service Account object

      |CamelKubernetesNodesLabels |Map |Node labels

      |CamelKubernetesNodeName |String |Node name

      |CamelKubernetesBuildsLabels |Map |Openshift Build labels

      |CamelKubernetesBuildName |String |Openshift Build name

      |CamelKubernetesBuildConfigsLabels |Map |Openshift Build Config labels

      |CamelKubernetesBuildConfigName |String |Openshift Build Config name

      |CamelKubernetesEventAction |io.fabric8.kubernetes.client.Watcher.Action |Action watched by the consumer

      |CamelKubernetesEventTimestamp |String |Timestamp of the action watched by the consumer

      |CamelKubernetesConfigMapName |String |ConfigMap name

      |CamelKubernetesConfigMapsLabels |Map |ConfigMap labels

      |CamelKubernetesConfigData |Map |ConfigMap Data
      |=======================================================================
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-language
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: language
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: language
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: language
          spec:
            containers:
            - image: fabric8/connector-language:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: language
        syntax: language:languageName:resourceUri
        title: Language
        description: The language component allows you to send a message to an endpoint which executes a script by any of the supported Languages in Camel.
        label: core,script
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.language.LanguageComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        languageName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - bean
          - constant
          - el
          - exchangeProperty
          - file
          - groovy
          - header
          - javascript
          - jsonpath
          - jxpath
          - mvel
          - ognl
          - php
          - python
          - ref
          - ruby
          - simple
          - spel
          - sql
          - terser
          - tokenize
          - xpath
          - xquery
          - xtokenize
          deprecated: false
          secret: false
          description: Sets the name of the language to use
        resourceUri:
          kind: path
          group: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        binary:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String)
        cacheScript:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to cache the compiled script and reuse Notice reusing the script can cause side effects from processing one Camel org.apache.camel.Exchange to the next org.apache.camel.Exchange.
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not.
        script:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the script to execute
        transform:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not the result of the script should be used as message body. This options is default true.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Language-Language]]
      Language
      ~~~~~~~~

      *Available as of Camel 2.5*

      The language component allows you to send link:exchange.html[Exchange]
      to an endpoint which executes a script by any of the supported
      link:languages.html[Languages] in Camel. +
       By having a component to execute language scripts, it allows more
      dynamic routing capabilities. For example by using the
      link:routing-slip.html[Routing Slip] or link:dynamic-router.html[Dynamic
      Router] EIPs you can send messages to `language` endpoints where the
      script is dynamic defined as well.

      This component is provided out of the box in `camel-core` and hence no
      additional JARs is needed. You only have to include additional Camel
      components if the language of choice mandates it, such as using
      link:groovy.html[Groovy] or link:javascript.html[JavaScript] languages.

      [[Language-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------------------
      language://languageName[:script][?options]
      ------------------------------------------

      And from Camel 2.11 onwards you can refer to an external resource for
      the script using same notation as supported by the other
      link:language.html[Language]s in Camel

      [source,java]
      -----------------------------------------------------------
      language://languageName:resource:scheme:location][?options]
      -----------------------------------------------------------

      [[Language-URIOptions]]
      URI Options
      ^^^^^^^^^^^


      // component options: START
      The Language component has no options.
      // component options: END



      // endpoint options: START
      The Language component supports 8 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | languageName | producer |  | String | *Required* Sets the name of the language to use
      | resourceUri | producer |  | String | Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | binary | producer | false | boolean | Whether the script is binary content or text content. By default the script is read as text content (eg java.lang.String)
      | cacheScript | producer | false | boolean | Whether to cache the compiled script and reuse Notice reusing the script can cause side effects from processing one Camel org.apache.camel.Exchange to the next org.apache.camel.Exchange.
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not.
      | script | producer |  | String | Sets the script to execute
      | transform | producer | true | boolean | Whether or not the result of the script should be used as message body. This options is default true.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Language-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The following message headers can be used to affect the behavior of the
      component

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

      |`CamelLanguageScript` |The script to execute provided in the header. Takes precedence over
      script configured on the endpoint.
      |=======================================================================

      [[Language-Examples]]
      Examples
      ^^^^^^^^

      For example you can use the link:simple.html[Simple] language to
      link:message-translator.html[Message Translator] a message:

      In case you want to convert the message body type you can do this as
      well:

      You can also use the link:groovy.html[Groovy] language, such as this
      example where the input message will by multiplied with 2:

      You can also provide the script as a header as shown below. Here we use
      link:xpath.html[XPath] language to extract the text from the `<foo>`
      tag.

      [source,java]
      --------------------------------------------------------------------------------------------------------------------------------
      Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()");
      assertEquals("Hello World", out);
      --------------------------------------------------------------------------------------------------------------------------------

      [[Language-Loadingscriptsfromresources]]
      Loading scripts from resources
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.9*

      You can specify a resource uri for a script to load in either the
      endpoint uri, or in the `Exchange.LANGUAGE_SCRIPT` header. +
       The uri must start with one of the following schemes: file:,
      classpath:, or http:

      For example to load a script from the classpath:

      By default the script is loaded once and cached. However you can disable
      the `contentCache` option and have the script loaded on each
      evaluation. +
       For example if the file myscript.txt is changed on disk, then the
      updated script is used:

      From *Camel 2.11* onwards you can refer to the resource similar to the
      other link:language.html[Language]s in Camel by prefixing with
      `"resource:"` as shown below:

      [[Language-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
      * link:languages.html[Languages]
      * link:routing-slip.html[Routing Slip]
      * link:dynamic-router.html[Dynamic Router]
      * link:script.html[Script]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ldap
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ldap
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ldap
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ldap
          spec:
            containers:
            - image: fabric8/connector-ldap:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ldap
        syntax: ldap:dirContextName
        title: LDAP
        description: The ldap component allows you to perform searches in LDAP servers using filters as the message payload.
        label: ldap
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.ldap.LdapComponent
        groupId: org.apache.camel
        artifactId: camel-ldap
        version: 2.18.1
      componentProperties: {}
      properties:
        dirContextName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of javax.naming.directory.DirContext bean to lookup in the registry.
        base:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: ou=system
          description: The base DN for searches.
        pageSize:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: When specified the ldap module uses paging to retrieve all results (most LDAP Servers throw an exception when trying to retrieve more than 1000 entries in one query). To be able to use this a LdapContext (subclass of DirContext) has to be passed in as ldapServerBean (otherwise an exception is thrown)
        returnedAttributes:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Comma-separated list of attributes that should be set in each entry of the result
        scope:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - object
          - onelevel
          - subtree
          deprecated: false
          secret: false
          defaultValue: subtree
          description: Specifies how deeply to search the tree of entries starting at the base DN.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[LDAP-LDAPComponent]]\nLDAP Component\n~~~~~~~~~~~~~~\n\n\
      The *ldap* component allows you to perform searches in LDAP servers\nusing filters\
      \ as the message payload. +\n This component uses standard JNDI (`javax.naming`\
      \ package) to access\nthe server.\n\nMaven users will need to add the following\
      \ dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-ldap</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[LDAP-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-----------------------------\n\
      ldap:ldapServerBean[?options]\n-----------------------------\n\nThe _ldapServerBean_\
      \ portion of the URI refers to a\nhttp://java.sun.com/j2se/1.4.2/docs/api/javax/naming/directory/DirContext.html[DirContext]\n\
      bean in the registry. The LDAP component only supports producer\nendpoints,\
      \ which means that an `ldap` URI cannot appear in the `from` at\nthe start of\
      \ a route.\n\nYou can append query options to the URI in the following format,\n\
      `?option=value&option=value&...`\n\n[[LDAP-Options]]\nOptions\n^^^^^^^\n\n\n\
      // component options: START\nThe LDAP component has no options.\n// component\
      \ options: END\n\n\n\n\n// endpoint options: START\nThe LDAP component supports\
      \ 6 endpoint options which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| dirContextName | producer\
      \ |  | String | *Required* Name of javax.naming.directory.DirContext bean to\
      \ lookup in the registry.\n| base | producer | ou=system | String | The base\
      \ DN for searches.\n| pageSize | producer |  | Integer | When specified the\
      \ ldap module uses paging to retrieve all results (most LDAP Servers throw an\
      \ exception when trying to retrieve more than 1000 entries in one query). To\
      \ be able to use this a LdapContext (subclass of DirContext) has to be passed\
      \ in as ldapServerBean (otherwise an exception is thrown)\n| returnedAttributes\
      \ | producer |  | String | Comma-separated list of attributes that should be\
      \ set in each entry of the result\n| scope | producer | subtree | String | Specifies\
      \ how deeply to search the tree of entries starting at the base DN.\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n\n[[LDAP-Result]]\nResult\n^^^^^^\n\
      \nThe result is returned in the Out body as a\n`ArrayList<javax.naming.directory.SearchResult>`\
      \ object.\n\n[[LDAP-DirContext]]\nDirContext\n^^^^^^^^^^\n\nThe URI, `ldap:ldapserver`,\
      \ references a Spring bean with the ID,\n`ldapserver`. The `ldapserver` bean\
      \ may be defined as follows:\n\n[source,java]\n-----------------------------------------------------------------------------------------\n\
      <bean id=\"ldapserver\" class=\"javax.naming.directory.InitialDirContext\" scope=\"\
      prototype\">\n  <constructor-arg>\n    <props>\n      <prop key=\"java.naming.factory.initial\"\
      >com.sun.jndi.ldap.LdapCtxFactory</prop>\n      <prop key=\"java.naming.provider.url\"\
      >ldap://localhost:10389</prop>\n      <prop key=\"java.naming.security.authentication\"\
      >none</prop>\n    </props>\n  </constructor-arg>\n</bean>\n-----------------------------------------------------------------------------------------\n\
      \nThe preceding example declares a regular Sun based LDAP `DirContext`\nthat\
      \ connects anonymously to a locally hosted LDAP server.\n\nNOTE: `DirContext`\
      \ objects are *not* required to support concurrency by\ncontract. It is therefore\
      \ important that the directory context is\ndeclared with the setting, `scope=\"\
      prototype\"`, in the `bean` definition\nor that the context supports concurrency.\
      \ In the Spring framework,\n`prototype` scoped objects are instantiated each\
      \ time they are looked\nup.\n\n[[LDAP-Samples]]\nSamples\n^^^^^^^\n\nFollowing\
      \ on from the Spring configuration above, the code sample below\nsends an LDAP\
      \ request to filter search a group for a member. The Common\nName is then extracted\
      \ from the response.\n\n[source,java]\n----------------------------------------------------------\n\
      ProducerTemplate<Exchange> template = exchange\n  .getContext().createProducerTemplate();\n\
      \nCollection<?> results = (Collection<?>) (template\n  .sendBody(\n    \"ldap:ldapserver?base=ou=mygroup,ou=groups,ou=system\"\
      ,\n    \"(member=uid=huntc,ou=users,ou=system)\"));\n\nif (results.size() >\
      \ 0) {\n  // Extract what we need from the device's profile\n\n  Iterator<?>\
      \ resultIter = results.iterator();\n  SearchResult searchResult = (SearchResult)\
      \ resultIter\n      .next();\n  Attributes attributes = searchResult\n     \
      \ .getAttributes();\n  Attribute deviceCNAttr = attributes.get(\"cn\");\n  String\
      \ deviceCN = (String) deviceCNAttr.get();\n\n  ...\n----------------------------------------------------------\n\
      \nIf no specific filter is required - for example, you just need to look\nup\
      \ a single entry - specify a wildcard filter expression. For example,\nif the\
      \ LDAP entry has a Common Name, use a filter expression like:\n\n[source,java]\n\
      ------\n(cn=*)\n------\n\n[[LDAP-Bindingusingcredentials]]\nBinding using credentials\n\
      +++++++++++++++++++++++++\n\nA Camel end user donated this sample code he used\
      \ to bind to the ldap\nserver using credentials.\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      Properties props = new Properties();\nprops.setProperty(Context.INITIAL_CONTEXT_FACTORY,\
      \ \"com.sun.jndi.ldap.LdapCtxFactory\");\nprops.setProperty(Context.PROVIDER_URL,\
      \ \"ldap://localhost:389\");\nprops.setProperty(Context.URL_PKG_PREFIXES, \"\
      com.sun.jndi.url\");\nprops.setProperty(Context.REFERRAL, \"ignore\");\nprops.setProperty(Context.SECURITY_AUTHENTICATION,\
      \ \"simple\");\nprops.setProperty(Context.SECURITY_PRINCIPAL, \"cn=Manager\"\
      );\nprops.setProperty(Context.SECURITY_CREDENTIALS, \"secret\");\n\nSimpleRegistry\
      \ reg = new SimpleRegistry();\nreg.put(\"myldap\", new InitialLdapContext(props,\
      \ null));\n\nCamelContext context = new DefaultCamelContext(reg);\ncontext.addRoutes(\n\
      \    new RouteBuilder() {\n        public void configure() throws Exception\
      \ { \n            from(\"direct:start\").to(\"ldap:myldap?base=ou=test\");\n\
      \        }\n    }\n);\ncontext.start();\n\nProducerTemplate template = context.createProducerTemplate();\n\
      \nEndpoint endpoint = context.getEndpoint(\"direct:start\");\nExchange exchange\
      \ = endpoint.createExchange();\nexchange.getIn().setBody(\"(uid=test)\");\n\
      Exchange out = template.send(endpoint, exchange);\n\nCollection<SearchResult>\
      \ data = out.getOut().getBody(Collection.class);\nassert data != null;\nassert\
      \ !data.isEmpty();\n\nSystem.out.println(out.getOut().getBody());\n\ncontext.stop();\n\
      ---------------------------------------------------------------------------------------\n\
      \n[[LDAP-ConfiguringSSL]]\nConfiguring SSL\n^^^^^^^^^^^^^^^\n\nAll required\
      \ is to create a custom socket factory and reference it in\nthe InitialDirContext\
      \ bean - see below sample.\n\n*SSL Configuration*\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<blueprint xmlns=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\"\
      \n           xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n     \
      \      xsi:schemaLocation=\"http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd\n\
      \                 http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd\"\
      >\n\n\n    <sslContextParameters xmlns=\"http://camel.apache.org/schema/blueprint\"\
      \n                          id=\"sslContextParameters\">\n        <keyManagers\n\
      \                keyPassword=\"{{keystore.pwd}}\">\n            <keyStore\n\
      \                    resource=\"{{keystore.url}}\"\n                    password=\"\
      {{keystore.pwd}}\"/>\n        </keyManagers>\n    </sslContextParameters>\n\n\
      \    <bean id=\"customSocketFactory\" class=\"zotix.co.util.CustomSocketFactory\"\
      >\n        <argument ref=\"sslContextParameters\" />\n    </bean>\n    <bean\
      \ id=\"ldapserver\" class=\"javax.naming.directory.InitialDirContext\" scope=\"\
      prototype\">\n        <argument>\n            <props>\n                <prop\
      \ key=\"java.naming.factory.initial\" value=\"com.sun.jndi.ldap.LdapCtxFactory\"\
      />\n                <prop key=\"java.naming.provider.url\" value=\"ldaps://lab.zotix.co:636\"\
      />\n                <prop key=\"java.naming.security.protocol\" value=\"ssl\"\
      />\n                <prop key=\"java.naming.security.authentication\" value=\"\
      simple\" />\n                <prop key=\"java.naming.security.principal\" value=\"\
      cn=Manager,dc=example,dc=com\"/>\n                <prop key=\"java.naming.security.credentials\"\
      \ value=\"passw0rd\"/>\n                <prop key=\"java.naming.ldap.factory.socket\"\
      \n                      value=\"zotix.co.util.CustomSocketFactory\"/>\n    \
      \        </props>\n        </argument>\n    </bean>\n</blueprint>\n----------------------------------------------------------------------------------------------------------------------------------\n\
      \n*Custom Socket Factory*\n\n[source,java]\n-----------------------------------------------------------------------------------------------------\n\
      import org.apache.camel.util.jsse.SSLContextParameters;\n\nimport javax.net.SocketFactory;\n\
      import javax.net.ssl.SSLContext;\nimport javax.net.ssl.SSLSocketFactory;\nimport\
      \ javax.net.ssl.TrustManagerFactory;\nimport java.io.IOException;\nimport java.net.InetAddress;\n\
      import java.net.Socket;\nimport java.security.KeyStore;\n\n/**\n * The CustomSocketFactory.\
      \ Loads the KeyStore and creates an instance of SSLSocketFactory\n */\npublic\
      \ class CustomSocketFactory extends SSLSocketFactory {\n\n    private static\
      \ SSLSocketFactory socketFactory;\n\n    /**\n     * Called by the getDefault()\
      \ method.\n     */\n    public CustomSocketFactory() {\n\n    }\n\n    /**\n\
      \     * Called by Blueprint DI to initialise an instance of SocketFactory\n\
      \     *\n     * @param sslContextParameters\n     */\n    public CustomSocketFactory(SSLContextParameters\
      \ sslContextParameters) {\n        try {\n            KeyStore keyStore = sslContextParameters.getKeyManagers().getKeyStore().createKeyStore();\n\
      \            TrustManagerFactory tmf = TrustManagerFactory.getInstance(\"SunX509\"\
      );\n            tmf.init(keyStore);\n            SSLContext ctx = SSLContext.getInstance(\"\
      TLS\");\n            ctx.init(null, tmf.getTrustManagers(), null);\n       \
      \     socketFactory = ctx.getSocketFactory();\n        } catch (Exception ex)\
      \ {\n            ex.printStackTrace(System.err);  /* handle exception */\n \
      \       }\n    }\n\n    /**\n     * Getter for the SocketFactory\n     *\n \
      \    * @return\n     */\n    public static SocketFactory getDefault() {\n  \
      \      return new CustomSocketFactory();\n    }\n\n    @Override\n    public\
      \ String[] getDefaultCipherSuites() {\n        return socketFactory.getDefaultCipherSuites();\n\
      \    }\n\n    @Override\n    public String[] getSupportedCipherSuites() {\n\
      \        return socketFactory.getSupportedCipherSuites();\n    }\n\n    @Override\n\
      \    public Socket createSocket(Socket socket, String string, int i, boolean\
      \ bln) throws IOException {\n        return socketFactory.createSocket(socket,\
      \ string, i, bln);\n    }\n\n    @Override\n    public Socket createSocket(String\
      \ string, int i) throws IOException {\n        return socketFactory.createSocket(string,\
      \ i);\n    }\n\n    @Override\n    public Socket createSocket(String string,\
      \ int i, InetAddress ia, int i1) throws IOException {\n        return socketFactory.createSocket(string,\
      \ i, ia, i1);\n    }\n\n    @Override\n    public Socket createSocket(InetAddress\
      \ ia, int i) throws IOException {\n        return socketFactory.createSocket(ia,\
      \ i);\n    }\n\n    @Override\n    public Socket createSocket(InetAddress ia,\
      \ int i, InetAddress ia1, int i1) throws IOException {\n        return socketFactory.createSocket(ia,\
      \ i, ia1, i1);\n    }\n}\n-----------------------------------------------------------------------------------------------------\n\
      \n??\n\n[[LDAP-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-linkedin
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: linkedin
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: linkedin
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: linkedin
          spec:
            containers:
            - image: fabric8/connector-linkedin:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: linkedin
        syntax: linkedin:apiName/methodName
        title: Linkedin
        description: The linkedin component is uses for retrieving LinkedIn user profiles connections companies groups posts etc.
        label: api,cloud,social
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.linkedin.LinkedInComponent
        groupId: org.apache.camel
        artifactId: camel-linkedin
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.linkedin.LinkedInConfiguration
          deprecated: false
          secret: false
          description: To use the shared configuration
      properties:
        apiName:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.linkedin.internal.LinkedInApiName
          enum:
          - comments
          - companies
          - groups
          - jobs
          - people
          - posts
          - search
          deprecated: false
          secret: false
          description: What kind of operation to perform
        methodName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - addActivity
          - addComment
          - addCompanyUpdateComment
          - addCompanyUpdateCommentAsCompany
          - addGroupMembership
          - addInvite
          - addJob
          - addJobBookmark
          - addPost
          - addShare
          - addUpdateComment
          - editJob
          - flagCategory
          - followCompany
          - followPost
          - getComment
          - getCompanies
          - getCompanyById
          - getCompanyByName
          - getCompanyUpdateComments
          - getCompanyUpdateLikes
          - getCompanyUpdates
          - getConnections
          - getConnectionsById
          - getConnectionsByUrl
          - getFollowedCompanies
          - getGroup
          - getGroupMemberships
          - getGroupMembershipSettings
          - getHistoricalFollowStatistics
          - getHistoricalStatusUpdateStatistics
          - getJob
          - getJobBookmarks
          - getNetworkStats
          - getNetworkUpdates
          - getNetworkUpdatesById
          - getNumberOfFollowers
          - getPerson
          - getPersonById
          - getPersonByUrl
          - getPost
          - getPostComments
          - getPosts
          - getStatistics
          - getSuggestedCompanies
          - getSuggestedGroupPosts
          - getSuggestedGroups
          - getSuggestedJobs
          - getUpdateComments
          - getUpdateLikes
          - isShareEnabled
          - isViewerShareEnabled
          - likeCompanyUpdate
          - likePost
          - likeUpdate
          - removeComment
          - removeGroupMembership
          - removeGroupSuggestion
          - removeJob
          - removeJobBookmark
          - removePost
          - searchCompanies
          - searchJobs
          - searchPeople
          - share
          - stopFollowingCompany
          - updateGroupMembership
          deprecated: false
          secret: false
          description: What sub operation to use for the selected operation
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: LinkedIn application client ID
        clientSecret:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: LinkedIn application client secret
        httpParams:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: Custom HTTP params for example proxy host and port use constants from AllClientPNames
        inBody:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of a parameter to be passed in the exchange In Body
        lazyAuth:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Flag to enable/disable lazy OAuth default is true. when enabled OAuth token retrieval or generation is not done until the first REST call
        redirectUri:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Application redirect URI although the component never redirects to this page to avoid having to have a functioning redirect server. So for testing one could use https://localhost
        scopes:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.linkedin.api.OAuthScope[]
          deprecated: false
          secret: false
          description: List of LinkedIn scopes as specified at https://developer.linkedin.com/documents/authenticationgranting
        secureStorage:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.linkedin.api.OAuthSecureStorage
          deprecated: false
          secret: false
          description: Callback interface for providing an OAuth token or to store the token generated by the component. The callback should return null on the first call and then save the created token in the saveToken() callback. If the callback returns null the first time a userPassword MUST be provided
        userName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: LinkedIn user account name MUST be provided
        userPassword:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: LinkedIn account password
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-log
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: log
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: log
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: log
          spec:
            containers:
            - image: fabric8/connector-log:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: log
        syntax: log:loggerName
        title: Log
        description: The log component logs message exchanges to the underlying logging mechanism.
        label: core,monitoring
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.log.LogComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        exchangeFormatter:
          kind: property
          type: object
          javaType: org.apache.camel.spi.ExchangeFormatter
          deprecated: false
          secret: false
          description: Sets a custom ExchangeFormatter to convert the Exchange to a String suitable for logging. If not specified we default to DefaultExchangeFormatter.
      properties:
        loggerName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The logger name to use
        groupActiveOnly:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If true will hide stats when no new messages have been received for a time interval if false show stats regardless of message traffic.
        groupDelay:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Set the initial delay for stats (in millis)
        groupInterval:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: If specified will group message stats by this time interval (in millis)
        groupSize:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: An integer that specifies a group size for throughput logging.
        level:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - ERROR
          - WARN
          - INFO
          - DEBUG
          - TRACE
          - OFF
          deprecated: false
          secret: false
          defaultValue: INFO
          description: Logging level to use. The default value is INFO.
        marker:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: An optional Marker name to use.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        maxChars:
          kind: parameter
          group: formatting
          label: formatting
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Limits the number of characters logged per line.
        multiline:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled then each information is outputted on a newline.
        showAll:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Quick option for turning all options on. (multiline maxChars has to be manually set if to be used)
        showBody:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Show the message body.
        showBodyType:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Show the body Java type.
        showCaughtException:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: f the exchange has a caught exception show the exception message (no stack trace). A caught exception is stored as a property on the exchange (using the key link org.apache.camel.ExchangeEXCEPTION_CAUGHT and for instance a doCatch can catch exceptions.
        showException:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the exchange has an exception show the exception message (no stacktrace)
        showExchangeId:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Show the unique exchange ID.
        showExchangePattern:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Shows the Message Exchange Pattern (or MEP for short).
        showFiles:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled Camel will output files
        showFuture:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled Camel will on Future objects wait for it to complete to obtain the payload to be logged.
        showHeaders:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Show the message headers.
        showOut:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the exchange has an out message show the out message.
        showProperties:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Show the exchange properties.
        showStackTrace:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Show the stack trace if an exchange has an exception. Only effective if one of showAll showException or showCaughtException are enabled.
        showStreams:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether Camel should show stream bodies or not (eg such as java.io.InputStream). Beware if you enable this option then you may not be able later to access the message body as the stream have already been read by this logger. To remedy this you will have to use Stream Caching.
        skipBodyLineSeparator:
          kind: parameter
          group: formatting
          label: formatting
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to skip line separators when logging the message body. This allows to log the message body in one line setting this option to false will preserve any line separators from the body which then will log the body as is.
        style:
          kind: parameter
          group: formatting
          label: formatting
          type: string
          javaType: org.apache.camel.processor.DefaultExchangeFormatter.OutputStyle
          enum:
          - Default
          - Tab
          - Fixed
          deprecated: false
          secret: false
          defaultValue: Default
          description: Sets the outputs style to use.
    documentation.adoc: "[[Log-LogComponent]]\nLog Component\n~~~~~~~~~~~~~\n\nThe\
      \ *log:* component logs message exchanges to the underlying logging\nmechanism.\n\
      \nCamel uses http://www.slf4j.org/[sfl4j] which allows you to configure\nlogging\
      \ via, among others:\n\n* http://logging.apache.org/log4j/[Log4j]\n* http://logback.qos.ch/[Logback]\n\
      *\nhttp://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/package-summary.html[JDK\n\
      Util Logging logging]\n\n[[Log-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n\
      -----------------------------\nlog:loggingCategory[?options]\n-----------------------------\n\
      \nWhere *loggingCategory* is the name of the logging category to use. You\n\
      can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \nINFO:*Using Logger instance from the the Registry*\nAs of *Camel 2.12.4/2.13.1*,\
      \ if there's single instance\nof??`org.slf4j.Logger` found in the Registry,\
      \ the *loggingCategory* is no\nlonger used to create logger instance. The registered\
      \ instance is used\ninstead. Also it is possible to reference particular??`Logger`\
      \ instance\nusing??`?logger=#myLogger` URI parameter. Eventually, if there's\
      \ no\nregistered and URI??`logger` parameter, the logger instance is created\n\
      using *loggingCategory*.\n\nFor example, a log endpoint typically specifies\
      \ the logging level using\nthe `level` option, as follows:\n\n[source,java]\n\
      ----------------------------------------\nlog:org.apache.camel.example?level=DEBUG\n\
      ----------------------------------------\n\nThe default logger logs every exchange\
      \ (_regular logging_). But Camel\nalso ships with the `Throughput` logger, which\
      \ is used whenever the\n`groupSize` option is specified.\n\nTIP:*Also a log\
      \ in the DSL*\nThere is also a `log` directly in the DSL, but it has a different\n\
      purpose. Its meant for lightweight and human logs. See more details at\nlink:logeip.html[LogEIP].\n\
      \n[[Log-Options]]\nOptions\n^^^^^^^\n\n\n\n// component options: START\nThe\
      \ Log component supports 1 options which are listed below.\n\n\n\n{% raw %}\n\
      [width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| exchangeFormatter | ExchangeFormatter |\
      \ Sets a custom ExchangeFormatter to convert the Exchange to a String suitable\
      \ for logging. If not specified we default to DefaultExchangeFormatter.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The Log component supports 26 endpoint options which are listed below:\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| loggerName | producer\
      \ |  | String | *Required* The logger name to use\n| groupActiveOnly | producer\
      \ | true | Boolean | If true will hide stats when no new messages have been\
      \ received for a time interval if false show stats regardless of message traffic.\n\
      | groupDelay | producer |  | Long | Set the initial delay for stats (in millis)\n\
      | groupInterval | producer |  | Long | If specified will group message stats\
      \ by this time interval (in millis)\n| groupSize | producer |  | Integer | An\
      \ integer that specifies a group size for throughput logging.\n| level | producer\
      \ | INFO | String | Logging level to use. The default value is INFO.\n| marker\
      \ | producer |  | String | An optional Marker name to use.\n| synchronous |\
      \ advanced | false | boolean | Sets whether synchronous processing should be\
      \ strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | maxChars | formatting | 10000 | int | Limits the number of characters logged\
      \ per line.\n| multiline | formatting | false | boolean | If enabled then each\
      \ information is outputted on a newline.\n| showAll | formatting | false | boolean\
      \ | Quick option for turning all options on. (multiline maxChars has to be manually\
      \ set if to be used)\n| showBody | formatting | true | boolean | Show the message\
      \ body.\n| showBodyType | formatting | true | boolean | Show the body Java type.\n\
      | showCaughtException | formatting | false | boolean | f the exchange has a\
      \ caught exception show the exception message (no stack trace). A caught exception\
      \ is stored as a property on the exchange (using the key link org.apache.camel.ExchangeEXCEPTION_CAUGHT\
      \ and for instance a doCatch can catch exceptions.\n| showException | formatting\
      \ | false | boolean | If the exchange has an exception show the exception message\
      \ (no stacktrace)\n| showExchangeId | formatting | false | boolean | Show the\
      \ unique exchange ID.\n| showExchangePattern | formatting | true | boolean |\
      \ Shows the Message Exchange Pattern (or MEP for short).\n| showFiles | formatting\
      \ | false | boolean | If enabled Camel will output files\n| showFuture | formatting\
      \ | false | boolean | If enabled Camel will on Future objects wait for it to\
      \ complete to obtain the payload to be logged.\n| showHeaders | formatting |\
      \ false | boolean | Show the message headers.\n| showOut | formatting | false\
      \ | boolean | If the exchange has an out message show the out message.\n| showProperties\
      \ | formatting | false | boolean | Show the exchange properties.\n| showStackTrace\
      \ | formatting | false | boolean | Show the stack trace if an exchange has an\
      \ exception. Only effective if one of showAll showException or showCaughtException\
      \ are enabled.\n| showStreams | formatting | false | boolean | Whether Camel\
      \ should show stream bodies or not (eg such as java.io.InputStream). Beware\
      \ if you enable this option then you may not be able later to access the message\
      \ body as the stream have already been read by this logger. To remedy this you\
      \ will have to use Stream Caching.\n| skipBodyLineSeparator | formatting | true\
      \ | boolean | Whether to skip line separators when logging the message body.\
      \ This allows to log the message body in one line setting this option to false\
      \ will preserve any line separators from the body which then will log the body\
      \ as is.\n| style | formatting | Default | OutputStyle | Sets the outputs style\
      \ to use.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[Log-Regularloggersample]]\nRegular\
      \ logger sample\n^^^^^^^^^^^^^^^^^^^^^\n\nIn the route below we log the incoming\
      \ orders at `DEBUG` level before\nthe order is processed:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------------\n\
      from(\"activemq:orders\").to(\"log:com.mycompany.order?level=DEBUG\").to(\"\
      bean:processOrder\");\n------------------------------------------------------------------------------------------\n\
      \nOr using Spring XML to define the route:\n\n[source,xml]\n---------------------------------------------------\n\
      \  <route>\n    <from uri=\"activemq:orders\"/>\n    <to uri=\"log:com.mycompany.order?level=DEBUG\"\
      />\n    <to uri=\"bean:processOrder\"/>\n  </route> \n---------------------------------------------------\n\
      \n[[Log-Regularloggerwithformattersample]]\nRegular logger with formatter sample\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn the route below we log the incoming\
      \ orders at `INFO` level before the\norder is processed.\n\n[source,java]\n\
      --------------------------------------------------------------------------------------\n\
      from(\"activemq:orders\").\n    to(\"log:com.mycompany.order?showAll=true&multiline=true\"\
      ).to(\"bean:processOrder\");\n--------------------------------------------------------------------------------------\n\
      \n[[Log-ThroughputloggerwithgroupSizesample]]\nThroughput logger with groupSize\
      \ sample\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn the route below we log\
      \ the throughput of the incoming orders at\n`DEBUG` level grouped by 10 messages.\n\
      \n[source,java]\n-----------------------------------------------------------------------------------\n\
      from(\"activemq:orders\").\n    to(\"log:com.mycompany.order?level=DEBUG&groupSize=10\"\
      ).to(\"bean:processOrder\");\n-----------------------------------------------------------------------------------\n\
      \n[[Log-ThroughputloggerwithgroupIntervalsample]]\nThroughput logger with groupInterval\
      \ sample\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThis route will result\
      \ in message stats logged every 10s, with an\ninitial 60s delay and stats should\
      \ be displayed even if there isn't any\nmessage traffic.\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------------------------------------------\n\
      from(\"activemq:orders\").\nto(\"log:com.mycompany.order?level=DEBUG&groupInterval=10000&groupDelay=60000&groupActiveOnly=false\"\
      ).to(\"bean:processOrder\");\n-----------------------------------------------------------------------------------------------------------------------------\n\
      \nThe following will be logged:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------------\n\
      \"Received: 1000 new messages, with total 2000 so far. Last group took: 10000\
      \ millis which is: 100 messages per second. average: 100\"\n------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Log-Fullcustomizationoftheloggingoutput]]\nFull customization of the logging\
      \ output\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*Available as of Camel\
      \ 2.11*\n\nWith the options outlined in the link:log.html[#Formatting] section,\
      \ you\ncan control much of the output of the logger. However, log lines will\n\
      always follow this structure:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------\n\
      Exchange[Id:ID-machine-local-50656-1234567901234-1-2, ExchangePattern:InOut,\
      \ \nProperties:{CamelToEndpoint=log://org.apache.camel.component.log.TEST?showAll=true,\
      \ \nCamelCreatedTimestamp=Thu Mar 28 00:00:00 WET 2013}, \nHeaders:{breadcrumbId=ID-machine-local-50656-1234567901234-1-1},\
      \ BodyType:String, Body:Hello World, Out: null]\n--------------------------------------------------------------------------------------------------------------\n\
      \nThis format is unsuitable in some cases, perhaps because you need to...\n\n\
      * ... filter the headers and properties that are printed, to strike a\nbalance\
      \ between insight and verbosity.\n* ... adjust the log message to whatever you\
      \ deem most readable.\n* ... tailor log messages for digestion by log mining\
      \ systems, e.g.\nSplunk.\n* ... print specific body types differently.\n* ...\
      \ etc.\n\nWhenever you require absolute customization, you can create a class\
      \ that\nimplements the\nhttp://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/spi/ExchangeFormatter.html[`ExchangeFormatter`]\n\
      interface. Within the `format(Exchange)` method you have access to the\nfull\
      \ Exchange, so you can select and extract the precise information you\nneed,\
      \ format it in a custom manner and return it. The return value will\nbecome\
      \ the final log message.\n\nYou can have the Log component pick up your custom\
      \ `ExchangeFormatter`\nin either of two ways:\n\n*Explicitly instantiating the\
      \ LogComponent in your Registry:*\n\n[source,java]\n---------------------------------------------------------------------\n\
      <bean name=\"log\" class=\"org.apache.camel.component.log.LogComponent\">\n\
      \   <property name=\"exchangeFormatter\" ref=\"myCustomFormatter\" />\n</bean>\n\
      ---------------------------------------------------------------------\n\n*Convention\
      \ over configuration:*\n\nSimply by registering a bean with the name `logFormatter`;\
      \ the Log\nComponent is intelligent enough to pick it up automatically.\n\n\
      [source,java]\n----------------------------------------------------------------------\n\
      <bean name=\"logFormatter\" class=\"com.xyz.MyCustomExchangeFormatter\" />\n\
      ----------------------------------------------------------------------\n\nNOTE:\
      \ the `ExchangeFormatter` gets applied to *all Log endpoints within\nthat Camel\
      \ Context*. If you need different ExchangeFormatters for\ndifferent endpoints,\
      \ just instantiate the LogComponent as many times as\nneeded, and use the relevant\
      \ bean name as the endpoint prefix.\n\nFrom *Camel 2.11.2/2.12* onwards when\
      \ using a custom log formatter, you\ncan specify parameters in the log uri,\
      \ which gets configured on the\ncustom log formatter. Though when you do that\
      \ you should define the\n\"logFormatter\" as prototype scoped so its not shared\
      \ if you have\ndifferent parameters, eg:\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      <bean name=\"logFormatter\" class=\"com.xyz.MyCustomExchangeFormatter\" scope=\"\
      prototype\"/>\n---------------------------------------------------------------------------------------\n\
      \nAnd then we can have Camel routes using the log uri with different\noptions:\n\
      \n[source,java]\n---------------------------------------------\n<to uri=\"log:foo?param1=foo&amp;param2=100\"\
      />\n...\n<to uri=\"log:bar?param1=bar&amp;param2=200\"/>\n---------------------------------------------\n\
      \n[[Log-UsingLogcomponentinOSGi]]\nUsing Log component in OSGi\n+++++++++++++++++++++++++++\n\
      \n*Improvement as of Camel 2.12.4/2.13.1*\n\nWhen using??Log component inside\
      \ OSGi (e.g., in Karaf), the underlying\nlogging mechanisms are provided by\
      \ PAX logging. It searches for a bundle\nwhich invokes??`org.slf4j.LoggerFactory.getLogger()`\
      \ method and\nassociates the bundle with the logger instance. Without specifying\n\
      custom??`org.sfl4j.Logger` instance, the logger created by Log component\nis\
      \ associated with `camel-core` bundle.\n\nIn some scenarios it is required that\
      \ the bundle associated with logger\nshould be the bundle which contains route\
      \ definition. To do this, either\nregister single instance of??`org.slf4j.Logger`\
      \ in the Registry or\nreference it using??`logger` URI parameter.\n\n[[Log-SeeAlso]]\n\
      See Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n* link:tracer.html[Tracer]\n* link:how-do-i-use-log4j.html[How do I use log4j]\n\
      * link:how-do-i-use-java-14-logging.html[How do I use Java 1.4 logging]\n* link:logeip.html[LogEIP]\
      \ for using `log` directly in the DSL for human\nlogs.\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-lpr
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: lpr
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: lpr
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: lpr
          spec:
            containers:
            - image: fabric8/connector-lpr:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: lpr
        syntax: lpr:hostname:port/printername
        title: Printer
        description: The printer component is used for sending messages to printers as print jobs.
        label: printing
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.printer.PrinterComponent
        groupId: org.apache.camel
        artifactId: camel-printer
        version: 2.18.1
      componentProperties: {}
      properties:
        hostname:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the printer
        port:
          kind: path
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number of the printer
        printername:
          kind: path
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the printer
        copies:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of copies to print
        docFlavor:
          kind: parameter
          group: producer
          type: object
          javaType: javax.print.DocFlavor
          deprecated: false
          secret: false
          description: Sets DocFlavor to use.
        flavor:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets DocFlavor to use.
        mediaSize:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: na-letter
          description: Sets the stationary as defined by enumeration names in the javax.print.attribute.standard.MediaSizeName API. The default setting is to use North American Letter sized stationary. The value's case is ignored e.g. values of iso_a4 and ISO_A4 may be used.
        mediaTray:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets MediaTray supported by the javax.print.DocFlavor API for example uppermiddle etc.
        mimeType:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets mimeTypes supported by the javax.print.DocFlavor API
        orientation:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - portrait
          - landscape
          - reverse-portrait
          - reverse-landscape
          deprecated: false
          secret: false
          defaultValue: portrait
          description: Sets the page orientation.
        printerPrefix:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the prefix name of the printer it is useful when the printer name does not start with //hostname/printer
        sendToPrinter:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: etting this option to false prevents sending of the print data to the printer
        sides:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - one-sided
          - duplex
          - tumble
          - two-sided-short-edge
          - two-sided-long-edge
          deprecated: false
          secret: false
          defaultValue: one-sided
          description: Sets one sided or two sided printing based on the javax.print.attribute.standard.Sides API
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Printer-PrinterComponent]]
      Printer Component
      ~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.1*

      The *printer* component provides a way to direct payloads on a route to
      a printer. Obviously the payload has to be a formatted piece of payload
      in order for the component to appropriately print it. The objective is
      to be able to direct specific payloads as jobs to a line printer in a
      camel flow.

      This component only supports a camel producer endpoint.

      The functionality allows for the payload to be printed on a default
      printer, named local, remote or wirelessly linked printer using the
      javax printing API under the covers.

      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-printer</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Printer-URIformat]]
      URI format
      ^^^^^^^^^^

      Since the URI scheme for a printer has not been standardized (the
      nearest thing to a standard being the IETF print standard) and therefore
      not uniformly applied by vendors, we have chosen *"lpr"* as the scheme.

      [source,java]
      -----------------------------------------------
      lpr://localhost/default[?options]
      lpr://remotehost:port/path/to/printer[?options]
      -----------------------------------------------

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

      [[Printer-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Printer component has no options.
      // component options: END



      // endpoint options: START
      The Printer component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | hostname | producer |  | String | *Required* Hostname of the printer
      | port | producer |  | int | Port number of the printer
      | printername | producer |  | String | Name of the printer
      | copies | producer | 1 | int | Number of copies to print
      | docFlavor | producer |  | DocFlavor | Sets DocFlavor to use.
      | flavor | producer |  | String | Sets DocFlavor to use.
      | mediaSize | producer | na-letter | String | Sets the stationary as defined by enumeration names in the javax.print.attribute.standard.MediaSizeName API. The default setting is to use North American Letter sized stationary. The value's case is ignored e.g. values of iso_a4 and ISO_A4 may be used.
      | mediaTray | producer |  | String | Sets MediaTray supported by the javax.print.DocFlavor API for example uppermiddle etc.
      | mimeType | producer |  | String | Sets mimeTypes supported by the javax.print.DocFlavor API
      | orientation | producer | portrait | String | Sets the page orientation.
      | printerPrefix | producer |  | String | Sets the prefix name of the printer it is useful when the printer name does not start with //hostname/printer
      | sendToPrinter | producer | true | boolean | etting this option to false prevents sending of the print data to the printer
      | sides | producer | one-sided | String | Sets one sided or two sided printing based on the javax.print.attribute.standard.Sides API
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Printer-SendingMessagestoaPrinter]]
      Sending Messages to a Printer
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [[Printer-PrinterProducer]]
      Printer Producer
      ++++++++++++++++

      Sending data to the printer is very straightforward and involves
      creating a producer endpoint that can be sent message exchanges on in
      route.

      [[Printer-UsageSamples]]
      Usage Samples
      ^^^^^^^^^^^^^

      [[Printer-Example1:PrintingtextbasedpayloadsonaDefaultprinterusingletterstationaryandone-sidedmode]]
      Example 1: Printing text based payloads on a Default printer using letter stationary and one-sided mode
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      -----------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
             from(file://inputdir/?delete=true)
             .to("lpr://localhost/default?copies=2" +
                 "&flavor=DocFlavor.INPUT_STREAM&" +
                 "&mimeType=AUTOSENSE" +
                 "&mediaSize=NA_LETTER" +
                 "&sides=one-sided")
          }};
      -----------------------------------------------

      [[Printer-Example2:PrintingGIFbasedpayloadsonaRemoteprinterusingA4stationaryandone-sidedmode]]
      Example 2: Printing GIF based payloads on a Remote printer using A4 stationary and one-sided mode
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
             from(file://inputdir/?delete=true)
             .to("lpr://remotehost/sales/salesprinter" +
                 "?copies=2&sides=one-sided" +
                 "&mimeType=GIF&mediaSize=ISO_A4" +
                 "&flavor=DocFlavor.INPUT_STREAM")
         }};
      --------------------------------------------------

      [[Printer-Example3:PrintingJPEGbasedpayloadsonaRemoteprinterusingJapanesePostcardstationaryandone-sidedmode]]
      Example 3: Printing JPEG based payloads on a Remote printer using Japanese Postcard stationary and one-sided mode
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
             from(file://inputdir/?delete=true)
             .to("lpr://remotehost/sales/salesprinter" +
                 "?copies=2&sides=one-sided" +
                 "&mimeType=JPEG" +
                 "&mediaSize=JAPANESE_POSTCARD" +
                 "&flavor=DocFlavor.INPUT_STREAM")
          }};
      --------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-lucene
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: lucene
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: lucene
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: lucene
          spec:
            containers:
            - image: fabric8/connector-lucene:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: lucene
        syntax: lucene:host:operation
        title: Lucene
        description: To insert or query from Apache Lucene databases.
        label: database,search
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.lucene.LuceneComponent
        groupId: org.apache.camel
        artifactId: camel-lucene
        version: 2.18.1
      componentProperties:
        config:
          kind: property
          type: object
          javaType: org.apache.camel.component.lucene.LuceneConfiguration
          deprecated: false
          secret: false
          description: To use a shared lucene configuration
      properties:
        host:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URL to the lucene server
        operation:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.lucene.LuceneOperation
          enum:
          - insert
          - query
          deprecated: false
          secret: false
          description: Operation to do such as insert or query.
        analyzer:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.lucene.analysis.Analyzer
          deprecated: false
          secret: false
          description: An Analyzer builds TokenStreams which analyze text. It thus represents a policy for extracting index terms from text. The value for analyzer can be any class that extends the abstract class org.apache.lucene.analysis.Analyzer. Lucene also offers a rich set of analyzers out of the box
        indexDir:
          kind: parameter
          group: producer
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: A file system directory in which index files are created upon analysis of the document by the specified analyzer
        maxHits:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: An integer value that limits the result set of the search operation
        srcDir:
          kind: parameter
          group: producer
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: An optional directory containing files to be used to be analyzed and added to the index at producer startup.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Lucene-LuceneIndexerandSearchComponent]]\nLucene (Indexer\
      \ and Search) Component\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available\
      \ as of Camel 2.2*\n\nThe *lucene* component is based on the Apache Lucene project.\
      \ Apache\nLucene is a powerful high-performance, full-featured text search engine\n\
      library written entirely in Java. For more details about Lucene, please\nsee\
      \ the following links\n\n* http://lucene.apache.org/java/docs/[http://lucene.apache.org/java/docs/]\n\
      * http://lucene.apache.org/java/docs/features.html[http://lucene.apache.org/java/docs/features.html]\n\
      \nThe lucene component in camel facilitates integration and utilization of\n\
      Lucene endpoints in enterprise integration patterns and scenarios. The\nlucene\
      \ component does the following\n\n* builds a searchable index of documents when\
      \ payloads are sent to the\nLucene Endpoint\n* facilitates performing of indexed\
      \ searches in Camel\n\nThis component only supports producer endpoints.\n\n\
      Maven users will need to add the following dependency to their `pom.xml`\nfor\
      \ this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-lucene</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Lucene-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n------------------------------------\n\
      lucene:searcherName:insert[?options]\nlucene:searcherName:query[?options]\n\
      ------------------------------------\n\nYou can append query options to the\
      \ URI in the following format,\n`?option=value&option=value&...`\n\n[[Lucene-InsertOptions]]\n\
      Insert Options\n^^^^^^^^^^^^^^\n\n\n\n\n\n// component options: START\nThe Lucene\
      \ component supports 1 options which are listed below.\n\n\n\n{% raw %}\n[width=\"\
      100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| config | LuceneConfiguration | To use a\
      \ shared lucene configuration\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Lucene component supports 7 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | producer |  | String\
      \ | *Required* The URL to the lucene server\n| operation | producer |  | LuceneOperation\
      \ | *Required* Operation to do such as insert or query.\n| analyzer | producer\
      \ |  | Analyzer | An Analyzer builds TokenStreams which analyze text. It thus\
      \ represents a policy for extracting index terms from text. The value for analyzer\
      \ can be any class that extends the abstract class org.apache.lucene.analysis.Analyzer.\
      \ Lucene also offers a rich set of analyzers out of the box\n| indexDir | producer\
      \ |  | File | A file system directory in which index files are created upon\
      \ analysis of the document by the specified analyzer\n| maxHits | producer |\
      \  | int | An integer value that limits the result set of the search operation\n\
      | srcDir | producer |  | File | An optional directory containing files to be\
      \ used to be analyzed and added to the index at producer startup.\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n\n[[Lucene-Sending/ReceivingMessagestoFromthecache]]\n\
      Sending/Receiving Messages to/from the cache\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[Lucene-MessageHeaders]]\nMessage Headers\n+++++++++++++++\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Description\n\n|`QUERY` |The Lucene Query to performed on the index.\
      \ The query may include\nwildcards and phrases\n\n|`RETURN_LUCENE_DOCS` | *Camel\
      \ 2.15:* Set this header to true to include the actual Lucene\ndocumentation\
      \ when returning hit information.\n|=======================================================================\n\
      \n[[Lucene-LuceneProducers]]\nLucene Producers\n++++++++++++++++\n\nThis component\
      \ supports 2 producer endpoints.\n\n*insert* - The insert producer builds a\
      \ searchable index by analyzing\nthe body in incoming exchanges and associating\
      \ it with a token\n(\"content\").\n*query* - The query producer performs searches\
      \ on a pre-created index.\nThe query uses the searchable index to perform score\
      \ & relevance based\nsearches. Queries are sent via the incoming exchange contains\
      \ a header\nproperty name called 'QUERY'. The value of the header property 'QUERY'\n\
      is a Lucene Query. For more details on how to create Lucene Queries\ncheck out\
      \ http://lucene.apache.org/java/3_0_0/queryparsersyntax.html[http://lucene.apache.org/java/3_0_0/queryparsersyntax.html]\n\
      \n[[Lucene-LuceneProcessor]]\nLucene Processor\n++++++++++++++++\n\nThere is\
      \ a processor called LuceneQueryProcessor available to perform\nqueries against\
      \ lucene without the need to create a producer.\n\n[[Lucene-LuceneUsageSamples]]\n\
      Lucene Usage Samples\n^^^^^^^^^^^^^^^^^^^^\n\n[[Lucene-Example1:CreatingaLuceneindex]]\n\
      Example 1: Creating a Lucene index\n++++++++++++++++++++++++++++++++++\n\n[source,java]\n\
      ------------------------------------------------------------------------------------\n\
      RouteBuilder builder = new RouteBuilder() {\n    public void configure() {\n\
      \       from(\"direct:start\").\n           to(\"lucene:whitespaceQuotesIndex:insert?\n\
      \               analyzer=#whitespaceAnalyzer&indexDir=#whitespace&srcDir=#load_dir\"\
      ).\n           to(\"mock:result\");\n    }\n};\n------------------------------------------------------------------------------------\n\
      \n[[Lucene-Example2:LoadingpropertiesintotheJNDIregistryintheCamelContext]]\n\
      Example 2: Loading properties into the JNDI registry in the Camel Context\n\
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n\
      [source,java]\n-----------------------------------------------------------------\n\
      @Override\nprotected JndiRegistry createRegistry() throws Exception {\n  JndiRegistry\
      \ registry =\n         new JndiRegistry(createJndiContext());\n  registry.bind(\"\
      whitespace\", new File(\"./whitespaceIndexDir\"));\n  registry.bind(\"load_dir\"\
      ,\n        new File(\"src/test/resources/sources\"));\n  registry.bind(\"whitespaceAnalyzer\"\
      ,\n        new WhitespaceAnalyzer());\n  return registry;\n}\n...\nCamelContext\
      \ context = new DefaultCamelContext(createRegistry());\n-----------------------------------------------------------------\n\
      \n[[Lucene-Example2:PerformingsearchesusingaQueryProducer]]\nExample 2: Performing\
      \ searches using a Query Producer\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n----------------------------------------------------------------------------------------------------\n\
      RouteBuilder builder = new RouteBuilder() {\n    public void configure() {\n\
      \       from(\"direct:start\").\n          setHeader(\"QUERY\", constant(\"\
      Seinfeld\")).\n          to(\"lucene:searchIndex:query?\n             analyzer=#whitespaceAnalyzer&indexDir=#whitespace&maxHits=20\"\
      ).\n          to(\"direct:next\");\n                \n       from(\"direct:next\"\
      ).process(new Processor() {\n          public void process(Exchange exchange)\
      \ throws Exception {\n             Hits hits = exchange.getIn().getBody(Hits.class);\n\
      \             printResults(hits);\n          }\n\n          private void printResults(Hits\
      \ hits) {\n              LOG.debug(\"Number of hits: \" + hits.getNumberOfHits());\n\
      \              for (int i = 0; i < hits.getNumberOfHits(); i++) {\n        \
      \         LOG.debug(\"Hit \" + i + \" Index Location:\" + hits.getHit().get(i).getHitLocation());\n\
      \                 LOG.debug(\"Hit \" + i + \" Score:\" + hits.getHit().get(i).getScore());\n\
      \                 LOG.debug(\"Hit \" + i + \" Data:\" + hits.getHit().get(i).getData());\n\
      \              }\n           }\n       }).to(\"mock:searchResult\");\n   }\n\
      };\n----------------------------------------------------------------------------------------------------\n\
      \n[[Lucene-Example3:PerformingsearchesusingaQueryProcessor]]\nExample 3: Performing\
      \ searches using a Query Processor\n++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n-------------------------------------------------------------------------------------------------------\n\
      RouteBuilder builder = new RouteBuilder() {\n    public void configure() { \
      \           \n        try {\n            from(\"direct:start\").\n         \
      \       setHeader(\"QUERY\", constant(\"Rodney Dangerfield\")).\n          \
      \      process(new LuceneQueryProcessor(\"target/stdindexDir\", analyzer, null,\
      \ 20)).\n                to(\"direct:next\");\n        } catch (Exception e)\
      \ {\n            e.printStackTrace();\n        }\n                \n       \
      \ from(\"direct:next\").process(new Processor() {\n            public void process(Exchange\
      \ exchange) throws Exception {\n                Hits hits = exchange.getIn().getBody(Hits.class);\n\
      \                printResults(hits);\n            }\n                    \n\
      \            private void printResults(Hits hits) {\n                LOG.debug(\"\
      Number of hits: \" + hits.getNumberOfHits());\n                for (int i =\
      \ 0; i < hits.getNumberOfHits(); i++) {\n                    LOG.debug(\"Hit\
      \ \" + i + \" Index Location:\" + hits.getHit().get(i).getHitLocation());\n\
      \                    LOG.debug(\"Hit \" + i + \" Score:\" + hits.getHit().get(i).getScore());\n\
      \                    LOG.debug(\"Hit \" + i + \" Data:\" + hits.getHit().get(i).getData());\n\
      \                }\n            }\n       }).to(\"mock:searchResult\");\n  \
      \ }\n};\n-------------------------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-lumberjack
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: lumberjack
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: lumberjack
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: lumberjack
          spec:
            containers:
            - image: fabric8/connector-lumberjack:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: lumberjack
        syntax: lumberjack:host:port
        title: Lumberjack
        description: The lumberjack retrieves logs sent over the network using the Lumberjack protocol.
        label: log
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.lumberjack.LumberjackComponent
        groupId: org.apache.camel
        artifactId: camel-lumberjack
        version: 2.18.1
      componentProperties:
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: Sets the default SSL configuration to use for all the endpoints. You can also configure it directly at the endpoint level.
      properties:
        host:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Network interface on which to listen for Lumberjack
        port:
          kind: path
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5044"
          description: Network port on which to listen for Lumberjack
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sslContextParameters:
          kind: parameter
          group: consumer
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: SSL configuration
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Lumberjack-LumberjackComponent]]
      Lumberjack Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18*

      The *Lumberjack* component retrieves logs sent over the network using the Lumberjack protocol,
      from https://www.elastic.co/fr/products/beats/filebeat[Filebeat] for instance.
      The network communication can be secured with SSL.

      This component only supports consumer endpoints.

      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-lumberjack</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Lumberjack-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------------
      lumberjack:host
      lumberjack:host:port
      ------------------------------------

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

      [[Lumberjack-Options]]
      Options
      ^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | sslContextParameters | SSLContextParameters | Sets the default SSL configuration to use for all the endpoints. You can also configure it directly at the endpoint level.
      |=======================================================================
      {% endraw %}
      // component options: END







      // endpoint options: START
      The Lumberjack component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | consumer |  | String | *Required* Network interface on which to listen for Lumberjack
      | port | consumer | 5044 | int | Network port on which to listen for Lumberjack
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sslContextParameters | consumer |  | SSLContextParameters | SSL configuration
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END





      [[Lumberjack-Result]]
      Result
      ^^^^^^

      The result body is a `Map<String, Object>` object.

      [[Lumberjack-LumberjackUsageSamples]]
      Lumberjack Usage Samples
      ^^^^^^^^^^^^^^^^^^^^^^^^

      [[Lumberjack-Example1:]]
      Example 1: Streaming the log messages
      +++++++++++++++++++++++++++++++++++++

      [source,java]
      ------------------------------------------------------------------------------------
      RouteBuilder builder = new RouteBuilder() {
          public void configure() {
             from("lumberjack:0.0.0.0").                  // Listen on all network interfaces using the default port
                 setBody(simple("${body[message]}")).     // Select only the log message
                 to("stream:out");                        // Write it into the output stream
          }
      };
      ------------------------------------------------------------------------------------

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-metrics
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: metrics
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: metrics
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: metrics
          spec:
            containers:
            - image: fabric8/connector-metrics:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: metrics
        syntax: metrics:metricsType:metricsName
        title: Metrics
        description: To collect various metrics directly from Camel routes using the DropWizard metrics library.
        label: monitoring
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.metrics.MetricsComponent
        groupId: org.apache.camel
        artifactId: camel-metrics
        version: 2.18.1
      componentProperties:
        metricRegistry:
          kind: property
          type: object
          javaType: com.codahale.metrics.MetricRegistry
          deprecated: false
          secret: false
          description: To use a custom configured MetricRegistry.
      properties:
        metricsType:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.metrics.MetricsType
          enum:
          - GAUGE
          - COUNTER
          - HISTOGRAM
          - METER
          - TIMER
          deprecated: false
          secret: false
          description: Type of metrics
        metricsName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of metrics
        action:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.metrics.MetricsTimerAction
          enum:
          - start
          - stop
          deprecated: false
          secret: false
          description: Action when using timer type
        decrement:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Decrement value when using counter type
        increment:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Increment value when using counter type
        mark:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Mark when using meter type
        value:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Long
          deprecated: false
          secret: false
          description: Value value when using histogram type
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      ifdef::env-github[]
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      [[MetricsComponent-MetricsComponent]]
      Metrics Component
      ~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The??**metrics:**??component allows to collect various metrics directly
      from Camel routes. Supported metric types
      are??link:#MetricsComponent-counter[counter],??link:#MetricsComponent-histogram[histogram],
      link:#MetricsComponent-meter[meter]??and??link:#MetricsComponent-timer[timer].??http://metrics.dropwizard.io[Metrics]??provides
      simple way to measure behaviour of application. Configurable
      reporting??backend??is enabling different integration options for
      collecting and visualizing statistics. The component also provides
      a??`MetricsRoutePolicyFactory` which allows to expose route statistics
      using Dropwizard Metrics, see bottom of page for details.

      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-metrics</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ----

      [[MetricsComponent-URIformat]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      metrics:[ meter | counter | histogram | timer ]:metricname[?options]
      ----

      [[MetricsComponent-options]]
      Options
      ^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | metricRegistry | MetricRegistry | To use a custom configured MetricRegistry.
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The Metrics component supports 8 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | metricsType | producer |  | MetricsType | *Required* Type of metrics
      | metricsName | producer |  | String | *Required* Name of metrics
      | action | producer |  | MetricsTimerAction | Action when using timer type
      | decrement | producer |  | Long | Decrement value when using counter type
      | increment | producer |  | Long | Increment value when using counter type
      | mark | producer |  | Long | Mark when using meter type
      | value | producer |  | Long | Value value when using histogram type
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[MetricsComponent-registryMetricRegistry]]
      [[MetricsComponent-registry]]Metric Registry
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Camel Metrics component uses by default a `MetricRegistry` instance with
      a `Slf4jReporter` that has a 60 second reporting interval.
      This default registry can be replaced with a custom one by providing
      a `MetricRegistry` bean. If multiple `MetricRegistry` beans exist in the
      application, the one with name `metricRegistry` is used.

      For example using Spring Java Configuration:

      [source,java]
      ----
      @Configuration
      public static class MyConfig extends SingleRouteCamelConfiguration {

          @Bean
          @Override
          public RouteBuilder route() {
              return new RouteBuilder() {
                  @Override
                  public void configure() throws Exception {
                      // define Camel routes here
                  }
              };
          }

          @Bean(name = MetricsComponent.METRIC_REGISTRY_NAME)
          public MetricRegistry getMetricRegistry() {
              MetricRegistry registry = ...;
              return registry;
          }
      }
      ----

      Or using CDI:
      [source,java]
      ----
      class MyBean extends RouteBuilder {

          @Override
          public void configure() {
            from("...")
                // Register the 'my-meter' meter in the MetricRegistry below
                .to("metrics:meter:my-meter");
          }

          @Produces
          // If multiple MetricRegistry beans
          // @Named(MetricsComponent.METRIC_REGISTRY_NAME)
          MetricRegistry registry() {
              MetricRegistry registry = new MetricRegistry();
              // ...
              return registry;
          }
      }
      ----

      CAUTION: `MetricRegistry` uses internal thread(s) for reporting. There is no
      public API in version `3.0.1` for users to clean up on exit. Thus using
      Camel Metrics Component leads to Java classloader leak and my cause
      `OutOfMemoryErrors` in some cases.

      [[MetricsComponent-Usage]]
      Usage
      ^^^^^

      Each metric has type and name. Supported types are
      link:#MetricsComponent-counter[counter],
      link:#MetricsComponent-histogram[histogram],??link:#MetricsComponent-meter[meter]??and
      link:#MetricsComponent-timer[timer]. Metric name is simple string. If
      metric type is not provided then type meter is used by default.

      [[MetricsComponent-Headers]]
      Headers
      +++++++

      Metric name defined in URI can be overridden by using header with name
      `CamelMetricsName`.

      For example

      [source,java]
      ----
      from("direct:in")
          .setHeader(MetricsConstants.HEADER_METRIC_NAME, constant("new.name"))
          .to("metrics:counter:name.not.used")
          .to("direct:out");
      ----

      will update counter with name `new.name` instead of `name.not.used`.

      All Metrics specific headers are removed from the message once Metrics
      endpoint finishes processing of exchange. While processing exchange
      Metrics endpoint will catch all exceptions and write log entry using
      level `warn`.

      [[MetricsComponent-counterMetricstypecounter]]
      [[MetricsComponent-counter]]Metrics type counter
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [source]
      ----
      metrics:counter:metricname[?options]
      ----

      [[MetricsComponent-Options]]
      Options
      +++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |=====================================================
      |Name |Default |Description
      |increment?? |- |Long value to add to the counter
      |decrement |- |Long value to subtract from the counter
      |=====================================================

      If neither `increment` or `decrement` is defined then counter value will
      be incremented by one. If `increment` and `decrement` are both defined
      only increment operation is called.??

      [source,java]
      ----
      // update counter simple.counter by 7
      from("direct:in")
          .to("metric:counter:simple.counter?increment=7")
          .to("direct:out");
      ----

      [source,java]
      ----
      // increment counter simple.counter by 1
      from("direct:in")
          .to("metric:counter:simple.counter")
          .to("direct:out");
      ----

      [source,java]
      ----
      // decrement counter simple.counter by 3
      from("direct:in")
          .to("metric:counter:simple.counter?decrement=3")
          .to("direct:out");
      ----

      [[MetricsComponent-Headers.1]]
      Headers
      +++++++

      Message headers can be used to override `increment` and `decrement`
      values specified in Metrics component URI.

      [width="100%",cols="10%,80%,10%",options="header",]
      |====================================================================
      |Name |Description |Expected type
      |CamelMetricsCounterIncrement?? |Override increment value in URI |Long
      |CamelMetricsCounterDecrement?? |Override decrement value in URI |Long
      |====================================================================

      [source,java]
      ----
      // update counter simple.counter by 417
      from("direct:in")
          .setHeader(MetricsConstants.HEADER_COUNTER_INCREMENT, constant(417L))
          .to("metric:counter:simple.counter?increment=7")
          .to("direct:out");
      ----

      [source,java]
      ----
      // updates counter using simple language to evaluate body.length
      from("direct:in")
          .setHeader(MetricsConstants.HEADER_COUNTER_INCREMENT, simple("${body.length}"))
          .to("metrics:counter:body.length")
          .to("mock:out");

      ----

      [[MetricsComponent-histogramMetrictypehistogram]]
      [[MetricsComponent-histogram]]Metric type histogram
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [source]
      ----
      metrics:histogram:metricname[?options]
      ----

      [[MetricsComponent-Options.1]]
      Options
      +++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |===================================
      |Name |Default |Description
      |value |- |Value to use in histogram
      |===================================

      If no `value` is not set nothing is added to histogram and warning is
      logged.

      [source,java]
      ----
      // adds value 9923 to simple.histogram
      from("direct:in")
          .to("metric:histogram:simple.histogram?value=9923")
          .to("direct:out");
      ----

      [source,java]
      ----
      // nothing is added to simple.histogram; warning is logged
      from("direct:in")
          .to("metric:histogram:simple.histogram")
          .to("direct:out");

      ----

      [[MetricsComponent-Headers.2]]
      Headers
      +++++++

      Message header can be used to override value specified in Metrics
      component URI.

      [width="100%",cols="10%,80%,10%",options="header",]
      |=================================================================
      |Name |Description |Expected type
      |CamelMetricsHistogramValue |Override histogram value in URI |Long
      |=================================================================

      [source,java]
      ----
      // adds value 992 to simple.histogram
      from("direct:in")
          .setHeader(MetricsConstants.HEADER_HISTOGRAM_VALUE, constant(992L))
          .to("metric:histogram:simple.histogram?value=700")
          .to("direct:out")

      ----

      [[MetricsComponent-meterMetrictypemeter]]
      [[MetricsComponent-meter]]Metric type meter
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [source]
      ----
      metrics:meter:metricname[?options]
      ----

      [[MetricsComponent-Options.2]]
      Options
      +++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |===================================
      |Name |Default |Description
      |mark?? |- |Long value to use as mark
      |===================================

      If `mark` is not set then??`meter.mark()` is called without argument.

      [source,java]
      ----
      // marks simple.meter without value
      from("direct:in")
          .to("metric:simple.meter")
          .to("direct:out");
      ----

      [source,java]
      ----
      // marks simple.meter with value 81
      from("direct:in")
          .to("metric:meter:simple.meter?mark=81")
          .to("direct:out");
      ----

      [[MetricsComponent-Headers.3]]
      Headers
      +++++++

      Message header can be used to override `mark` value specified in Metrics
      component URI.

      [width="100%",cols="10%,80%,10%",options="header",]
      |=======================================================
      |Name |Description |Expected type
      |CamelMetricsMeterMark |Override mark value in URI |Long
      |=======================================================

      [source,java]
      ----
      // updates meter simple.meter with value 345
      from("direct:in")
          .setHeader(MetricsConstants.HEADER_METER_MARK, constant(345L))
          .to("metric:meter:simple.meter?mark=123")
          .to("direct:out");
      ----

      [[MetricsComponent-timerMetricstypetimer]]
      [[MetricsComponent-timer]]Metrics type timer
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      [source]
      ----
      metrics:timer:metricname[?options]
      ----

      [[MetricsComponent-Options.3]]
      Options
      +++++++

      [width="100%",cols="10%,10%,80%",options="header",]
      |==========================
      |Name |Default |Description
      |action |- |start or stop
      |==========================

      If no `action` or invalid value is provided then warning is logged
      without any timer update. If action `start` is called on already running
      timer or `stop` is called on not running timer then nothing is updated
      and warning is logged.

      [source,java]
      ----
      // measure time taken by route "calculate"
      from("direct:in")
          .to("metrics:timer:simple.timer?action=start")
          .to("direct:calculate")
          .to("metrics:timer:simple.timer?action=stop");
      ----

      `TimerContext` objects are stored as Exchange properties between
      different Metrics component calls.

      [[MetricsComponent-Headers.4]]
      Headers
      +++++++

      Message header can be used to override action value specified in Metrics
      component URI.

      [width="100%",cols="10%,80%,10%",options="header",]
      |=======================================================================
      |Name |Description |Expected type
      |CamelMetricsTimerAction |Override timer action in URI
      |`org.apache.camel.component.metrics.timer.TimerEndpoint.TimerAction`
      |=======================================================================

      [source,java]
      ----
      // sets timer action using header
      from("direct:in")
          .setHeader(MetricsConstants.HEADER_TIMER_ACTION, TimerAction.start)
          .to("metric:timer:simple.timer")
          .to("direct:out");
      ----

      [[MetricsComponent-MetricsRoutePolicyFactory]]
      MetricsRoutePolicyFactory
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      This factory allows to add a??link:routepolicy.html[RoutePolicy] for each
      route which exposes route utilization statistics using Dropwizard metrics.
      This factory can be used in Java and XML as the examples below
      demonstrates.??

      NOTE: Instead of using the MetricsRoutePolicyFactory you can define a
      MetricsRoutePolicy per route you want to instrument, in case you only
      want to instrument a few selected routes.

      From Java you just add the factory to the??`CamelContext` as shown below:

      [source,java]
      ----
      context.addRoutePolicyFactory(new MetricsRoutePolicyFactory());
      ----

      And from XML DSL you define a <bean> as follows:

      [source,xml]
      ----
        <!-- use camel-metrics route policy to gather metrics for all routes -->
        <bean id="metricsRoutePolicyFactory" class="org.apache.camel.component.metrics.routepolicy.MetricsRoutePolicyFactory"/>
      ----

      The??`MetricsRoutePolicyFactory` and??`MetricsRoutePolicy` supports the
      following options:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Default |Description
      |useJmx |false |Whether to report fine grained statistics to JMX by
      using the `com.codahale.metrics.JmxReporter`. +
      Notice that if JMX is enabled on link:camelcontext.html[CamelContext]
      then a `MetricsRegistryService` mbean is enlisted under the services
      type in the JMX tree. That mbean has a single operation to output the
      statistics using json. Setting `useJmx` to true is only needed if you
      want fine grained mbeans per statistics type.

      |jmxDomain |org.apache.camel.metrics |The JMX domain name

      |prettyPrint |false |Whether to use pretty print when outputting
      statistics in json format

      |metricsRegistry |?? |Allow to use a shared
      `com.codahale.metrics.MetricRegistry`. If none is provided then Camel
      will create a shared instance used by the this CamelContext.

      |rateUnit |TimeUnit.SECONDS |The unit to use for rate in the metrics
      reporter or when dumping the statistics as json.

      |durationUnit |TimeUnit.MILLISECONDS |The unit to use for duration in
      the metrics reporter or when dumping the statistics as json.

      |namePattern |`##name##.##routeId##.##type##` |*Camel 2.17:* The name
      pattern to use. Uses dot as separators, but you can change that. The
      values `##name##`, `##routeId##`, and `##type##` will be replaced with actual
      value. Where `###name###` is the name of the CamelContext. `###routeId###`
      is the name of the route. And `###type###` is the value of responses.
      |=======================================================================

      ??

      From Java code tou can get hold of
      the??`com.codahale.metrics.MetricRegistry`??from the
      `org.apache.camel.component.metrics.routepolicy.MetricsRegistryService`
      as shown below:

      [source,java]
      ----
      MetricRegistryService registryService = context.hasService(MetricsRegistryService.class);
      if (registryService != null) {
        MetricsRegistry registry = registryService.getMetricsRegistry();
        ...
      }
      ----

      [[MetricsComponent-MetricsMessageHistoryFactory]]
      MetricsMessageHistoryFactory
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.17*

      This factory allows to use metrics to
      capture??link:message-history.html[Message History] performance
      statistics while routing messages. It works by using a metrics Timer for
      each node in all the routes.??This factory can be used in Java and XML as
      the examples below demonstrates.??

      From Java you just set the factory to the??`CamelContext`??as shown below:

      [source,java]
      ----
      context.setMessageHistoryFactory(new MetricsMessageHistoryFactory());
      ----

      And from XML DSL you define a <bean> as follows:

      [source,xml]
      ----
        <!-- use camel-metrics message history to gather metrics for all messages being routed -->
        <bean id="metricsMessageHistoryFactory" class="org.apache.camel.component.metrics.messagehistory.MetricsMessageHistoryFactory"/>
      ----

      The following options is supported on the factory:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Default |Description
      |useJmx |false |Whether to report fine grained statistics to JMX by
      using the `com.codahale.metrics.JmxReporter`. +
      Notice that if JMX is enabled on link:camelcontext.html[CamelContext]
      then a `MetricsRegistryService` mbean is enlisted under the services
      type in the JMX tree. That mbean has a single operation to output the
      statistics using json. Setting `useJmx` to true is only needed if you
      want fine grained mbeans per statistics type.

      |jmxDomain |org.apache.camel.metrics |The JMX domain name

      |prettyPrint |false |Whether to use pretty print when outputting
      statistics in json format

      |metricsRegistry |?? |Allow to use a shared
      `com.codahale.metrics.MetricRegistry`. If none is provided then Camel
      will create a shared instance used by the this CamelContext.

      |rateUnit |TimeUnit.SECONDS |The unit to use for rate in the metrics
      reporter or when dumping the statistics as json.

      |durationUnit |TimeUnit.MILLISECONDS |The unit to use for duration in
      the metrics reporter or when dumping the statistics as json.

      |namePattern |`##name##.##routeId##.###id###.##type##` |The name pattern
      to use. Uses dot as separators, but you can change that. The values
      `##name##`, `##routeId##`, `##type##`, and `###id###` will be replaced with
      actual value. Where `###name###` is the name of the CamelContext.
      `###routeId###` is the name of the route. The `###id###` pattern represents
      the node id. And `###type###` is the value of history.
      |=======================================================================

      At runtime the metrics can be accessed from Java API or JMX which allows
      to gather the data as json output.

      From Java code you can do get the service from the CamelContext as
      shown:

      [source,java]
      ----
      MetricsMessageHistoryService service = context.hasService(MetricsMessageHistoryService.class);
      String json = service.dumpStatisticsAsJson();
      ----

      And the JMX API the MBean is registered in the??`type=services` tree
      with??`name=MetricsMessageHistoryService`.

      [[MetricsComponent-InstrumentedThreadPoolFactory]]
      InstrumentedThreadPoolFactory
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.18*

      This factory allows you to gather performance information about Camel Thread Pools by injecting a InstrumentedThreadPoolFactory
      which collects information from inside of Camel.
      See more details at link:advanced-configuration-of-camelcontext-using-spring.html[Advanced configuration of CamelContext using Spring]


      [[MetricsComponent-SeeAlso]]
      See Also
      ^^^^^^^^

      * The `camel-example-cdi-metrics` example that illustrates the integration
        between Camel, Metrics and CDI.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mina
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mina
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mina
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mina
          spec:
            containers:
            - image: fabric8/connector-mina:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mina
        syntax: mina:protocol:host:port
        title: Mina
        description: Socket level networking using TCP or UDP with the Apache Mina 1.x library.
        label: networking,tcp,udp
        deprecated: true
        async: false
        javaType: org.apache.camel.component.mina.MinaComponent
        groupId: org.apache.camel
        artifactId: camel-mina
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mina.MinaConfiguration
          deprecated: false
          secret: false
          description: To use the shared mina configuration.
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - tcp
          - udp
          - vm
          deprecated: false
          secret: false
          description: Protocol to use
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For producer use the hostname or ip address of the remote server.
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number
        disconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer.
        minaLogger:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output.
        sync:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to set endpoint as one-way or request-response.
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds so 60000 is 60 seconds.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        clientMode:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the clientMode is true mina consumer will connect the address as a TCP client.
        disconnectOnNoReply:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        noReplyLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back.
        lazySessionCreation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sessions can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Only used for TCP. You can transfer the exchange over the wire instead
            of just the body. The following fields are transferred: In body Out body fault
            body In headers Out headers fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level.'
        allowDefaultCodec:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: The mina component installs a default codec if both codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain like the SSL filter.
        codec:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: org.apache.mina.filter.codec.ProtocolCodecFactory
          deprecated: false
          secret: false
          description: To use a custom minda codec implementation.
        decoderMaxLineLength:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024.
        encoderMaxLineLength:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE.
        encoding:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided Camel will use the JVM default Charset
        filters:
          kind: parameter
          group: codec
          label: codec
          type: array
          javaType: java.util.List<org.apache.mina.common.IoFilter>
          deprecated: false
          secret: false
          description: You can set a list of Mina IoFilters to use.
        textline:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only used for TCP. If no codec is specified you can use this flag to indicate a text line based codec; if not specified or the value is false then Object Serialization is assumed over TCP.
        textlineDelimiter:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: org.apache.camel.component.mina.TextLineDelimiter
          enum:
          - DEFAULT
          - AUTO
          - UNIX
          - WINDOWS
          - MAC
          deprecated: false
          secret: false
          description: Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided Camel will use DEFAULT. This delimiter is used to mark the end of text.
    documentation.adoc: "[[MINA-MINAComponent]]\nMINA Component\n~~~~~~~~~~~~~~\n\n\
      *Deprecated*\n\nWARNING: This component is deprecated as the Apache Mina 1.x\
      \ project is EOL.\nInstead use link:mina2.html[MINA2] or link:netty.html[Netty]\
      \ instead.\n\nThe *mina:* component is a transport for working with\nhttp://mina.apache.org/[Apache\
      \ MINA]\n\nMaven users will need to add the following dependency to their `pom.xml`\n\
      for this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-mina</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[MINA-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n------------------------------------\n\
      mina:tcp://hostname[:port][?options]\nmina:udp://hostname[:port][?options]\n\
      mina:vm://hostname[:port][?options]\n------------------------------------\n\n\
      You can specify a codec in the link:registry.html[Registry] using the\n*codec*\
      \ option. If you are using TCP and no codec is specified then the\n`textline`\
      \ flag is used to determine if text line based codec or object\nserialization\
      \ should be used instead. By default the object\nserialization is used.\n\n\
      For UDP if no codec is specified the default uses a basic `ByteBuffer`\nbased\
      \ codec.\n\nThe VM protocol is used as a direct forwarding mechanism in the\
      \ same\nJVM. See the\nhttp://mina.apache.org/report/1.1/apidocs/org/apache/mina/transport/vmpipe/package-summary.html[MINA\n\
      VM-Pipe API documentation] for details.\n\nA Mina producer has a default timeout\
      \ value of 30 seconds, while it\nwaits for a response from the remote server.\n\
      \nIn normal use, `camel-mina` only supports marshalling the body\ncontent???message\
      \ headers and exchange properties are not sent. +\n However, the option, *transferExchange*,\
      \ does allow you to transfer the\nexchange itself over the wire. See options\
      \ below.\n\nYou can append query options to the URI in the following format,\n\
      `?option=value&option=value&...`\n\n[[MINA-Options]]\nOptions\n^^^^^^^\n\n\n\
      \n\n\n// component options: START\nThe Mina component supports 1 options which\
      \ are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | MinaConfiguration | To use\
      \ the shared mina configuration.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Mina component supports 24 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* Protocol to use\n| host | common |  | String | *Required*\
      \ Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For\
      \ producer use the hostname or ip address of the remote server.\n| port | common\
      \ |  | int | *Required* Port number\n| disconnect | common | false | boolean\
      \ | Whether or not to disconnect(close) from Mina session right after use. Can\
      \ be used for both consumer and producer.\n| minaLogger | common | false | boolean\
      \ | You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging\
      \ at INFO level to log all input and output.\n| sync | common | true | boolean\
      \ | Setting to set endpoint as one-way or request-response.\n| timeout | common\
      \ | 30000 | long | You can configure the timeout that specifies how long to\
      \ wait for a response from a remote server. The timeout unit is in milliseconds\
      \ so 60000 is 60 seconds.\n| bridgeErrorHandler | consumer | false | boolean\
      \ | 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/ERROR level and ignored.\n\
      | clientMode | consumer | false | boolean | If the clientMode is true mina consumer\
      \ will connect the address as a TCP client.\n| disconnectOnNoReply | consumer\
      \ (advanced) | true | boolean | If sync is enabled then this option dictates\
      \ MinaConsumer if it should disconnect where there is no reply to send back.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| noReplyLogLevel | consumer (advanced)\
      \ | WARN | LoggingLevel | If sync is enabled this option dictates MinaConsumer\
      \ which logging level to use when logging a there is no reply to send back.\n\
      | lazySessionCreation | producer (advanced) | true | boolean | Sessions can\
      \ be lazily created to avoid exceptions if the remote server is not up and running\
      \ when the Camel producer is started.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n| transferExchange\
      \ | advanced | false | boolean | Only used for TCP. You can transfer the exchange\
      \ over the wire instead of just the body. The following fields are transferred:\
      \ In body Out body fault body In headers Out headers fault headers exchange\
      \ properties exchange exception. This requires that the objects are serializable.\
      \ Camel will exclude any non-serializable objects and log it at WARN level.\n\
      | allowDefaultCodec | codec | true | boolean | The mina component installs a\
      \ default codec if both codec is null and textline is false. Setting allowDefaultCodec\
      \ to false prevents the mina component from installing a default codec as the\
      \ first element in the filter chain. This is useful in scenarios where another\
      \ filter must be the first in the filter chain like the SSL filter.\n| codec\
      \ | codec |  | ProtocolCodecFactory | To use a custom minda codec implementation.\n\
      | decoderMaxLineLength | codec | 1024 | int | To set the textline protocol decoder\
      \ max line length. By default the default value of Mina itself is used which\
      \ are 1024.\n| encoderMaxLineLength | codec | -1 | int | To set the textline\
      \ protocol encoder max line length. By default the default value of Mina itself\
      \ is used which are Integer.MAX_VALUE.\n| encoding | codec |  | String | You\
      \ can configure the encoding (a charset name) to use for the TCP textline codec\
      \ and the UDP protocol. If not provided Camel will use the JVM default Charset\n\
      | filters | codec |  | List | You can set a list of Mina IoFilters to use.\n\
      | textline | codec | false | boolean | Only used for TCP. If no codec is specified\
      \ you can use this flag to indicate a text line based codec; if not specified\
      \ or the value is false then Object Serialization is assumed over TCP.\n| textlineDelimiter\
      \ | codec |  | TextLineDelimiter | Only used for TCP and if textline=true. Sets\
      \ the text line delimiter to use. If none provided Camel will use DEFAULT. This\
      \ delimiter is used to mark the end of text.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n[[MINA-Usingacustomcodec]]\n\
      Using a custom codec\n^^^^^^^^^^^^^^^^^^^^\n\nSee the http://mina.apache.org/tutorial-on-protocolcodecfilter.html[Mina\n\
      documentation] how to write your own codec. To use your custom codec\nwith `camel-mina`,\
      \ you should register your codec in the\nlink:registry.html[Registry]; for example,\
      \ by creating a bean in the\nSpring XML file. Then use the `codec` option to\
      \ specify the bean ID of\nyour codec. See link:hl7.html[HL7] that has a custom\
      \ codec.\n\n[[MINA-Samplewithsync=false]]\nSample with sync=false\n^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIn this sample, Camel exposes a service that listens for TCP connections\n\
      on port 6200. We use the *textline* codec. In our route, we create a\nMina consumer\
      \ endpoint that listens on port 6200:\n\nAs the sample is part of a unit test,\
      \ we test it by sending some data to\nit on port 6200.\n\n[[MINA-Samplewithsync=true]]\n\
      Sample with sync=true\n^^^^^^^^^^^^^^^^^^^^^\n\nIn the next sample, we have\
      \ a more common use case where we expose a TCP\nservice on port 6201 also use\
      \ the textline codec. However, this time we\nwant to return a response, so we\
      \ set the `sync` option to `true` on the\nconsumer.\n\nThen we test the sample\
      \ by sending some data and retrieving the response\nusing the `template.requestBody()`\
      \ method. As we know the response is a\n`String`, we cast it to `String` and\
      \ can assert that the response is, in\nfact, something we have dynamically set\
      \ in our processor code logic.\n\n[[MINA-SamplewithSpringDSL]]\nSample with\
      \ Spring DSL\n^^^^^^^^^^^^^^^^^^^^^^\n\nSpring DSL can, of course, also be used\
      \ for link:mina.html[MINA]. In the\nsample below we expose a TCP server on port\
      \ 5555:\n\n[source,xml]\n----------------------------------------------------------\n\
      \   <route>\n     <from uri=\"mina:tcp://localhost:5555?textline=true\"/>\n\
      \     <to uri=\"bean:myTCPOrderHandler\"/>\n  </route>\n----------------------------------------------------------\n\
      \nIn the route above, we expose a TCP server on port 5555 using the\ntextline\
      \ codec. We let the Spring bean with ID, `myTCPOrderHandler`,\nhandle the request\
      \ and return a reply. For instance, the handler bean\ncould be implemented as\
      \ follows:\n\n[source,java]\n-----------------------------------------------\n\
      \    public String handleOrder(String payload) {\n        ...\n        return\
      \ \"Order: OK\"\n   }\n-----------------------------------------------\n\n[[MINA-ConfiguringMinaendpointsusingSpringbeanstyle]]\n\
      Configuring Mina endpoints using Spring bean style\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nConfiguration of Mina endpoints is possible using regular Spring bean\nstyle\
      \ configuration in the Spring DSL.\n\nHowever, in the underlying Apache Mina\
      \ toolkit, it is relatively\ndifficult to set up the acceptor and the connector,\
      \ because you can\n_not_ use simple setters. To resolve this difficulty, we\
      \ leverage the\n`MinaComponent` as a Spring factory bean to configure this for\
      \ us. If\nyou really need to configure this yourself, there are setters on the\n\
      `MinaEndpoint` to set these when needed.\n\nThe sample below shows the factory\
      \ approach:\n\nAnd then we can refer to our endpoint directly in the route,\
      \ as follows:\n\n[[MINA-ClosingSessionWhenComplete]]\nClosing Session When Complete\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen acting as a server you sometimes want\
      \ to close the session when,\nfor example, a client conversion is finished.\
      \ To instruct Camel to close\nthe session, you should add a header with the\
      \ key\n`CamelMinaCloseSessionWhenComplete` set to a boolean `true` value.\n\n\
      For instance, the example below will close the session after it has\nwritten\
      \ the `bye` message back to the client:\n\n[source,java]\n--------------------------------------------------------------------------------------------------\n\
      \        from(\"mina:tcp://localhost:8080?sync=true&textline=true\").process(new\
      \ Processor() {\n            public void process(Exchange exchange) throws Exception\
      \ {\n                String body = exchange.getIn().getBody(String.class);\n\
      \                exchange.getOut().setBody(\"Bye \" + body);\n             \
      \   exchange.getOut().setHeader(MinaConstants.MINA_CLOSE_SESSION_WHEN_COMPLETE,\
      \ true);\n            }\n        });\n--------------------------------------------------------------------------------------------------\n\
      \n[[MINA-GettheIoSessionformessage]]\nGet the IoSession for message\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available since Camel 2.1* \nYou can get the IoSession from the message header\
      \ with this key\nMinaEndpoint.HEADER_MINA_IOSESSION, and also get the local\
      \ host address\nwith the key MinaEndpoint.HEADER_LOCAL_ADDRESS and remote host\
      \ address\nwith the key MinaEndpoint.HEADER_REMOTE_ADDRESS.\n\n[[MINA-ConfiguringMinafilters]]\n\
      Configuring Mina filters\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nFilters permit you to\
      \ use some Mina Filters, such as `SslFilter`. You\ncan also implement some customized\
      \ filters. Please note that `codec` and\n`logger` are also implemented as Mina\
      \ filters of type, `IoFilter`. Any\nfilters you may define are appended to the\
      \ end of the filter chain; that\nis, after `codec` and `logger`.\n\nTIP: If\
      \ using the `SslFilter` you need to add the `mina-filter-ssl` JAR to\nthe classpath.\n\
      \nFor instance, the example below will send a keep-alive message after 10\n\
      seconds of inactivity:\n\n[source,java]\n------------------------------------------------------------------------\n\
      public class KeepAliveFilter extends IoFilterAdapter {\n    @Override\n    public\
      \ void sessionCreated(NextFilter nextFilter, IoSession session)\n          \
      \  throws Exception {\n        session.setIdleTime(IdleStatus.BOTH_IDLE, 10);\n\
      \n        nextFilter.sessionCreated(session);\n    }\n\n    @Override\n    public\
      \ void sessionIdle(NextFilter nextFilter, IoSession session,\n            IdleStatus\
      \ status) throws Exception {\n        session.write(\"NOOP\"); // NOOP is a\
      \ FTP command for keep alive\n        nextFilter.sessionIdle(session, status);\n\
      \    }\n}\n------------------------------------------------------------------------\n\
      \nAs Camel Mina may use a request-reply scheme, the endpoint as a client\nwould\
      \ like to drop some message, such as greeting when the connection is\nestablished.\
      \ For example, when you connect to an FTP server, you will\nget a `220` message\
      \ with a greeting (`220 Welcome to Pure-FTPd`). If you\ndon't drop the message,\
      \ your request-reply scheme will be broken.\n\n[source,java]\n--------------------------------------------------------------------------------------------------\n\
      public class DropGreetingFilter extends IoFilterAdapter {\n\n    @Override\n\
      \    public void messageReceived(NextFilter nextFilter, IoSession session,\n\
      \            Object message) throws Exception {\n        if (message instanceof\
      \ String) {\n            String ftpMessage = (String) message;\n           \
      \ // \"220\" is given as greeting. \"200 Zzz\" is given as a response to \"\
      NOOP\" (keep alive)\n            if (ftpMessage.startsWith(\"220\") || or ftpMessage.startsWith(\"\
      200 Zzz\")) {\n                // Dropping greeting\n                return;\n\
      \            }\n        }\n        nextFilter.messageReceived(session, message);\n\
      \    }\n}\n--------------------------------------------------------------------------------------------------\n\
      \nThen, you can configure your endpoint using Spring DSL:\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------\n\
      <bean id=\"myMinaFactory\" class=\"org.apache.camel.component.mina.MinaComponent\"\
      >\n    <constructor-arg index=\"0\" ref=\"camelContext\" />\n</bean>\n\n<bean\
      \ id=\"myMinaEndpoint\"\n      factory-bean=\"myMinaFactory\"\n      factory-method=\"\
      createEndpoint\">\n    <constructor-arg index=\"0\" ref=\"myMinaConfig\"/>\n\
      </bean>\n\n<bean id=\"myMinaConfig\" class=\"org.apache.camel.component.mina.MinaConfiguration\"\
      >\n    <property name=\"protocol\" value=\"tcp\" />\n    <property name=\"host\"\
      \ value=\"localhost\" />\n    <property name=\"port\" value=\"2121\" />\n  \
      \  <property name=\"sync\" value=\"true\" />\n    <property name=\"minaLogger\"\
      \ value=\"true\" />\n    <property name=\"filters\" ref=\"listFilters\"/>\n\
      </bean>\n\n<bean id=\"listFilters\" class=\"java.util.ArrayList\" >\n    <constructor-arg>\n\
      \        <list value-type=\"org.apache.mina.common.IoFilter\">\n           \
      \ <bean class=\"com.example.KeepAliveFilter\"/>\n            <bean class=\"\
      com.example.DropGreetingFilter\"/>\n        </list>\n    </constructor-arg>\n\
      </bean>\n----------------------------------------------------------------------------------\n\
      \n[[MINA-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:mina2.html[MINA2]\n*\
      \ link:netty.html[Netty]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mina2
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mina2
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mina2
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mina2
          spec:
            containers:
            - image: fabric8/connector-mina2:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mina2
        syntax: mina2:protocol:host:port
        title: Mina2
        description: Socket level networking using TCP or UDP with the Apache Mina 2.x library.
        label: networking,tcp,udp
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mina2.Mina2Component
        groupId: org.apache.camel
        artifactId: camel-mina2
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mina2.Mina2Configuration
          deprecated: false
          secret: false
          description: To use the shared mina configuration.
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Protocol to use
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For producer use the hostname or ip address of the remote server.
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number
        disconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect(close) from Mina session right after use. Can be used for both consumer and producer.
        minaLogger:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging at INFO level to log all input and output.
        sync:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to set endpoint as one-way or request-response.
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: You can configure the timeout that specifies how long to wait for a response from a remote server. The timeout unit is in milliseconds so 60000 is 60 seconds.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        clientMode:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the clientMode is true mina consumer will connect the address as a TCP client.
        disconnectOnNoReply:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If sync is enabled then this option dictates MinaConsumer if it should disconnect where there is no reply to send back.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        noReplyLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If sync is enabled this option dictates MinaConsumer which logging level to use when logging a there is no reply to send back.
        cachedAddress:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to create the InetAddress once and reuse. Setting this to false allows to pickup DNS changes in the network.
        lazySessionCreation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sessions can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
        maximumPoolSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "16"
          description: Number of worker threads in the worker pool for TCP and UDP
        orderedThreadPoolExecutor:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use ordered thread pool to ensure events are processed orderly on the same channel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Only used for TCP. You can transfer the exchange over the wire instead
            of just the body. The following fields are transferred: In body Out body fault
            body In headers Out headers fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level.'
        allowDefaultCodec:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: The mina component installs a default codec if both codec is null and textline is false. Setting allowDefaultCodec to false prevents the mina component from installing a default codec as the first element in the filter chain. This is useful in scenarios where another filter must be the first in the filter chain like the SSL filter.
        codec:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: org.apache.mina.filter.codec.ProtocolCodecFactory
          deprecated: false
          secret: false
          description: To use a custom minda codec implementation.
        decoderMaxLineLength:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: To set the textline protocol decoder max line length. By default the default value of Mina itself is used which are 1024.
        encoderMaxLineLength:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: To set the textline protocol encoder max line length. By default the default value of Mina itself is used which are Integer.MAX_VALUE.
        encoding:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: You can configure the encoding (a charset name) to use for the TCP textline codec and the UDP protocol. If not provided Camel will use the JVM default Charset
        filters:
          kind: parameter
          group: codec
          label: codec
          type: array
          javaType: java.util.List<org.apache.mina.core.filterchain.IoFilter>
          deprecated: false
          secret: false
          description: You can set a list of Mina IoFilters to use.
        textline:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only used for TCP. If no codec is specified you can use this flag to indicate a text line based codec; if not specified or the value is false then Object Serialization is assumed over TCP.
        textlineDelimiter:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: org.apache.camel.component.mina2.Mina2TextLineDelimiter
          enum:
          - DEFAULT
          - AUTO
          - UNIX
          - WINDOWS
          - MAC
          deprecated: false
          secret: false
          description: Only used for TCP and if textline=true. Sets the text line delimiter to use. If none provided Camel will use DEFAULT. This delimiter is used to mark the end of text.
        autoStartTls:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to auto start SSL handshake.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure SSL security.
    documentation.adoc: "[[MINA2-MINA2Component]]\nMINA 2 Component\n~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.10*\n\nThe *mina2:* component is a transport for\
      \ working with\nhttp://mina.apache.org/[Apache MINA 2.x]\n\nTIP: Favor using\
      \ link:netty.html[Netty] as Netty is a much more active\nmaintained and popular\
      \ project than Apache Mina currently is\n\nINFO: Be careful with sync=false\
      \ on consumer endpoints. Since camel-mina2 all\nconsumer exchanges are InOut.\
      \ This is different to camel-mina.\n\nMaven users will need to add the following\
      \ dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-mina2</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[MINA2-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------------\n\
      mina2:tcp://hostname[:port][?options]\nmina2:udp://hostname[:port][?options]\n\
      mina2:vm://hostname[:port][?options]\n-------------------------------------\n\
      \nYou can specify a codec in the link:registry.html[Registry] using the\n*codec*\
      \ option. If you are using TCP and no codec is specified then the\n`textline`\
      \ flag is used to determine if text line based codec or object\nserialization\
      \ should be used instead. By default the object\nserialization is used.\n\n\
      For UDP if no codec is specified the default uses a basic `ByteBuffer`\nbased\
      \ codec.\n\nThe VM protocol is used as a direct forwarding mechanism in the\
      \ same\nJVM.\n\nA Mina producer has a default timeout value of 30 seconds, while\
      \ it\nwaits for a response from the remote server.\n\nIn normal use, `camel-mina`\
      \ only supports marshalling the body\ncontent???message headers and exchange\
      \ properties are not sent. +\n However, the option, *transferExchange*, does\
      \ allow you to transfer the\nexchange itself over the wire. See options below.\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[MINA2-Options]]\nOptions\n^^^^^^^\n\n\n\n\n\n// component options: START\n\
      The Mina2 component supports 1 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | Mina2Configuration | To\
      \ use the shared mina configuration.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Mina2 component supports 29 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* Protocol to use\n| host | common |  | String | *Required*\
      \ Hostname to use. Use localhost or 0.0.0.0 for local server as consumer. For\
      \ producer use the hostname or ip address of the remote server.\n| port | common\
      \ |  | int | *Required* Port number\n| disconnect | common | false | boolean\
      \ | Whether or not to disconnect(close) from Mina session right after use. Can\
      \ be used for both consumer and producer.\n| minaLogger | common | false | boolean\
      \ | You can enable the Apache MINA logging filter. Apache MINA uses slf4j logging\
      \ at INFO level to log all input and output.\n| sync | common | true | boolean\
      \ | Setting to set endpoint as one-way or request-response.\n| timeout | common\
      \ | 30000 | long | You can configure the timeout that specifies how long to\
      \ wait for a response from a remote server. The timeout unit is in milliseconds\
      \ so 60000 is 60 seconds.\n| bridgeErrorHandler | consumer | false | boolean\
      \ | 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/ERROR level and ignored.\n\
      | clientMode | consumer | false | boolean | If the clientMode is true mina consumer\
      \ will connect the address as a TCP client.\n| disconnectOnNoReply | consumer\
      \ (advanced) | true | boolean | If sync is enabled then this option dictates\
      \ MinaConsumer if it should disconnect where there is no reply to send back.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| noReplyLogLevel | consumer (advanced)\
      \ | WARN | LoggingLevel | If sync is enabled this option dictates MinaConsumer\
      \ which logging level to use when logging a there is no reply to send back.\n\
      | cachedAddress | producer (advanced) | true | boolean | Whether to create the\
      \ InetAddress once and reuse. Setting this to false allows to pickup DNS changes\
      \ in the network.\n| lazySessionCreation | producer (advanced) | true | boolean\
      \ | Sessions can be lazily created to avoid exceptions if the remote server\
      \ is not up and running when the Camel producer is started.\n| maximumPoolSize\
      \ | advanced | 16 | int | Number of worker threads in the worker pool for TCP\
      \ and UDP\n| orderedThreadPoolExecutor | advanced | true | boolean | Whether\
      \ to use ordered thread pool to ensure events are processed orderly on the same\
      \ channel.\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n| transferExchange | advanced | false | boolean\
      \ | Only used for TCP. You can transfer the exchange over the wire instead of\
      \ just the body. The following fields are transferred: In body Out body fault\
      \ body In headers Out headers fault headers exchange properties exchange exception.\
      \ This requires that the objects are serializable. Camel will exclude any non-serializable\
      \ objects and log it at WARN level.\n| allowDefaultCodec | codec | true | boolean\
      \ | The mina component installs a default codec if both codec is null and textline\
      \ is false. Setting allowDefaultCodec to false prevents the mina component from\
      \ installing a default codec as the first element in the filter chain. This\
      \ is useful in scenarios where another filter must be the first in the filter\
      \ chain like the SSL filter.\n| codec | codec |  | ProtocolCodecFactory | To\
      \ use a custom minda codec implementation.\n| decoderMaxLineLength | codec |\
      \ 1024 | int | To set the textline protocol decoder max line length. By default\
      \ the default value of Mina itself is used which are 1024.\n| encoderMaxLineLength\
      \ | codec | -1 | int | To set the textline protocol encoder max line length.\
      \ By default the default value of Mina itself is used which are Integer.MAX_VALUE.\n\
      | encoding | codec |  | String | You can configure the encoding (a charset name)\
      \ to use for the TCP textline codec and the UDP protocol. If not provided Camel\
      \ will use the JVM default Charset\n| filters | codec |  | List | You can set\
      \ a list of Mina IoFilters to use.\n| textline | codec | false | boolean | Only\
      \ used for TCP. If no codec is specified you can use this flag to indicate a\
      \ text line based codec; if not specified or the value is false then Object\
      \ Serialization is assumed over TCP.\n| textlineDelimiter | codec |  | Mina2TextLineDelimiter\
      \ | Only used for TCP and if textline=true. Sets the text line delimiter to\
      \ use. If none provided Camel will use DEFAULT. This delimiter is used to mark\
      \ the end of text.\n| autoStartTls | security | true | boolean | Whether to\
      \ auto start SSL handshake.\n| sslContextParameters | security |  | SSLContextParameters\
      \ | To configure SSL security.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n[[MINA2-Usingacustomcodec]]\n\
      Using a custom codec\n^^^^^^^^^^^^^^^^^^^^\n\nSee the Mina how to write your\
      \ own codec. To use your custom codec with\n`camel-mina`, you should register\
      \ your codec in the\nlink:registry.html[Registry]; for example, by creating\
      \ a bean in the\nSpring XML file. Then use the `codec` option to specify the\
      \ bean ID of\nyour codec. See link:hl7.html[HL7] that has a custom codec.\n\n\
      [[MINA2-Samplewithsyncfalse]]\nSample with sync=false\n^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIn this sample, Camel exposes a service that listens for TCP connections\n\
      on port 6200. We use the *textline* codec. In our route, we create a\nMina consumer\
      \ endpoint that listens on port 6200:\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"mina2:tcp://localhost:\" + port1 + \"?textline=true&sync=false\").to(\"\
      mock:result\");\n---------------------------------------------------------------------------------------\n\
      \nAs the sample is part of a unit test, we test it by sending some data to\n\
      it on port 6200.\n\n[source,java]\n-------------------------------------------------------------------------------------------------\n\
      MockEndpoint mock = getMockEndpoint(\"mock:result\");\nmock.expectedBodiesReceived(\"\
      Hello World\");\n \ntemplate.sendBody(\"mina2:tcp://localhost:\" + port1 + \"\
      ?textline=true&sync=false\", \"Hello World\");\n \nassertMockEndpointsSatisfied();\n\
      -------------------------------------------------------------------------------------------------\n\
      \n[[MINA2-Samplewithsynctrue]]\nSample with sync=true\n^^^^^^^^^^^^^^^^^^^^^\n\
      \nIn the next sample, we have a more common use case where we expose a TCP\n\
      service on port 6201 also use the textline codec. However, this time we\nwant\
      \ to return a response, so we set the `sync` option to `true` on the\nconsumer.\n\
      \n[source,java]\n---------------------------------------------------------------------------------------------\n\
      from(\"mina2:tcp://localhost:\" + port2 + \"?textline=true&sync=true\").process(new\
      \ Processor() {\n    public void process(Exchange exchange) throws Exception\
      \ {\n        String body = exchange.getIn().getBody(String.class);\n       \
      \ exchange.getOut().setBody(\"Bye \" + body);\n    }\n});\n---------------------------------------------------------------------------------------------\n\
      \nThen we test the sample by sending some data and retrieving the response\n\
      using the `template.requestBody()` method. As we know the response is a\n`String`,\
      \ we cast it to `String` and can assert that the response is, in\nfact, something\
      \ we have dynamically set in our processor code logic.\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------\n\
      String response = (String)template.requestBody(\"mina2:tcp://localhost:\" +\
      \ port2 + \"?textline=true&sync=true\", \"World\");\nassertEquals(\"Bye World\"\
      , response);\n-----------------------------------------------------------------------------------------------------------------------\n\
      \n[[MINA2-SamplewithSpringDSL]]\nSample with Spring DSL\n^^^^^^^^^^^^^^^^^^^^^^\n\
      \nSpring DSL can, of course, also be used for link:mina.html[MINA]. In the\n\
      sample below we expose a TCP server on port 5555:\n\n[source,xml]\n-----------------------------------------------------------\n\
      \   <route>\n     <from uri=\"mina2:tcp://localhost:5555?textline=true\"/>\n\
      \     <to uri=\"bean:myTCPOrderHandler\"/>\n  </route>\n-----------------------------------------------------------\n\
      \nIn the route above, we expose a TCP server on port 5555 using the\ntextline\
      \ codec. We let the Spring bean with ID, `myTCPOrderHandler`,\nhandle the request\
      \ and return a reply. For instance, the handler bean\ncould be implemented as\
      \ follows:\n\n[source,java]\n-----------------------------------------------\n\
      \    public String handleOrder(String payload) {\n        ...\n        return\
      \ \"Order: OK\"\n   }\n-----------------------------------------------\n\n[[MINA2-ClosingSessionWhenComplete]]\n\
      Closing Session When Complete\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen acting\
      \ as a server you sometimes want to close the session when,\nfor example, a\
      \ client conversion is finished. To instruct Camel to close\nthe session, you\
      \ should add a header with the key\n`CamelMinaCloseSessionWhenComplete` set\
      \ to a boolean `true` value.\n\nFor instance, the example below will close the\
      \ session after it has\nwritten the `bye` message back to the client:\n\n[source,java]\n\
      ---------------------------------------------------------------------------------------------------\n\
      \        from(\"mina2:tcp://localhost:8080?sync=true&textline=true\").process(new\
      \ Processor() {\n            public void process(Exchange exchange) throws Exception\
      \ {\n                String body = exchange.getIn().getBody(String.class);\n\
      \                exchange.getOut().setBody(\"Bye \" + body);\n             \
      \   exchange.getOut().setHeader(Mina2Constants.MINA_CLOSE_SESSION_WHEN_COMPLETE,\
      \ true);\n            }\n        });\n---------------------------------------------------------------------------------------------------\n\
      \n[[MINA2-GettheIoSessionformessage]]\nGet the IoSession for message\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nYou can get the IoSession from the message header with this key\n`Mina2Constants.MINA_IOSESSION`,\
      \ and also get the local host address\nwith the key `Mina2Constants.MINA_LOCAL_ADDRESS`\
      \ and remote host address\nwith the key `Mina2Constants.MINA_REMOTE_ADDRESS`.\n\
      \n[[MINA2-ConfiguringMinafilters]]\nConfiguring Mina filters\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nFilters permit you to use some Mina Filters, such as `SslFilter`. You\ncan\
      \ also implement some customized filters. Please note that `codec` and\n`logger`\
      \ are also implemented as Mina filters of type, `IoFilter`. Any\nfilters you\
      \ may define are appended to the end of the filter chain; that\nis, after `codec`\
      \ and `logger`.\n\n[[MINA2-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:mina.html[MINA]\n* link:netty.html[Netty]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mllp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mllp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mllp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mllp
          spec:
            containers:
            - image: fabric8/connector-mllp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mllp
        syntax: mllp:hostname:port
        title: MLLP
        description: The MLLP component is designed to handle the MLLP protocol and provide the functionality required by Healthcare providers to communicate with other systems using the MLLP protocol.
        label: mllp
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mllp.MllpComponent
        groupId: org.apache.camel
        artifactId: camel-mllp
        version: 2.18.1
      componentProperties: {}
      properties:
        hostname:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname or IP for connection for the TCP connection. The default value is null which means any local IP address
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number for the TCP connection
        autoAck:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enable/Disable the automatic generation of a MLLP Acknowledgement MLLP Consumers only
        hl7Headers:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enable/Disable the automatic generation of message headers from the HL7 Message MLLP Consumers only
        keepAlive:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enable/disable the SO_KEEPALIVE socket option.
        reuseAddress:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable/disable the SO_REUSEADDR socket option.
        tcpNoDelay:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enable/disable the TCP_NODELAY socket option.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        backlog:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5"
          description: The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter. If a connection indication arrives when the queue is full the connection is refused.
        receiveBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Sets the SO_RCVBUF option to the specified value (in bytes)
        sendBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Sets the SO_SNDBUF option to the specified value (in bytes)
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        charsetName:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the CamelCharsetName property on the exchange
        acceptTimeout:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Timeout (in milliseconds) while waiting for a TCP connection TCP Server Only
        bindRetryInterval:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: TCP Server Only - The number of milliseconds to wait between bind attempts
        bindTimeout:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: TCP Server Only - The number of milliseconds to retry binding to a server port
        connectTimeout:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout (in milliseconds) for establishing for a TCP connection TCP Client only
        maxReceiveTimeouts:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: The maximum number of timeouts (specified by receiveTimeout) allowed before the TCP Connection will be reset.
        readTimeout:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "500"
          description: The SO_TIMEOUT value (in milliseconds) used after the start of an MLLP frame has been received
        receiveTimeout:
          kind: parameter
          group: timeout
          label: timeout
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: The SO_TIMEOUT value (in milliseconds) used when waiting for the start of an MLLP frame
    documentation.adoc: |+
      [[Mllp-MllpComponent]]
      MLLP Component
      ~~~~~~~~~~~~~~

      *available as of Camel 2.17*

      The MLLP component is specifically designed to handle the nuances of the
      MLLP protocol and provide??the functionality required by Healthcare
      providers to communicate with other systems using the MLLP protocol.
      ??The MLLP component ??provides a simple configuration URI, automated HL7
      acknowledgment generation and automatic acknowledgement interrogation.

      The MLLP protocol does not typically use a large number of concurrent
      TCP connections - a single active TCP connection is the normal case.
      ??Therefore, the MLLP component uses??a simple thread-per-connection model
      based an standard Java Sockets. This keeps the implementation simple
      and??eliminates the dependencies other than Camel itself.

      The component supports the following:

      * A Camel consumer using a TCP Server
      * A Camel producer using a TCP Client

      The MLLP component uses byte[] payloads, and relies on Camel Type
      Conversion to convert byte[] to other types. ??

      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-mllp</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ---------------------------------------------------------

      [[MLLP-MLLPOptions]]
      MLLP Options
      ~~~~~~~~~~~~



      // component options: START
      The MLLP component has no options.
      // component options: END








      // endpoint options: START
      The MLLP component supports 22 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | hostname | common |  | String | *Required* Hostname or IP for connection for the TCP connection. The default value is null which means any local IP address
      | port | common |  | int | *Required* Port number for the TCP connection
      | autoAck | common | true | boolean | Enable/Disable the automatic generation of a MLLP Acknowledgement MLLP Consumers only
      | hl7Headers | common | true | boolean | Enable/Disable the automatic generation of message headers from the HL7 Message MLLP Consumers only
      | keepAlive | common | true | boolean | Enable/disable the SO_KEEPALIVE socket option.
      | reuseAddress | common | false | boolean | Enable/disable the SO_REUSEADDR socket option.
      | tcpNoDelay | common | true | boolean | Enable/disable the TCP_NODELAY socket option.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | backlog | advanced | 5 | int | The maximum queue length for incoming connection indications (a request to connect) is set to the backlog parameter. If a connection indication arrives when the queue is full the connection is refused.
      | receiveBufferSize | advanced |  | Integer | Sets the SO_RCVBUF option to the specified value (in bytes)
      | sendBufferSize | advanced |  | Integer | Sets the SO_SNDBUF option to the specified value (in bytes)
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | charsetName | codec |  | String | Set the CamelCharsetName property on the exchange
      | acceptTimeout | timeout | 60000 | int | Timeout (in milliseconds) while waiting for a TCP connection TCP Server Only
      | bindRetryInterval | timeout | 5000 | int | TCP Server Only - The number of milliseconds to wait between bind attempts
      | bindTimeout | timeout | 30000 | int | TCP Server Only - The number of milliseconds to retry binding to a server port
      | connectTimeout | timeout | 30000 | int | Timeout (in milliseconds) for establishing for a TCP connection TCP Client only
      | maxReceiveTimeouts | timeout | -1 | int | The maximum number of timeouts (specified by receiveTimeout) allowed before the TCP Connection will be reset.
      | readTimeout | timeout | 500 | int | The SO_TIMEOUT value (in milliseconds) used after the start of an MLLP frame has been received
      | receiveTimeout | timeout | 10000 | int | The SO_TIMEOUT value (in milliseconds) used when waiting for the start of an MLLP frame
      |=======================================================================
      {% endraw %}
      // endpoint options: END







      [[MLLP-MLLPConsumer]]
      MLLP Consumer
      ~~~~~~~~~~~~~

      The MLLP Consumer supports receiving MLLP-framed messages and sending
      HL7 Acknowledgements. ??The MLLP Consumer can automatically generate the
      HL7 Acknowledgement (HL7 Application Acknowledgements only - AA, AE and
      AR), or the acknowledgement can be specified using
      the??CamelMllpAcknowledgement exchange property. ??Additionally, the type
      of acknowledgement that will be generated can be controlled by setting
      the CamelMllpAcknowledgementType exchange property.

      [[MLLP-MessageHeaders]]
      *Message Headers*
      ^^^^^^^^^^^^^^^^^

      The MLLP Consumer adds these headers on the Camel message:

      [width="100%",cols="<34%,<33%,<33%",]
      |===========================================
      |*Key* |*MSH field* |*Example*
      |CamelMllpLocalAddress |?? |??
      |CamelMllpRemoteAddress |?? |??
      |CamelMllpSendingApplication |MSH-3 |APPA
      |CamelMllpSendingFacility |MSH-4 |FACA
      |CamelMllpReceivingApplication |MSH-5 |CAMEL
      |CamelMllpReceivingFacility |MSH-6 |FACB
      |CamelMllpTimestamp |MSH-7 |20150106235900
      |CamelMllpSecurity |MSH-8 |??
      |CamelMllpMessageType |MSH-9 |ADT^A04
      |CamelMllpEventType |MSH-9-1 |AD4
      |CamelMllpTriggerEvent |MSH-9-2 |A04
      |CamelMllpMessageControlId |MSH-10 |12345
      |CamelMllpProcessingId |MSH-11 |P
      |CamelMllpVersionId |MSH-12 |2.3.1
      |CamelMllpCharset |MSH-18 |??
      |===========================================

      All headers??are??String??types. If a header value is missing, its value
      is??null.

      [[MLLP-ExchangeProperties]]
      *Exchange Properties*
      ^^^^^^^^^^^^^^^^^^^^^

      The type of acknowledgment the MLLP Consumer generates can be controlled
      by these properties on the Camel exchange:

      [width="100%",cols="<34%,<33%,<33%",]
      |====================================
      |*Key* |?? |*Example*
      |CamelMllpAcknowledgement |?? |??
      |CamelMllpAcknowledgementType |?? |??AR
      |====================================

      All headers??are??String??types. If a header value is missing, its value
      is??null.

      [[MLLP-ConsumerConfiguration]]
      Consumer Configuration
      ^^^^^^^^^^^^^^^^^^^^^^

      [[MLLP-MLLPProducer]]
      MLLP Producer
      ~~~~~~~~~~~~~

      The MLLP Producer supports sending MLLP-framed messages and receiving
      HL7 Acknowledgements. ??The MLLP Producer interrogates the HL7
      Acknowledgments and raises exceptions if a negative acknowledgement is
      received. ??The received acknowledgement is interrogated and an exception
      is raised in the event of a negative acknowledgement.

      [[MLLP-MessageHeaders.1]]
      *Message Headers*
      ^^^^^^^^^^^^^^^^^

      The MLLP Producer adds these headers on the Camel message:

      [width="100%",cols="<34%,<33%,<33%",]
      |===================================
      |*Key* |*MSH field* |*Example*
      |CamelMllpLocalAddress |?? |??
      |CamelMllpRemoteAddress |?? |??
      |CamelMllpAcknowledgement |?? |??
      |CamelMllpAcknowledgementType |?? |AA
      |===================================

      All headers??are??String??types. If a header value is missing, its value
      is??null.



- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mock
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mock
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mock
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mock
          spec:
            containers:
            - image: fabric8/connector-mock:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mock
        syntax: mock:name
        title: Mock
        description: The mock component is used for testing routes and mediation rules using mocks.
        label: core,testing
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.mock.MockComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of mock endpoint
        assertPeriod:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets a grace period after which the mock endpoint will re-assert to ensure the preliminary assertion is still valid. This is used for example to assert that exactly a number of messages arrives. For example if link expectedMessageCount(int) was set to 5 then the assertion is satisfied when 5 or more message arrives. To ensure that exactly 5 messages arrives then you would need to wait a little period to ensure no further message arrives. This is what you can use this link setAssertPeriod(long) method for. By default this period is disabled.
        expectedCount:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies the expected number of message exchanges that should be
            received by this endpoint. Beware: If you want to expect that 0 messages then
            take extra care as 0 matches when the tests starts so you need to set a assert
            period time to let the test run for a while to make sure there are still no
            messages arrived; for that use link setAssertPeriod(long). An alternative is
            to use NotifyBuilder and use the notifier to know when Camel is done routing
            some messages before you call the link assertIsSatisfied() method on the mocks.
            This allows you to not use a fixed assert period to speedup testing times. If
            you want to assert that exactly n''th message arrives to this mock endpoint
            then see also the link setAssertPeriod(long) method for further details.'
        reportGroup:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: A number that is used to turn on throughput logging based on groups of the size.
        resultMinimumWaitTime:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the minimum expected amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
        resultWaitTime:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the maximum amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
        retainFirst:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies to only retain the first n''th number of received Exchanges.
            This is used when testing with big data to reduce memory consumption by not
            storing copies of every Exchange this mock endpoint receives. Important: When
            using this limitation then the link getReceivedCounter() will still return the
            actual number of received Exchanges. For example if we have received 5000 Exchanges
            and have configured to only retain the first 10 Exchanges then the link getReceivedCounter()
            will still return 5000 but there is only the first 10 Exchanges in the link
            getExchanges() and link getReceivedExchanges() methods. When using this method
            then some of the other expectation methods is not supported for example the
            link expectedBodiesReceived(Object...) sets a expectation on the first number
            of bodies received. You can configure both link setRetainFirst(int) and link
            setRetainLast(int) methods to limit both the first and last received.'
        retainLast:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies to only retain the last n''th number of received Exchanges.
            This is used when testing with big data to reduce memory consumption by not
            storing copies of every Exchange this mock endpoint receives. Important: When
            using this limitation then the link getReceivedCounter() will still return the
            actual number of received Exchanges. For example if we have received 5000 Exchanges
            and have configured to only retain the last 20 Exchanges then the link getReceivedCounter()
            will still return 5000 but there is only the last 20 Exchanges in the link getExchanges()
            and link getReceivedExchanges() methods. When using this method then some of
            the other expectation methods is not supported for example the link expectedBodiesReceived(Object...)
            sets a expectation on the first number of bodies received. You can configure
            both link setRetainFirst(int) and link setRetainLast(int) methods to limit both
            the first and last received.'
        sleepForEmptyTest:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Allows a sleep to be specified to wait to check that this endpoint really is empty when link expectedMessageCount(int) is called with zero
        copyOnExchange:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. Is by default true.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      ifdef::env-github[]
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      [[Mock-MockComponent]]
      Mock Component
      ~~~~~~~~~~~~~~

      link:testing.html[Testing] of distributed and asynchronous processing is
      notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
      and link:dataset.html[DataSet] endpoints work great with the
      link:testing.html[Camel Testing Framework] to simplify your unit and
      integration testing using
      link:enterprise-integration-patterns.html[Enterprise Integration
      Patterns] and Camel's large range of link:components.html[Components]
      together with the powerful link:bean-integration.html[Bean Integration].

      The Mock component provides a powerful declarative testing mechanism,
      which is similar to http://www.jmock.org[jMock] in
      that it allows declarative expectations to be created on any Mock
      endpoint before a test begins. Then the test is run, which typically
      fires messages to one or more endpoints, and finally the expectations
      can be asserted in a test case to ensure the system worked as expected.

      This allows you to test various things like:

      * The correct number of messages are received on each endpoint,
      * The correct payloads are received, in the right order,
      * Messages arrive on an endpoint in order, using some
      link:expression.html[Expression] to create an order testing function,
      * Messages arrive match some kind of link:predicate.html[Predicate] such
      as that specific headers have certain values, or that parts of the
      messages match some predicate, such as by evaluating an
      link:xpath.html[XPath] or link:xquery.html[XQuery]
      link:expression.html[Expression].

      [NOTE]
      There is also the link:test.html[Test endpoint] which is a
      Mock endpoint, but which uses a second endpoint to provide the list of
      expected message bodies and automatically sets up the Mock endpoint
      assertions. In other words, it's a Mock endpoint that automatically sets
      up its assertions from some sample messages in a link:file2.html[File]
      or link:jpa.html[database], for example.

      [CAUTION]
      *Mock endpoints keep received Exchanges in memory indefinitely.* +
       +
      Remember that Mock is designed for testing. When you add Mock endpoints
      to a route, each link:exchange.html[Exchange] sent to the endpoint will
      be stored (to allow for later validation) in memory until explicitly
      reset or the JVM is restarted. If you are sending high volume and/or
      large messages, this may cause excessive memory use. If your goal is to
      test deployable routes inline, consider using
      link:notifybuilder.html[NotifyBuilder] or
      link:advicewith.html[AdviceWith] in your tests instead of adding Mock
      endpoints to routes directly. +
       +
      From Camel 2.10 onwards there are two new options `retainFirst`, and
      `retainLast` that can be used to limit the number of messages the Mock
      endpoints keep in memory.


      [[Mock-URIformat]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      mock:someName[?options]
      ----

      Where `someName` can be any string that uniquely identifies the
      endpoint.

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

      [[Mock-Options]]
      Options
      ^^^^^^^




      // component options: START
      The Mock component has no options.
      // component options: END






      // endpoint options: START
      The Mock component supports 11 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | producer |  | String | *Required* Name of mock endpoint
      | assertPeriod | producer | 0 | long | Sets a grace period after which the mock endpoint will re-assert to ensure the preliminary assertion is still valid. This is used for example to assert that exactly a number of messages arrives. For example if link expectedMessageCount(int) was set to 5 then the assertion is satisfied when 5 or more message arrives. To ensure that exactly 5 messages arrives then you would need to wait a little period to ensure no further message arrives. This is what you can use this link setAssertPeriod(long) method for. By default this period is disabled.
      | expectedCount | producer | -1 | int | Specifies the expected number of message exchanges that should be received by this endpoint. Beware: If you want to expect that 0 messages then take extra care as 0 matches when the tests starts so you need to set a assert period time to let the test run for a while to make sure there are still no messages arrived; for that use link setAssertPeriod(long). An alternative is to use NotifyBuilder and use the notifier to know when Camel is done routing some messages before you call the link assertIsSatisfied() method on the mocks. This allows you to not use a fixed assert period to speedup testing times. If you want to assert that exactly n'th message arrives to this mock endpoint then see also the link setAssertPeriod(long) method for further details.
      | reportGroup | producer |  | int | A number that is used to turn on throughput logging based on groups of the size.
      | resultMinimumWaitTime | producer | 0 | long | Sets the minimum expected amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
      | resultWaitTime | producer | 0 | long | Sets the maximum amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
      | retainFirst | producer | -1 | int | Specifies to only retain the first n'th number of received Exchanges. This is used when testing with big data to reduce memory consumption by not storing copies of every Exchange this mock endpoint receives. Important: When using this limitation then the link getReceivedCounter() will still return the actual number of received Exchanges. For example if we have received 5000 Exchanges and have configured to only retain the first 10 Exchanges then the link getReceivedCounter() will still return 5000 but there is only the first 10 Exchanges in the link getExchanges() and link getReceivedExchanges() methods. When using this method then some of the other expectation methods is not supported for example the link expectedBodiesReceived(Object...) sets a expectation on the first number of bodies received. You can configure both link setRetainFirst(int) and link setRetainLast(int) methods to limit both the first and last received.
      | retainLast | producer | -1 | int | Specifies to only retain the last n'th number of received Exchanges. This is used when testing with big data to reduce memory consumption by not storing copies of every Exchange this mock endpoint receives. Important: When using this limitation then the link getReceivedCounter() will still return the actual number of received Exchanges. For example if we have received 5000 Exchanges and have configured to only retain the last 20 Exchanges then the link getReceivedCounter() will still return 5000 but there is only the last 20 Exchanges in the link getExchanges() and link getReceivedExchanges() methods. When using this method then some of the other expectation methods is not supported for example the link expectedBodiesReceived(Object...) sets a expectation on the first number of bodies received. You can configure both link setRetainFirst(int) and link setRetainLast(int) methods to limit both the first and last received.
      | sleepForEmptyTest | producer | 0 | long | Allows a sleep to be specified to wait to check that this endpoint really is empty when link expectedMessageCount(int) is called with zero
      | copyOnExchange | producer (advanced) | true | boolean | Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. Is by default true.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[Mock-SimpleExample]]
      Simple Example
      ^^^^^^^^^^^^^^

      Here's a simple example of Mock endpoint in use. First, the endpoint is
      resolved on the context. Then we set an expectation, and then, after the
      test has run, we assert that our expectations have been met:

      [source,java]
      ----
      MockEndpoint resultEndpoint = context.resolveEndpoint("mock:foo", MockEndpoint.class);

      resultEndpoint.expectedMessageCount(2);

      // send some messages
      ...

      // now lets assert that the mock:foo endpoint received 2 messages
      resultEndpoint.assertIsSatisfied();
      ----

      You typically always call the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#assertIsSatisfied()[`assertIsSatisfied()`]
      method to test that the expectations were met after running a test.

      Camel will by default wait 10 seconds when the `assertIsSatisfied()` is
      invoked. This can be configured by setting the
      `setResultWaitTime(millis)` method.

      [[Mock-UsingassertPeriod]]
      Using `assertPeriod`
      ++++++++++++++++++++

      *Available as of Camel 2.7* +
      When the assertion is satisfied then Camel will stop waiting and
      continue from the `assertIsSatisfied` method. That means if a new
      message arrives on the mock endpoint, just a bit later, that arrival
      will not affect the outcome of the assertion. Suppose you do want to
      test that no new messages arrives after a period thereafter, then you
      can do that by setting the `setAssertPeriod` method, for example:

      [source,java]
      ----
      MockEndpoint resultEndpoint = context.resolveEndpoint("mock:foo", MockEndpoint.class);
      resultEndpoint.setAssertPeriod(5000);
      resultEndpoint.expectedMessageCount(2);

      // send some messages
      ...

      // now lets assert that the mock:foo endpoint received 2 messages
      resultEndpoint.assertIsSatisfied();
      ----

      [[Mock-Settingexpectations]]
      Setting expectations
      ^^^^^^^^^^^^^^^^^^^^

      You can see from the Javadoc of
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html[MockEndpoint]
      the various helper methods you can use to set expectations. The main
      methods are as follows:

      [width="100%",cols="1m,1",options="header",]
      |=======================================================================
      |Method |Description
      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectedMessageCount(int)[expectedMessageCount(int)]
      |To define the expected message count on the endpoint.

      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectedMinimumMessageCount(int)[expectedMinimumMessageCount(int)]
      |To define the minimum number of expected messages on the endpoint.

      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectedBodiesReceived(java.lang.Object...)[expectedBodiesReceived(...)]
      |To define the expected bodies that should be received (in order).

      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectedHeaderReceived(java.lang.String,%20java.lang.String)[expectedHeaderReceived(...)]
      |To define the expected header that should be received

      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectsAscending(org.apache.camel.Expression)[expectsAscending(Expression)]
      |To add an expectation that messages are received in order, using the
      given link:expression.html[Expression] to compare messages.

      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectsDescending(org.apache.camel.Expression)[expectsDescending(Expression)]
      |To add an expectation that messages are received in order, using the
      given link:expression.html[Expression] to compare messages.

      |http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#expectsNoDuplicates(org.apache.camel.Expression)[expectsNoDuplicates(Expression)]
      |To add an expectation that no duplicate messages are received; using an
      link:expression.html[Expression] to calculate a unique identifier for
      each message. This could be something like the `JMSMessageID` if using
      JMS, or some unique reference number within the message.
      |=======================================================================

      Here's another example:

      [source,java]
      ----
      resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody");
      ----

      [[Mock-Addingexpectationstospecificmessages]]
      Adding expectations to specific messages
      ++++++++++++++++++++++++++++++++++++++++

      In addition, you can use the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#message(int)[`message(int
      messageIndex)`] method to add assertions about a specific message that is
      received.

      For example, to add expectations of the headers or body of the first
      message (using zero-based indexing like `java.util.List`), you can use
      the following code:

      [source,java]
      ----
      resultEndpoint.message(0).header("foo").isEqualTo("bar");
      ----

      There are some examples of the Mock endpoint in use in the
      http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/[`camel-core`
      processor tests].

      [[Mock-Mockingexistingendpoints]]
      Mocking existing endpoints
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.7*

      Camel now allows you to automatically mock existing endpoints in your
      Camel routes.

      [NOTE]
      *How it works* +
       +
      *Important:* The endpoints are still in action. +
      What happens differently
      is that a link:mock.html[Mock] endpoint is injected and receives the
      message first and then delegates the message to the target endpoint. You
      can view this as a kind of intercept and delegate or endpoint listener.

      Suppose you have the given route below:

      [source,java]
      .*Route*
      ----
      include::../../test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java[tags=route]
      ----

      You can then use the `adviceWith` feature in Camel to mock all the
      endpoints in a given route from your unit test, as shown below:

      [source,java]
      .*`adviceWith` mocking all endpoints*
      ----
      include::../../test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java[tags=e1]
      ----

      Notice that the mock endpoints is given the URI `mock:<endpoint>`, for
      example `mock:direct:foo`. Camel logs at `INFO` level the endpoints
      being mocked:

      [source]
      ----
      INFO  Adviced endpoint [direct://foo] with mock endpoint [mock:direct:foo]
      ----

      [NOTE]
       **Mocked endpoints are without parameters** +
      Endpoints which are mocked will have their parameters stripped off. For
      example the endpoint `log:foo?showAll=true` will be mocked to the
      following endpoint `mock:log:foo`. Notice the parameters have been
      removed.

      Its also possible to only mock certain endpoints using a pattern. For
      example to mock all `log` endpoints you do as shown:

      [source,java]
      .*`adviceWith` mocking only log endpoints using a pattern*
      ----
      include::../../test/java/org/apache/camel/processor/interceptor/AdviceWithMockEndpointsTest.java[tags=e2]
      ----

      The pattern supported can be a wildcard or a regular expression. See
      more details about this at link:intercept.html[Intercept] as its the
      same matching function used by Camel.

      [NOTE]
      Mind that mocking endpoints causes the messages to be copied when they
      arrive on the mock. +
      That means Camel will use more memory. This may not be suitable when you
      send in a lot of messages.


      [[Mock-Mockingexistingendpointsusingthecamel-testcomponent]]
      Mocking existing endpoints using the `camel-test` component
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      Instead of using the `adviceWith` to instruct Camel to mock endpoints,
      you can easily enable this behavior when using the `camel-test` Test
      Kit.

      The same route can be tested as follows. Notice that we return `"*"`
      from the `isMockEndpoints` method, which tells Camel to mock all
      endpoints.

      If you only want to mock all `log` endpoints you can return `"log*"`
      instead.

      [source,java]
      .*`isMockEndpoints` using camel-test kit*
      ----
      include::../../../../components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsJUnit4Test.java[tags=e1]
      ----


      [[Mock-MockingexistingendpointswithXMLDSL]]
      Mocking existing endpoints with XML DSL
      +++++++++++++++++++++++++++++++++++++++

      If you do not use the `camel-test` component for unit testing (as shown
      above) you can use a different approach when using XML files for
      routes. +
      The solution is to create a new XML file used by the unit test and then
      include the intended XML file which has the route you want to test.

      Suppose we have the route in the `camel-route.xml` file:

      [source,xml]
      .*camel-route.xml*
      ----
      include::../../../../components/camel-spring/src/test/resources/org/apache/camel/spring/mock/camel-route.xml[tags=e1]
      ----

      Then we create a new XML file as follows, where we include the
      `camel-route.xml` file and define a spring bean with the class
      `org.apache.camel.impl.InterceptSendToMockEndpointStrategy` which tells
      Camel to mock all endpoints:

      [source,xml]
      .*test-camel-route.xml*
      ----
      include::../../../../components/camel-spring/src/test/resources/org/apache/camel/spring/mock/InterceptSendToMockEndpointStrategyTest.xml[tags=e1]
      ----

      Then in your unit test you load the new XML file
      (`test-camel-route.xml`) instead of `camel-route.xml`.

      To only mock all link:log.html[Log] endpoints you can define the pattern
      in the constructor for the bean:

      [source,xml]
      ----
      <bean id="mockAllEndpoints" class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy">
          <constructor-arg index="0" value="log*"/>
      </bean>
      ----

      [[Mock-Mockingendpointsandskipsendingtooriginalendpoint]]
      Mocking endpoints and skip sending to original endpoint
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++

      *Available as of Camel 2.10*

      Sometimes you want to easily mock and skip sending to a certain
      endpoints. So the message is detoured and send to the mock endpoint
      only. From Camel 2.10 onwards you can now use the `mockEndpointsAndSkip`
      method using link:advicewith.html[AdviceWith] or the
      https://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=Test+Kit&linkCreation=true&fromPageId=52081[Test
      Kit]. The example below will skip sending to the two endpoints
      `"direct:foo"`, and `"direct:bar"`.

      [source,java]
      .*adviceWith mock and skip sending to endpoints*
      ----
      include::../../test/java/org/apache/camel/processor/interceptor/AdviceWithMockMultipleEndpointsWithSkipTest.java[tags=e1]
      ----

      The same example using the link:testing.html[Test Kit]

      [source,java]
      .*isMockEndpointsAndSkip using camel-test kit*
      ----
      include::../../../../components/camel-test/src/test/java/org/apache/camel/test/patterns/IsMockEndpointsAndSkipJUnit4Test.java[tags=e1]
      ----

      [[Mock-Limitingthenumberofmessagestokeep]]
      Limiting the number of messages to keep
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.10*

      The link:mock.html[Mock] endpoints will by default keep a copy of every
      link:exchange.html[Exchange] that it received. So if you test with a lot
      of messages, then it will consume memory. +
      From Camel 2.10 onwards we have introduced two options `retainFirst` and
      `retainLast` that can be used to specify to only keep N'th of the first
      and/or last link:exchange.html[Exchange]s.

      For example in the code below, we only want to retain a copy of the
      first 5 and last 5 link:exchange.html[Exchange]s the mock receives.

      [source,java]
      ----
        MockEndpoint mock = getMockEndpoint("mock:data");
        mock.setRetainFirst(5);
        mock.setRetainLast(5);
        mock.expectedMessageCount(2000);

        ...

        mock.assertIsSatisfied();
      ----

      Using this has some limitations. The `getExchanges()` and
      `getReceivedExchanges()` methods on the `MockEndpoint` will return only
      the retained copies of the link:exchange.html[Exchange]s. So in the
      example above, the list will contain 10 link:exchange.html[Exchange]s;
      the first five, and the last five. +
      The `retainFirst` and `retainLast` options also have limitations on
      which expectation methods you can use. For example the `expectedXXX`
      methods that work on message bodies, headers, etc. will only operate on
      the retained messages. In the example above they can test only the
      expectations on the 10 retained messages.

      [[Mock-Testingwitharrivaltimes]]
      Testing with arrival times
      ^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.7*

      The link:mock.html[Mock] endpoint stores the arrival time of the message
      as a property on the link:exchange.html[Exchange].

      [source,java]
      ----
      Date time = exchange.getProperty(Exchange.RECEIVED_TIMESTAMP, Date.class);
      ----

      You can use this information to know when the message arrived on the
      mock. But it also provides foundation to know the time interval between
      the previous and next message arrived on the mock. You can use this to
      set expectations using the `arrives` DSL on the link:mock.html[Mock]
      endpoint.

      For example to say that the first message should arrive between 0-2
      seconds before the next you can do:

      [source,java]
      ----
      mock.message(0).arrives().noLaterThan(2).seconds().beforeNext();
      ----

      You can also define this as that 2nd message (0 index based) should
      arrive no later than 0-2 seconds after the previous:

      [source,java]
      ----
      mock.message(1).arrives().noLaterThan(2).seconds().afterPrevious();
      ----

      You can also use between to set a lower bound. For example suppose that
      it should be between 1-4 seconds:

      [source,java]
      ----
      mock.message(1).arrives().between(1, 4).seconds().afterPrevious();
      ----

      You can also set the expectation on all messages, for example to say
      that the gap between them should be at most 1 second:

      [source,java]
      ----
      mock.allMessages().arrives().noLaterThan(1).seconds().beforeNext();
      ----

      [TIP]
      *Time units* +
      In the example above we use `seconds` as the time unit, but Camel offers
      `milliseconds`, and `minutes` as well.


      [[Mock-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:spring-testing.html[Spring Testing]
      * link:testing.html[Testing]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mongodb
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mongodb
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mongodb
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mongodb
          spec:
            containers:
            - image: fabric8/connector-mongodb:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mongodb
        syntax: mongodb:connectionBean
        title: MongoDB
        description: Component for working with documents stored in MongoDB database.
        label: database,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mongodb.MongoDbComponent
        groupId: org.apache.camel
        artifactId: camel-mongodb
        version: 2.18.1
      componentProperties: {}
      properties:
        connectionBean:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of com.mongodb.Mongo to use.
        collection:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the MongoDB collection to bind to this endpoint
        collectionIndex:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the collection index (JSON FORMAT : field1 : order1 field2
            : order2)'
        createCollection:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Create collection during initialisation if it doesn't exist. Default is true.
        database:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the name of the MongoDB database to target
        operation:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.mongodb.MongoDbOperation
          enum:
          - findById
          - findOneByQuery
          - findAll
          - insert
          - save
          - update
          - remove
          - aggregate
          - getDbStats
          - getColStats
          - count
          - command
          deprecated: false
          secret: false
          description: Sets the operation this endpoint will execute against MongoDB. For possible values see MongoDbOperation.
        outputType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.mongodb.MongoDbOutputType
          enum:
          - DBObjectList
          - DBObject
          - DBCursor
          deprecated: false
          secret: false
          description: 'Convert the output of the producer to the selected type : DBObjectList
            DBObject or DBCursor. DBObjectList or DBObject applies to findAll. DBCursor
            applies to all other operations.'
        writeConcern:
          kind: parameter
          group: common
          type: string
          javaType: com.mongodb.WriteConcern
          enum:
          - ACKNOWLEDGED
          - W1
          - W2
          - W3
          - UNACKNOWLEDGED
          - JOURNALED
          - MAJORITY
          - SAFE
          deprecated: false
          secret: false
          defaultValue: ACKNOWLEDGED
          description: Set the WriteConcern for write operations on MongoDB using the standard ones. Resolved from the fields of the WriteConcern class by calling the link WriteConcernvalueOf(String) method.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        cursorRegenerationDelay:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: MongoDB tailable cursors will block until new data arrives. If no new data is inserted after some time the cursor will be automatically freed and closed by the MongoDB server. The client is expected to regenerate the cursor if needed. This value specifies the time to wait before attempting to fetch a new cursor and if the attempt fails how long before the next attempt is made. Default value is 1000ms.
        dynamicity:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether this endpoint will attempt to dynamically resolve the target database and collection from the incoming Exchange properties. Can be used to override at runtime the database and collection specified on the otherwise static endpoint URI. It is disabled by default to boost performance. Enabling it will take a minimal performance hit.
        readPreference:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.mongodb.ReadPreference
          deprecated: false
          secret: false
          description: Sets a MongoDB ReadPreference on the Mongo connection. Read preferences set directly on the connection will be overridden by this setting. The link com.mongodb.ReadPreferencevalueOf(String) utility method is used to resolve the passed readPreference value. Some examples for the possible values are nearest primary or secondary etc.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        writeResultAsHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: In write operations it determines whether instead of returning WriteResult as the body of the OUT message we transfer the IN message to the OUT and attach the WriteResult as a header.
        persistentId:
          kind: parameter
          group: tail
          label: tail
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: One tail tracking collection can host many trackers for several tailable consumers. To keep them separate each tracker should have its own unique persistentId.
        persistentTailTracking:
          kind: parameter
          group: tail
          label: tail
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable persistent tail tracking which is a mechanism to keep track of the last consumed message across system restarts. The next time the system is up the endpoint will recover the cursor from the point where it last stopped slurping records.
        tailTrackCollection:
          kind: parameter
          group: tail
          label: tail
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Collection where tail tracking information will be persisted. If not specified link MongoDbTailTrackingConfigDEFAULT_COLLECTION will be used by default.
        tailTrackDb:
          kind: parameter
          group: tail
          label: tail
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Indicates what database the tail tracking mechanism will persist to. If not specified the current database will be picked by default. Dynamicity will not be taken into account even if enabled i.e. the tail tracking database will not vary past endpoint initialisation.
        tailTrackField:
          kind: parameter
          group: tail
          label: tail
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Field where the last tracked value will be placed. If not specified link MongoDbTailTrackingConfigDEFAULT_FIELD will be used by default.
        tailTrackIncreasingField:
          kind: parameter
          group: tail
          label: tail
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Correlation field in the incoming record which is of increasing
            nature and will be used to position the tailing cursor every time it is generated.
            The cursor will be (re)created with a query of type: tailTrackIncreasingField
            lastValue (possibly recovered from persistent tail tracking). Can be of type
            Integer Date String etc. NOTE: No support for dot notation at the current time
            so the field should be at the top level of the document.'
    documentation.adoc: "[[MongoDB-CamelMongoDBcomponent]]\nCamel MongoDB component\n\
      ~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.10*\n\nAccording to Wikipedia:\
      \ \"NoSQL is a movement promoting a loosely defined\nclass of non-relational\
      \ data stores that break with a long history of\nrelational databases and ACID\
      \ guarantees.\" NoSQL solutions have grown in\npopularity in the last few years,\
      \ and major extremely-used sites and\nservices such as Facebook, LinkedIn, Twitter,\
      \ etc. are known to use them\nextensively to achieve scalability and agility.\n\
      \nBasically, NoSQL solutions differ from traditional RDBMS (Relational\nDatabase\
      \ Management Systems) in that they don't use SQL as their query\nlanguage and\
      \ generally don't offer ACID-like transactional behaviour nor\nrelational data.\
      \ Instead, they are designed around the concept of\nflexible data structures\
      \ and schemas (meaning that the traditional\nconcept of a database table with\
      \ a fixed schema is dropped), extreme\nscalability on commodity hardware and\
      \ blazing-fast processing.\n\nMongoDB is a very popular NoSQL solution and the\
      \ camel-mongodb component\nintegrates Camel with MongoDB allowing you to interact\
      \ with MongoDB\ncollections both as a producer (performing operations on the\
      \ collection)\nand as a consumer (consuming documents from a MongoDB collection).\n\
      \nMongoDB revolves around the concepts of documents (not as is office\ndocuments,\
      \ but rather hierarchical data defined in JSON/BSON) and\ncollections. This\
      \ component page will assume you are familiar with them.\nOtherwise, visit http://www.mongodb.org/[http://www.mongodb.org/].\n\
      \nMaven users will need to add the following dependency to their `pom.xml`\n\
      for this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-mongodb</artifactId>\n\
      \    <version>x.y.z</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[MongoDB-URIformat]]\nURI format\n~~~~~~~~~~\n\n[source,java]\n---------------------------------------------------------------------------------------------------------------\n\
      mongodb:connectionBean?database=databaseName&collection=collectionName&operation=operationName[&moreOptions...]\n\
      ---------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-options]]\nMongoDB options\n~~~~~~~~~~~~~~~\n\n\n// component options:\
      \ START\nThe MongoDB component has no options.\n// component options: END\n\n\
      \n\n\n\n\n// endpoint options: START\nThe MongoDB component supports 22 endpoint\
      \ options which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| connectionBean | common\
      \ |  | String | *Required* Name of com.mongodb.Mongo to use.\n| collection |\
      \ common |  | String | Sets the name of the MongoDB collection to bind to this\
      \ endpoint\n| collectionIndex | common |  | String | Sets the collection index\
      \ (JSON FORMAT : field1 : order1 field2 : order2)\n| createCollection | common\
      \ | true | boolean | Create collection during initialisation if it doesn't exist.\
      \ Default is true.\n| database | common |  | String | Sets the name of the MongoDB\
      \ database to target\n| operation | common |  | MongoDbOperation | Sets the\
      \ operation this endpoint will execute against MongoDB. For possible values\
      \ see MongoDbOperation.\n| outputType | common |  | MongoDbOutputType | Convert\
      \ the output of the producer to the selected type : DBObjectList DBObject or\
      \ DBCursor. DBObjectList or DBObject applies to findAll. DBCursor applies to\
      \ all other operations.\n| writeConcern | common | ACKNOWLEDGED | WriteConcern\
      \ | Set the WriteConcern for write operations on MongoDB using the standard\
      \ ones. Resolved from the fields of the WriteConcern class by calling the link\
      \ WriteConcernvalueOf(String) method.\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| cursorRegenerationDelay | advanced |\
      \ 1000 | long | MongoDB tailable cursors will block until new data arrives.\
      \ If no new data is inserted after some time the cursor will be automatically\
      \ freed and closed by the MongoDB server. The client is expected to regenerate\
      \ the cursor if needed. This value specifies the time to wait before attempting\
      \ to fetch a new cursor and if the attempt fails how long before the next attempt\
      \ is made. Default value is 1000ms.\n| dynamicity | advanced | false | boolean\
      \ | Sets whether this endpoint will attempt to dynamically resolve the target\
      \ database and collection from the incoming Exchange properties. Can be used\
      \ to override at runtime the database and collection specified on the otherwise\
      \ static endpoint URI. It is disabled by default to boost performance. Enabling\
      \ it will take a minimal performance hit.\n| readPreference | advanced |  |\
      \ ReadPreference | Sets a MongoDB ReadPreference on the Mongo connection. Read\
      \ preferences set directly on the connection will be overridden by this setting.\
      \ The link com.mongodb.ReadPreferencevalueOf(String) utility method is used\
      \ to resolve the passed readPreference value. Some examples for the possible\
      \ values are nearest primary or secondary etc.\n| synchronous | advanced | false\
      \ | boolean | Sets whether synchronous processing should be strictly used or\
      \ Camel is allowed to use asynchronous processing (if supported).\n| writeResultAsHeader\
      \ | advanced | false | boolean | In write operations it determines whether instead\
      \ of returning WriteResult as the body of the OUT message we transfer the IN\
      \ message to the OUT and attach the WriteResult as a header.\n| persistentId\
      \ | tail |  | String | One tail tracking collection can host many trackers for\
      \ several tailable consumers. To keep them separate each tracker should have\
      \ its own unique persistentId.\n| persistentTailTracking | tail | false | boolean\
      \ | Enable persistent tail tracking which is a mechanism to keep track of the\
      \ last consumed message across system restarts. The next time the system is\
      \ up the endpoint will recover the cursor from the point where it last stopped\
      \ slurping records.\n| tailTrackCollection | tail |  | String | Collection where\
      \ tail tracking information will be persisted. If not specified link MongoDbTailTrackingConfigDEFAULT_COLLECTION\
      \ will be used by default.\n| tailTrackDb | tail |  | String | Indicates what\
      \ database the tail tracking mechanism will persist to. If not specified the\
      \ current database will be picked by default. Dynamicity will not be taken into\
      \ account even if enabled i.e. the tail tracking database will not vary past\
      \ endpoint initialisation.\n| tailTrackField | tail |  | String | Field where\
      \ the last tracked value will be placed. If not specified link MongoDbTailTrackingConfigDEFAULT_FIELD\
      \ will be used by default.\n| tailTrackIncreasingField | tail |  | String |\
      \ Correlation field in the incoming record which is of increasing nature and\
      \ will be used to position the tailing cursor every time it is generated. The\
      \ cursor will be (re)created with a query of type: tailTrackIncreasingField\
      \ lastValue (possibly recovered from persistent tail tracking). Can be of type\
      \ Integer Date String etc. NOTE: No support for dot notation at the current\
      \ time so the field should be at the top level of the document.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n\n[[MongoDB-ConfigurationofdatabaseinSpringXML]]\n\
      Configuration of database in Spring XML\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\
      \nThe following Spring XML creates a bean defining the connection to a\nMongoDB\
      \ instance.\n\n[source,xml]\n----------------------------------------------------------------------------------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\
      \n    xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n    xsi:schemaLocation=\"\
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd\"\
      >\n    <bean id=\"mongoBean\" class=\"com.mongodb.Mongo\">\n        <constructor-arg\
      \ name=\"host\" value=\"${mongodb.host}\" />\n        <constructor-arg name=\"\
      port\" value=\"${mongodb.port}\" />\n    </bean>\n</beans>\n----------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-Sampleroute]]\nSample route\n^^^^^^^^^^^^\n\nThe following route\
      \ defined in Spring XML executes the operation\nlink:mongodb.html[*dbStats*]\
      \ on a collection.\n\n*Get DB stats for specified collection*\n\n[source,xml]\n\
      ---------------------------------------------------------------------------------------------------------------------------\n\
      <route>\n  <from uri=\"direct:start\" />\n  <!-- using bean 'mongoBean' defined\
      \ above -->\n  <to uri=\"mongodb:mongoBean?database=${mongodb.database}&amp;collection=${mongodb.collection}&amp;operation=getDbStats\"\
      \ />\n  <to uri=\"direct:result\" />\n</route>\n---------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-MongoDBoperations-producerendpoints]]\nMongoDB operations - producer\
      \ endpoints\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n[[MongoDB-Queryoperations]]\n\
      Query operations\n^^^^^^^^^^^^^^^^\n\n[[MongoDB-findById]]\nfindById\n++++++++\n\
      \nThis operation retrieves only one element from the collection whose _id\n\
      field matches the content of the IN message body. The incoming object\ncan be\
      \ anything that has an equivalent to a BSON type. See\nhttp://bsonspec.org/#/specification[http://bsonspec.org/#/specification]\n\
      and\nhttp://www.mongodb.org/display/DOCS/Java+Types[http://www.mongodb.org/display/DOCS/Java+Types].\n\
      \n[source,java]\n------------------------------------------------------------------------------\n\
      from(\"direct:findById\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=findById\"\
      )\n    .to(\"mock:resultFindById\");\n------------------------------------------------------------------------------\n\
      \n\nTIP: *Supports optional parameters*. This operation supports specifying\
      \ a fields filter. See\nlink:mongodb.html[Specifying optional parameters].\n\
      \n[[MongoDB-findOneByQuery]]\nfindOneByQuery\n++++++++++++++\n\nUse this operation\
      \ to retrieve just one element from the collection that\nmatches a MongoDB query.\
      \ *The query object is extracted from the IN\nmessage body*, i.e. it should\
      \ be of type `DBObject` or convertible to\n`DBObject`. It can be a JSON String\
      \ or a Hashmap. See\nlink:mongodb.html[#Type conversions] for more info.\n\n\
      Example with no query (returns any object of the collection):\n\n[source,java]\n\
      ------------------------------------------------------------------------------------\n\
      from(\"direct:findOneByQuery\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery\"\
      )\n    .to(\"mock:resultFindOneByQuery\");\n------------------------------------------------------------------------------------\n\
      \nExample with a query (returns one matching result):\n\n[source,java]\n------------------------------------------------------------------------------------\n\
      from(\"direct:findOneByQuery\")\n    .setBody().constant(\"{ \\\"name\\\": \\\
      \"Raul Kripalani\\\" }\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery\"\
      )\n    .to(\"mock:resultFindOneByQuery\");\n------------------------------------------------------------------------------------\n\
      \nTIP: *Supports optional parameters*. This operation supports specifying a\
      \ fields filter and/or a sort clause. See\nlink:mongodb.html[Specifying optional\
      \ parameters].\n\n[[MongoDB-findAll]]\nfindAll\n+++++++\n\nThe `findAll` operation\
      \ returns all documents matching a query, or none\nat all, in which case all\
      \ documents contained in the collection are\nreturned. *The query object is\
      \ extracted from the IN message body*, i.e.\nit should be of type `DBObject`\
      \ or convertible to `DBObject`. It can be\na JSON String or a Hashmap. See link:mongodb.html[#Type\
      \ conversions] for\nmore info.\n\nExample with no query (returns all object\
      \ in the collection):\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      from(\"direct:findAll\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=findAll\"\
      )\n    .to(\"mock:resultFindAll\");\n-----------------------------------------------------------------------------\n\
      \nExample with a query (returns all matching results):\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      from(\"direct:findAll\")\n    .setBody().constant(\"{ \\\"name\\\": \\\"Raul\
      \ Kripalani\\\" }\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=findAll\"\
      )\n    .to(\"mock:resultFindAll\");\n-----------------------------------------------------------------------------\n\
      \nPaging and efficient retrieval is supported via the following headers:\n\n\
      [width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Header key |Quick constant |Description (extracted from MongoDB API doc) |Expected\
      \ type\n\n|`CamelMongoDbNumToSkip` |`MongoDbConstants.NUM_TO_SKIP` |Discards\
      \ a given number of elements at the beginning of the cursor. |int/Integer\n\n\
      |`CamelMongoDbLimit` |`MongoDbConstants.LIMIT` |Limits the number of elements\
      \ returned. |int/Integer\n\n|`CamelMongoDbBatchSize` |`MongoDbConstants.BATCH_SIZE`\
      \ |Limits the number of elements returned in one batch. A cursor typically\n\
      fetches a batch of result objects and store them locally. If batchSize\nis positive,\
      \ it represents the size of each batch of objects retrieved.\nIt can be adjusted\
      \ to optimize performance and limit data transfer. If\nbatchSize is negative,\
      \ it will limit of number objects returned, that\nfit within the max batch size\
      \ limit (usually 4MB), and cursor will be\nclosed. For example if batchSize\
      \ is -10, then the server will return a\nmaximum of 10 documents and as many\
      \ as can fit in 4MB, then close the\ncursor. Note that this feature is different\
      \ from limit() in that\ndocuments must fit within a maximum size, and it removes\
      \ the need to\nsend a request to close the cursor server-side. The batch size\
      \ can be\nchanged even after a cursor is iterated, in which case the setting\
      \ will\napply on the next batch retrieval. |int/Integer\n|=======================================================================\n\
      \nThe `findAll` operation will also return the following OUT headers to\nenable\
      \ you to iterate through result pages if you are using paging:\n\n[width=\"\
      100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Header key |Quick constant |Description (extracted from MongoDB API doc) |Data\
      \ type\n\n|`CamelMongoDbResultTotalSize` |`MongoDbConstants.RESULT_TOTAL_SIZE`\
      \ |Number of objects matching the query. This does not take limit/skip into\n\
      consideration. |int/Integer\n\n|`CamelMongoDbResultPageSize` |`MongoDbConstants.RESULT_PAGE_SIZE`\
      \ |Number of objects matching the query. This does not take limit/skip into\n\
      consideration. |int/Integer\n|=======================================================================\n\
      \nTIP: *Supports optional parameters*. This operation supports specifying a\
      \ fields filter and/or a sort clause. See\nlink:mongodb.html[Specifying optional\
      \ parameters].\n\n[[MongoDB-count]]\ncount\n+++++\n\nReturns the total number\
      \ of objects in a collection, returning a Long as\nthe OUT message body. +\n\
      The following example will count the number of records in the\n\"dynamicCollectionName\"\
      \ collection. Notice how dynamicity is enabled,\nand as a result, the operation\
      \ will not run against the\n\"notableScientists\" collection, but against the\
      \ \"dynamicCollectionName\"\ncollection.\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------------\n\
      // from(\"direct:count\").to(\"mongodb:myDb?database=tickets&collection=flights&operation=count&dynamicity=true\"\
      );\nLong result = template.requestBodyAndHeader(\"direct:count\", \"irrelevantBody\"\
      , MongoDbConstants.COLLECTION, \"dynamicCollectionName\");\nassertTrue(\"Result\
      \ is not of type Long\", result instanceof Long);\n------------------------------------------------------------------------------------------------------------------------------------\n\
      \nFrom??*Camel 2.14*??onwards you can provide\na??`com.mongodb.DBObject`??object\
      \ in the message body as a query,??and\noperation will return the amount of\
      \ documents matching this criteria.??\n\n??\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------\n\
      DBObject query = ...\nLong count = template.requestBodyAndHeader(\"direct:count\"\
      , query, MongoDbConstants.COLLECTION, \"dynamicCollectionName\");\n------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-Specifyingoptionalparameters]]\nSpecifying a fields filter (projection)\n\
      +++++++++++++++++++++++++++++++++++++++\n\nQuery operations will, by default,\
      \ return the matching objects in their\nentirety (with all their fields). If\
      \ your documents are large and you\nonly require retrieving a subset of their\
      \ fields, you can specify a\nfield filter in all query operations, simply by\
      \ setting the relevant\n`DBObject` (or type convertible to `DBObject`, such\
      \ as a JSON String,\nMap, etc.) on the `CamelMongoDbFieldsFilter` header, constant\
      \ shortcut:\n`MongoDbConstants.FIELDS_FILTER`.\n\nHere is an example that uses\
      \ MongoDB's BasicDBObjectBuilder to simplify\nthe creation of DBObjects. It\
      \ retrieves all fields except `_id` and\n`boringField`:\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------\n\
      // route: from(\"direct:findAll\").to(\"mongodb:myDb?database=flights&collection=tickets&operation=findAll\"\
      )\nDBObject fieldFilter = BasicDBObjectBuilder.start().add(\"_id\", 0).add(\"\
      boringField\", 0).get();\nObject result = template.requestBodyAndHeader(\"direct:findAll\"\
      , (Object) null, MongoDbConstants.FIELDS_FILTER, fieldFilter);\n----------------------------------------------------------------------------------------------------------------------------\n\
      \nSpecifying a sort clause\n++++++++++++++++++++++++\n\nThere is a often a requirement\
      \ to fetch the min/max record from a \ncollection based on sorting by a particular\
      \ field. In Mongo the \noperation is performed using syntax similar to:\n\n\
      [source]\n----------------------------------------------------------------------------------------------------------------------------\n\
      db.collection.find().sort({_id: -1}).limit(1)\n// or\ndb.collection.findOne({$query:{},$orderby:{_id:-1}})\n\
      ----------------------------------------------------------------------------------------------------------------------------\n\
      \nIn a Camel route the SORT_BY header can be used with the findOneByQuery \n\
      operation to achieve the same result. If the FIELDS_FILTER header is also\n\
      specified the operation will return a single field/value pair \nthat can be\
      \ passed directly to another component (for example, a \nparameterized MyBatis\
      \ SELECT query). This example demonstrates fetching \nthe temporally newest\
      \ document from a collection and reducing the result \nto a single field, based\
      \ on the `documentTimestamp` field:\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------\n\
      .from(\"direct:someTriggeringEvent\")\n.setHeader(MongoDbConstants.SORT_BY).constant(\"\
      {\\\"documentTimestamp\\\": -1}\")\n.setHeader(MongoDbConstants.FIELDS_FILTER).constant(\"\
      {\\\"documentTimestamp\\\": 1}\")\n.setBody().constant(\"{}\")\n.to(\"mongodb:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery\"\
      )\n.to(\"direct:aMyBatisParameterizedSelect\")\n;\n----------------------------------------------------------------------------------------------------------------------------\n\
      \n\n[[MongoDB-Create/updateoperations]]\nCreate/update operations\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[MongoDB-insert]]\ninsert\n++++++\n\nInserts an new object into the MongoDB\
      \ collection, taken from the IN\nmessage body. Type conversion is attempted\
      \ to turn it into `DBObject` or\na `List`. +\n Two modes are supported: single\
      \ insert and multiple insert. For\nmultiple insert, the endpoint will expect\
      \ a List, Array or Collections\nof objects of any type, as long as they are\
      \ - or can be converted to -\n`DBObject`. All objects are inserted at once.\
      \ The endpoint will\nintelligently decide which backend operation to invoke\
      \ (single or\nmultiple insert) depending on the input.\n\nExample:\n\n[source,java]\n\
      -----------------------------------------------------------------------------\n\
      from(\"direct:insert\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=insert\"\
      );\n-----------------------------------------------------------------------------\n\
      \nThe operation will return a WriteResult, and depending on the\n`WriteConcern`\
      \ or the value of the `invokeGetLastError` option,\n`getLastError()` would have\
      \ been called already or not. If you want to\naccess the ultimate result of\
      \ the write operation, you need to retrieve\nthe `CommandResult` by calling\
      \ `getLastError()` or\n`getCachedLastError()` on the `WriteResult`. Then you\
      \ can verify the\nresult by calling `CommandResult.ok()`,\n`CommandResult.getErrorMessage()`\
      \ and/or `CommandResult.getException()`.\n\nNote that the new object's `_id`\
      \ must be unique in the collection. If\nyou don't specify the value, MongoDB\
      \ will automatically generate one for\nyou. But if you do specify it and it\
      \ is not unique, the insert operation\nwill fail (and for Camel to notice, you\
      \ will need to enable\ninvokeGetLastError or set a WriteConcern that waits for\
      \ the write\nresult).\n\nThis is not a limitation of the component, but it is\
      \ how things work in\nMongoDB for higher throughput. If you are using a custom\
      \ `_id`, you are\nexpected to ensure at the application level that is unique\
      \ (and this is\na good practice too).\n\nSince Camel *2.15*: OID(s) of the inserted\
      \ record(s) is stored in the\nmessage header under??`CamelMongoOid` key (`MongoDbConstants.OID`\n\
      constant). The value stored is??`org.bson.types.ObjectId` for single\ninsert\
      \ or `java.util.List<org.bson.types.ObjectId>` if multiple records\nhave been\
      \ inserted.\n\n[[MongoDB-save]]\nsave\n++++\n\nThe save operation is equivalent\
      \ to an _upsert_ (UPdate, inSERT)\noperation, where the record will be updated,\
      \ and if it doesn't exist, it\nwill be inserted, all in one atomic operation.\
      \ MongoDB will perform the\nmatching based on the _id field.\n\nBeware that\
      \ in case of an update, the object is replaced entirely and\nthe usage of\n\
      http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations[MongoDB's\n\
      $modifiers] is not permitted. Therefore, if you want to manipulate the\nobject\
      \ if it already exists, you have two options:\n\n1.  perform a query to retrieve\
      \ the entire object first along with all\nits fields (may not be efficient),\
      \ alter it inside Camel and then save\nit.\n2.  use the update operation with\n\
      http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations[$modifiers],\n\
      which will execute the update at the server-side instead. You can enable\nthe\
      \ upsert flag, in which case if an insert is required, MongoDB will\napply the\
      \ $modifiers to the filter query object and insert the result.\n\nFor example:\n\
      \n[source,java]\n---------------------------------------------------------------------------\n\
      from(\"direct:insert\")\n    .to(\"mongodb:myDb?database=flights&collection=tickets&operation=save\"\
      );\n---------------------------------------------------------------------------\n\
      \n[[MongoDB-update]]\nupdate\n++++++\n\nUpdate one or multiple records on the\
      \ collection. Requires a\nList<DBObject> as the IN message body containing exactly\
      \ 2 elements:\n\n* Element 1 (index 0) => filter query => determines what objects\
      \ will be\naffected, same as a typical query object\n* Element 2 (index 1) =>\
      \ update rules => how matched objects will be\nupdated. All\nhttp://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations[modifier\n\
      operations] from MongoDB are supported.\n\nNOTE: *Multiupdates* . By default,\
      \ MongoDB will only update 1 object even if multiple objects\nmatch the filter\
      \ query. To instruct MongoDB to update *all* matching\nrecords, set the `CamelMongoDbMultiUpdate`\
      \ IN message header to `true`.\n\nA header with key `CamelMongoDbRecordsAffected`\
      \ will be returned\n(`MongoDbConstants.RECORDS_AFFECTED` constant) with the\
      \ number of\nrecords updated (copied from `WriteResult.getN()`).\n\nSupports\
      \ the following IN message headers:\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Header key |Quick constant |Description (extracted from MongoDB API doc) |Expected\
      \ type\n\n|`CamelMongoDbMultiUpdate` |`MongoDbConstants.MULTIUPDATE` |If the\
      \ update should be applied to all objects matching. See\nhttp://www.mongodb.org/display/DOCS/Atomic+Operations[http://www.mongodb.org/display/DOCS/Atomic+Operations]\
      \ |boolean/Boolean\n\n|`CamelMongoDbUpsert` |`MongoDbConstants.UPSERT` |If the\
      \ database should create the element if it does not exist |boolean/Boolean\n\
      |=======================================================================\n\n\
      For example, the following will update *all* records whose filterField\nfield\
      \ equals true by setting the value of the \"scientist\" field to\n\"Darwin\"\
      :\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------------------------\n\
      // route: from(\"direct:update\").to(\"mongodb:myDb?database=science&collection=notableScientists&operation=update\"\
      );\nDBObject filterField = new BasicDBObject(\"filterField\", true);\nDBObject\
      \ updateObj = new BasicDBObject(\"$set\", new BasicDBObject(\"scientist\", \"\
      Darwin\"));\nObject result = template.requestBodyAndHeader(\"direct:update\"\
      , new Object[] {filterField, updateObj}, MongoDbConstants.MULTIUPDATE, true);\n\
      ------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-Deleteoperations]]\nDelete operations\n^^^^^^^^^^^^^^^^^\n\n[[MongoDB-remove]]\n\
      remove\n++++++\n\nRemove matching records from the collection. The IN message\
      \ body will\nact as the removal filter query, and is expected to be of type\n\
      `DBObject` or a type convertible to it. +\n The following example will remove\
      \ all objects whose field\n'conditionField' equals true, in the science database,\
      \ notableScientists\ncollection:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------\n\
      // route: from(\"direct:remove\").to(\"mongodb:myDb?database=science&collection=notableScientists&operation=remove\"\
      );\nDBObject conditionField = new BasicDBObject(\"conditionField\", true);\n\
      Object result = template.requestBody(\"direct:remove\", conditionField);\n------------------------------------------------------------------------------------------------------------------\n\
      \nA header with key `CamelMongoDbRecordsAffected` is returned\n(`MongoDbConstants.RECORDS_AFFECTED`\
      \ constant) with type `int`,\ncontaining the number of records deleted (copied\
      \ from\n`WriteResult.getN()`).\n\n[[MongoDB-Otheroperations]]\nOther operations\n\
      ^^^^^^^^^^^^^^^^\n\n[[MongoDB-aggregate]]\naggregate\n+++++++++\n\n*Available\
      \ as of Camel 2.14*\n\nPerform a aggregation with the given pipeline contained\
      \ in the\nbody.??*Aggregations could be long and heavy operations. Use with\
      \ care.*\n\n??\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      // route: from(\"direct:aggregate\").to(\"mongodb:myDb?database=science&collection=notableScientists&operation=aggregate\"\
      );\nfrom(\"direct:aggregate\")\n    .setBody().constant(\"[{ $match : {$or :\
      \ [{\\\"scientist\\\" : \\\"Darwin\\\"},{\\\"scientist\\\" : \\\"Einstein\\\"\
      }]}},{ $group: { _id: \\\"$scientist\\\", count: { $sum: 1 }} } ]\")\n    .to(\"\
      mongodb:myDb?database=science&collection=notableScientists&operation=aggregate\"\
      )\n    .to(\"mock:resultAggregate\");\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-getDbStats]]\ngetDbStats\n++++++++++\n\nEquivalent of running the\
      \ `db.stats()` command in the MongoDB shell,\nwhich displays useful statistic\
      \ figures about the database. +\n For example:\n\n[source,java]\n-------------------------------------\n\
      > db.stats();\n{\n    \"db\" : \"test\",\n    \"collections\" : 7,\n    \"objects\"\
      \ : 719,\n    \"avgObjSize\" : 59.73296244784423,\n    \"dataSize\" : 42948,\n\
      \    \"storageSize\" : 1000058880,\n    \"numExtents\" : 9,\n    \"indexes\"\
      \ : 4,\n    \"indexSize\" : 32704,\n    \"fileSize\" : 1275068416,\n    \"nsSizeMB\"\
      \ : 16,\n    \"ok\" : 1\n}\n-------------------------------------\n\nUsage example:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------------------------\n\
      // from(\"direct:getDbStats\").to(\"mongodb:myDb?database=flights&collection=tickets&operation=getDbStats\"\
      );\nObject result = template.requestBody(\"direct:getDbStats\", \"irrelevantBody\"\
      );\nassertTrue(\"Result is not of type DBObject\", result instanceof DBObject);\n\
      ---------------------------------------------------------------------------------------------------------\n\
      \nThe operation will return a data structure similar to the one displayed\n\
      in the shell, in the form of a `DBObject` in the OUT message body.\n\n[[MongoDB-getColStats]]\n\
      getColStats\n+++++++++++\n\nEquivalent of running the `db.collection.stats()`\
      \ command in the MongoDB\nshell, which displays useful statistic figures about\
      \ the collection. +\n For example:\n\n[source,java]\n-----------------------------\n\
      > db.camelTest.stats();\n{\n    \"ns\" : \"test.camelTest\",\n    \"count\"\
      \ : 100,\n    \"size\" : 5792,\n    \"avgObjSize\" : 57.92,\n    \"storageSize\"\
      \ : 20480,\n    \"numExtents\" : 2,\n    \"nindexes\" : 1,\n    \"lastExtentSize\"\
      \ : 16384,\n    \"paddingFactor\" : 1,\n    \"flags\" : 1,\n    \"totalIndexSize\"\
      \ : 8176,\n    \"indexSizes\" : {\n        \"_id_\" : 8176\n    },\n    \"ok\"\
      \ : 1\n}\n-----------------------------\n\nUsage example:\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------------------------\n\
      // from(\"direct:getColStats\").to(\"mongodb:myDb?database=flights&collection=tickets&operation=getColStats\"\
      );\nObject result = template.requestBody(\"direct:getColStats\", \"irrelevantBody\"\
      );\nassertTrue(\"Result is not of type DBObject\", result instanceof DBObject);\n\
      -----------------------------------------------------------------------------------------------------------\n\
      \nThe operation will return a data structure similar to the one displayed\n\
      in the shell, in the form of a `DBObject` in the OUT message body.\n\n[[MongoDB-command]]\n\
      command\n+++++++\n\n*Available as of Camel 2.15*\n\nRun the body as a command\
      \ on database. Usefull for admin operation as\ngetting host informations, replication\
      \ or sharding status.\n\nCollection parameter is not use for this operation.\n\
      \n[source,java]\n--------------------------------------------------------------------------------\n\
      // route: from(\"command\").to(\"mongodb:myDb?database=science&operation=command\"\
      );\nDBObject commandBody = new BasicDBObject(\"hostInfo\", \"1\");\nObject result\
      \ = template.requestBody(\"direct:command\", commandBody);\n--------------------------------------------------------------------------------\n\
      \n[[MongoDB-Dynamicoperations]]\nDynamic operations\n^^^^^^^^^^^^^^^^^^\n\n\
      An Exchange can override the endpoint's fixed operation by setting the\n`CamelMongoDbOperation`\
      \ header, defined by the\n`MongoDbConstants.OPERATION_HEADER` constant. +\n\
      \ The values supported are determined by the MongoDbOperation enumeration\n\
      and match the accepted values for the `operation` parameter on the\nendpoint\
      \ URI.\n\nFor example:\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------\n\
      // from(\"direct:insert\").to(\"mongodb:myDb?database=flights&collection=tickets&operation=insert\"\
      );\nObject result = template.requestBodyAndHeader(\"direct:insert\", \"irrelevantBody\"\
      , MongoDbConstants.OPERATION_HEADER, \"count\");\nassertTrue(\"Result is not\
      \ of type Long\", result instanceof Long);\n-----------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-TailableCursorConsumer]]\nTailable Cursor Consumer\n~~~~~~~~~~~~~~~~~~~~~~~~\n\
      \nMongoDB offers a mechanism to instantaneously consume ongoing data from\n\
      a collection, by keeping the cursor open just like the `tail -f` command\nof\
      \ *nix systems. This mechanism is significantly more efficient than a\nscheduled\
      \ poll, due to the fact that the server pushes new data to the\nclient as it\
      \ becomes available, rather than making the client ping back\nat scheduled intervals\
      \ to fetch new data. It also reduces otherwise\nredundant network traffic.\n\
      \nThere is only one requisite to use tailable cursors: the collection must\n\
      be a \"capped collection\", meaning that it will only hold N objects, and\n\
      when the limit is reached, MongoDB flushes old objects in the same order\nthey\
      \ were originally inserted. For more information, please refer to:\nhttp://www.mongodb.org/display/DOCS/Tailable+Cursors[http://www.mongodb.org/display/DOCS/Tailable+Cursors].\n\
      \nThe Camel MongoDB component implements a tailable cursor consumer,\nmaking\
      \ this feature available for you to use in your Camel routes. As\nnew objects\
      \ are inserted, MongoDB will push them as DBObjects in natural\norder to your\
      \ tailable cursor consumer, who will transform them to an\nExchange and will\
      \ trigger your route logic.\n\n[[MongoDB-Howthetailablecursorconsumerworks]]\n\
      How the tailable cursor consumer works\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nTo turn a cursor into a tailable cursor, a few special flags are to be\nsignalled\
      \ to MongoDB when first generating the cursor. Once created, the\ncursor will\
      \ then stay open and will block upon calling the\n`DBCursor.next()` method until\
      \ new data arrives. However, the MongoDB\nserver reserves itself the right to\
      \ kill your cursor if new data doesn't\nappear after an indeterminate period.\
      \ If you are interested to continue\nconsuming new data, you have to regenerate\
      \ the cursor. And to do so, you\nwill have to remember the position where you\
      \ left off or else you will\nstart consuming from the top again.\n\nThe Camel\
      \ MongoDB tailable cursor consumer takes care of all these tasks\nfor you. You\
      \ will just need to provide the key to some field in your\ndata of increasing\
      \ nature, which will act as a marker to position your\ncursor every time it\
      \ is regenerated, e.g. a timestamp, a sequential ID,\netc. It can be of any\
      \ datatype supported by MongoDB. Date, Strings and\nIntegers are found to work\
      \ well. We call this mechanism \"tail tracking\"\nin the context of this component.\n\
      \nThe consumer will remember the last value of this field and whenever the\n\
      cursor is to be regenerated, it will run the query with a filter like:\n`increasingField\
      \ > lastValue`, so that only unread data is consumed.\n\n*Setting the increasing\
      \ field:* Set the key of the increasing field on\nthe endpoint URI `tailTrackingIncreasingField`\
      \ option. In Camel 2.10, it\nmust be a top-level field in your data, as nested\
      \ navigation for this\nfield is not yet supported. That is, the \"timestamp\"\
      \ field is okay, but\n\"nested.timestamp\" will not work. Please open a ticket\
      \ in the Camel JIRA\nif you do require support for nested increasing fields.\n\
      \n*Cursor regeneration delay:* One thing to note is that if new data is\nnot\
      \ already available upon initialisation, MongoDB will kill the cursor\ninstantly.\
      \ Since we don't want to overwhelm the server in this case, a\n`cursorRegenerationDelay`\
      \ option has been introduced (with a default\nvalue of 1000ms.), which you can\
      \ modify to suit your needs.\n\nAn example:\n\n[source,java]\n-----------------------------------------------------------------------------------------------------\n\
      from(\"mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime\"\
      )\n    .id(\"tailableCursorConsumer1\")\n    .autoStartup(false)\n    .to(\"\
      mock:test\");\n-----------------------------------------------------------------------------------------------------\n\
      \nThe above route will consume from the \"flights.cancellations\" capped\ncollection,\
      \ using \"departureTime\" as the increasing field, with a\ndefault regeneration\
      \ cursor delay of 1000ms.\n\n[[MongoDB-Persistenttailtracking]]\nPersistent\
      \ tail tracking\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nStandard tail tracking is volatile\
      \ and the last value is only kept in\nmemory. However, in practice you will\
      \ need to restart your Camel\ncontainer every now and then, but your last value\
      \ would then be lost and\nyour tailable cursor consumer would start consuming\
      \ from the top again,\nvery likely sending duplicate records into your route.\n\
      \nTo overcome this situation, you can enable the *persistent tail\ntracking*\
      \ feature to keep track of the last consumed increasing value in\na special\
      \ collection inside your MongoDB database too. When the consumer\ninitialises\
      \ again, it will restore the last tracked value and continue\nas if nothing\
      \ happened.\n\nThe last read value is persisted on two occasions: every time\
      \ the cursor\nis regenerated and when the consumer shuts down. We may consider\n\
      persisting at regular intervals too in the future (flush every 5\nseconds) for\
      \ added robustness if the demand is there. To request this\nfeature, please\
      \ open a ticket in the Camel JIRA.\n\n[[MongoDB-Enablingpersistenttailtracking]]\n\
      Enabling persistent tail tracking\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nTo enable\
      \ this function, set at least the following options on the\nendpoint URI:\n\n\
      * `persistentTailTracking` option to `true`\n* `persistentId` option to a unique\
      \ identifier for this consumer, so\nthat the same collection can be reused across\
      \ many consumers\n\nAdditionally, you can set the `tailTrackDb`, `tailTrackCollection`\
      \ and\n`tailTrackField` options to customise where the runtime information will\n\
      be stored. Refer to the endpoint options table at the top of this page\nfor\
      \ descriptions of each option.\n\nFor example, the following route will consume\
      \ from the\n\"flights.cancellations\" capped collection, using \"departureTime\"\
      \ as the\nincreasing field, with a default regeneration cursor delay of 1000ms,\n\
      with persistent tail tracking turned on, and persisting under the\n\"cancellationsTracker\"\
      \ id on the \"flights.camelTailTracking\", storing\nthe last processed value\
      \ under the \"lastTrackingValue\" field\n(`camelTailTracking` and `lastTrackingValue`\
      \ are defaults).\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------------\n\
      from(\"mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true\"\
      \ + \n     \"&persistentId=cancellationsTracker\")\n    .id(\"tailableCursorConsumer2\"\
      )\n    .autoStartup(false)\n    .to(\"mock:test\");\n-----------------------------------------------------------------------------------------------------------------------------------\n\
      \nBelow is another example identical to the one above, but where the\npersistent\
      \ tail tracking runtime information will be stored under the\n\"trackers.camelTrackers\"\
      \ collection, in the \"lastProcessedDepartureTime\"\nfield:\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------------------------------------------------\n\
      from(\"mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true\"\
      \ + \n     \"&persistentId=cancellationsTracker&tailTrackDb=trackers&tailTrackCollection=camelTrackers\"\
      \ + \n     \"&tailTrackField=lastProcessedDepartureTime\")\n    .id(\"tailableCursorConsumer3\"\
      )\n    .autoStartup(false)\n    .to(\"mock:test\");\n-----------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[MongoDB-Typeconversions]]\nType conversions\n~~~~~~~~~~~~~~~~\n\nThe `MongoDbBasicConverters`\
      \ type converter included with the\ncamel-mongodb component provides the following\
      \ conversions:\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\"\
      ,]\n|=======================================================================\n\
      |Name |From type |To type |How?\n\n|fromMapToDBObject |`Map` |`DBObject` |constructs\
      \ a new `BasicDBObject` via the `new BasicDBObject(Map m)`\nconstructor\n\n\
      |fromBasicDBObjectToMap |`BasicDBObject` |`Map` |`BasicDBObject` already implements\
      \ `Map`\n\n|fromStringToDBObject |`String` |`DBObject` |uses `com.mongodb.util.JSON.parse(String\
      \ s)`\n\n|fromAnyObjectToDBObject |`Object`?? |`DBObject` |uses the http://jackson.codehaus.org/[Jackson\
      \ library] to convert the\nobject to a `Map`, which is in turn used to initialise\
      \ a new\n`BasicDBObject`\n|=======================================================================\n\
      \nThis type converter is auto-discovered, so you don't need to configure\nanything\
      \ manually.\n\n[[MongoDB-Seealso]]\nSee also\n~~~~~~~~\n\n* http://www.mongodb.org/[MongoDB\
      \ website]\n* http://en.wikipedia.org/wiki/NoSQL[NoSQL Wikipedia article]\n\
      * http://api.mongodb.org/java/current/[MongoDB Java driver API docs -\ncurrent\
      \ version]\n*\nhttp://svn.apache.org/viewvc/camel/trunk/components/camel-mongodb/src/test/[Unit\n\
      tests] for more examples of usage\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mqtt
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mqtt
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mqtt
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mqtt
          spec:
            containers:
            - image: fabric8/connector-mqtt:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mqtt
        syntax: mqtt:name
        title: MQTT
        description: Component for communicating with MQTT M2M message brokers using FuseSource MQTT Client.
        label: messaging,iot
        deprecated: false
        async: true
        javaType: org.apache.camel.component.mqtt.MQTTComponent
        groupId: org.apache.camel
        artifactId: camel-mqtt
        version: 2.18.1
      componentProperties:
        host:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URI of the MQTT broker to connect too - this component also supports SSL - e.g. ssl://127.0.0.1:8883
        userName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username to be used for authentication against the MQTT broker
        password:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password to be used for authentication against the MQTT broker
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A logical name to use which is not the topic name.
        blockingExecutor:
          kind: parameter
          group: common
          type: object
          javaType: java.util.concurrent.Executor
          deprecated: false
          secret: false
          description: SSL connections perform blocking operations against internal thread pool unless you call the setBlockingExecutor method to configure that executor they will use instead.
        byDefaultRetain:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: The default retain policy to be used on messages sent to the MQTT broker
        cleanSession:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set to false if you want the MQTT server to persist topic subscriptions and ack positions across client sessions. Defaults to true.
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Use to set the client Id of the session. This is what an MQTT server uses to identify a session where setCleanSession(false); is being used. The id must be 23 characters or less. Defaults to auto generated id (based on your socket address port and timestamp).
        connectAttemptsMax:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: -1
          description: The maximum number of reconnect attempts before an error is reported back to the client on the first attempt by the client to connect to a server. Set to -1 to use unlimited attempts. Defaults to -1.
        connectWaitInSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Delay in seconds the Component will wait for a connection to be established to the MQTT broker
        disconnectWaitInSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5"
          description: The number of seconds the Component will wait for a valid disconnect on stop() from the MQTT broker
        dispatchQueue:
          kind: parameter
          group: common
          type: object
          javaType: org.fusesource.hawtdispatch.DispatchQueue
          deprecated: false
          secret: false
          description: A HawtDispatch dispatch queue is used to synchronize access to the connection. If an explicit queue is not configured via the setDispatchQueue method then a new queue will be created for the connection. Setting an explicit queue might be handy if you want multiple connection to share the same queue for synchronization.
        host:
          kind: parameter
          group: common
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          defaultValue: tcp://127.0.0.1:1883
          description: The URI of the MQTT broker to connect too - this component also supports SSL - e.g. ssl://127.0.0.1:8883
        keepAlive:
          kind: parameter
          group: common
          type: integer
          javaType: short
          deprecated: false
          secret: false
          description: Configures the Keep Alive timer in seconds. Defines the maximum time interval between messages received from a client. It enables the server to detect that the network connection to a client has dropped without having to wait for the long TCP/IP timeout.
        localAddress:
          kind: parameter
          group: common
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The local InetAddress and port to use
        maxReadRate:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the maximum bytes per second that this transport will receive data at. This setting throttles reads so that the rate is not exceeded. Defaults to 0 which disables throttling.
        maxWriteRate:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the maximum bytes per second that this transport will send data at. This setting throttles writes so that the rate is not exceeded. Defaults to 0 which disables throttling.
        mqttQosPropertyName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: MQTTQos
          description: The property name to look for on an Exchange for an individual published message. If this is set (one of AtMostOnce AtLeastOnce or ExactlyOnce ) - then that QoS will be set on the message sent to the MQTT message broker.
        mqttRetainPropertyName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: MQTTRetain
          description: The property name to look for on an Exchange for an individual published message. If this is set (expects a Boolean value) - then the retain property will be set on the message sent to the MQTT message broker.
        mqttTopicPropertyName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: MQTTTopicPropertyName
          description: These a properties that are looked for in an Exchange - to publish to
        publishTopicName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel/mqtt/test
          description: The default Topic to publish messages on
        qualityOfService:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - AtMostOnce
          - AtLeastOne
          - ExactlyOnce
          deprecated: false
          secret: false
          defaultValue: AtLeastOnce
          description: Quality of service level to use for topics.
        receiveBufferSize:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: Sets the size of the internal socket receive buffer. Defaults to 65536 (64k)
        reconnectAttemptsMax:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: -1
          description: The maximum number of reconnect attempts before an error is reported back to the client after a server connection had previously been established. Set to -1 to use unlimited attempts. Defaults to -1.
        reconnectBackOffMultiplier:
          kind: parameter
          group: common
          type: number
          javaType: double
          deprecated: false
          secret: false
          defaultValue: "2.0"
          description: The Exponential backoff be used between reconnect attempts. Set to 1 to disable exponential backoff. Defaults to 2.
        reconnectDelay:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10"
          description: How long to wait in ms before the first reconnect attempt. Defaults to 10.
        reconnectDelayMax:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The maximum amount of time in ms to wait between reconnect attempts. Defaults to 30000.
        sendBufferSize:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: Sets the size of the internal socket send buffer. Defaults to 65536 (64k)
        sendWaitInSeconds:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5"
          description: The maximum time the Component will wait for a receipt from the MQTT broker to acknowledge a published message before throwing an exception
        sslContext:
          kind: parameter
          group: common
          type: object
          javaType: javax.net.ssl.SSLContext
          deprecated: false
          secret: false
          description: To configure security using SSLContext configuration
        subscribeTopicName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: These are set on the Endpoint - together with properties inherited from MQTT
        subscribeTopicNames:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A comma-delimited list of Topics to subscribe to for messages. Note that each item of this list can contain MQTT wildcards ( and/or ) in order to subscribe to topics matching a certain pattern within a hierarchy. For example is a wildcard for all topics at a level within the hierarchy so if a broker has topics topics/one and topics/two then topics/ can be used to subscribe to both. A caveat to consider here is that if the broker adds topics/three the route would also begin to receive messages from that topic.
        trafficClass:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8"
          description: Sets traffic class or type-of-service octet in the IP header for packets sent from the transport. Defaults to 8 which means the traffic should be optimized for throughput.
        version:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "3.1"
          description: Set to 3.1.1 to use MQTT version 3.1.1. Otherwise defaults to the 3.1 protocol version.
        willMessage:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Will message to send. Defaults to a zero length message.
        willQos:
          kind: parameter
          group: common
          type: string
          javaType: org.fusesource.mqtt.client.QoS
          enum:
          - AtMostOnce
          - AtLeastOne
          - ExactlyOnce
          deprecated: false
          secret: false
          defaultValue: AtMostOnce
          description: Sets the quality of service to use for the Will message. Defaults to AT_MOST_ONCE.
        willRetain:
          kind: parameter
          group: common
          type: string
          javaType: org.fusesource.mqtt.client.QoS
          enum:
          - AT_MOST_ONCE
          - AT_LEAST_ONCE
          - EXACTLY_ONCE
          deprecated: false
          secret: false
          description: Set to true if you want the Will to be published with the retain option.
        willTopic:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If set the server will publish the client's Will message to the specified topics if the client has an unexpected disconnection.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[MQTT-MQTTComponent]]
      MQTT Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.10*

      The *mqtt:* component is used for communicating with
      http://mqtt.org[MQTT] compliant message brokers, like
      http://activemq.apache.org[Apache ActiveMQ] or
      http://mosquitto.org[Mosquitto]

      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-mqtt</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[MQTT-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------
      mqtt://name[?options]
      ---------------------

      Where *name* is the name you want to assign the component.

      [[MQTT-Options]]
      Options
      ^^^^^^^




      // component options: START
      The MQTT component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | host | String | The URI of the MQTT broker to connect too - this component also supports SSL - e.g. ssl://127.0.0.1:8883
      | userName | String | Username to be used for authentication against the MQTT broker
      | password | String | Password to be used for authentication against the MQTT broker
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The MQTT component supports 39 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* A logical name to use which is not the topic name.
      | blockingExecutor | common |  | Executor | SSL connections perform blocking operations against internal thread pool unless you call the setBlockingExecutor method to configure that executor they will use instead.
      | byDefaultRetain | common | false | boolean | The default retain policy to be used on messages sent to the MQTT broker
      | cleanSession | common | false | boolean | Set to false if you want the MQTT server to persist topic subscriptions and ack positions across client sessions. Defaults to true.
      | clientId | common |  | String | Use to set the client Id of the session. This is what an MQTT server uses to identify a session where setCleanSession(false); is being used. The id must be 23 characters or less. Defaults to auto generated id (based on your socket address port and timestamp).
      | connectAttemptsMax | common | -1 | long | The maximum number of reconnect attempts before an error is reported back to the client on the first attempt by the client to connect to a server. Set to -1 to use unlimited attempts. Defaults to -1.
      | connectWaitInSeconds | common | 10 | int | Delay in seconds the Component will wait for a connection to be established to the MQTT broker
      | disconnectWaitInSeconds | common | 5 | int | The number of seconds the Component will wait for a valid disconnect on stop() from the MQTT broker
      | dispatchQueue | common |  | DispatchQueue | A HawtDispatch dispatch queue is used to synchronize access to the connection. If an explicit queue is not configured via the setDispatchQueue method then a new queue will be created for the connection. Setting an explicit queue might be handy if you want multiple connection to share the same queue for synchronization.
      | host | common | tcp://127.0.0.1:1883 | URI | The URI of the MQTT broker to connect too - this component also supports SSL - e.g. ssl://127.0.0.1:8883
      | keepAlive | common |  | short | Configures the Keep Alive timer in seconds. Defines the maximum time interval between messages received from a client. It enables the server to detect that the network connection to a client has dropped without having to wait for the long TCP/IP timeout.
      | localAddress | common |  | URI | The local InetAddress and port to use
      | maxReadRate | common |  | int | Sets the maximum bytes per second that this transport will receive data at. This setting throttles reads so that the rate is not exceeded. Defaults to 0 which disables throttling.
      | maxWriteRate | common |  | int | Sets the maximum bytes per second that this transport will send data at. This setting throttles writes so that the rate is not exceeded. Defaults to 0 which disables throttling.
      | mqttQosPropertyName | common | MQTTQos | String | The property name to look for on an Exchange for an individual published message. If this is set (one of AtMostOnce AtLeastOnce or ExactlyOnce ) - then that QoS will be set on the message sent to the MQTT message broker.
      | mqttRetainPropertyName | common | MQTTRetain | String | The property name to look for on an Exchange for an individual published message. If this is set (expects a Boolean value) - then the retain property will be set on the message sent to the MQTT message broker.
      | mqttTopicPropertyName | common | MQTTTopicPropertyName | String | These a properties that are looked for in an Exchange - to publish to
      | publishTopicName | common | camel/mqtt/test | String | The default Topic to publish messages on
      | qualityOfService | common | AtLeastOnce | String | Quality of service level to use for topics.
      | receiveBufferSize | common | 65536 | int | Sets the size of the internal socket receive buffer. Defaults to 65536 (64k)
      | reconnectAttemptsMax | common | -1 | long | The maximum number of reconnect attempts before an error is reported back to the client after a server connection had previously been established. Set to -1 to use unlimited attempts. Defaults to -1.
      | reconnectBackOffMultiplier | common | 2.0 | double | The Exponential backoff be used between reconnect attempts. Set to 1 to disable exponential backoff. Defaults to 2.
      | reconnectDelay | common | 10 | long | How long to wait in ms before the first reconnect attempt. Defaults to 10.
      | reconnectDelayMax | common | 30000 | long | The maximum amount of time in ms to wait between reconnect attempts. Defaults to 30000.
      | sendBufferSize | common | 65536 | int | Sets the size of the internal socket send buffer. Defaults to 65536 (64k)
      | sendWaitInSeconds | common | 5 | int | The maximum time the Component will wait for a receipt from the MQTT broker to acknowledge a published message before throwing an exception
      | sslContext | common |  | SSLContext | To configure security using SSLContext configuration
      | subscribeTopicName | common |  | String | These are set on the Endpoint - together with properties inherited from MQTT
      | subscribeTopicNames | common |  | String | A comma-delimited list of Topics to subscribe to for messages. Note that each item of this list can contain MQTT wildcards ( and/or ) in order to subscribe to topics matching a certain pattern within a hierarchy. For example is a wildcard for all topics at a level within the hierarchy so if a broker has topics topics/one and topics/two then topics/ can be used to subscribe to both. A caveat to consider here is that if the broker adds topics/three the route would also begin to receive messages from that topic.
      | trafficClass | common | 8 | int | Sets traffic class or type-of-service octet in the IP header for packets sent from the transport. Defaults to 8 which means the traffic should be optimized for throughput.
      | version | common | 3.1 | String | Set to 3.1.1 to use MQTT version 3.1.1. Otherwise defaults to the 3.1 protocol version.
      | willMessage | common |  | String | The Will message to send. Defaults to a zero length message.
      | willQos | common | AtMostOnce | QoS | Sets the quality of service to use for the Will message. Defaults to AT_MOST_ONCE.
      | willRetain | common |  | QoS | Set to true if you want the Will to be published with the retain option.
      | willTopic | common |  | String | If set the server will publish the client's Will message to the specified topics if the client has an unexpected disconnection.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[MQTT-Samples]]
      Samples
      ^^^^^^^

      Sending messages:

      [source,java]
      ----------------------------------------------------------------------
      from("direct:foo").to("mqtt:cheese?publishTopicName=test.mqtt.topic");
      ----------------------------------------------------------------------

      Consuming messages:

      [source,java]
      ---------------------------------------------------------------------------------------------------------
      from("mqtt:bar?subscribeTopicName=test.mqtt.topic").transform(body().convertToString()).to("mock:result")
      ---------------------------------------------------------------------------------------------------------

      [[MQTT-Endpoints]]
      Endpoints
      ~~~~~~~~~

      Camel supports the link:message-endpoint.html[Message Endpoint] pattern
      using the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html[Endpoint]
      interface. Endpoints are usually created by a
      link:component.html[Component] and Endpoints are usually referred to in
      the link:dsl.html[DSL] via their link:uris.html[URIs].

      From an Endpoint you can use the following methods

      * http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createProducer()[createProducer()]
      will create a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Producer.html[Producer]
      for sending message exchanges to the endpoint
      * http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createConsumer(org.apache.camel.Processor)[createConsumer()]
      implements the link:event-driven-consumer.html[Event Driven Consumer]
      pattern for consuming message exchanges from the endpoint via a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
      when creating a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Consumer.html[Consumer]
      * http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createPollingConsumer()[createPollingConsumer()]
      implements the link:polling-consumer.html[Polling Consumer] pattern for
      consuming message exchanges from the endpoint via a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/PollingConsumer.html[PollingConsumer]

      [[MQTT-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:message-endpoint.html[Message Endpoint] pattern
      * link:uris.html[URIs]
      * link:writing-components.html[Writing Components]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-msv
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: msv
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: msv
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: msv
          spec:
            containers:
            - image: fabric8/connector-msv:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: msv
        syntax: msv:resourceUri
        title: MSV
        description: Validates the payload of a message using the MSV Library.
        label: validation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.validator.msv.MsvComponent
        groupId: org.apache.camel
        artifactId: camel-msv
        version: 2.18.1
      componentProperties:
        schemaFactory:
          kind: property
          type: object
          javaType: javax.xml.validation.SchemaFactory
          deprecated: false
          secret: false
          description: To use the javax.xml.validation.SchemaFactory.
        resourceResolverFactory:
          kind: property
          label: advanced
          required: false
          type: object
          javaType: org.apache.camel.component.validator.ValidatorResourceResolverFactory
          deprecated: false
          secret: false
          description: To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: URL to a local resource on the classpath or a reference to lookup a bean in the Registry or a full URL to a remote resource or resource on the file system which contains the XSD to validate against.
        failOnNullBody:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to fail if no body exists.
        failOnNullHeader:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to fail if no header exists when validating against a header.
        headerName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To validate against a header instead of the message body.
        errorHandler:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.processor.validation.ValidatorErrorHandler
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception.
        resourceResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.w3c.dom.ls.LSResourceResolver
          deprecated: false
          secret: false
          description: To use a custom LSResourceResolver. Do not use together with resourceResolverFactory
        resourceResolverFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.validator.ValidatorResourceResolverFactory
          deprecated: false
          secret: false
          description: To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI. The default resource resolver factory resturns a resource resolver which can read files from the class path and file system. Do not use together with resourceResolver.
        schemaFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.validation.SchemaFactory
          deprecated: false
          secret: false
          description: To use a custom javax.xml.validation.SchemaFactory
        schemaLanguage:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: http://www.w3.org/2001/XMLSchema
          description: Configures the W3C XML Schema Namespace URI.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useDom:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether DOMSource/DOMResult or SaxSource/SaxResult should be used by the validator.
        useSharedSchema:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the Schema instance should be shared or not. This option is introduced to work around a JDK 1.6.x bug. Xerces should not have this issue.
    documentation.adoc: |+
      [[MSV-MSVComponent]]
      MSV Component
      ~~~~~~~~~~~~~

      The MSV component performs XML validation of the message body using the
      https://msv.dev.java.net/[MSV Library] and any of the supported XML
      schema languages, such as http://www.w3.org/XML/Schema[XML Schema] or
      http://relaxng.org/[RelaxNG XML Syntax].

      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-msv</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      Note that the link:jing.html[Jing] component also supports
      http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
      Syntax]

      [[MSV-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------
      msv:someLocalOrRemoteResource[?options]
      ---------------------------------------

      Where *someLocalOrRemoteResource* is some URL to a local resource on the
      classpath or a full URL to a remote resource or resource on the file
      system. For example

      [source,java]
      ------------------------------
      msv:org/foo/bar.rng
      msv:file:../foo/bar.rng
      msv:http://acme.com/cheese.rng
      ------------------------------

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

      [[MSV-Options]]
      Options
      ^^^^^^^




      // component options: START
      The MSV component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | schemaFactory | SchemaFactory | To use the javax.xml.validation.SchemaFactory.
      | resourceResolverFactory | ValidatorResourceResolverFactory | To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The MSV component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* URL to a local resource on the classpath or a reference to lookup a bean in the Registry or a full URL to a remote resource or resource on the file system which contains the XSD to validate against.
      | failOnNullBody | producer | true | boolean | Whether to fail if no body exists.
      | failOnNullHeader | producer | true | boolean | Whether to fail if no header exists when validating against a header.
      | headerName | producer |  | String | To validate against a header instead of the message body.
      | errorHandler | advanced |  | ValidatorErrorHandler | To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception.
      | resourceResolver | advanced |  | LSResourceResolver | To use a custom LSResourceResolver. Do not use together with resourceResolverFactory
      | resourceResolverFactory | advanced |  | ValidatorResourceResolverFactory | To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI. The default resource resolver factory resturns a resource resolver which can read files from the class path and file system. Do not use together with resourceResolver.
      | schemaFactory | advanced |  | SchemaFactory | To use a custom javax.xml.validation.SchemaFactory
      | schemaLanguage | advanced | http://www.w3.org/2001/XMLSchema | String | Configures the W3C XML Schema Namespace URI.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useDom | advanced | false | boolean | Whether DOMSource/DOMResult or SaxSource/SaxResult should be used by the validator.
      | useSharedSchema | advanced | true | boolean | Whether the Schema instance should be shared or not. This option is introduced to work around a JDK 1.6.x bug. Xerces should not have this issue.
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[MSV-Example]]
      Example
      ^^^^^^^

      The following
      http://svn.apache.org/repos/asf/camel/trunk/components/camel-msv/src/test/resources/org/apache/camel/component/validator/msv/camelContext.xml[example]
      shows how to configure a route from endpoint *direct:start* which then
      goes to one of two endpoints, either *mock:valid* or *mock:invalid*
      based on whether or not the XML matches the given
      http://relaxng.org/[RelaxNG XML Schema] (which is supplied on the
      classpath).

      [[MSV-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mustache
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mustache
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mustache
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mustache
          spec:
            containers:
            - image: fabric8/connector-mustache:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mustache
        syntax: mustache:resourceUri
        title: Mustache
        description: Transforms the message using a Mustache template.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.mustache.MustacheComponent
        groupId: org.apache.camel
        artifactId: camel-mustache
        version: 2.18.1
      componentProperties:
        mustacheFactory:
          kind: property
          type: object
          javaType: com.github.mustachejava.MustacheFactory
          deprecated: false
          secret: false
          description: To use a custom MustacheFactory
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        encoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Character encoding of the resource content.
        endDelimiter:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '}}'
          description: Characters used to mark template code end.
        startDelimiter:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '{{'
          description: Characters used to mark template code beginning.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Mustache-Mustache]]\nMustache\n~~~~~~~~\n\n*Available as\
      \ of Camel 2.12*\n\nThe *mustache:* component allows for processing a message\
      \ using a\nhttp://mustache.github.io/[Mustache] template. This can be ideal\
      \ when\nusing link:templating.html[Templating] to generate responses for\nrequests.\n\
      \nMaven users will need to add the following dependency to their `pom.xml`\n\
      for this component:\n\n[source,xml]\n---------------------------------------------------------------------------------\n\
      <dependency>\n<groupId>org.apache.camel</groupId>\n<artifactId>camel-mustache</artifactId>\n\
      <version>x.x.x</version> <!-- use the same version as your Camel core version\
      \ -->\n</dependency>\n---------------------------------------------------------------------------------\n\
      \n[[Mustache-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------\n\
      mustache:templateName[?options]\n-------------------------------\n\nWhere *templateName*\
      \ is the classpath-local URI of the template to\ninvoke; or the complete URL\
      \ of the remote template (eg:\nfile://folder/myfile.mustache[file://folder/myfile.mustache]).\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[Mustache-Options]]\nOptions\n^^^^^^^\n\n\n{% raw %}\n\n\n// component options:\
      \ START\nThe Mustache component supports 1 options which are listed below.\n\
      \n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| mustacheFactory | MustacheFactory | To use\
      \ a custom MustacheFactory\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Mustache component supports 6 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| resourceUri | producer\
      \ |  | String | *Required* Path to the resource or a reference to lookup a bean\
      \ in the Registry to use as the resource\n| contentCache | producer | false\
      \ | boolean | Sets whether to use resource content cache or not\n| encoding\
      \ | producer |  | String | Character encoding of the resource content.\n| endDelimiter\
      \ | producer | }} | String | Characters used to mark template code end.\n| startDelimiter\
      \ | producer | {{ | String | Characters used to mark template code beginning.\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n{% endraw %}\n\n\n[[Mustache-MustacheContext]]\n\
      Mustache Context\n^^^^^^^^^^^^^^^^\n\nCamel will provide exchange information\
      \ in the Mustache context (just a\n`Map`). The `Exchange` is transferred as:\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |key |value\n\n|`exchange` |The `Exchange` itself.\n\n|`exchange.properties`\
      \ |The `Exchange` properties.\n\n|`headers` |The headers of the In message.\n\
      \n|`camelContext` |The Camel Context.\n\n|`request` |The In message.\n\n|`body`\
      \ |The In message body.\n\n|`response` |The Out message (only for InOut message\
      \ exchange pattern).\n|=======================================================================\n\
      \n[[Mustache-Dynamictemplates]]\nDynamic templates\n^^^^^^^^^^^^^^^^^\n\nCamel\
      \ provides two headers by which you can define a different resource\nlocation\
      \ for a template or the template content itself. If any of these\nheaders is\
      \ set then Camel uses this over the endpoint configured\nresource. This allows\
      \ you to provide a dynamic template at runtime.\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description |Support Version\n\n|MustacheConstants.MUSTACHE_RESOURCE_URI\
      \ |String |A URI for the template resource to use instead of the endpoint\n\
      configured. | \n\n|MustacheConstants.MUSTACHE_TEMPLATE |String |The template\
      \ to use instead of the endpoint configured. |\n|=======================================================================\n\
      \n[[Mustache-Samples]]\nSamples\n^^^^^^^\n\nFor example you could use something\
      \ like:\n\n[source,java]\n--------------------------------------------\nfrom(\"\
      activemq:My.Queue\").\nto(\"mustache:com/acme/MyResponse.mustache\");\n--------------------------------------------\n\
      \nTo use a Mustache template to formulate a response for a message for\nInOut\
      \ message exchanges (where there is a `JMSReplyTo` header).\n\nIf you want to\
      \ use InOnly and consume the message and send it to another\ndestination you\
      \ could use:\n\n[source,java]\n--------------------------------------------\n\
      from(\"activemq:My.Queue\").\nto(\"mustache:com/acme/MyResponse.mustache\").\n\
      to(\"activemq:Another.Queue\");\n--------------------------------------------\n\
      \nIt's possible to specify what template the component should use\ndynamically\
      \ via a header, so for example:\n\n[source,java]\n--------------------------------------------------------------------------------------------\n\
      from(\"direct:in\").\nsetHeader(MustacheConstants.MUSTACHE_RESOURCE_URI).constant(\"\
      path/to/my/template.mustache\").\nto(\"mustache:dummy\");\n--------------------------------------------------------------------------------------------\n\
      \n[[Mustache-TheEmailSample]]\nThe Email Sample\n^^^^^^^^^^^^^^^^\n\nIn this\
      \ sample we want to use Mustache templating for an order\nconfirmation email.\
      \ The email template is laid out in Mustache as:\n\n[source,java]\n-------------------------------------------------\n\
      Dear {{headers.lastName}}}, {{headers.firstName}}\n\nThanks for the order of\
      \ {{headers.item}}.\n\nRegards Camel Riders Bookstore\n{{body}}\n-------------------------------------------------\n\
      \n[[Mustache-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mvel
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mvel
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mvel
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mvel
          spec:
            containers:
            - image: fabric8/connector-mvel:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mvel
        syntax: mvel:resourceUri
        title: MVEL
        description: Transforms the message using a MVEL template.
        label: transformation,script
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.mvel.MvelComponent
        groupId: org.apache.camel
        artifactId: camel-mvel
        version: 2.18.1
      componentProperties: {}
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        encoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Character encoding of the resource content.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[MVELComponent-MVELComponent]]
      MVEL Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *mvel:* component allows you to process a message using an
      http://mvel.codehaus.org/[MVEL] template. This can be ideal when using
      link:templating.html[Templating] to generate responses for requests.

      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-mvel</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[MVELComponent-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------
      mvel:templateName[?options]
      ---------------------------

      Where *templateName* is the classpath-local URI of the template to
      invoke; or the complete URL of the remote template (eg:
      file://folder/myfile.mvel[file://folder/myfile.mvel]).

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

      [[MVELComponent-Options]]
      Options
      ^^^^^^^


      // component options: START
      The MVEL component has no options.
      // component options: END




      // endpoint options: START
      The MVEL component supports 4 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
      | encoding | producer |  | String | Character encoding of the resource content.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[MVELComponent-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The mvel component sets a couple headers on the message.

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

      |`CamelMvelResourceUri` |The *templateName* as a `String` object.
      |=======================================================================

      [[MVELComponent-MVELContext]]
      MVEL Context
      ^^^^^^^^^^^^

      Camel will provide exchange information in the MVEL context (just a
      `Map`). The `Exchange` is transfered as:

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

      |`exchange` |The `Exchange` itself.

      |`exchange.properties` |The `Exchange` properties.

      |`headers` |The headers of the In message.

      |`camelContext` |The Camel Context intance.

      |`request` |The In message.

      |`in` |The In message.

      |`body` |The In message body.

      |`out` |The Out message (only for InOut message exchange pattern).

      |`response` |The Out message (only for InOut message exchange pattern).
      |=======================================================================

      [[MVELComponent-Hotreloading]]
      Hot reloading
      ^^^^^^^^^^^^^

      The mvel template resource is, by default, hot reloadable for both file
      and classpath resources (expanded jar). If you set `contentCache=true`,
      Camel will only load the resource once, and thus hot reloading is not
      possible. This scenario can be used in production, when the resource
      never changes.

      [[MVELComponent-Dynamictemplates]]
      Dynamic templates
      ^^^^^^^^^^^^^^^^^

      Camel provides two headers by which you can define a different resource
      location for a template or the template content itself. If any of these
      headers is set then Camel uses this over the endpoint configured
      resource. This allows you to provide a dynamic template at runtime.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |CamelMvelResourceUri |String |A URI for the template resource to use instead of the endpoint
      configured.

      |CamelMvelTemplate |String |The template to use instead of the endpoint configured.
      |=======================================================================

      [[MVELComponent-Samples]]
      Samples
      ^^^^^^^

      For example you could use something like

      [source,java]
      --------------------------------------
      from("activemq:My.Queue").
        to("mvel:com/acme/MyResponse.mvel");
      --------------------------------------

      To use a MVEL template to formulate a response to a message for InOut
      message exchanges (where there is a `JMSReplyTo` header).

      To specify what template the component should use dynamically via a
      header, so for example:

      [source,java]
      -------------------------------------------------------------------------
      from("direct:in").
        setHeader("CamelMvelResourceUri").constant("path/to/my/template.mvel").
        to("mvel:dummy");
      -------------------------------------------------------------------------

      To specify a template directly as a header the component should use
      dynamically via a header, so for example:

      [source,java]
      ------------------------------------------------------------------------------------------
      from("direct:in").
        setHeader("CamelMvelTemplate").constant("@{\"The result is \" + request.body * 3}\" }").
        to("velocity:dummy");
      ------------------------------------------------------------------------------------------

      [[MVELComponent-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-mybatis
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: mybatis
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: mybatis
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: mybatis
          spec:
            containers:
            - image: fabric8/connector-mybatis:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: mybatis
        syntax: mybatis:statement
        title: MyBatis
        description: Performs a query poll insert update or delete in a relational database using MyBatis.
        label: database,sql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mybatis.MyBatisComponent
        groupId: org.apache.camel
        artifactId: camel-mybatis
        version: 2.18.1
      componentProperties:
        sqlSessionFactory:
          kind: property
          type: object
          javaType: org.apache.ibatis.session.SqlSessionFactory
          deprecated: false
          secret: false
          description: To use the SqlSessionFactory
        configurationUri:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Location of MyBatis xml configuration file. The default value is:
            SqlMapConfig.xml loaded from the classpath'
      properties:
        statement:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The statement name in the MyBatis XML mapping file which maps to the query insert update or delete operation you wish to evaluate.
        outputHeader:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Store the query result in a header instead of the message body. By default outputHeader == null and the query result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the query result and the original message body is preserved. Setting outputHeader will also omit populating the default CamelMyBatisResult header since it would be the same as outputHeader all the time.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        inputHeader:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: User the header value for input parameters instead of the message body. By default inputHeader == null and the input parameters are taken from the message body. If outputHeader is set the value is used and query parameters will be taken from the header instead of the body.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: This option is intended to split results returned by the database pool into the batches and deliver them in multiple exchanges. This integer defines the maximum messages to deliver in single exchange. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disable it.
        onConsume:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Statement to run after data has been processed in the route
        routeEmptyResultSet:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether allow empty resultset to be routed to the next hop
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        transacted:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables or disables transaction. If enabled then if processing an exchange failed then the consumer break out processing any further exchanges to cause a rollback eager
        useIterator:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Process resultset individually or as a list
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        executorType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.ibatis.session.ExecutorType
          enum:
          - SIMPLE
          - REUSE
          - BATCH
          deprecated: false
          secret: false
          defaultValue: SIMPLE
          description: The executor type to be used while executing statements. simple - executor does nothing special. reuse - executor reuses prepared statements. batch - executor reuses statements and batches updates.
        statementType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.mybatis.StatementType
          enum:
          - SelectOne
          - SelectList
          - Insert
          - InsertList
          - Update
          - UpdateList
          - Delete
          - DeleteList
          deprecated: false
          secret: false
          description: Mandatory to specify for the producer to control which kind of operation to invoke.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[MyBatis-MyBatis]]
      MyBatis
      ~~~~~~~

      *Available as of Camel 2.7*

      The *mybatis:* component allows you to query, poll, insert, update and
      delete data in a relational database using http://mybatis.org/[MyBatis].

      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-mybatis</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[MyBatis-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------
      mybatis:statementName[?options]
      -------------------------------

      Where *statementName* is the statement name in the MyBatis XML mapping
      file which maps to the query, insert, update or delete operation you
      wish to evaluate.

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

      This component will by default load the MyBatis SqlMapConfig file from
      the root of the classpath with the expected name of
      `SqlMapConfig.xml`. +
       If the file is located in another location, you will need to configure
      the `configurationUri` option on the `MyBatisComponent` component.

      [[MyBatis-Options]]
      Options
      ^^^^^^^




      // component options: START
      The MyBatis component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | sqlSessionFactory | SqlSessionFactory | To use the SqlSessionFactory
      | configurationUri | String | Location of MyBatis xml configuration file. The default value is: SqlMapConfig.xml loaded from the classpath
      |=======================================================================
      {% endraw %}
      // component options: END






      // endpoint options: START
      The MyBatis component supports 29 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | statement | common |  | String | *Required* The statement name in the MyBatis XML mapping file which maps to the query insert update or delete operation you wish to evaluate.
      | outputHeader | common |  | String | Store the query result in a header instead of the message body. By default outputHeader == null and the query result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the query result and the original message body is preserved. Setting outputHeader will also omit populating the default CamelMyBatisResult header since it would be the same as outputHeader all the time.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | inputHeader | consumer |  | String | User the header value for input parameters instead of the message body. By default inputHeader == null and the input parameters are taken from the message body. If outputHeader is set the value is used and query parameters will be taken from the header instead of the body.
      | maxMessagesPerPoll | consumer | 0 | int | This option is intended to split results returned by the database pool into the batches and deliver them in multiple exchanges. This integer defines the maximum messages to deliver in single exchange. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disable it.
      | onConsume | consumer |  | String | Statement to run after data has been processed in the route
      | routeEmptyResultSet | consumer | false | boolean | Whether allow empty resultset to be routed to the next hop
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | transacted | consumer | false | boolean | Enables or disables transaction. If enabled then if processing an exchange failed then the consumer break out processing any further exchanges to cause a rollback eager
      | useIterator | consumer | true | boolean | Process resultset individually or as a list
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | executorType | producer | SIMPLE | ExecutorType | The executor type to be used while executing statements. simple - executor does nothing special. reuse - executor reuses prepared statements. batch - executor reuses statements and batches updates.
      | statementType | producer |  | StatementType | Mandatory to specify for the producer to control which kind of operation to invoke.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[MyBatis-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel will populate the result message, either IN or OUT with a header
      with the statement used:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |`CamelMyBatisStatementName` |`String` |The *statementName* used (for example: insertAccount).

      |`CamelMyBatisResult` |`Object` |The *response* returned from MtBatis in any of the operations. For
      instance an `INSERT` could return the auto-generated key, or number of
      rows etc.
      |=======================================================================

      [[MyBatis-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      The response from MyBatis will only be set as the body if it's a
      `SELECT` statement. That means, for example, for `INSERT` statements
      Camel will not replace the body. This allows you to continue routing and
      keep the original body. The response from MyBatis is always stored in
      the header with the key `CamelMyBatisResult`.

      [[MyBatis-Samples]]
      Samples
      ^^^^^^^

      For example if you wish to consume beans from a JMS queue and insert
      them into a database you could do the following:

      [source,java]
      ---------------------------------------------------
      from("activemq:queue:newAccount").
        to("mybatis:insertAccount?statementType=Insert");
      ---------------------------------------------------

      Notice we have to specify the `statementType`, as we need to instruct
      Camel which kind of operation to invoke.

      Where *insertAccount* is the MyBatis ID in the SQL mapping file:

      [source,xml]
      ------------------------------------------------------------
        <!-- Insert example, using the Account parameter class -->
        <insert id="insertAccount" parameterType="Account">
          insert into ACCOUNT (
            ACC_ID,
            ACC_FIRST_NAME,
            ACC_LAST_NAME,
            ACC_EMAIL
          )
          values (
            #{id}, #{firstName}, #{lastName}, #{emailAddress}
          )
        </insert>
      ------------------------------------------------------------

      [[MyBatis-UsingStatementTypeforbettercontrolofMyBatis]]
      Using StatementType for better control of MyBatis
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When routing to an MyBatis endpoint you will want more fine grained
      control so you can control whether the SQL statement to be executed is a
      `SELECT`, `UPDATE`, `DELETE` or `INSERT` etc. So for instance if we want
      to route to an MyBatis endpoint in which the IN body contains parameters
      to a `SELECT` statement we can do:

      In the code above we can invoke the MyBatis statement
      `selectAccountById` and the IN body should contain the account id we
      want to retrieve, such as an `Integer` type.

      We can do the same for some of the other operations, such as
      `SelectList`:

      And the same for `UPDATE`, where we can send an `Account` object as the
      IN body to MyBatis:

      [[MyBatis-UsingInsertListStatementType]]
      Using InsertList StatementType
      ++++++++++++++++++++++++++++++

      *Available as of Camel 2.10*

      MyBatis allows you to insert multiple rows using its for-each batch
      driver. To use this, you need to use the <foreach> in the mapper XML
      file. For example as shown below:

      Then you can insert multiple rows, by sending a Camel message to the
      `mybatis` endpoint which uses the `InsertList` statement type, as shown
      below:

      [[MyBatis-UsingUpdateListStatementType]]
      Using UpdateList StatementType
      ++++++++++++++++++++++++++++++

      *Available as of Camel 2.11*

      MyBatis allows you to update multiple rows using its for-each batch
      driver. To use this, you need to use the <foreach> in the mapper XML
      file. For example as shown below:

      [source,xml]
      -------------------------------------------------------------------------------
      <update id="batchUpdateAccount" parameterType="java.util.Map">
          update ACCOUNT set
          ACC_EMAIL = #{emailAddress}
          where
          ACC_ID in
          <foreach item="Account" collection="list" open="(" close=")" separator=",">
              #{Account.id}
          </foreach>
      </update>
      -------------------------------------------------------------------------------

      Then you can update multiple rows, by sending a Camel message to the
      mybatis endpoint which uses the UpdateList statement type, as shown
      below:

      [source,java]
      --------------------------------------------------------------
      from("direct:start")
          .to("mybatis:batchUpdateAccount?statementType=UpdateList")
          .to("mock:result");
      --------------------------------------------------------------

      [[MyBatis-UsingDeleteListStatementType]]
      Using DeleteList StatementType
      ++++++++++++++++++++++++++++++

      *Available as of Camel 2.11*

      MyBatis allows you to delete multiple rows using its for-each batch
      driver. To use this, you need to use the <foreach> in the mapper XML
      file. For example as shown below:

      [source,xml]
      ---------------------------------------------------------------------------------
      <delete id="batchDeleteAccountById" parameterType="java.util.List">
          delete from ACCOUNT
          where
          ACC_ID in
          <foreach item="AccountID" collection="list" open="(" close=")" separator=",">
              #{AccountID}
          </foreach>
      </delete>
      ---------------------------------------------------------------------------------

      Then you can delete multiple rows, by sending a Camel message to the
      mybatis endpoint which uses the DeleteList statement type, as shown
      below:

      [source,java]
      --------------------------------------------------------------
      from("direct:start")
          .to("mybatis:batchDeleteAccount?statementType=DeleteList")
          .to("mock:result");
      --------------------------------------------------------------

      [[MyBatis-NoticeonInsertList,UpdateListandDeleteListStatementTypes]]
      Notice on InsertList, UpdateList and DeleteList StatementTypes
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      Parameter of any type (List, Map, etc.) can be passed to mybatis and an
      end user is responsible for handling it as required +
       with the help of http://www.mybatis.org/core/dynamic-sql.html[mybatis
      dynamic queries] capabilities.

      [[MyBatis-Scheduledpollingexample]]
      Scheduled polling example
      +++++++++++++++++++++++++

      This component supports scheduled polling and can therefore be used as
      a??link:polling-consumer.html[Polling Consumer]. For example to poll the
      database every minute:

      [source,java]
      -------------------------------------------------------------------------------
      from("mybatis:selectAllAccounts?delay=60000").to("activemq:queue:allAccounts");
      -------------------------------------------------------------------------------

      See "ScheduledPollConsumer Options"
      on??link:polling-consumer.html[Polling Consumer] for more options.

      Alternatively you can use another mechanism for triggering the scheduled
      polls, such as the link:timer.html[Timer] or link:quartz.html[Quartz]
      components.??In the sample below we poll the database, every 30 seconds
      using the link:timer.html[Timer] component and send the data to the JMS
      queue:

      [source,java]
      -------------------------------------------------------------------------------------------------------------
      from("timer://pollTheDatabase?delay=30000").to("mybatis:selectAllAccounts").to("activemq:queue:allAccounts");
      -------------------------------------------------------------------------------------------------------------

      And the MyBatis SQL mapping file used:

      [source,xml]
      ----------------------------------------------------------------------------
        <!-- Select with no parameters using the result map for Account class. -->
        <select id="selectAllAccounts" resultMap="AccountResult">
          select * from ACCOUNT
        </select>
      ----------------------------------------------------------------------------

      [[MyBatis-UsingonConsume]]
      Using onConsume
      +++++++++++++++

      This component supports executing statements *after* data have been
      consumed and processed by Camel. This allows you to do post updates in
      the database. Notice all statements must be `UPDATE` statements. Camel
      supports executing multiple statements whose names should be separated
      by commas.

      The route below illustrates we execute the *consumeAccount* statement
      data is processed. This allows us to change the status of the row in the
      database to processed, so we avoid consuming it twice or more.

      And the statements in the sqlmap file:

      [[MyBatis-Participatingintransactions]]
      Participating in transactions
      +++++++++++++++++++++++++++++

      Setting up a transaction manager under camel-mybatis can be a little bit
      fiddly, as it involves externalising the database configuration outside
      the standard MyBatis `SqlMapConfig.xml` file.

      The first part requires the setup of a `DataSource`. This is typically a
      pool (either DBCP, or c3p0), which needs to be wrapped in a Spring
      proxy. This proxy enables non-Spring use of the `DataSource` to
      participate in Spring transactions (the MyBatis `SqlSessionFactory` does
      just this).

      [source,xml]
      ------------------------------------------------------------------------------------------------------
          <bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
              <constructor-arg>
                  <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
                      <property name="driverClass" value="org.postgresql.Driver"/>
                      <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/myDatabase"/>
                      <property name="user" value="myUser"/>
                      <property name="password" value="myPassword"/>
                  </bean>
              </constructor-arg>
          </bean>
      ------------------------------------------------------------------------------------------------------

      This has the additional benefit of enabling the database configuration
      to be externalised using property placeholders.

      A transaction manager is then configured to manage the outermost
      `DataSource`:

      [source,xml]
      --------------------------------------------------------------------------------------------------
          <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
              <property name="dataSource" ref="dataSource"/>
          </bean>
      --------------------------------------------------------------------------------------------------

      A http://www.mybatis.org/spring/index.html[mybatis-spring]
      http://www.mybatis.org/spring/factorybean.html[`SqlSessionFactoryBean`]
      then wraps that same `DataSource`:

      [source,xml]
      -----------------------------------------------------------------------------------
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="dataSource" ref="dataSource"/>
              <!-- standard mybatis config file -->
          <property name="configLocation" value="/META-INF/SqlMapConfig.xml"/>
              <!-- externalised mappers -->
          <property name="mapperLocations" value="classpath*:META-INF/mappers/**/*.xml"/>
          </bean>
      -----------------------------------------------------------------------------------

      The camel-mybatis component is then configured with that factory:

      [source,xml]
      -----------------------------------------------------------------------------------
          <bean id="mybatis" class="org.apache.camel.component.mybatis.MyBatisComponent">
              <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
          </bean>
      -----------------------------------------------------------------------------------

      Finally, a link:transactional-client.html[transaction policy] is defined
      over the top of the transaction manager, which can then be used as
      usual:

      [source,xml]
      ------------------------------------------------------------------------------------------------
          <bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
              <property name="transactionManager" ref="txManager"/>
              <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
          </bean>

          <camelContext id="my-model-context" xmlns="http://camel.apache.org/schema/spring">
              <route id="insertModel">
                  <from uri="direct:insert"/>
                  <transacted ref="PROPAGATION_REQUIRED"/>
                  <to uri="mybatis:myModel.insert?statementType=Insert"/>
              </route>
          </camelContext>
      ------------------------------------------------------------------------------------------------

      [[MyBatis-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-nagios
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: nagios
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: nagios
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: nagios
          spec:
            containers:
            - image: fabric8/connector-nagios:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: nagios
        syntax: nagios:host:port
        title: Nagios
        description: To send passive checks to Nagios using JSendNSCA.
        label: monitoring
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.nagios.NagiosComponent
        groupId: org.apache.camel
        artifactId: camel-nagios
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.nagios.NagiosConfiguration
          deprecated: false
          secret: false
          description: To use a shared NagiosConfiguration
      properties:
        host:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This is the address of the Nagios host where checks should be send.
        port:
          kind: path
          group: producer
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the host.
        connectionTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Connection timeout in millis.
        encryptionMethod:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.nagios.NagiosEncryptionMethod
          enum:
          - No
          - Xor
          - TripleDes
          deprecated: false
          secret: false
          description: To specify an encryption method.
        password:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password to be authenticated when sending checks to Nagios.
        sendSync:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to use synchronous when sending a passive check. Setting it to false will allow Camel to continue routing the message and the passive check message will be send asynchronously.
        timeout:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Sending timeout in millis.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Nagios-Nagios]]\nNagios\n~~~~~~\n\n*Available as of Camel\
      \ 2.3*\n\nThe link:nagios.html[Nagios] component allows you to send passive\
      \ checks\nto http://nagios.org[Nagios].\n\nMaven users will need to add the\
      \ following dependency to their `pom.xml`\nfor this component:\n\n[source,java]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-nagios</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Nagios-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n------------------------------\n\
      nagios://host[:port][?Options]\n------------------------------\n\nCamel provides\
      \ two abilities with the link:nagios.html[Nagios]\ncomponent. You can send passive\
      \ check messages by sending a message to\nits endpoint. +\n Camel also provides\
      \ a link:camel-jmx.html[EventNotifer] which allows\nyou to send notifications\
      \ to Nagios.\n\n[[Nagios-Options]]\nOptions\n^^^^^^^\n\n\n\n\n\n// component\
      \ options: START\nThe Nagios component supports 1 options which are listed below.\n\
      \n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | NagiosConfiguration | To\
      \ use a shared NagiosConfiguration\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Nagios component supports 8 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | producer |  | String\
      \ | *Required* This is the address of the Nagios host where checks should be\
      \ send.\n| port | producer |  | int | *Required* The port number of the host.\n\
      | connectionTimeout | producer | 5000 | int | Connection timeout in millis.\n\
      | encryptionMethod | producer |  | NagiosEncryptionMethod | To specify an encryption\
      \ method.\n| password | producer |  | String | Password to be authenticated\
      \ when sending checks to Nagios.\n| sendSync | producer | true | boolean | Whether\
      \ or not to use synchronous when sending a passive check. Setting it to false\
      \ will allow Camel to continue routing the message and the passive check message\
      \ will be send asynchronously.\n| timeout | producer | 5000 | int | Sending\
      \ timeout in millis.\n| synchronous | advanced | false | boolean | Sets whether\
      \ synchronous processing should be strictly used or Camel is allowed to use\
      \ asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n[[Nagios-Sendingmessageexamples]]\n\
      Sending message examples\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nYou can send a message\
      \ to Nagios where the message payload contains the\nmessage. By default it will\
      \ be `OK` level and use the\nlink:camelcontext.html[CamelContext] name as the\
      \ service name. You can\noverrule these values using headers as shown above.\n\
      \nFor example we send the `Hello Nagios` message to Nagios as follows:\n\n[source,java]\n\
      ---------------------------------------------------------------------------------------\n\
      \    template.sendBody(\"direct:start\", \"Hello Nagios\");\n\n    from(\"direct:start\"\
      ).to(\"nagios:127.0.0.1:5667?password=secret\").to(\"mock:result\");\n---------------------------------------------------------------------------------------\n\
      \nTo send a `CRITICAL` message you can send the headers such as:\n\n[source,java]\n\
      -----------------------------------------------------------------------------\n\
      \        Map headers = new HashMap();\n        headers.put(NagiosConstants.LEVEL,\
      \ \"CRITICAL\");\n        headers.put(NagiosConstants.HOST_NAME, \"myHost\"\
      );\n        headers.put(NagiosConstants.SERVICE_NAME, \"myService\");\n    \
      \    template.sendBodyAndHeaders(\"direct:start\", \"Hello Nagios\", headers);\n\
      -----------------------------------------------------------------------------\n\
      \n[[Nagios-UsingNagiosEventNotifer]]\nUsing `NagiosEventNotifer`\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe link:nagios.html[Nagios] component also provides an\nlink:camel-jmx.html[EventNotifer]\
      \ which you can use to send events to\nNagios. For example we can enable this\
      \ from Java as follows:\n\n[source,java]\n-------------------------------------------------------------------\n\
      \        NagiosEventNotifier notifier = new NagiosEventNotifier();\n       \
      \ notifier.getConfiguration().setHost(\"localhost\");\n        notifier.getConfiguration().setPort(5667);\n\
      \        notifier.getConfiguration().setPassword(\"password\");\n\n        CamelContext\
      \ context = ... \n        context.getManagementStrategy().addEventNotifier(notifier);\n\
      \        return context;\n-------------------------------------------------------------------\n\
      \nIn Spring XML its just a matter of defining a Spring bean with the type\n\
      `EventNotifier` and Camel will pick it up as documented here:\nlink:advanced-configuration-of-camelcontext-using-spring.html[Advanced\n\
      configuration of CamelContext using Spring].\n\n[[Nagios-SeeAlso]]\nSee Also\n\
      ^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-nats
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: nats
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: nats
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: nats
          spec:
            containers:
            - image: fabric8/connector-nats:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: nats
        syntax: nats:servers
        title: Nats
        description: The nats component allows you produce and consume messages from NATS.
        label: messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.nats.NatsComponent
        groupId: org.apache.camel
        artifactId: camel-nats
        version: 2.18.1
      componentProperties: {}
      properties:
        servers:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: URLs to one or more NAT servers. Use comma to separate URLs when specifying multiple servers.
        maxReconnectAttempts:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "3"
          description: Max reconnection attempts
        noRandomizeServers:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not randomizing the order of servers for the connection attempts
        pedantic:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not running in pedantic mode (this affects performace)
        pingInterval:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "4000"
          description: Ping interval to be aware if connection is still alive (in milliseconds)
        reconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not using reconnection feature
        reconnectTimeWait:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2000"
          description: Waiting time before attempts reconnection (in milliseconds)
        ssl:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not using SSL
        topic:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of topic we want to use
        verbose:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not running in verbose mode
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        maxMessages:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Stop receiving messages from a topic we are subscribing to after maxMessages
        poolSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Consumer pool size
        queueName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Queue name if we are using nats for a queue configuration
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        replySubject:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: the subject to which subscribers should send response
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[NATS-NATSComponent]]
      NATS Component
      ~~~~~~~~~~~~~~

      *Available since Camel 2.17.0*

      http://nats.io/[NATS]??is a fast and reliable messaging platform.

      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-nats</artifactId>
          <!-- use the same version as your Camel core version -->
          <version>x.y.z</version>
      </dependency>
      ------------------------------------------------------------

      [[NATS-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------
      nats:servers[?options]
      ----------------------

      Where??*servers*??represents the list of NATS servers.

      [[NATS-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Nats component has no options.
      // component options: END





      // endpoint options: START
      The Nats component supports 18 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | servers | common |  | String | *Required* URLs to one or more NAT servers. Use comma to separate URLs when specifying multiple servers.
      | maxReconnectAttempts | common | 3 | int | Max reconnection attempts
      | noRandomizeServers | common | false | boolean | Whether or not randomizing the order of servers for the connection attempts
      | pedantic | common | false | boolean | Whether or not running in pedantic mode (this affects performace)
      | pingInterval | common | 4000 | int | Ping interval to be aware if connection is still alive (in milliseconds)
      | reconnect | common | true | boolean | Whether or not using reconnection feature
      | reconnectTimeWait | common | 2000 | int | Waiting time before attempts reconnection (in milliseconds)
      | ssl | common | false | boolean | Whether or not using SSL
      | topic | common |  | String | *Required* The name of topic we want to use
      | verbose | common | false | boolean | Whether or not running in verbose mode
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | maxMessages | consumer |  | String | Stop receiving messages from a topic we are subscribing to after maxMessages
      | poolSize | consumer | 10 | int | Consumer pool size
      | queueName | consumer |  | String | The Queue name if we are using nats for a queue configuration
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | replySubject | producer |  | String | the subject to which subscribers should send response
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[NATS-Headers]]
      Headers
      ^^^^^^^

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |CamelNatsMessageTimestamp |long |The timestamp of a consumed message.

      |CamelNatsSubscriptionId |Integer |The subscription ID of a consumer.
      |=======================================================================
      ??
      *Producer example:*

      [source,java]
      -----------------------------------------------------------
      from("direct:send").to("nats://localhost:4222?topic=test");
      -----------------------------------------------------------

      ??

      *Consumer example:*

      [source,java]
      ----------------------------------------------------------------------------------------
      from("nats://localhost:4222?topic=test&maxMessages=5&queueName=test").to("mock:result");
      ----------------------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-netty
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: netty
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: netty
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: netty
          spec:
            containers:
            - image: fabric8/connector-netty:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: netty
        syntax: netty:protocol:host:port
        title: Netty
        description: Socket level networking using TCP or UDP with the Netty 3.x library.
        label: networking,tcp,udp
        deprecated: true
        async: true
        javaType: org.apache.camel.component.netty.NettyComponent
        groupId: org.apache.camel
        artifactId: camel-netty
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty.NettyConfiguration
          deprecated: false
          secret: false
          description: To use the NettyConfiguration as configuration when creating endpoints.
        maximumPoolSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The core pool size for the ordered thread pool if its in use. The default value is 16.
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - tcp
          - udp
          deprecated: false
          secret: false
          description: The protocol to use which can be tcp or udp.
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hostname. For the consumer the hostname is localhost or 0.0.0.0 For the producer the hostname is the remote host to connect to
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The host port number
        disconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect(close) from Netty Channel right after use. Can be used for both consumer and producer.
        keepAlive:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to ensure socket is not closed due to inactivity
        reuseAddress:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to facilitate socket multiplexing
        sync:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to set endpoint as one-way or request-response
        tcpNoDelay:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to improve TCP protocol performance
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        broadcast:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Setting to choose Multicast over UDP
        clientMode:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the clientMode is true netty consumer will connect the address as a TCP client.
        backlog:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Allows to configure a backlog for netty consumer (server). Note the backlog is just a best effort depending on the OS. Setting this option to a value such as 200 500 or 1000 tells the TCP stack how long the accept queue can be If this option is not configured then the backlog depends on OS setting.
        bossCount:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: When netty works on nio mode it uses default bossCount parameter from Netty which is 1. User can use this operation to override the default bossCount from Netty
        bossPool:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.jboss.netty.channel.socket.nio.BossPool
          deprecated: false
          secret: false
          description: To use a explicit org.jboss.netty.channel.socket.nio.BossPool as the boss thread pool. For example to share a thread pool with multiple consumers. By default each consumer has their own boss pool with 1 core thread.
        channelGroup:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.jboss.netty.channel.group.ChannelGroup
          deprecated: false
          secret: false
          description: To use a explicit ChannelGroup.
        disconnectOnNoReply:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If sync is enabled then this option dictates NettyConsumer if it should disconnect where there is no reply to send back.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        maxChannelMemorySize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10485760"
          description: The maximum total size of the queued events per channel when using orderedThreadPoolExecutor. Specify 0 to disable.
        maxTotalMemorySize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "209715200"
          description: The maximum total size of the queued events for this pool when using orderedThreadPoolExecutor. Specify 0 to disable.
        nettyServerBootstrapFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty.NettyServerBootstrapFactory
          deprecated: false
          secret: false
          description: To use a custom NettyServerBootstrapFactory
        networkInterface:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When using UDP then this option can be used to specify a network interface by its name such as eth0 to join a multicast group.
        noReplyLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If sync is enabled this option dictates NettyConsumer which logging level to use when logging a there is no reply to send back.
        orderedThreadPoolExecutor:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use ordered thread pool to ensure events are processed orderly on the same channel. See details at the netty javadoc of org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor for more details.
        serverClosedChannelExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: DEBUG
          description: If the server (NettyConsumer) catches an java.nio.channels.ClosedChannelException then its logged using this logging level. This is used to avoid logging the closed channel exceptions as clients can disconnect abruptly and then cause a flood of closed exceptions in the Netty server.
        serverExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If the server (NettyConsumer) catches an exception then its logged using this logging level.
        serverPipelineFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty.ServerPipelineFactory
          deprecated: false
          secret: false
          description: To use a custom ServerPipelineFactory
        workerCount:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: When netty works on nio mode it uses default workerCount parameter from Netty which is cpu_core_threads2. User can use this operation to override the default workerCount from Netty
        workerPool:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.jboss.netty.channel.socket.nio.WorkerPool
          deprecated: false
          secret: false
          description: To use a explicit org.jboss.netty.channel.socket.nio.WorkerPool as the worker thread pool. For example to share a thread pool with multiple consumers. By default each consumer has their own worker pool with 2 x cpu count core threads.
        connectTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Time to wait for a socket connection to be available. Value is in millis.
        requestTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Allows to use a timeout for the Netty producer when calling a remote server. By default no timeout is in use. The value is in milli seconds so eg 30000 is 30 seconds. The requestTimeout is using Netty's ReadTimeoutHandler to trigger the timeout.
        clientPipelineFactory:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.component.netty.ClientPipelineFactory
          deprecated: false
          secret: false
          description: To use a custom ClientPipelineFactory
        lazyChannelCreation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Channels can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
        producerPoolEnabled:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'Whether producer pool is enabled or not. Important: Do not turn
            this off as the pooling is needed for handling concurrency and reliable request/reply.'
        producerPoolMaxActive:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the cap on the number of objects that can be allocated by the pool (checked out to clients or idle awaiting checkout) at a given time. Use a negative value for no limit.
        producerPoolMaxIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Sets the cap on the number of idle instances in the pool.
        producerPoolMinEvictableIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the minimum amount of time (value in millis) an object may sit idle in the pool before it is eligible for eviction by the idle object evictor.
        producerPoolMinIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the minimum number of instances allowed in the producer pool before the evictor thread (if active) spawns new objects.
        udpConnectionlessSending:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option supports connection less udp sending which is a real fire and forget. A connected udp send receive the PortUnreachableException if no one is listen on the receiving port.
        useChannelBuffer:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the useChannelBuffer is true netty producer will turn the message body into ChannelBuffer before sending it out.
        bootstrapConfiguration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty.NettyServerBootstrapConfiguration
          deprecated: false
          secret: false
          description: To use a custom configured NettyServerBootstrapConfiguration for configuring this endpoint.
        options:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: option.
          multiValue: true
          deprecated: false
          secret: false
          description: Allows to configure additional netty options using option. as prefix. For example option.child.keepAlive=false to set the netty option child.keepAlive=false. See the Netty documentation for possible options that can be used.
        receiveBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during inbound communication. Size is bytes.
        receiveBufferSizePredictor:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Configures the buffer size predictor. See details at Jetty documentation and this mail thread.
        sendBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during outbound communication. Size is bytes.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Only used for TCP. You can transfer the exchange over the wire instead
            of just the body. The following fields are transferred: In body Out body fault
            body In headers Out headers fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level.'
        allowDefaultCodec:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: The netty component installs a default codec if both encoder/deocder is null and textline is false. Setting allowDefaultCodec to false prevents the netty component from installing a default codec as the first element in the filter chain.
        autoAppendDelimiter:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to auto append missing end delimiter when sending using the textline codec.
        decoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: org.jboss.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: A custom ChannelHandler class that can be used to perform special marshalling of inbound payloads. Must override org.jboss.netty.channel.ChannelUpStreamHandler.
        decoderMaxLineLength:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: The max line length to use for the textline codec.
        decoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of decoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        delimiter:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: org.apache.camel.component.netty.TextLineDelimiter
          enum:
          - LINE
          - NULL
          deprecated: false
          secret: false
          defaultValue: LINE
          description: The delimiter to use for the textline codec. Possible values are LINE and NULL.
        encoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: org.jboss.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: A custom ChannelHandler class that can be used to perform special marshalling of outbound payloads. Must override org.jboss.netty.channel.ChannelDownStreamHandler.
        encoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of encoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        encoding:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The encoding (a charset name) to use for the textline codec. If not provided Camel will use the JVM default Charset.
        textline:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only used for TCP. If no codec is specified you can use this flag to indicate a text line based codec; if not specified or the value is false then Object Serialization is assumed over TCP.
        enabledProtocols:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLSv1,TLSv1.1,TLSv1.2
          description: Which protocols to enable when using SSL
        keyStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Client side certificate keystore to be used for encryption
        keyStoreFormat:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: JKS
          description: Keystore format to be used for payload encryption. Defaults to JKS if not set
        keyStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Client side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
        needClientAuth:
          kind: parameter
          group: security
          label: consumer,security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configures whether the server needs client authentication when using SSL.
        passphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password setting to use in order to encrypt/decrypt payloads sent using SSH
        securityProvider:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: SunX509
          description: Security provider to be used for payload encryption. Defaults to SunX509 if not set.
        ssl:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Setting to specify whether SSL encryption is applied to this endpoint
        sslClientCertHeaders:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When enabled and in SSL mode then the Netty consumer will enrich the Camel Message with headers having information about the client certificate such as subject name issuer name serial number and the valid date range.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        sslHandler:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.jboss.netty.handler.ssl.SslHandler
          deprecated: false
          secret: false
          description: Reference to a class that could be used to return an SSL Handler
        trustStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Server side certificate keystore to be used for encryption
        trustStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Server side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
    documentation.adoc: "[[Netty-NettyComponent]]\nNetty Component\n~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.3*\n\nWARNING: This component is deprecated. You\
      \ should use link:netty4.html[Netty4].\n\nThe *netty* component in Camel is\
      \ a socket communication component,\nbased on the http://netty.io/[Netty] project.\n\
      \nNetty is a NIO client server framework which enables quick and easy\ndevelopment\
      \ of network applications such as protocol servers and\nclients. +\n Netty greatly\
      \ simplifies and streamlines network programming such as\nTCP and UDP socket\
      \ server.\n\nThis camel component supports both producer and consumer endpoints.\n\
      \nThe Netty component has several options and allows fine-grained control\n\
      of a number of TCP/UDP communication parameters (buffer sizes,\nkeepAlives,\
      \ tcpNoDelay etc) and facilitates both In-Only and In-Out\ncommunication on\
      \ a Camel route.\n\nMaven users will need to add the following dependency to\
      \ their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-netty</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Netty-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe URI scheme for a netty\
      \ component is as follows\n\n[source,java]\n---------------------------------------\n\
      netty:tcp://localhost:99999[?options]\nnetty:udp://remotehost:99999/[?options]\n\
      ---------------------------------------\n\nThis component supports producer\
      \ and consumer endpoints for both TCP and\nUDP.\n\nYou can append query options\
      \ to the URI in the following format,\n`?option=value&option=value&...`\n\n\
      [[Netty-Options]]\nOptions\n^^^^^^^\n\n\n\n\n\n// component options: START\n\
      The Netty component supports 2 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | NettyConfiguration | To\
      \ use the NettyConfiguration as configuration when creating endpoints.\n| maximumPoolSize\
      \ | int | The core pool size for the ordered thread pool if its in use. The\
      \ default value is 16.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Netty component supports 70 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* The protocol to use which can be tcp or udp.\n| host |\
      \ common |  | String | *Required* The hostname. For the consumer the hostname\
      \ is localhost or 0.0.0.0 For the producer the hostname is the remote host to\
      \ connect to\n| port | common |  | int | *Required* The host port number\n|\
      \ disconnect | common | false | boolean | Whether or not to disconnect(close)\
      \ from Netty Channel right after use. Can be used for both consumer and producer.\n\
      | keepAlive | common | true | boolean | Setting to ensure socket is not closed\
      \ due to inactivity\n| reuseAddress | common | true | boolean | Setting to facilitate\
      \ socket multiplexing\n| sync | common | true | boolean | Setting to set endpoint\
      \ as one-way or request-response\n| tcpNoDelay | common | true | boolean | Setting\
      \ to improve TCP protocol performance\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | broadcast | consumer | false | boolean | Setting to choose Multicast over\
      \ UDP\n| clientMode | consumer | false | boolean | If the clientMode is true\
      \ netty consumer will connect the address as a TCP client.\n| backlog | consumer\
      \ (advanced) |  | int | Allows to configure a backlog for netty consumer (server).\
      \ Note the backlog is just a best effort depending on the OS. Setting this option\
      \ to a value such as 200 500 or 1000 tells the TCP stack how long the accept\
      \ queue can be If this option is not configured then the backlog depends on\
      \ OS setting.\n| bossCount | consumer (advanced) | 1 | int | When netty works\
      \ on nio mode it uses default bossCount parameter from Netty which is 1. User\
      \ can use this operation to override the default bossCount from Netty\n| bossPool\
      \ | consumer (advanced) |  | BossPool | To use a explicit org.jboss.netty.channel.socket.nio.BossPool\
      \ as the boss thread pool. For example to share a thread pool with multiple\
      \ consumers. By default each consumer has their own boss pool with 1 core thread.\n\
      | channelGroup | consumer (advanced) |  | ChannelGroup | To use a explicit ChannelGroup.\n\
      | disconnectOnNoReply | consumer (advanced) | true | boolean | If sync is enabled\
      \ then this option dictates NettyConsumer if it should disconnect where there\
      \ is no reply to send back.\n| exceptionHandler | consumer (advanced) |  | ExceptionHandler\
      \ | To let the consumer use a custom ExceptionHandler. Notice if the option\
      \ bridgeErrorHandler is enabled then this options is not in use. By default\
      \ the consumer will deal with exceptions that will be logged at WARN/ERROR level\
      \ and ignored.\n| exchangePattern | consumer (advanced) |  | ExchangePattern\
      \ | Sets the exchange pattern when the consumer creates an exchange.\n| maxChannelMemorySize\
      \ | consumer (advanced) | 10485760 | long | The maximum total size of the queued\
      \ events per channel when using orderedThreadPoolExecutor. Specify 0 to disable.\n\
      | maxTotalMemorySize | consumer (advanced) | 209715200 | long | The maximum\
      \ total size of the queued events for this pool when using orderedThreadPoolExecutor.\
      \ Specify 0 to disable.\n| nettyServerBootstrapFactory | consumer (advanced)\
      \ |  | NettyServerBootstrapFactory | To use a custom NettyServerBootstrapFactory\n\
      | networkInterface | consumer (advanced) |  | String | When using UDP then this\
      \ option can be used to specify a network interface by its name such as eth0\
      \ to join a multicast group.\n| noReplyLogLevel | consumer (advanced) | WARN\
      \ | LoggingLevel | If sync is enabled this option dictates NettyConsumer which\
      \ logging level to use when logging a there is no reply to send back.\n| orderedThreadPoolExecutor\
      \ | consumer (advanced) | true | boolean | Whether to use ordered thread pool\
      \ to ensure events are processed orderly on the same channel. See details at\
      \ the netty javadoc of org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor\
      \ for more details.\n| serverClosedChannelExceptionCaughtLogLevel | consumer\
      \ (advanced) | DEBUG | LoggingLevel | If the server (NettyConsumer) catches\
      \ an java.nio.channels.ClosedChannelException then its logged using this logging\
      \ level. This is used to avoid logging the closed channel exceptions as clients\
      \ can disconnect abruptly and then cause a flood of closed exceptions in the\
      \ Netty server.\n| serverExceptionCaughtLogLevel | consumer (advanced) | WARN\
      \ | LoggingLevel | If the server (NettyConsumer) catches an exception then its\
      \ logged using this logging level.\n| serverPipelineFactory | consumer (advanced)\
      \ |  | ServerPipelineFactory | To use a custom ServerPipelineFactory\n| workerCount\
      \ | consumer (advanced) |  | int | When netty works on nio mode it uses default\
      \ workerCount parameter from Netty which is cpu_core_threads2. User can use\
      \ this operation to override the default workerCount from Netty\n| workerPool\
      \ | consumer (advanced) |  | WorkerPool | To use a explicit org.jboss.netty.channel.socket.nio.WorkerPool\
      \ as the worker thread pool. For example to share a thread pool with multiple\
      \ consumers. By default each consumer has their own worker pool with 2 x cpu\
      \ count core threads.\n| connectTimeout | producer | 10000 | long | Time to\
      \ wait for a socket connection to be available. Value is in millis.\n| requestTimeout\
      \ | producer |  | long | Allows to use a timeout for the Netty producer when\
      \ calling a remote server. By default no timeout is in use. The value is in\
      \ milli seconds so eg 30000 is 30 seconds. The requestTimeout is using Netty's\
      \ ReadTimeoutHandler to trigger the timeout.\n| clientPipelineFactory | producer\
      \ (advanced) |  | ClientPipelineFactory | To use a custom ClientPipelineFactory\n\
      | lazyChannelCreation | producer (advanced) | true | boolean | Channels can\
      \ be lazily created to avoid exceptions if the remote server is not up and running\
      \ when the Camel producer is started.\n| producerPoolEnabled | producer (advanced)\
      \ | true | boolean | Whether producer pool is enabled or not. Important: Do\
      \ not turn this off as the pooling is needed for handling concurrency and reliable\
      \ request/reply.\n| producerPoolMaxActive | producer (advanced) | -1 | int |\
      \ Sets the cap on the number of objects that can be allocated by the pool (checked\
      \ out to clients or idle awaiting checkout) at a given time. Use a negative\
      \ value for no limit.\n| producerPoolMaxIdle | producer (advanced) | 100 | int\
      \ | Sets the cap on the number of idle instances in the pool.\n| producerPoolMinEvictableIdle\
      \ | producer (advanced) | 300000 | long | Sets the minimum amount of time (value\
      \ in millis) an object may sit idle in the pool before it is eligible for eviction\
      \ by the idle object evictor.\n| producerPoolMinIdle | producer (advanced) |\
      \  | int | Sets the minimum number of instances allowed in the producer pool\
      \ before the evictor thread (if active) spawns new objects.\n| udpConnectionlessSending\
      \ | producer (advanced) | false | boolean | This option supports connection\
      \ less udp sending which is a real fire and forget. A connected udp send receive\
      \ the PortUnreachableException if no one is listen on the receiving port.\n\
      | useChannelBuffer | producer (advanced) | false | boolean | If the useChannelBuffer\
      \ is true netty producer will turn the message body into ChannelBuffer before\
      \ sending it out.\n| bootstrapConfiguration | advanced |  | NettyServerBootstrapConfiguration\
      \ | To use a custom configured NettyServerBootstrapConfiguration for configuring\
      \ this endpoint.\n| options | advanced |  | Map | Allows to configure additional\
      \ netty options using option. as prefix. For example option.child.keepAlive=false\
      \ to set the netty option child.keepAlive=false. See the Netty documentation\
      \ for possible options that can be used.\n| receiveBufferSize | advanced | 65536\
      \ | long | The TCP/UDP buffer sizes to be used during inbound communication.\
      \ Size is bytes.\n| receiveBufferSizePredictor | advanced |  | int | Configures\
      \ the buffer size predictor. See details at Jetty documentation and this mail\
      \ thread.\n| sendBufferSize | advanced | 65536 | long | The TCP/UDP buffer sizes\
      \ to be used during outbound communication. Size is bytes.\n| synchronous |\
      \ advanced | false | boolean | Sets whether synchronous processing should be\
      \ strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | transferExchange | advanced | false | boolean | Only used for TCP. You can\
      \ transfer the exchange over the wire instead of just the body. The following\
      \ fields are transferred: In body Out body fault body In headers Out headers\
      \ fault headers exchange properties exchange exception. This requires that the\
      \ objects are serializable. Camel will exclude any non-serializable objects\
      \ and log it at WARN level.\n| allowDefaultCodec | codec | true | boolean |\
      \ The netty component installs a default codec if both encoder/deocder is null\
      \ and textline is false. Setting allowDefaultCodec to false prevents the netty\
      \ component from installing a default codec as the first element in the filter\
      \ chain.\n| autoAppendDelimiter | codec | true | boolean | Whether or not to\
      \ auto append missing end delimiter when sending using the textline codec.\n\
      | decoder | codec |  | ChannelHandler | A custom ChannelHandler class that can\
      \ be used to perform special marshalling of inbound payloads. Must override\
      \ org.jboss.netty.channel.ChannelUpStreamHandler.\n| decoderMaxLineLength |\
      \ codec | 1024 | int | The max line length to use for the textline codec.\n\
      | decoders | codec |  | String | A list of decoders to be used. You can use\
      \ a String which have values separated by comma and have the values be looked\
      \ up in the Registry. Just remember to prefix the value with so Camel knows\
      \ it should lookup.\n| delimiter | codec | LINE | TextLineDelimiter | The delimiter\
      \ to use for the textline codec. Possible values are LINE and NULL.\n| encoder\
      \ | codec |  | ChannelHandler | A custom ChannelHandler class that can be used\
      \ to perform special marshalling of outbound payloads. Must override org.jboss.netty.channel.ChannelDownStreamHandler.\n\
      | encoders | codec |  | String | A list of encoders to be used. You can use\
      \ a String which have values separated by comma and have the values be looked\
      \ up in the Registry. Just remember to prefix the value with so Camel knows\
      \ it should lookup.\n| encoding | codec |  | String | The encoding (a charset\
      \ name) to use for the textline codec. If not provided Camel will use the JVM\
      \ default Charset.\n| textline | codec | false | boolean | Only used for TCP.\
      \ If no codec is specified you can use this flag to indicate a text line based\
      \ codec; if not specified or the value is false then Object Serialization is\
      \ assumed over TCP.\n| enabledProtocols | security | TLSv1,TLSv1.1,TLSv1.2 |\
      \ String | Which protocols to enable when using SSL\n| keyStoreFile | security\
      \ |  | File | Client side certificate keystore to be used for encryption\n|\
      \ keyStoreFormat | security | JKS | String | Keystore format to be used for\
      \ payload encryption. Defaults to JKS if not set\n| keyStoreResource | security\
      \ |  | String | Client side certificate keystore to be used for encryption.\
      \ Is loaded by default from classpath but you can prefix with classpath: file:\
      \ or http: to load the resource from different systems.\n| needClientAuth |\
      \ security | false | boolean | Configures whether the server needs client authentication\
      \ when using SSL.\n| passphrase | security |  | String | Password setting to\
      \ use in order to encrypt/decrypt payloads sent using SSH\n| securityProvider\
      \ | security | SunX509 | String | Security provider to be used for payload encryption.\
      \ Defaults to SunX509 if not set.\n| ssl | security | false | boolean | Setting\
      \ to specify whether SSL encryption is applied to this endpoint\n| sslClientCertHeaders\
      \ | security | false | boolean | When enabled and in SSL mode then the Netty\
      \ consumer will enrich the Camel Message with headers having information about\
      \ the client certificate such as subject name issuer name serial number and\
      \ the valid date range.\n| sslContextParameters | security |  | SSLContextParameters\
      \ | To configure security using SSLContextParameters\n| sslHandler | security\
      \ |  | SslHandler | Reference to a class that could be used to return an SSL\
      \ Handler\n| trustStoreFile | security |  | File | Server side certificate keystore\
      \ to be used for encryption\n| trustStoreResource | security |  | String | Server\
      \ side certificate keystore to be used for encryption. Is loaded by default\
      \ from classpath but you can prefix with classpath: file: or http: to load the\
      \ resource from different systems.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n[[Netty-RegistrybasedOptions]]\n\
      Registry based Options\n^^^^^^^^^^^^^^^^^^^^^^\n\nCodec Handlers and SSL Keystores\
      \ can be enlisted in the\nlink:registry.html[Registry], such as in the Spring\
      \ XML file. \nThe values that could be passed in, are the following:\n\n[width=\"\
      100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Description\n\n|`passphrase` |password setting to use in order to encrypt/decrypt\
      \ payloads sent using\nSSH\n\n|`keyStoreFormat` |keystore format to be used\
      \ for payload encryption. Defaults to \"JKS\" if\nnot set\n\n|`securityProvider`\
      \ |Security provider to be used for payload encryption. Defaults to\n\"SunX509\"\
      \ if not set.\n\n|`keyStoreFile` |*deprecated:* Client side certificate keystore\
      \ to be used for encryption\n\n|`trustStoreFile` |*deprecated:* Server side\
      \ certificate keystore to be used for encryption\n\n|`keyStoreResource` |*Camel\
      \ 2.11.1:* Client side certificate keystore to be used for\nencryption. Is loaded\
      \ by default from classpath, but you can prefix with\n`\"classpath:\"`, `\"\
      file:\"`, or `\"http:\"` to load the resource from\ndifferent systems.\n\n|`trustStoreResource`\
      \ |*Camel 2.11.1:* Server side certificate keystore to be used for\nencryption.\
      \ Is loaded by default from classpath, but you can prefix with\n`\"classpath:\"\
      `, `\"file:\"`, or `\"http:\"` to load the resource from\ndifferent systems.\n\
      \n|`sslHandler` |Reference to a class that could be used to return an SSL Handler\n\
      \n|`encoder` |A custom `ChannelHandler` class that can be used to perform special\n\
      marshalling of outbound payloads. Must override\n`org.jboss.netty.channel.ChannelDownStreamHandler`.\n\
      \n|`encorders` |A list of encoders to be used. You can use a String which have\
      \ values\nseparated by comma, and have the values be looked up in the\nlink:registry.html[Registry].\
      \ Just remember to prefix the value with #\nso Camel knows it should lookup.\n\
      \n|`decoder` |A custom `ChannelHandler` class that can be used to perform special\n\
      marshalling of inbound payloads. Must override\n`org.jboss.netty.channel.ChannelUpStreamHandler`.\n\
      \n|`decoders` |A list of decoders to be used. You can use a String which have\
      \ values\nseparated by comma, and have the values be looked up in the\nlink:registry.html[Registry].\
      \ Just remember to prefix the value with #\nso Camel knows it should lookup.\n\
      |=======================================================================\n\n\
      *Important:* Read below about using non shareable encoders/decoders.\n\n[[Netty-Usingnonshareableencodersordecoders]]\n\
      Using non shareable encoders or decoders\n++++++++++++++++++++++++++++++++++++++++\n\
      \nIf your encoders or decoders is not shareable (eg they have the\n@Shareable\
      \ class annotation), then your encoder/decoder must implement\nthe `org.apache.camel.component.netty.ChannelHandlerFactory`\
      \ interface,\nand return a new instance in the `newChannelHandler` method. This\
      \ is to\nensure the encoder/decoder can safely be used. If this is not the case,\n\
      then the Netty component will log a WARN when +\n an endpoint is created.\n\n\
      The Netty component offers a\n`org.apache.camel.component.netty.ChannelHandlerFactories`\
      \ factory\nclass, that has a number of commonly used methods.\n\n[[Netty-SendingMessagestoandfromaNettyendpoint]]\n\
      Sending Messages to/from a Netty endpoint\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[Netty-NettyProducer]]\nNetty Producer\n++++++++++++++\n\nIn Producer mode,\
      \ the component provides the ability to send payloads to\na socket endpoint\
      \ +\n using either TCP or UDP protocols (with optional SSL support).\n\nThe\
      \ producer mode supports both one-way and request-response based\noperations.\n\
      \n[[Netty-NettyConsumer]]\nNetty Consumer\n++++++++++++++\n\nIn Consumer mode,\
      \ the component provides the ability to:\n\n* listen on a specified socket using\
      \ either TCP or UDP protocols (with\noptional SSL support),\n* receive requests\
      \ on the socket using text/xml, binary and serialized\nobject based payloads\
      \ and\n* send them along on a route as message exchanges.\n\nThe consumer mode\
      \ supports both one-way and request-response based\noperations.\n\n[[Netty-Headers]]\n\
      Headers\n^^^^^^^\n\nThe following headers are filled for the exchanges created\
      \ by the Netty\nconsumer:\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"\
      header\",]\n|=======================================================================\n\
      |Header key |Class |Description\n\n|`NettyConstants.NETTY_CHANNEL_HANDLER_CONTEXT`\
      \ /\n`CamelNettyChannelHandlerContext` |`org.jboss.netty.channel.ChannelHandlerContext`\
      \ | `ChannelHandlerContext `instance associated with the connection received\n\
      by netty.\n\n|`NettyConstants.NETTY_MESSAGE_EVENT` / `CamelNettyMessageEvent`\
      \ |`org.jboss.netty.channel.MessageEvent` |`MessageEvent `instance associated\
      \ with the connection received by\nnetty.\n\n|`NettyConstants.NETTY_REMOTE_ADDRESS`\
      \ / `CamelNettyRemoteAddress` |`java.net.SocketAddress` |Remote address of the\
      \ incoming socket connection.\n\n|`NettyConstants.NETTY_LOCAL_ADDRESS` / `CamelNettyLocalAddress`\
      \ |`java.net.SocketAddress` |Local address of the incoming socket connection.\n\
      |=======================================================================\n\n\
      [[Netty-UsageSamples]]\nUsage Samples\n^^^^^^^^^^^^^\n\n[[Netty-AUDPNettyendpointusingRequest-Replyandserializedobjectpayload]]\n\
      A UDP Netty endpoint using Request-Reply and serialized object payload\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n------------------------------------------------------------------\n\
      RouteBuilder builder = new RouteBuilder() {\n  public void configure() {\n \
      \   from(\"netty:udp://localhost:5155?sync=true\")\n      .process(new Processor()\
      \ {\n         public void process(Exchange exchange) throws Exception {\n  \
      \         Poetry poetry = (Poetry) exchange.getIn().getBody();\n           poetry.setPoet(\"\
      Dr. Sarojini Naidu\");\n           exchange.getOut().setBody(poetry);\n    \
      \     }\n       }\n    }\n};\n------------------------------------------------------------------\n\
      \n[[Netty-ATCPbasedNettyconsumerendpointusingOne-waycommunication]]\nA TCP based\
      \ Netty consumer endpoint using One-way communication\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n-------------------------------------------\nRouteBuilder builder\
      \ = new RouteBuilder() {\n  public void configure() {\n       from(\"netty:tcp://localhost:5150\"\
      )\n           .to(\"mock:result\");\n  }\n};\n-------------------------------------------\n\
      \n[[Netty-AnSSLTCPbasedNettyconsumerendpointusingRequest-Replycommunication]]\n\
      An SSL/TCP based Netty consumer endpoint using Request-Reply communication\n\
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[[Netty-UsingtheJSSEConfigurationUtility]]\nUsing the JSSE Configuration Utility\n\
      \nAs of Camel 2.9, the Netty component supports SSL/TLS configuration\nthrough\
      \ the link:camel-configuration-utilities.html[Camel JSSE\nConfiguration Utility].??\
      \ This utility greatly decreases the amount of\ncomponent specific code you\
      \ need to write and is configurable at the\nendpoint and component levels.??\
      \ The following examples demonstrate how\nto use the utility with the Netty\
      \ component.\n\n[[Netty-Programmaticconfigurationofthecomponent]]\nProgrammatic\
      \ configuration of the component\n\n[source,java]\n-----------------------------------------------------------------------------------------\n\
      KeyStoreParameters ksp = new KeyStoreParameters();\nksp.setResource(\"/users/home/server/keystore.jks\"\
      );\nksp.setPassword(\"keystorePassword\");\n\nKeyManagersParameters kmp = new\
      \ KeyManagersParameters();\nkmp.setKeyStore(ksp);\nkmp.setKeyPassword(\"keyPassword\"\
      );\n\nSSLContextParameters scp = new SSLContextParameters();\nscp.setKeyManagers(kmp);\n\
      \nNettyComponent nettyComponent = getContext().getComponent(\"netty\", NettyComponent.class);\n\
      nettyComponent.setSslContextParameters(scp);\n-----------------------------------------------------------------------------------------\n\
      \n[[Netty-SpringDSLbasedconfigurationofendpoint]]\nSpring DSL based configuration\
      \ of endpoint\n\n[source,xml]\n------------------------------------------------------------------------------------------------------\n\
      ...\n  <camel:sslContextParameters\n      id=\"sslContextParameters\">\n   \
      \ <camel:keyManagers\n        keyPassword=\"keyPassword\">\n      <camel:keyStore\n\
      \          resource=\"/users/home/server/keystore.jks\"\n          password=\"\
      keystorePassword\"/>\n    </camel:keyManagers>\n  </camel:sslContextParameters>...\n\
      ...\n  <to uri=\"netty:tcp://localhost:5150?sync=true&ssl=true&sslContextParameters=#sslContextParameters\"\
      />\n...\n------------------------------------------------------------------------------------------------------\n\
      \n[[Netty-UsingBasicSSLTLSconfigurationontheJettyComponent]]\nUsing Basic SSL/TLS\
      \ configuration on the Jetty Component\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      JndiRegistry registry = new JndiRegistry(createJndiContext());\nregistry.bind(\"\
      password\", \"changeit\");\nregistry.bind(\"ksf\", new File(\"src/test/resources/keystore.jks\"\
      ));\nregistry.bind(\"tsf\", new File(\"src/test/resources/keystore.jks\"));\n\
      \ncontext.createRegistry(registry);\ncontext.addRoutes(new RouteBuilder() {\n\
      \  public void configure() {\n      String netty_ssl_endpoint =\n         \"\
      netty:tcp://localhost:5150?sync=true&ssl=true&passphrase=#password\"\n     \
      \    + \"&keyStoreFile=#ksf&trustStoreFile=#tsf\";\n      String return_string\
      \ =\n         \"When You Go Home, Tell Them Of Us And Say,\"\n         + \"\
      For Your Tomorrow, We Gave Our Today.\";\n\n      from(netty_ssl_endpoint)\n\
      \       .process(new Processor() {\n          public void process(Exchange exchange)\
      \ throws Exception {\n            exchange.getOut().setBody(return_string);\n\
      \          }\n       }\n  }\n});\n-----------------------------------------------------------------------------\n\
      \n[[Netty-GettingaccesstoSSLSessionandtheclientcertificate]]\nGetting access\
      \ to SSLSession and the client certificate\n\n*Available as of Camel 2.12*\n\
      \nYou can get access to the `javax.net.ssl.SSLSession` if you eg need to\nget\
      \ details about the client certificate. When `ssl=true` then the\nlink:netty.html[Netty]\
      \ component will store the `SSLSession` as a header\non the Camel link:message.html[Message]\
      \ as shown below:\n\n[source,java]\n----------------------------------------------------------------------------------------------------\n\
      SSLSession session = exchange.getIn().getHeader(NettyConstants.NETTY_SSL_SESSION,\
      \ SSLSession.class);\n// get the first certificate which is client certificate\n\
      javax.security.cert.X509Certificate cert = session.getPeerCertificateChain()[0];\n\
      Principal principal = cert.getSubjectDN();\n----------------------------------------------------------------------------------------------------\n\
      \nRemember to set `needClientAuth=true` to authenticate the client,\notherwise\
      \ `SSLSession` cannot access information about the client\ncertificate, and\
      \ you may get an exception\n`javax.net.ssl.SSLPeerUnverifiedException: peer\
      \ not authenticated`. You\nmay also get this exception if the client certificate\
      \ is expired or not\nvalid etc.\n\nTIP: The option `sslClientCertHeaders` can\
      \ be set to `true` which then\nenriches the Camel link:message.html[Message]\
      \ with headers having\ndetails about the client certificate. For example the\
      \ subject name is\nreadily available in the header `CamelNettySSLClientCertSubjectName`.\n\
      \n[[Netty-UsingMultipleCodecs]]\nUsing Multiple Codecs\n+++++++++++++++++++++\n\
      \nIn certain cases it may be necessary to add chains of encoders and\ndecoders\
      \ to the netty pipeline. To add multpile codecs to a camel netty\nendpoint the\
      \ 'encoders' and 'decoders' uri parameters should be used.\nLike the 'encoder'\
      \ and 'decoder' parameters they are used to supply\nreferences (to lists of\
      \ ChannelUpstreamHandlers and\nChannelDownstreamHandlers) that should be added\
      \ to the pipeline. Note\nthat if encoders is specified then the encoder param\
      \ will be ignored,\nsimilarly for decoders and the decoder param.\n\nINFO: Read\
      \ further above about using non shareable encoders/decoders.\n\nThe lists of\
      \ codecs need to be added to the Camel's registry so they can\nbe resolved when\
      \ the endpoint is created.\n\nSpring's native collections support can be used\
      \ to specify the codec\nlists in an application context\n\nThe bean names can\
      \ then be used in netty endpoint definitions either as\na comma separated list\
      \ or contained in a List e.g.\n\nor via spring.\n\n[[Netty-ClosingChannelWhenComplete]]\n\
      Closing Channel When Complete\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen acting\
      \ as a server you sometimes want to close the channel when,\nfor example, a\
      \ client conversion is finished. +\n You can do this by simply setting the endpoint\
      \ option\n`disconnect=true`.\n\nHowever you can also instruct Camel on a per\
      \ message basis as follows. +\n To instruct Camel to close the channel, you\
      \ should add a header with\nthe key `CamelNettyCloseChannelWhenComplete` set\
      \ to a boolean `true`\nvalue. +\n For instance, the example below will close\
      \ the channel after it has\nwritten the bye message back to the client:\n\n\
      [source,java]\n--------------------------------------------------------------------------------------------------------\n\
      \        from(\"netty:tcp://localhost:8080\").process(new Processor() {\n  \
      \          public void process(Exchange exchange) throws Exception {\n     \
      \           String body = exchange.getIn().getBody(String.class);\n        \
      \        exchange.getOut().setBody(\"Bye \" + body);\n                // some\
      \ condition which determines if we should close\n                if (close)\
      \ {\n                    exchange.getOut().setHeader(NettyConstants.NETTY_CLOSE_CHANNEL_WHEN_COMPLETE,\
      \ true);\n                }\n            }\n        });\n--------------------------------------------------------------------------------------------------------\n\
      \n[[Netty-Addingcustomchannelpipelinefactoriestogaincompletecontroloveracreatedpipeline]]\n\
      Adding custom channel pipeline factories to gain complete control over a created\
      \ pipeline\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.5*\n\nCustom channel pipelines provide complete control\
      \ to the user over the\nhandler/interceptor chain by inserting custom handler(s),\
      \ encoder(s) &\ndecoders without having to specify them in the Netty Endpoint\
      \ URL in a\nvery simple way.\n\nIn order to add a custom pipeline, a custom\
      \ channel pipeline factory\nmust be created and registered with the context\
      \ via the context registry\n(JNDIRegistry,or the camel-spring ApplicationContextRegistry\
      \ etc).\n\nA custom pipeline factory must be constructed as follows\n\n* A Producer\
      \ linked channel pipeline factory must extend the abstract\nclass `ClientPipelineFactory`.\n\
      * A Consumer linked channel pipeline factory must extend the abstract\nclass\
      \ `ServerPipelineFactory`.\n* The classes should override the getPipeline()\
      \ method in order to\ninsert custom handler(s), encoder(s) and decoder(s). Not\
      \ overriding the\ngetPipeline() method creates a pipeline with no handlers,\
      \ encoders or\ndecoders wired to the pipeline.\n\nThe example below shows how\
      \ ServerChannel Pipeline factory may be\ncreated\n\n*Using custom pipeline factory*\n\
      \n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------\n\
      public class SampleServerChannelPipelineFactory extends ServerPipelineFactory\
      \ {\n    private int maxLineSize = 1024;\n\n    public ChannelPipeline getPipeline()\
      \ throws Exception {\n        ChannelPipeline channelPipeline = Channels.pipeline();\n\
      \n        channelPipeline.addLast(\"encoder-SD\", new StringEncoder(CharsetUtil.UTF_8));\n\
      \        channelPipeline.addLast(\"decoder-DELIM\", new DelimiterBasedFrameDecoder(maxLineSize,\
      \ true, Delimiters.lineDelimiter()));\n        channelPipeline.addLast(\"decoder-SD\"\
      , new StringDecoder(CharsetUtil.UTF_8));\n        // here we add the default\
      \ Camel ServerChannelHandler for the consumer, to allow Camel to route the message\
      \ etc.\n        channelPipeline.addLast(\"handler\", new ServerChannelHandler(consumer));\n\
      \n        return channelPipeline;\n    }\n}\n--------------------------------------------------------------------------------------------------------------------------------\n\
      \nThe custom channel pipeline factory can then be added to the registry\nand\
      \ instantiated/utilized on a camel route in the following way\n\n[source,java]\n\
      -------------------------------------------------------------------\nRegistry\
      \ registry = camelContext.getRegistry();\nserverPipelineFactory = new TestServerChannelPipelineFactory();\n\
      registry.bind(\"spf\", serverPipelineFactory);\ncontext.addRoutes(new RouteBuilder()\
      \ {\n  public void configure() {\n      String netty_ssl_endpoint =\n      \
      \   \"netty:tcp://localhost:5150?serverPipelineFactory=#spf\"\n      String\
      \ return_string =\n         \"When You Go Home, Tell Them Of Us And Say,\"\n\
      \         + \"For Your Tomorrow, We Gave Our Today.\";\n\n      from(netty_ssl_endpoint)\n\
      \       .process(new Processor() {\n          public void process(Exchange exchange)\
      \ throws Exception {\n            exchange.getOut().setBody(return_string);\n\
      \          }\n       }\n  }\n});\n-------------------------------------------------------------------\n\
      \n[[Netty-ReusingNettybossandworkerthreadpools]]\nReusing Netty boss and worker\
      \ thread pools\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*Available as\
      \ of Camel 2.12*\n\nNetty has two kind of thread pools: boss and worker. By\
      \ default each\nNetty consumer and producer has their private thread pools.\
      \ If you want\nto reuse these thread pools among multiple consumers or producers\
      \ then\nthe thread pools must be created and enlisted in the\nlink:registry.html[Registry].\n\
      \nFor example using Spring XML we can create a shared worker thread pool\nusing\
      \ the `NettyWorkerPoolBuilder` with 2 worker threads as shown below:\n\n[source,xml]\n\
      -----------------------------------------------------------------------------------------\n\
      \  <!-- use the worker pool builder to create to help create the shared thread\
      \ pool -->\n  <bean id=\"poolBuilder\" class=\"org.apache.camel.component.netty.NettyWorkerPoolBuilder\"\
      >\n    <property name=\"workerCount\" value=\"2\"/>\n  </bean>\n\n  <!-- the\
      \ shared worker thread pool -->\n  <bean id=\"sharedPool\" class=\"org.jboss.netty.channel.socket.nio.WorkerPool\"\
      \n        factory-bean=\"poolBuilder\" factory-method=\"build\" destroy-method=\"\
      shutdown\">\n  </bean>\n-----------------------------------------------------------------------------------------\n\
      \nTIP: For boss thread pool there is a\n`org.apache.camel.component.netty.NettyServerBossPoolBuilder`\
      \ builder\nfor Netty consumers, and a\n`org.apache.camel.component.netty.NettyClientBossPoolBuilder`\
      \ for the\nNetty produces.\n\nThen in the Camel routes we can refer to this\
      \ worker pools by\nconfiguring the `workerPool` option in the\nhttps://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=URI&linkCreation=true&fromPageId=14814487[URI]\n\
      as shown below:\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------------------------------------\n\
      \    <route>\n      <from uri=\"netty:tcp://localhost:5021?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;orderedThreadPoolExecutor=false\"\
      />\n      <to uri=\"log:result\"/>\n      ...\n    </route>\n-----------------------------------------------------------------------------------------------------------------------------------------\n\
      \nAnd if we have another route we can refer to the shared worker pool:\n\n[source,xml]\n\
      -----------------------------------------------------------------------------------------------------------------------------------------\n\
      \    <route>\n      <from uri=\"netty:tcp://localhost:5022?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;orderedThreadPoolExecutor=false\"\
      />\n      <to uri=\"log:result\"/>\n      ...\n    </route>\n-----------------------------------------------------------------------------------------------------------------------------------------\n\
      \n... and so forth.\n\n[[Netty-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:netty-http.html[Netty\
      \ HTTP]\n* link:mina.html[MINA]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-netty-http
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: netty-http
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: netty-http
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: netty-http
          spec:
            containers:
            - image: fabric8/connector-netty-http:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: netty-http
        extendsScheme: netty
        syntax: netty-http:protocol:host:port/path
        title: Netty HTTP
        description: Netty HTTP server and client using the Netty 3.x library.
        label: http
        deprecated: true
        async: true
        lenientProperties: true
        javaType: org.apache.camel.component.netty.http.NettyHttpComponent
        groupId: org.apache.camel
        artifactId: camel-netty-http
        version: 2.18.1
      componentProperties:
        nettyHttpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty.http.NettyHttpBinding
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.netty.http.NettyHttpBinding for binding to/from Netty and Camel Message API.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        securityConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration
          deprecated: false
          secret: false
          description: Refers to a org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration for configuring secure web resources.
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty.NettyConfiguration
          deprecated: false
          secret: false
          description: To use the NettyConfiguration as configuration when creating endpoints.
        maximumPoolSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The core pool size for the ordered thread pool if its in use. The default value is 16.
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - http
          - https
          deprecated: false
          secret: false
          description: The protocol to use which is either http or https
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The local hostname such as localhost or 0.0.0.0 when being a consumer. The remote HTTP server hostname when using producer.
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The host port number
        path:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Resource path
        bridgeEndpoint:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true the producer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the producer send all the fault response back. The consumer working in the bridge mode will skip the gzip compression and WWW URL form encoding (by adding the Exchange.SKIP_GZIP_ENCODING and Exchange.SKIP_WWW_FORM_URLENCODED headers to the consumed exchange).
        disconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect(close) from Netty Channel right after use. Can be used for both consumer and producer.
        keepAlive:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to ensure socket is not closed due to inactivity
        reuseAddress:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to facilitate socket multiplexing
        sync:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to set endpoint as one-way or request-response
        tcpNoDelay:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to improve TCP protocol performance
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        matchOnUriPrefix:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not Camel should try to find a target consumer by matching the URI prefix if no exact match is found.
        send503whenSuspended:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to send back HTTP status code 503 when the consumer has been suspended. If the option is false then the Netty Acceptor is unbound when the consumer is suspended so clients cannot connect anymore.
        backlog:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Allows to configure a backlog for netty consumer (server). Note the backlog is just a best effort depending on the OS. Setting this option to a value such as 200 500 or 1000 tells the TCP stack how long the accept queue can be If this option is not configured then the backlog depends on OS setting.
        bossCount:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: When netty works on nio mode it uses default bossCount parameter from Netty which is 1. User can use this operation to override the default bossCount from Netty
        bossPool:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.jboss.netty.channel.socket.nio.BossPool
          deprecated: false
          secret: false
          description: To use a explicit org.jboss.netty.channel.socket.nio.BossPool as the boss thread pool. For example to share a thread pool with multiple consumers. By default each consumer has their own boss pool with 1 core thread.
        channelGroup:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.jboss.netty.channel.group.ChannelGroup
          deprecated: false
          secret: false
          description: To use a explicit ChannelGroup.
        chunkedMaxContentLength:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1048576"
          description: Value in bytes the max content length per chunked frame received on the Netty HTTP server.
        compression:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Allow using gzip/deflate for compression on the Netty HTTP server if the client supports it from the HTTP headers.
        disableStreamCache:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Netty HttpRequestgetContent() is cached or not (Camel will read the stream into a in light-weight memory based Stream caching) cache. By default Camel will cache the Netty input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. Mind that if you enable this option then you cannot read the Netty stream multiple times out of the box and you would need manually to reset the reader index on the Netty raw stream.
        disconnectOnNoReply:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If sync is enabled then this option dictates NettyConsumer if it should disconnect where there is no reply to send back.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        httpMethodRestrict:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To disable HTTP methods on the Netty HTTP consumer. You can specify multiple separated by comma.
        mapHeaders:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is enabled then during binding from Netty to Camel Message then the headers will be mapped as well (eg added as header to the Camel Message as well). You can turn off this option to disable this. The headers can still be accessed from the org.apache.camel.component.netty.http.NettyHttpMessage message with the method getHttpRequest() that returns the Netty HTTP request org.jboss.netty.handler.codec.http.HttpRequest instance.
        maxChannelMemorySize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10485760"
          description: The maximum total size of the queued events per channel when using orderedThreadPoolExecutor. Specify 0 to disable.
        maxHeaderSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8192"
          description: The maximum length of all headers. If the sum of the length of each header exceeds this value a TooLongFrameException will be raised.
        maxTotalMemorySize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "209715200"
          description: The maximum total size of the queued events for this pool when using orderedThreadPoolExecutor. Specify 0 to disable.
        nettyServerBootstrapFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty.NettyServerBootstrapFactory
          deprecated: false
          secret: false
          description: To use a custom NettyServerBootstrapFactory
        nettySharedHttpServer:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty.http.NettySharedHttpServer
          deprecated: false
          secret: false
          description: To use a shared Netty HTTP server. See Netty HTTP Server Example for more details.
        noReplyLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If sync is enabled this option dictates NettyConsumer which logging level to use when logging a there is no reply to send back.
        orderedThreadPoolExecutor:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use ordered thread pool to ensure events are processed orderly on the same channel. See details at the netty javadoc of org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor for more details.
        serverClosedChannelExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: DEBUG
          description: If the server (NettyConsumer) catches an java.nio.channels.ClosedChannelException then its logged using this logging level. This is used to avoid logging the closed channel exceptions as clients can disconnect abruptly and then cause a flood of closed exceptions in the Netty server.
        serverExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If the server (NettyConsumer) catches an exception then its logged using this logging level.
        serverPipelineFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty.ServerPipelineFactory
          deprecated: false
          secret: false
          description: To use a custom ServerPipelineFactory
        traceEnabled:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP TRACE for this Netty HTTP consumer. By default TRACE is turned off.
        urlDecodeHeaders:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is enabled then during binding from Netty to Camel Message then the header values will be URL decoded (eg 20 will be a space character. Notice this option is used by the default org.apache.camel.component.netty.http.NettyHttpBinding and therefore if you implement a custom org.apache.camel.component.netty.http.NettyHttpBinding then you would need to decode the headers accordingly to this option.
        workerCount:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: When netty works on nio mode it uses default workerCount parameter from Netty which is cpu_core_threads2. User can use this operation to override the default workerCount from Netty
        workerPool:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.jboss.netty.channel.socket.nio.WorkerPool
          deprecated: false
          secret: false
          description: To use a explicit org.jboss.netty.channel.socket.nio.WorkerPool as the worker thread pool. For example to share a thread pool with multiple consumers. By default each consumer has their own worker pool with 2 x cpu count core threads.
        connectTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Time to wait for a socket connection to be available. Value is in millis.
        requestTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Allows to use a timeout for the Netty producer when calling a remote server. By default no timeout is in use. The value is in milli seconds so eg 30000 is 30 seconds. The requestTimeout is using Netty's ReadTimeoutHandler to trigger the timeout.
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        clientPipelineFactory:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.component.netty.ClientPipelineFactory
          deprecated: false
          secret: false
          description: To use a custom ClientPipelineFactory
        lazyChannelCreation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Channels can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
        okStatusCodeRange:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included. The default range is 200-299
        producerPoolEnabled:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'Whether producer pool is enabled or not. Important: Do not turn
            this off as the pooling is needed for handling concurrency and reliable request/reply.'
        producerPoolMaxActive:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the cap on the number of objects that can be allocated by the pool (checked out to clients or idle awaiting checkout) at a given time. Use a negative value for no limit.
        producerPoolMaxIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Sets the cap on the number of idle instances in the pool.
        producerPoolMinEvictableIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the minimum amount of time (value in millis) an object may sit idle in the pool before it is eligible for eviction by the idle object evictor.
        producerPoolMinIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the minimum number of instances allowed in the producer pool before the evictor thread (if active) spawns new objects.
        useChannelBuffer:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the useChannelBuffer is true netty producer will turn the message body into ChannelBuffer before sending it out.
        useRelativePath:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use a relative path in HTTP requests. Some third party backend systems such as IBM Datapower do not support absolute URIs in HTTP POSTs and setting this option to true can work around this problem.
        bootstrapConfiguration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty.NettyServerBootstrapConfiguration
          deprecated: false
          secret: false
          description: To use a custom configured NettyServerBootstrapConfiguration for configuring this endpoint.
        configuration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty.http.NettyHttpConfiguration
          deprecated: false
          secret: false
          description: To use a custom configured NettyHttpConfiguration for configuring this endpoint.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        nettyHttpBinding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty.http.NettyHttpBinding
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.netty.http.NettyHttpBinding for binding to/from Netty and Camel Message API.
        options:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: option.
          multiValue: true
          deprecated: false
          secret: false
          description: Allows to configure additional netty options using option. as prefix. For example option.child.keepAlive=false to set the netty option child.keepAlive=false. See the Netty documentation for possible options that can be used.
        receiveBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during inbound communication. Size is bytes.
        receiveBufferSizePredictor:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Configures the buffer size predictor. See details at Jetty documentation and this mail thread.
        sendBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during outbound communication. Size is bytes.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferException:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Only used for TCP. You can transfer the exchange over the wire instead
            of just the body. The following fields are transferred: In body Out body fault
            body In headers Out headers fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level.'
        decoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: org.jboss.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: To use a single decoder. This options is deprecated use encoders instead.
        decoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of decoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        encoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: org.jboss.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: To use a single encoder. This options is deprecated use encoders instead.
        encoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of encoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        enabledProtocols:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLSv1,TLSv1.1,TLSv1.2
          description: Which protocols to enable when using SSL
        keyStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Client side certificate keystore to be used for encryption
        keyStoreFormat:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: JKS
          description: Keystore format to be used for payload encryption. Defaults to JKS if not set
        keyStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Client side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
        needClientAuth:
          kind: parameter
          group: security
          label: consumer,security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configures whether the server needs client authentication when using SSL.
        passphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password setting to use in order to encrypt/decrypt payloads sent using SSH
        securityConfiguration:
          kind: parameter
          group: security
          label: consumer,security
          type: object
          javaType: org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration
          deprecated: false
          secret: false
          description: Refers to a org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration for configuring secure web resources.
        securityOptions:
          kind: parameter
          group: security
          label: consumer,security
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: securityConfiguration.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure NettyHttpSecurityConfiguration using key/value pairs from the map
        securityProvider:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: SunX509
          description: Security provider to be used for payload encryption. Defaults to SunX509 if not set.
        ssl:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Setting to specify whether SSL encryption is applied to this endpoint
        sslClientCertHeaders:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When enabled and in SSL mode then the Netty consumer will enrich the Camel Message with headers having information about the client certificate such as subject name issuer name serial number and the valid date range.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        sslHandler:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.jboss.netty.handler.ssl.SslHandler
          deprecated: false
          secret: false
          description: Reference to a class that could be used to return an SSL Handler
        trustStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Server side certificate keystore to be used for encryption
        trustStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Server side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
    documentation.adoc: |+
      [[NettyHTTP-NettyHTTPComponent]]
      Netty HTTP Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *netty-http* component is an extension to link:netty.html[Netty]
      component to facilitiate HTTP transport with link:netty.html[Netty].

      This camel component supports both producer and consumer endpoints.

      WARNING: This component is deprecated. You should use
      link:netty4-http.html[Netty4 HTTP].

      INFO: *Stream*.
      Netty is stream based, which means the input it receives is submitted to
      Camel as a stream. That means you will only be able to read the content
      of the stream *once*. If you find a situation where the message body appears to be empty or
      you need to access the data multiple times (eg: doing multicasting, or
      redelivery error handling) you should use link:stream-caching.html[Stream caching] or convert the
      message body to a `String` which is safe to be re-read multiple times.
      Notice Netty4 HTTP reads the entire stream into memory using
      `io.netty.handler.codec.http.HttpObjectAggregator` to build the entire
      full http message. But the resulting message is still a stream based
      message which is readable once.

      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-netty-http</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[NettyHTTP-URIformat]]
      URI format
      ^^^^^^^^^^

      The URI scheme for a netty component is as follows

      [source,java]
      ------------------------------------------
      netty-http:http://localhost:8080[?options]
      ------------------------------------------

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

      INFO: *Query parameters vs endpoint options*. You may be wondering how Camel recognizes URI query parameters and
      endpoint options. For example you might create endpoint URI as follows -
      `netty-http:http//example.com?myParam=myValue&compression=true` . In
      this example `myParam` is the HTTP parameter, while `compression` is the
      Camel endpoint option. The strategy used by Camel in such situations is
      to resolve available endpoint options and remove them from the URI. It
      means that for the discussed example, the HTTP request sent by Netty
      HTTP producer to the endpoint will look as follows
      -??`http//example.com?myParam=myValue` , because `compression` endpoint
      option will be resolved and removed from the target URL.
      Keep also in mind that you cannot specify endpoint options using dynamic
      headers (like `CamelHttpQuery`). Endpoint options can be specified only
      at the endpoint URI definition level (like `to` or `from` DSL elements).


      [[NettyHTTP-HTTPOptions]]
      HTTP Options
      ^^^^^^^^^^^^

      INFO: *A lot more options*. *Important:* This component inherits all the options from
      link:netty.html[Netty]. So make sure to look at the
      link:netty.html[Netty] documentation as well. +
       Notice that some options from link:netty.html[Netty] is not applicable
      when using this link:netty-http.html[Netty HTTP] component, such as
      options related to UDP transport.





      // component options: START
      The Netty HTTP component supports 5 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | nettyHttpBinding | NettyHttpBinding | To use a custom org.apache.camel.component.netty.http.NettyHttpBinding for binding to/from Netty and Camel Message API.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | securityConfiguration | NettyHttpSecurityConfiguration | Refers to a org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration for configuring secure web resources.
      | configuration | NettyConfiguration | To use the NettyConfiguration as configuration when creating endpoints.
      | maximumPoolSize | int | The core pool size for the ordered thread pool if its in use. The default value is 16.
      |=======================================================================
      {% endraw %}
      // component options: END








      // endpoint options: START
      The Netty HTTP component supports 82 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | protocol | common |  | String | *Required* The protocol to use which is either http or https
      | host | common |  | String | *Required* The local hostname such as localhost or 0.0.0.0 when being a consumer. The remote HTTP server hostname when using producer.
      | port | common |  | int | The host port number
      | path | common |  | String | Resource path
      | bridgeEndpoint | common | false | boolean | If the option is true the producer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the producer send all the fault response back. The consumer working in the bridge mode will skip the gzip compression and WWW URL form encoding (by adding the Exchange.SKIP_GZIP_ENCODING and Exchange.SKIP_WWW_FORM_URLENCODED headers to the consumed exchange).
      | disconnect | common | false | boolean | Whether or not to disconnect(close) from Netty Channel right after use. Can be used for both consumer and producer.
      | keepAlive | common | true | boolean | Setting to ensure socket is not closed due to inactivity
      | reuseAddress | common | true | boolean | Setting to facilitate socket multiplexing
      | sync | common | true | boolean | Setting to set endpoint as one-way or request-response
      | tcpNoDelay | common | true | boolean | Setting to improve TCP protocol performance
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | matchOnUriPrefix | consumer | false | boolean | Whether or not Camel should try to find a target consumer by matching the URI prefix if no exact match is found.
      | send503whenSuspended | consumer | true | boolean | Whether to send back HTTP status code 503 when the consumer has been suspended. If the option is false then the Netty Acceptor is unbound when the consumer is suspended so clients cannot connect anymore.
      | backlog | consumer (advanced) |  | int | Allows to configure a backlog for netty consumer (server). Note the backlog is just a best effort depending on the OS. Setting this option to a value such as 200 500 or 1000 tells the TCP stack how long the accept queue can be If this option is not configured then the backlog depends on OS setting.
      | bossCount | consumer (advanced) | 1 | int | When netty works on nio mode it uses default bossCount parameter from Netty which is 1. User can use this operation to override the default bossCount from Netty
      | bossPool | consumer (advanced) |  | BossPool | To use a explicit org.jboss.netty.channel.socket.nio.BossPool as the boss thread pool. For example to share a thread pool with multiple consumers. By default each consumer has their own boss pool with 1 core thread.
      | channelGroup | consumer (advanced) |  | ChannelGroup | To use a explicit ChannelGroup.
      | chunkedMaxContentLength | consumer (advanced) | 1048576 | int | Value in bytes the max content length per chunked frame received on the Netty HTTP server.
      | compression | consumer (advanced) | false | boolean | Allow using gzip/deflate for compression on the Netty HTTP server if the client supports it from the HTTP headers.
      | disableStreamCache | consumer (advanced) | false | boolean | Determines whether or not the raw input stream from Netty HttpRequestgetContent() is cached or not (Camel will read the stream into a in light-weight memory based Stream caching) cache. By default Camel will cache the Netty input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. Mind that if you enable this option then you cannot read the Netty stream multiple times out of the box and you would need manually to reset the reader index on the Netty raw stream.
      | disconnectOnNoReply | consumer (advanced) | true | boolean | If sync is enabled then this option dictates NettyConsumer if it should disconnect where there is no reply to send back.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | httpMethodRestrict | consumer (advanced) |  | String | To disable HTTP methods on the Netty HTTP consumer. You can specify multiple separated by comma.
      | mapHeaders | consumer (advanced) | true | boolean | If this option is enabled then during binding from Netty to Camel Message then the headers will be mapped as well (eg added as header to the Camel Message as well). You can turn off this option to disable this. The headers can still be accessed from the org.apache.camel.component.netty.http.NettyHttpMessage message with the method getHttpRequest() that returns the Netty HTTP request org.jboss.netty.handler.codec.http.HttpRequest instance.
      | maxChannelMemorySize | consumer (advanced) | 10485760 | long | The maximum total size of the queued events per channel when using orderedThreadPoolExecutor. Specify 0 to disable.
      | maxHeaderSize | consumer (advanced) | 8192 | int | The maximum length of all headers. If the sum of the length of each header exceeds this value a TooLongFrameException will be raised.
      | maxTotalMemorySize | consumer (advanced) | 209715200 | long | The maximum total size of the queued events for this pool when using orderedThreadPoolExecutor. Specify 0 to disable.
      | nettyServerBootstrapFactory | consumer (advanced) |  | NettyServerBootstrapFactory | To use a custom NettyServerBootstrapFactory
      | nettySharedHttpServer | consumer (advanced) |  | NettySharedHttpServer | To use a shared Netty HTTP server. See Netty HTTP Server Example for more details.
      | noReplyLogLevel | consumer (advanced) | WARN | LoggingLevel | If sync is enabled this option dictates NettyConsumer which logging level to use when logging a there is no reply to send back.
      | orderedThreadPoolExecutor | consumer (advanced) | true | boolean | Whether to use ordered thread pool to ensure events are processed orderly on the same channel. See details at the netty javadoc of org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor for more details.
      | serverClosedChannelExceptionCaughtLogLevel | consumer (advanced) | DEBUG | LoggingLevel | If the server (NettyConsumer) catches an java.nio.channels.ClosedChannelException then its logged using this logging level. This is used to avoid logging the closed channel exceptions as clients can disconnect abruptly and then cause a flood of closed exceptions in the Netty server.
      | serverExceptionCaughtLogLevel | consumer (advanced) | WARN | LoggingLevel | If the server (NettyConsumer) catches an exception then its logged using this logging level.
      | serverPipelineFactory | consumer (advanced) |  | ServerPipelineFactory | To use a custom ServerPipelineFactory
      | traceEnabled | consumer (advanced) | false | boolean | Specifies whether to enable HTTP TRACE for this Netty HTTP consumer. By default TRACE is turned off.
      | urlDecodeHeaders | consumer (advanced) | false | boolean | If this option is enabled then during binding from Netty to Camel Message then the header values will be URL decoded (eg 20 will be a space character. Notice this option is used by the default org.apache.camel.component.netty.http.NettyHttpBinding and therefore if you implement a custom org.apache.camel.component.netty.http.NettyHttpBinding then you would need to decode the headers accordingly to this option.
      | workerCount | consumer (advanced) |  | int | When netty works on nio mode it uses default workerCount parameter from Netty which is cpu_core_threads2. User can use this operation to override the default workerCount from Netty
      | workerPool | consumer (advanced) |  | WorkerPool | To use a explicit org.jboss.netty.channel.socket.nio.WorkerPool as the worker thread pool. For example to share a thread pool with multiple consumers. By default each consumer has their own worker pool with 2 x cpu count core threads.
      | connectTimeout | producer | 10000 | long | Time to wait for a socket connection to be available. Value is in millis.
      | requestTimeout | producer |  | long | Allows to use a timeout for the Netty producer when calling a remote server. By default no timeout is in use. The value is in milli seconds so eg 30000 is 30 seconds. The requestTimeout is using Netty's ReadTimeoutHandler to trigger the timeout.
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
      | clientPipelineFactory | producer (advanced) |  | ClientPipelineFactory | To use a custom ClientPipelineFactory
      | lazyChannelCreation | producer (advanced) | true | boolean | Channels can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
      | okStatusCodeRange | producer (advanced) | 200-299 | String | The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included. The default range is 200-299
      | producerPoolEnabled | producer (advanced) | true | boolean | Whether producer pool is enabled or not. Important: Do not turn this off as the pooling is needed for handling concurrency and reliable request/reply.
      | producerPoolMaxActive | producer (advanced) | -1 | int | Sets the cap on the number of objects that can be allocated by the pool (checked out to clients or idle awaiting checkout) at a given time. Use a negative value for no limit.
      | producerPoolMaxIdle | producer (advanced) | 100 | int | Sets the cap on the number of idle instances in the pool.
      | producerPoolMinEvictableIdle | producer (advanced) | 300000 | long | Sets the minimum amount of time (value in millis) an object may sit idle in the pool before it is eligible for eviction by the idle object evictor.
      | producerPoolMinIdle | producer (advanced) |  | int | Sets the minimum number of instances allowed in the producer pool before the evictor thread (if active) spawns new objects.
      | useChannelBuffer | producer (advanced) | false | boolean | If the useChannelBuffer is true netty producer will turn the message body into ChannelBuffer before sending it out.
      | useRelativePath | producer (advanced) | false | boolean | Sets whether to use a relative path in HTTP requests. Some third party backend systems such as IBM Datapower do not support absolute URIs in HTTP POSTs and setting this option to true can work around this problem.
      | bootstrapConfiguration | advanced |  | NettyServerBootstrapConfiguration | To use a custom configured NettyServerBootstrapConfiguration for configuring this endpoint.
      | configuration | advanced |  | NettyHttpConfiguration | To use a custom configured NettyHttpConfiguration for configuring this endpoint.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | nettyHttpBinding | advanced |  | NettyHttpBinding | To use a custom org.apache.camel.component.netty.http.NettyHttpBinding for binding to/from Netty and Camel Message API.
      | options | advanced |  | Map | Allows to configure additional netty options using option. as prefix. For example option.child.keepAlive=false to set the netty option child.keepAlive=false. See the Netty documentation for possible options that can be used.
      | receiveBufferSize | advanced | 65536 | long | The TCP/UDP buffer sizes to be used during inbound communication. Size is bytes.
      | receiveBufferSizePredictor | advanced |  | int | Configures the buffer size predictor. See details at Jetty documentation and this mail thread.
      | sendBufferSize | advanced | 65536 | long | The TCP/UDP buffer sizes to be used during outbound communication. Size is bytes.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | transferException | advanced | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | transferExchange | advanced | false | boolean | Only used for TCP. You can transfer the exchange over the wire instead of just the body. The following fields are transferred: In body Out body fault body In headers Out headers fault headers exchange properties exchange exception. This requires that the objects are serializable. Camel will exclude any non-serializable objects and log it at WARN level.
      | decoder | codec |  | ChannelHandler | To use a single decoder. This options is deprecated use encoders instead.
      | decoders | codec |  | String | A list of decoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
      | encoder | codec |  | ChannelHandler | To use a single encoder. This options is deprecated use encoders instead.
      | encoders | codec |  | String | A list of encoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
      | enabledProtocols | security | TLSv1,TLSv1.1,TLSv1.2 | String | Which protocols to enable when using SSL
      | keyStoreFile | security |  | File | Client side certificate keystore to be used for encryption
      | keyStoreFormat | security | JKS | String | Keystore format to be used for payload encryption. Defaults to JKS if not set
      | keyStoreResource | security |  | String | Client side certificate keystore to be used for encryption. Is loaded by default from classpath but you can prefix with classpath: file: or http: to load the resource from different systems.
      | needClientAuth | security | false | boolean | Configures whether the server needs client authentication when using SSL.
      | passphrase | security |  | String | Password setting to use in order to encrypt/decrypt payloads sent using SSH
      | securityConfiguration | security |  | NettyHttpSecurityConfiguration | Refers to a org.apache.camel.component.netty.http.NettyHttpSecurityConfiguration for configuring secure web resources.
      | securityOptions | security |  | Map | To configure NettyHttpSecurityConfiguration using key/value pairs from the map
      | securityProvider | security | SunX509 | String | Security provider to be used for payload encryption. Defaults to SunX509 if not set.
      | ssl | security | false | boolean | Setting to specify whether SSL encryption is applied to this endpoint
      | sslClientCertHeaders | security | false | boolean | When enabled and in SSL mode then the Netty consumer will enrich the Camel Message with headers having information about the client certificate such as subject name issuer name serial number and the valid date range.
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters
      | sslHandler | security |  | SslHandler | Reference to a class that could be used to return an SSL Handler
      | trustStoreFile | security |  | File | Server side certificate keystore to be used for encryption
      | trustStoreResource | security |  | String | Server side certificate keystore to be used for encryption. Is loaded by default from classpath but you can prefix with classpath: file: or http: to load the resource from different systems.
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[NettyHTTP-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The following headers can be used on the producer to control the HTTP
      request.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`CamelHttpMethod` |`String` |Allow to control what HTTP method to use such as GET, POST, TRACE etc.
      The type can also be a `org.jboss.netty.handler.codec.http.HttpMethod`
      instance.

      |`CamelHttpQuery` |`String` |Allows to provide URI query parameters as a `String` value that
      overrides the endpoint configuration. Separate multiple parameters using
      the & sign. For example: `foo=bar&beer=yes`.

      |`CamelHttpPath` |`String` |*Camel 2.13.1/2.12.4:* Allows to provide URI context-path and query
      parameters as a `String` value that overrides the endpoint
      configuration. This allows to reuse the same producer for calling same
      remote http server, but using a dynamic context-path and query
      parameters.

      |`Content-Type` |`String` |To set the content-type of the HTTP body. For example:
      `text/plain; charset="UTF-8"`.

      |`CamelHttpResponseCode` |`int` |Allows to set the HTTP Status code to use. By default 200 is used for
      success, and 500 for failure.
      |=======================================================================

      The following headers is provided as meta-data when a route starts from
      an link:netty-http.html[Netty HTTP] endpoint:

      The description in the table takes offset in a route having:
      `from("netty-http:http:0.0.0.0:8080/myapp")...`

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`CamelHttpMethod` |`String` |The HTTP method used, such as GET, POST, TRACE etc.

      |`CamelHttpUrl` |`String` |The URL including protocol, host and port, etc

      |`CamelHttpUri` |`String` |The URI without protocol, host and port, etc

      |`CamelHttpQuery` |`String` |Any query parameters, such as `foo=bar&beer=yes`

      |`CamelHttpRawQuery` |`String` |*Camel 2.13.0*: Any query parameters, such as `foo=bar&beer=yes`. Stored
      in the raw form, as they arrived to the consumer (i.e. before URL
      decoding).

      |`CamelHttpPath` |`String` |Additional context-path. This value is empty if the client called the
      context-path `/myapp`. If the client calls `/myapp/mystuff`, then this
      header value is `/mystuff`. In other words its the value after the
      context-path configured on the route endpoint.

      |`CamelHttpCharacterEncoding` |`String` |The charset from the content-type header.

      |`CamelHttpAuthentication` |`String` |If the user was authenticated using HTTP Basic then this header is added
      with the value `Basic`.

      |`Content-Type` |`String` | The content type if provided. For example: `text/plain; charset="UTF-8"`.
      |=======================================================================

      [[NettyHTTP-AccesstoNettytypes]]
      Access to Netty types
      ^^^^^^^^^^^^^^^^^^^^^

      This component uses the
      `org.apache.camel.component.netty.http.NettyHttpMessage` as the message
      implementation on the link:exchange.html[Exchange]. This allows end
      users to get access to the original Netty request/response instances if
      needed, as shown below. Mind that the original response may not be
      accessible at all times.

      [source,java]
      -----------------------------------------------------------------------------------------------------------------
      org.jboss.netty.handler.codec.http.HttpRequest request = exchange.getIn(NettyHttpMessage.class).getHttpRequest();
      -----------------------------------------------------------------------------------------------------------------

      [[NettyHTTP-Examples]]
      Examples
      ^^^^^^^^

      In the route below we use link:netty-http.html[Netty HTTP] as a HTTP
      server, which returns back a hardcoded "Bye World" message.

      [source,java]
      ----------------------------------------------
          from("netty-http:http://0.0.0.0:8080/foo")
            .transform().constant("Bye World");
      ----------------------------------------------

      And we can call this HTTP server using Camel also, with the
      link:producertemplate.html[ProducerTemplate] as shown below:

      [source,java]
      -----------------------------------------------------------------------------------------------------------
          String out = template.requestBody("netty-http:http://localhost:8080/foo", "Hello World", String.class);
          System.out.println(out);
      -----------------------------------------------------------------------------------------------------------

      And we get back "Bye World" as the output.

      [[NettyHTTP-HowdoIletNettymatchwildcards]]
      How do I let Netty match wildcards
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      By default link:netty-http.html[Netty HTTP] will only match on exact
      uri's. But you can instruct Netty to match prefixes. For example

      [source,java]
      ----------------------------------------------------------
      from("netty-http:http://0.0.0.0:8123/foo").to("mock:foo");
      ----------------------------------------------------------

      In the route above link:netty-http.html[Netty HTTP] will only match if
      the uri is an exact match, so it will match if you enter +
       `http://0.0.0.0:8123/foo` but not match if you do
      `http://0.0.0.0:8123/foo/bar`.

      So if you want to enable wildcard matching you do as follows:

      [source,java]
      --------------------------------------------------------------------------------
      from("netty-http:http://0.0.0.0:8123/foo?matchOnUriPrefix=true").to("mock:foo");
      --------------------------------------------------------------------------------

      So now Netty matches any endpoints with starts with `foo`.

      To match *any* endpoint you can do:

      [source,java]
      ----------------------------------------------------------------------------
      from("netty-http:http://0.0.0.0:8123?matchOnUriPrefix=true").to("mock:foo");
      ----------------------------------------------------------------------------

      [[NettyHTTP-Usingmultiplerouteswithsameport]]
      Using multiple routes with same port
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In the same link:camelcontext.html[CamelContext] you can have multiple
      routes from link:netty-http.html[Netty HTTP] that shares the same port
      (eg a `org.jboss.netty.bootstrap.ServerBootstrap` instance). Doing this
      requires a number of bootstrap options to be identical in the routes, as
      the routes will share the same
      `org.jboss.netty.bootstrap.ServerBootstrap` instance. The instance will
      be configured with the options from the first route created.

      The options the routes must be identical configured is all the options
      defined in the
      `org.apache.camel.component.netty.NettyServerBootstrapConfiguration`
      configuration class. If you have configured another route with different
      options, Camel will throw an exception on startup, indicating the
      options is not identical. To mitigate this ensure all options is
      identical.

      Here is an example with two routes that share the same port.

      *Two routes sharing the same port*

      [source,java]
      ----------------------------------------------
      from("netty-http:http://0.0.0.0:{{port}}/foo")
        .to("mock:foo")
        .transform().constant("Bye World");

      from("netty-http:http://0.0.0.0:{{port}}/bar")
        .to("mock:bar")
        .transform().constant("Bye Camel");
      ----------------------------------------------

      And here is an example of a mis configured 2nd route that do not have
      identical
      `org.apache.camel.component.netty.NettyServerBootstrapConfiguration`
      option as the 1st route. This will cause Camel to fail on startup.

      *Two routes sharing the same port, but the 2nd route is misconfigured
      and will fail on starting*

      [source,java]
      --------------------------------------------------------------------------------------
      from("netty-http:http://0.0.0.0:{{port}}/foo")
        .to("mock:foo")
        .transform().constant("Bye World");

      // we cannot have a 2nd route on same port with SSL enabled, when the 1st route is NOT
      from("netty-http:http://0.0.0.0:{{port}}/bar?ssl=true")
        .to("mock:bar")
        .transform().constant("Bye Camel");
      --------------------------------------------------------------------------------------

      [[NettyHTTP-Reusingsameserverbootstrapconfigurationwithmultipleroutes]]
      Reusing same server bootstrap configuration with multiple routes
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      By configuring the common server bootstrap option in an single instance
      of a
      `org.apache.camel.component.netty.NettyServerBootstrapConfiguration`
      type, we can use the `bootstrapConfiguration` option on the
      link:netty-http.html[Netty HTTP] consumers to refer and reuse the same
      options across all consumers.

      [source,xml]
      ----------------------------------------------------------------------------------------------------------------
      <bean id="nettyHttpBootstrapOptions" class="org.apache.camel.component.netty.NettyServerBootstrapConfiguration">
        <property name="backlog" value="200"/>
        <property name="connectTimeout" value="20000"/>
        <property name="workerCount" value="16"/>
      </bean>
      ----------------------------------------------------------------------------------------------------------------

      And in the routes you refer to this option as shown below

      [source,xml]
      ---------------------------------------------------------------------------------------------------------
      <route>
        <from uri="netty-http:http://0.0.0.0:{{port}}/foo?bootstrapConfiguration=#nettyHttpBootstrapOptions"/>
        ...
      </route>

      <route>
        <from uri="netty-http:http://0.0.0.0:{{port}}/bar?bootstrapConfiguration=#nettyHttpBootstrapOptions"/>
        ...
      </route>

      <route>
        <from uri="netty-http:http://0.0.0.0:{{port}}/beer?bootstrapConfiguration=#nettyHttpBootstrapOptions"/>
        ...
      </route>
      ---------------------------------------------------------------------------------------------------------

      [[NettyHTTP-ReusingsameserverbootstrapconfigurationwithmultipleroutesacrossmultiplebundlesinOSGicontainer]]
      Reusing same server bootstrap configuration with multiple routes across multiple bundles in OSGi container
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      See the link:netty-http-server-example.html[Netty HTTP Server Example]
      for more details and example how to do that.

      [[NettyHTTP-UsingHTTPBasicAuthentication]]
      Using HTTP Basic Authentication
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The link:netty-http.html[Netty HTTP] consumer supports HTTP basic
      authentication by specifying the security realm name to use, as shown
      below

      [source,java]
      -----------------------------------------------------------------------------------------
      <route>
         <from uri="netty-http:http://0.0.0.0:{{port}}/foo?securityConfiguration.realm=karaf"/>
         ...
      </route>
      -----------------------------------------------------------------------------------------

      The realm name is mandatory to enable basic authentication. By default
      the JAAS based authenticator is used, which will use the realm name
      specified (karaf in the example above) and use the JAAS realm and the
      JAAS \{\{LoginModule}}s of this realm for authentication.

      End user of Apache Karaf / ServiceMix has a karaf realm out of the box,
      and hence why the example above would work out of the box in these
      containers.

      [[NettyHTTP-SpecifyingACLonwebresources]]
      Specifying ACL on web resources
      +++++++++++++++++++++++++++++++

      The `org.apache.camel.component.netty.http.SecurityConstraint` allows to
      define constrains on web resources. And the
      `org.apache.camel.component.netty.http.SecurityConstraintMapping` is
      provided out of the box, allowing to easily define inclusions and
      exclusions with roles.

      For example as shown below in the XML DSL, we define the constraint
      bean:

      [source,xml]
      ------------------------------------------------------------------------------------------------
        <bean id="constraint" class="org.apache.camel.component.netty.http.SecurityConstraintMapping">
          <!-- inclusions defines url -> roles restrictions -->
          <!-- a * should be used for any role accepted (or even no roles) -->
          <property name="inclusions">
            <map>
              <entry key="/*" value="*"/>
              <entry key="/admin/*" value="admin"/>
              <entry key="/guest/*" value="admin,guest"/>
            </map>
          </property>
          <!-- exclusions is used to define public urls, which requires no authentication -->
          <property name="exclusions">
            <set>
              <value>/public/*</value>
            </set>
          </property>
        </bean>
      ------------------------------------------------------------------------------------------------

      The constraint above is define so that

      * access to /* is restricted and any roles is accepted (also if user has
      no roles)
      * access to /admin/* requires the admin role
      * access to /guest/* requires the admin or guest role
      * access to /public/* is an exclusion which means no authentication is
      needed, and is therefore public for everyone without logging in

      To use this constraint we just need to refer to the bean id as shown
      below:

      [source,xml]
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      <route>
         <from uri="netty-http:http://0.0.0.0:{{port}}/foo?matchOnUriPrefix=true&amp;securityConfiguration.realm=karaf&amp;securityConfiguration.securityConstraint=#constraint"/>
         ...
      </route>
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[NettyHTTP-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:netty.html[Netty]
      * link:netty-http-server-example.html[Netty HTTP Server Example]
      * link:jetty.html[Jetty]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-netty4
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: netty4
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: netty4
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: netty4
          spec:
            containers:
            - image: fabric8/connector-netty4:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: netty4
        syntax: netty4:protocol:host:port
        title: Netty4
        description: Socket level networking using TCP or UDP with the Netty 4.x library.
        label: networking,tcp,udp
        deprecated: false
        async: true
        javaType: org.apache.camel.component.netty4.NettyComponent
        groupId: org.apache.camel
        artifactId: camel-netty4
        version: 2.18.1
      componentProperties:
        maximumPoolSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The thread pool size for the EventExecutorGroup if its in use. The default value is 16.
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty4.NettyConfiguration
          deprecated: false
          secret: false
          description: To use the NettyConfiguration as configuration when creating endpoints.
        executorService:
          kind: property
          type: object
          javaType: io.netty.util.concurrent.EventExecutorGroup
          deprecated: false
          secret: false
          description: To use the given EventExecutorGroup
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - tcp
          - udp
          deprecated: false
          secret: false
          description: The protocol to use which can be tcp or udp.
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hostname. For the consumer the hostname is localhost or 0.0.0.0 For the producer the hostname is the remote host to connect to
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The host port number
        disconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect(close) from Netty Channel right after use. Can be used for both consumer and producer.
        keepAlive:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to ensure socket is not closed due to inactivity
        reuseAddress:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to facilitate socket multiplexing
        sync:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to set endpoint as one-way or request-response
        tcpNoDelay:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to improve TCP protocol performance
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        broadcast:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Setting to choose Multicast over UDP
        clientMode:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the clientMode is true netty consumer will connect the address as a TCP client.
        reconnect:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Used only in clientMode in consumer the consumer will attempt to reconnect on disconnection if this is enabled
        reconnectInterval:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Used if reconnect and clientMode is enabled. The interval in milli seconds to attempt reconnection
        backlog:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Allows to configure a backlog for netty consumer (server). Note the backlog is just a best effort depending on the OS. Setting this option to a value such as 200 500 or 1000 tells the TCP stack how long the accept queue can be If this option is not configured then the backlog depends on OS setting.
        bossCount:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: When netty works on nio mode it uses default bossCount parameter from Netty which is 1. User can use this operation to override the default bossCount from Netty
        bossGroup:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: io.netty.channel.EventLoopGroup
          deprecated: false
          secret: false
          description: Set the BossGroup which could be used for handling the new connection of the server side across the NettyEndpoint
        disconnectOnNoReply:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If sync is enabled then this option dictates NettyConsumer if it should disconnect where there is no reply to send back.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        nettyServerBootstrapFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.NettyServerBootstrapFactory
          deprecated: false
          secret: false
          description: To use a custom NettyServerBootstrapFactory
        networkInterface:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When using UDP then this option can be used to specify a network interface by its name such as eth0 to join a multicast group.
        noReplyLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If sync is enabled this option dictates NettyConsumer which logging level to use when logging a there is no reply to send back.
        serverClosedChannelExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: DEBUG
          description: If the server (NettyConsumer) catches an java.nio.channels.ClosedChannelException then its logged using this logging level. This is used to avoid logging the closed channel exceptions as clients can disconnect abruptly and then cause a flood of closed exceptions in the Netty server.
        serverExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If the server (NettyConsumer) catches an exception then its logged using this logging level.
        serverInitializerFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.ServerInitializerFactory
          deprecated: false
          secret: false
          description: To use a custom ServerInitializerFactory
        usingExecutorService:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use ordered thread pool to ensure events are processed orderly on the same channel.
        connectTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Time to wait for a socket connection to be available. Value is in millis.
        requestTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Allows to use a timeout for the Netty producer when calling a remote server. By default no timeout is in use. The value is in milli seconds so eg 30000 is 30 seconds. The requestTimeout is using Netty's ReadTimeoutHandler to trigger the timeout.
        reuseChannel:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option allows producers to reuse the same Netty Channel for the lifecycle of processing the Exchange. This is useable if you need to call a server multiple times in a Camel route and want to use the same network connection. When using this the channel is not returned to the connection pool until the Exchange is done; or disconnected if the disconnect option is set to true. The reused Channel is stored on the Exchange as an exchange property with the key link NettyConstantsNETTY_CHANNEL which allows you to obtain the channel during routing and use it as well.
        clientInitializerFactory:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.ClientInitializerFactory
          deprecated: false
          secret: false
          description: To use a custom ClientInitializerFactory
        lazyChannelCreation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Channels can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
        producerPoolEnabled:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'Whether producer pool is enabled or not. Important: Do not turn
            this off as the pooling is needed for handling concurrency and reliable request/reply.'
        producerPoolMaxActive:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the cap on the number of objects that can be allocated by the pool (checked out to clients or idle awaiting checkout) at a given time. Use a negative value for no limit.
        producerPoolMaxIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Sets the cap on the number of idle instances in the pool.
        producerPoolMinEvictableIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the minimum amount of time (value in millis) an object may sit idle in the pool before it is eligible for eviction by the idle object evictor.
        producerPoolMinIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the minimum number of instances allowed in the producer pool before the evictor thread (if active) spawns new objects.
        udpConnectionlessSending:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option supports connection less udp sending which is a real fire and forget. A connected udp send receive the PortUnreachableException if no one is listen on the receiving port.
        useByteBuf:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the useByteBuf is true netty producer will turn the message body into ByteBuf before sending it out.
        allowSerializedHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only used for TCP when transferExchange is true. When set to true serializable objects in headers and properties will be added to the exchange. Otherwise Camel will exclude any non-serializable objects and log it at WARN level.
        bootstrapConfiguration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty4.NettyServerBootstrapConfiguration
          deprecated: false
          secret: false
          description: To use a custom configured NettyServerBootstrapConfiguration for configuring this endpoint.
        channelGroup:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: io.netty.channel.group.ChannelGroup
          deprecated: false
          secret: false
          description: To use a explicit ChannelGroup.
        nativeTransport:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to use native transport instead of NIO. Native transport
            takes advantage of the host operating system and is only supported on some platforms.
            You need to add the netty JAR for the host operating system you are using. See
            more details at: http://netty.io/wiki/native-transports.html'
        options:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: option.
          multiValue: true
          deprecated: false
          secret: false
          description: Allows to configure additional netty options using option. as prefix. For example option.child.keepAlive=false to set the netty option child.keepAlive=false. See the Netty documentation for possible options that can be used.
        receiveBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during inbound communication. Size is bytes.
        receiveBufferSizePredictor:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Configures the buffer size predictor. See details at Jetty documentation and this mail thread.
        sendBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during outbound communication. Size is bytes.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Only used for TCP. You can transfer the exchange over the wire instead
            of just the body. The following fields are transferred: In body Out body fault
            body In headers Out headers fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level.'
        udpByteArrayCodec:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: For UDP only. If enabled the using byte array codec instead of Java serialization protocol.
        workerCount:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: When netty works on nio mode it uses default workerCount parameter from Netty which is cpu_core_threads2. User can use this operation to override the default workerCount from Netty
        workerGroup:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: io.netty.channel.EventLoopGroup
          deprecated: false
          secret: false
          description: To use a explicit EventLoopGroup as the boss thread pool. For example to share a thread pool with multiple consumers or producers. By default each consumer or producer has their own worker pool with 2 x cpu count core threads.
        allowDefaultCodec:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: The netty component installs a default codec if both encoder/deocder is null and textline is false. Setting allowDefaultCodec to false prevents the netty component from installing a default codec as the first element in the filter chain.
        autoAppendDelimiter:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to auto append missing end delimiter when sending using the textline codec.
        decoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: io.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: A custom ChannelHandler class that can be used to perform special marshalling of inbound payloads.
        decoderMaxLineLength:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1024"
          description: The max line length to use for the textline codec.
        decoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of decoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        delimiter:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: org.apache.camel.component.netty4.TextLineDelimiter
          enum:
          - LINE
          - NULL
          deprecated: false
          secret: false
          defaultValue: LINE
          description: The delimiter to use for the textline codec. Possible values are LINE and NULL.
        encoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: io.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: A custom ChannelHandler class that can be used to perform special marshalling of outbound payloads.
        encoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of encoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        encoding:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The encoding (a charset name) to use for the textline codec. If not provided Camel will use the JVM default Charset.
        textline:
          kind: parameter
          group: codec
          label: codec
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only used for TCP. If no codec is specified you can use this flag to indicate a text line based codec; if not specified or the value is false then Object Serialization is assumed over TCP.
        enabledProtocols:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLSv1,TLSv1.1,TLSv1.2
          description: Which protocols to enable when using SSL
        keyStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Client side certificate keystore to be used for encryption
        keyStoreFormat:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Keystore format to be used for payload encryption. Defaults to JKS if not set
        keyStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Client side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
        needClientAuth:
          kind: parameter
          group: security
          label: consumer,security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configures whether the server needs client authentication when using SSL.
        passphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password setting to use in order to encrypt/decrypt payloads sent using SSH
        securityProvider:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Security provider to be used for payload encryption. Defaults to SunX509 if not set.
        ssl:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Setting to specify whether SSL encryption is applied to this endpoint
        sslClientCertHeaders:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When enabled and in SSL mode then the Netty consumer will enrich the Camel Message with headers having information about the client certificate such as subject name issuer name serial number and the valid date range.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        sslHandler:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: io.netty.handler.ssl.SslHandler
          deprecated: false
          secret: false
          description: Reference to a class that could be used to return an SSL Handler
        trustStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Server side certificate keystore to be used for encryption
        trustStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Server side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
    documentation.adoc: "[[Netty4-NettyComponent]]\nNetty Component\n~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.14*\n\nThe *netty4* component in Camel is a socket\
      \ communication component,\nbased on the http://netty.io/[Netty] project version\
      \ 4. +\n Netty is a NIO client server framework which enables quick and easy\n\
      development of netwServerInitializerFactoryork applications such as\nprotocol\
      \ servers and clients. +\n Netty greatly simplifies and streamlines network\
      \ programming such as\nTCP and UDP socket server.\n\nThis camel component supports\
      \ both producer and consumer endpoints.\n\nThe Netty component has several options\
      \ and allows fine-grained control\nof a number of TCP/UDP communication parameters\
      \ (buffer sizes,\nkeepAlives, tcpNoDelay etc) and facilitates both In-Only and\
      \ In-Out\ncommunication on a Camel route.\n\nMaven users will need to add the\
      \ following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-netty4</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Netty4-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe URI scheme for a netty\
      \ component is as follows\n\n[source,java]\n----------------------------------------\n\
      netty4:tcp://localhost:99999[?options]\nnetty4:udp://remotehost:99999/[?options]\n\
      ----------------------------------------\n\nThis component supports producer\
      \ and consumer endpoints for both TCP and\nUDP.\n\nYou can append query options\
      \ to the URI in the following format,\n`?option=value&option=value&...`\n\n\
      [[Netty4-Options]]\nOptions\n^^^^^^^\n\n\n\n\n\n// component options: START\n\
      The Netty4 component supports 3 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| maximumPoolSize | int | The thread pool\
      \ size for the EventExecutorGroup if its in use. The default value is 16.\n\
      | configuration | NettyConfiguration | To use the NettyConfiguration as configuration\
      \ when creating endpoints.\n| executorService | EventExecutorGroup | To use\
      \ the given EventExecutorGroup\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Netty4 component supports 74 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* The protocol to use which can be tcp or udp.\n| host |\
      \ common |  | String | *Required* The hostname. For the consumer the hostname\
      \ is localhost or 0.0.0.0 For the producer the hostname is the remote host to\
      \ connect to\n| port | common |  | int | *Required* The host port number\n|\
      \ disconnect | common | false | boolean | Whether or not to disconnect(close)\
      \ from Netty Channel right after use. Can be used for both consumer and producer.\n\
      | keepAlive | common | true | boolean | Setting to ensure socket is not closed\
      \ due to inactivity\n| reuseAddress | common | true | boolean | Setting to facilitate\
      \ socket multiplexing\n| sync | common | true | boolean | Setting to set endpoint\
      \ as one-way or request-response\n| tcpNoDelay | common | true | boolean | Setting\
      \ to improve TCP protocol performance\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | broadcast | consumer | false | boolean | Setting to choose Multicast over\
      \ UDP\n| clientMode | consumer | false | boolean | If the clientMode is true\
      \ netty consumer will connect the address as a TCP client.\n| reconnect | consumer\
      \ | true | boolean | Used only in clientMode in consumer the consumer will attempt\
      \ to reconnect on disconnection if this is enabled\n| reconnectInterval | consumer\
      \ | 10000 | int | Used if reconnect and clientMode is enabled. The interval\
      \ in milli seconds to attempt reconnection\n| backlog | consumer (advanced)\
      \ |  | int | Allows to configure a backlog for netty consumer (server). Note\
      \ the backlog is just a best effort depending on the OS. Setting this option\
      \ to a value such as 200 500 or 1000 tells the TCP stack how long the accept\
      \ queue can be If this option is not configured then the backlog depends on\
      \ OS setting.\n| bossCount | consumer (advanced) | 1 | int | When netty works\
      \ on nio mode it uses default bossCount parameter from Netty which is 1. User\
      \ can use this operation to override the default bossCount from Netty\n| bossGroup\
      \ | consumer (advanced) |  | EventLoopGroup | Set the BossGroup which could\
      \ be used for handling the new connection of the server side across the NettyEndpoint\n\
      | disconnectOnNoReply | consumer (advanced) | true | boolean | If sync is enabled\
      \ then this option dictates NettyConsumer if it should disconnect where there\
      \ is no reply to send back.\n| exceptionHandler | consumer (advanced) |  | ExceptionHandler\
      \ | To let the consumer use a custom ExceptionHandler. Notice if the option\
      \ bridgeErrorHandler is enabled then this options is not in use. By default\
      \ the consumer will deal with exceptions that will be logged at WARN/ERROR level\
      \ and ignored.\n| exchangePattern | consumer (advanced) |  | ExchangePattern\
      \ | Sets the exchange pattern when the consumer creates an exchange.\n| nettyServerBootstrapFactory\
      \ | consumer (advanced) |  | NettyServerBootstrapFactory | To use a custom NettyServerBootstrapFactory\n\
      | networkInterface | consumer (advanced) |  | String | When using UDP then this\
      \ option can be used to specify a network interface by its name such as eth0\
      \ to join a multicast group.\n| noReplyLogLevel | consumer (advanced) | WARN\
      \ | LoggingLevel | If sync is enabled this option dictates NettyConsumer which\
      \ logging level to use when logging a there is no reply to send back.\n| serverClosedChannelExceptionCaughtLogLevel\
      \ | consumer (advanced) | DEBUG | LoggingLevel | If the server (NettyConsumer)\
      \ catches an java.nio.channels.ClosedChannelException then its logged using\
      \ this logging level. This is used to avoid logging the closed channel exceptions\
      \ as clients can disconnect abruptly and then cause a flood of closed exceptions\
      \ in the Netty server.\n| serverExceptionCaughtLogLevel | consumer (advanced)\
      \ | WARN | LoggingLevel | If the server (NettyConsumer) catches an exception\
      \ then its logged using this logging level.\n| serverInitializerFactory | consumer\
      \ (advanced) |  | ServerInitializerFactory | To use a custom ServerInitializerFactory\n\
      | usingExecutorService | consumer (advanced) | true | boolean | Whether to use\
      \ ordered thread pool to ensure events are processed orderly on the same channel.\n\
      | connectTimeout | producer | 10000 | int | Time to wait for a socket connection\
      \ to be available. Value is in millis.\n| requestTimeout | producer |  | long\
      \ | Allows to use a timeout for the Netty producer when calling a remote server.\
      \ By default no timeout is in use. The value is in milli seconds so eg 30000\
      \ is 30 seconds. The requestTimeout is using Netty's ReadTimeoutHandler to trigger\
      \ the timeout.\n| reuseChannel | producer | false | boolean | This option allows\
      \ producers to reuse the same Netty Channel for the lifecycle of processing\
      \ the Exchange. This is useable if you need to call a server multiple times\
      \ in a Camel route and want to use the same network connection. When using this\
      \ the channel is not returned to the connection pool until the Exchange is done;\
      \ or disconnected if the disconnect option is set to true. The reused Channel\
      \ is stored on the Exchange as an exchange property with the key link NettyConstantsNETTY_CHANNEL\
      \ which allows you to obtain the channel during routing and use it as well.\n\
      | clientInitializerFactory | producer (advanced) |  | ClientInitializerFactory\
      \ | To use a custom ClientInitializerFactory\n| lazyChannelCreation | producer\
      \ (advanced) | true | boolean | Channels can be lazily created to avoid exceptions\
      \ if the remote server is not up and running when the Camel producer is started.\n\
      | producerPoolEnabled | producer (advanced) | true | boolean | Whether producer\
      \ pool is enabled or not. Important: Do not turn this off as the pooling is\
      \ needed for handling concurrency and reliable request/reply.\n| producerPoolMaxActive\
      \ | producer (advanced) | -1 | int | Sets the cap on the number of objects that\
      \ can be allocated by the pool (checked out to clients or idle awaiting checkout)\
      \ at a given time. Use a negative value for no limit.\n| producerPoolMaxIdle\
      \ | producer (advanced) | 100 | int | Sets the cap on the number of idle instances\
      \ in the pool.\n| producerPoolMinEvictableIdle | producer (advanced) | 300000\
      \ | long | Sets the minimum amount of time (value in millis) an object may sit\
      \ idle in the pool before it is eligible for eviction by the idle object evictor.\n\
      | producerPoolMinIdle | producer (advanced) |  | int | Sets the minimum number\
      \ of instances allowed in the producer pool before the evictor thread (if active)\
      \ spawns new objects.\n| udpConnectionlessSending | producer (advanced) | false\
      \ | boolean | This option supports connection less udp sending which is a real\
      \ fire and forget. A connected udp send receive the PortUnreachableException\
      \ if no one is listen on the receiving port.\n| useByteBuf | producer (advanced)\
      \ | false | boolean | If the useByteBuf is true netty producer will turn the\
      \ message body into ByteBuf before sending it out.\n| allowSerializedHeaders\
      \ | advanced | false | boolean | Only used for TCP when transferExchange is\
      \ true. When set to true serializable objects in headers and properties will\
      \ be added to the exchange. Otherwise Camel will exclude any non-serializable\
      \ objects and log it at WARN level.\n| bootstrapConfiguration | advanced | \
      \ | NettyServerBootstrapConfiguration | To use a custom configured NettyServerBootstrapConfiguration\
      \ for configuring this endpoint.\n| channelGroup | advanced |  | ChannelGroup\
      \ | To use a explicit ChannelGroup.\n| nativeTransport | advanced | false |\
      \ boolean | Whether to use native transport instead of NIO. Native transport\
      \ takes advantage of the host operating system and is only supported on some\
      \ platforms. You need to add the netty JAR for the host operating system you\
      \ are using. See more details at: http://netty.io/wiki/native-transports.html\n\
      | options | advanced |  | Map | Allows to configure additional netty options\
      \ using option. as prefix. For example option.child.keepAlive=false to set the\
      \ netty option child.keepAlive=false. See the Netty documentation for possible\
      \ options that can be used.\n| receiveBufferSize | advanced | 65536 | int |\
      \ The TCP/UDP buffer sizes to be used during inbound communication. Size is\
      \ bytes.\n| receiveBufferSizePredictor | advanced |  | int | Configures the\
      \ buffer size predictor. See details at Jetty documentation and this mail thread.\n\
      | sendBufferSize | advanced | 65536 | int | The TCP/UDP buffer sizes to be used\
      \ during outbound communication. Size is bytes.\n| synchronous | advanced |\
      \ false | boolean | Sets whether synchronous processing should be strictly used\
      \ or Camel is allowed to use asynchronous processing (if supported).\n| transferExchange\
      \ | advanced | false | boolean | Only used for TCP. You can transfer the exchange\
      \ over the wire instead of just the body. The following fields are transferred:\
      \ In body Out body fault body In headers Out headers fault headers exchange\
      \ properties exchange exception. This requires that the objects are serializable.\
      \ Camel will exclude any non-serializable objects and log it at WARN level.\n\
      | udpByteArrayCodec | advanced | false | boolean | For UDP only. If enabled\
      \ the using byte array codec instead of Java serialization protocol.\n| workerCount\
      \ | advanced |  | int | When netty works on nio mode it uses default workerCount\
      \ parameter from Netty which is cpu_core_threads2. User can use this operation\
      \ to override the default workerCount from Netty\n| workerGroup | advanced |\
      \  | EventLoopGroup | To use a explicit EventLoopGroup as the boss thread pool.\
      \ For example to share a thread pool with multiple consumers or producers. By\
      \ default each consumer or producer has their own worker pool with 2 x cpu count\
      \ core threads.\n| allowDefaultCodec | codec | true | boolean | The netty component\
      \ installs a default codec if both encoder/deocder is null and textline is false.\
      \ Setting allowDefaultCodec to false prevents the netty component from installing\
      \ a default codec as the first element in the filter chain.\n| autoAppendDelimiter\
      \ | codec | true | boolean | Whether or not to auto append missing end delimiter\
      \ when sending using the textline codec.\n| decoder | codec |  | ChannelHandler\
      \ | A custom ChannelHandler class that can be used to perform special marshalling\
      \ of inbound payloads.\n| decoderMaxLineLength | codec | 1024 | int | The max\
      \ line length to use for the textline codec.\n| decoders | codec |  | String\
      \ | A list of decoders to be used. You can use a String which have values separated\
      \ by comma and have the values be looked up in the Registry. Just remember to\
      \ prefix the value with so Camel knows it should lookup.\n| delimiter | codec\
      \ | LINE | TextLineDelimiter | The delimiter to use for the textline codec.\
      \ Possible values are LINE and NULL.\n| encoder | codec |  | ChannelHandler\
      \ | A custom ChannelHandler class that can be used to perform special marshalling\
      \ of outbound payloads.\n| encoders | codec |  | String | A list of encoders\
      \ to be used. You can use a String which have values separated by comma and\
      \ have the values be looked up in the Registry. Just remember to prefix the\
      \ value with so Camel knows it should lookup.\n| encoding | codec |  | String\
      \ | The encoding (a charset name) to use for the textline codec. If not provided\
      \ Camel will use the JVM default Charset.\n| textline | codec | false | boolean\
      \ | Only used for TCP. If no codec is specified you can use this flag to indicate\
      \ a text line based codec; if not specified or the value is false then Object\
      \ Serialization is assumed over TCP.\n| enabledProtocols | security | TLSv1,TLSv1.1,TLSv1.2\
      \ | String | Which protocols to enable when using SSL\n| keyStoreFile | security\
      \ |  | File | Client side certificate keystore to be used for encryption\n|\
      \ keyStoreFormat | security |  | String | Keystore format to be used for payload\
      \ encryption. Defaults to JKS if not set\n| keyStoreResource | security |  |\
      \ String | Client side certificate keystore to be used for encryption. Is loaded\
      \ by default from classpath but you can prefix with classpath: file: or http:\
      \ to load the resource from different systems.\n| needClientAuth | security\
      \ | false | boolean | Configures whether the server needs client authentication\
      \ when using SSL.\n| passphrase | security |  | String | Password setting to\
      \ use in order to encrypt/decrypt payloads sent using SSH\n| securityProvider\
      \ | security |  | String | Security provider to be used for payload encryption.\
      \ Defaults to SunX509 if not set.\n| ssl | security | false | boolean | Setting\
      \ to specify whether SSL encryption is applied to this endpoint\n| sslClientCertHeaders\
      \ | security | false | boolean | When enabled and in SSL mode then the Netty\
      \ consumer will enrich the Camel Message with headers having information about\
      \ the client certificate such as subject name issuer name serial number and\
      \ the valid date range.\n| sslContextParameters | security |  | SSLContextParameters\
      \ | To configure security using SSLContextParameters\n| sslHandler | security\
      \ |  | SslHandler | Reference to a class that could be used to return an SSL\
      \ Handler\n| trustStoreFile | security |  | File | Server side certificate keystore\
      \ to be used for encryption\n| trustStoreResource | security |  | String | Server\
      \ side certificate keystore to be used for encryption. Is loaded by default\
      \ from classpath but you can prefix with classpath: file: or http: to load the\
      \ resource from different systems.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n\n\n[[Netty4-RegistrybasedOptions]]\n\
      Registry based Options\n^^^^^^^^^^^^^^^^^^^^^^\n\nCodec Handlers and SSL Keystores\
      \ can be enlisted in the\nlink:registry.html[Registry], such as in the Spring\
      \ XML file. \nThe values that could be passed in, are the following:\n\n[width=\"\
      100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Description\n\n|`passphrase` |password setting to use in order to encrypt/decrypt\
      \ payloads sent using\nSSH\n\n|`keyStoreFormat` |keystore format to be used\
      \ for payload encryption. Defaults to \"JKS\" if\nnot set\n\n|`securityProvider`\
      \ |Security provider to be used for payload encryption. Defaults to\n\"SunX509\"\
      \ if not set.\n\n|`keyStoreFile` |*deprecated:* Client side certificate keystore\
      \ to be used for encryption\n\n|`trustStoreFile` |*deprecated:* Server side\
      \ certificate keystore to be used for encryption\n\n|`keyStoreResource` |*Camel\
      \ 2.11.1:* Client side certificate keystore to be used for\nencryption. Is loaded\
      \ by default from classpath, but you can prefix with\n`\"classpath:\"`, `\"\
      file:\"`, or `\"http:\"` to load the resource from\ndifferent systems.\n\n|`trustStoreResource`\
      \ |*Camel 2.11.1:* Server side certificate keystore to be used for\nencryption.\
      \ Is loaded by default from classpath, but you can prefix with\n`\"classpath:\"\
      `, `\"file:\"`, or `\"http:\"` to load the resource from\ndifferent systems.\n\
      \n|`sslHandler` |Reference to a class that could be used to return an SSL Handler\n\
      \n|`encoder` |A custom `ChannelHandler` class that can be used to perform special\n\
      marshalling of outbound payloads. Must override\nio.netty.channel.ChannelInboundHandlerAdapter.\n\
      \n|`encoders` |A list of encoders to be used. You can use a String which have\
      \ values\nseparated by comma, and have the values be looked up in the\nlink:registry.html[Registry].\
      \ Just remember to prefix the value with #\nso Camel knows it should lookup.\n\
      \n|`decoder` |A custom `ChannelHandler` class that can be used to perform special\n\
      marshalling of inbound payloads. Must override\nio.netty.channel.ChannelOutboundHandlerAdapter.\n\
      \n|`decoders` |A list of decoders to be used. You can use a String which have\
      \ values\nseparated by comma, and have the values be looked up in the\nlink:registry.html[Registry].\
      \ Just remember to prefix the value with #\nso Camel knows it should lookup.\n\
      |=======================================================================\n\n\
      *Important:* Read below about using non shareable encoders/decoders.\n\n[[Netty4-Usingnonshareableencodersordecoders]]\n\
      Using non shareable encoders or decoders\n++++++++++++++++++++++++++++++++++++++++\n\
      \nIf your encoders or decoders is not shareable (eg they have the\n@Shareable\
      \ class annotation), then your encoder/decoder must implement\nthe `org.apache.camel.component.netty.ChannelHandlerFactory`\
      \ interface,\nand return a new instance in the `newChannelHandler` method. This\
      \ is to\nensure the encoder/decoder can safely be used. If this is not the case,\n\
      then the Netty component will log a WARN when +\n an endpoint is created.\n\n\
      The Netty component offers a\n`org.apache.camel.component.netty.ChannelHandlerFactories`\
      \ factory\nclass, that has a number of commonly used methods.\n\n[[Netty4-SendingMessagestofromaNettyendpoint]]\n\
      Sending Messages to/from a Netty endpoint\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[Netty4-NettyProducer]]\nNetty Producer\n++++++++++++++\n\nIn Producer mode,\
      \ the component provides the ability to send payloads to\na socket endpoint\
      \ +\n using either TCP or UDP protocols (with optional SSL support).\n\nThe\
      \ producer mode supports both one-way and request-response based\noperations.\n\
      \n[[Netty4-NettyConsumer]]\nNetty Consumer\n++++++++++++++\n\nIn Consumer mode,\
      \ the component provides the ability to:\n\n* listen on a specified socket using\
      \ either TCP or UDP protocols (with\noptional SSL support),\n* receive requests\
      \ on the socket using text/xml, binary and serialized\nobject based payloads\
      \ and\n* send them along on a route as message exchanges.\n\nThe consumer mode\
      \ supports both one-way and request-response based\noperations.\n\n[[Netty4-UsageSamples]]\n\
      Usage Samples\n^^^^^^^^^^^^^\n\n[[Netty4-AUDPNettyendpointusingRequest-Replyandserializedobjectpayload]]\n\
      A UDP Netty endpoint using Request-Reply and serialized object payload\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n------------------------------------------------------------------\n\
      RouteBuilder builder = new RouteBuilder() {\n  public void configure() {\n \
      \   from(\"netty4:udp://localhost:5155?sync=true\")\n      .process(new Processor()\
      \ {\n         public void process(Exchange exchange) throws Exception {\n  \
      \         Poetry poetry = (Poetry) exchange.getIn().getBody();\n           poetry.setPoet(\"\
      Dr. Sarojini Naidu\");\n           exchange.getOut().setBody(poetry);\n    \
      \     }\n       }\n    }\n};\n------------------------------------------------------------------\n\
      \n[[Netty4-ATCPbasedNettyconsumerendpointusingOne-waycommunication]]\nA TCP\
      \ based Netty consumer endpoint using One-way communication\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n-------------------------------------------\nRouteBuilder builder\
      \ = new RouteBuilder() {\n  public void configure() {\n       from(\"netty4:tcp://localhost:5150\"\
      )\n           .to(\"mock:result\");\n  }\n};\n-------------------------------------------\n\
      \n[[Netty4-AnSSLTCPbasedNettyconsumerendpointusingRequest-Replycommunication]]\n\
      An SSL/TCP based Netty consumer endpoint using Request-Reply communication\n\
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[[Netty4-UsingtheJSSEConfigurationUtility]]\nUsing the JSSE Configuration\
      \ Utility\n\nAs of Camel 2.9, the Netty component supports SSL/TLS configuration\n\
      through the link:camel-configuration-utilities.html[Camel JSSE\nConfiguration\
      \ Utility].?? This utility greatly decreases the amount of\ncomponent specific\
      \ code you need to write and is configurable at the\nendpoint and component\
      \ levels.?? The following examples demonstrate how\nto use the utility with\
      \ the Netty component.\n\n[[Netty4-Programmaticconfigurationofthecomponent]]\n\
      Programmatic configuration of the component\n\n[source,java]\n------------------------------------------------------------------------------------------\n\
      KeyStoreParameters ksp = new KeyStoreParameters();\nksp.setResource(\"/users/home/server/keystore.jks\"\
      );\nksp.setPassword(\"keystorePassword\");\n\nKeyManagersParameters kmp = new\
      \ KeyManagersParameters();\nkmp.setKeyStore(ksp);\nkmp.setKeyPassword(\"keyPassword\"\
      );\n\nSSLContextParameters scp = new SSLContextParameters();\nscp.setKeyManagers(kmp);\n\
      \nNettyComponent nettyComponent = getContext().getComponent(\"netty4\", NettyComponent.class);\n\
      nettyComponent.setSslContextParameters(scp);\n------------------------------------------------------------------------------------------\n\
      \n[[Netty4-SpringDSLbasedconfigurationofendpoint]]\nSpring DSL based configuration\
      \ of endpoint\n\n[source,xml]\n-------------------------------------------------------------------------------------------------------\n\
      ...\n  <camel:sslContextParameters\n      id=\"sslContextParameters\">\n   \
      \ <camel:keyManagers\n        keyPassword=\"keyPassword\">\n      <camel:keyStore\n\
      \          resource=\"/users/home/server/keystore.jks\"\n          password=\"\
      keystorePassword\"/>\n    </camel:keyManagers>\n  </camel:sslContextParameters>...\n\
      ...\n  <to uri=\"netty4:tcp://localhost:5150?sync=true&ssl=true&sslContextParameters=#sslContextParameters\"\
      />\n...\n-------------------------------------------------------------------------------------------------------\n\
      \n[[Netty4-UsingBasicSSL/TLSconfigurationontheJettyComponent]]\nUsing Basic\
      \ SSL/TLS configuration on the Jetty Component\n\n[source,java]\n------------------------------------------------------------------------------\n\
      JndiRegistry registry = new JndiRegistry(createJndiContext());\nregistry.bind(\"\
      password\", \"changeit\");\nregistry.bind(\"ksf\", new File(\"src/test/resources/keystore.jks\"\
      ));\nregistry.bind(\"tsf\", new File(\"src/test/resources/keystore.jks\"));\n\
      \ncontext.createRegistry(registry);\ncontext.addRoutes(new RouteBuilder() {\n\
      \  public void configure() {\n      String netty_ssl_endpoint =\n         \"\
      netty4:tcp://localhost:5150?sync=true&ssl=true&passphrase=#password\"\n    \
      \     + \"&keyStoreFile=#ksf&trustStoreFile=#tsf\";\n      String return_string\
      \ =\n         \"When You Go Home, Tell Them Of Us And Say,\"\n         + \"\
      For Your Tomorrow, We Gave Our Today.\";\n\n      from(netty_ssl_endpoint)\n\
      \       .process(new Processor() {\n          public void process(Exchange exchange)\
      \ throws Exception {\n            exchange.getOut().setBody(return_string);\n\
      \          }\n       }\n  }\n});\n------------------------------------------------------------------------------\n\
      \n[[Netty4-GettingaccesstoSSLSessionandtheclientcertificate]]\nGetting access\
      \ to SSLSession and the client certificate\n\n*Available as of Camel 2.12*\n\
      \nYou can get access to the `javax.net.ssl.SSLSession` if you eg need to\nget\
      \ details about the client certificate. When `ssl=true` then the\nlink:netty4.html[Netty4]\
      \ component will store the `SSLSession` as a\nheader on the Camel link:message.html[Message]\
      \ as shown below:\n\n[source,java]\n----------------------------------------------------------------------------------------------------\n\
      SSLSession session = exchange.getIn().getHeader(NettyConstants.NETTY_SSL_SESSION,\
      \ SSLSession.class);\n// get the first certificate which is client certificate\n\
      javax.security.cert.X509Certificate cert = session.getPeerCertificateChain()[0];\n\
      Principal principal = cert.getSubjectDN();\n----------------------------------------------------------------------------------------------------\n\
      \nRemember to set `needClientAuth=true` to authenticate the client,\notherwise\
      \ `SSLSession` cannot access information about the client\ncertificate, and\
      \ you may get an exception\n`javax.net.ssl.SSLPeerUnverifiedException: peer\
      \ not authenticated`. You\nmay also get this exception if the client certificate\
      \ is expired or not\nvalid etc.\n\nTIP: The option `sslClientCertHeaders` can\
      \ be set to `true` which then\nenriches the Camel link:message.html[Message]\
      \ with headers having\ndetails about the client certificate. For example the\
      \ subject name is\nreadily available in the header `CamelNettySSLClientCertSubjectName`.\n\
      \n[[Netty4-UsingMultipleCodecs]]\nUsing Multiple Codecs\n+++++++++++++++++++++\n\
      \nIn certain cases it may be necessary to add chains of encoders and\ndecoders\
      \ to the netty pipeline. To add multpile codecs to a camel netty\nendpoint the\
      \ 'encoders' and 'decoders' uri parameters should be used.\nLike the 'encoder'\
      \ and 'decoder' parameters they are used to supply\nreferences (to lists of\
      \ ChannelUpstreamHandlers and\nChannelDownstreamHandlers) that should be added\
      \ to the pipeline. Note\nthat if encoders is specified then the encoder param\
      \ will be ignored,\nsimilarly for decoders and the decoder param.\n\nINFO: Read\
      \ further above about using non shareable encoders/decoders.\n\nThe lists of\
      \ codecs need to be added to the Camel's registry so they can\nbe resolved when\
      \ the endpoint is created.\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------\n\
      ChannelHandlerFactory lengthDecoder = ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(1048576,\
      \ 0, 4, 0, 4);\n \nStringDecoder stringDecoder = new StringDecoder();\nregistry.bind(\"\
      length-decoder\", lengthDecoder);\nregistry.bind(\"string-decoder\", stringDecoder);\n\
      \ \nLengthFieldPrepender lengthEncoder = new LengthFieldPrepender(4);\nStringEncoder\
      \ stringEncoder = new StringEncoder();\nregistry.bind(\"length-encoder\", lengthEncoder);\n\
      registry.bind(\"string-encoder\", stringEncoder);\n \nList<ChannelHandler> decoders\
      \ = new ArrayList<ChannelHandler>();\ndecoders.add(lengthDecoder);\ndecoders.add(stringDecoder);\n\
      \ \nList<ChannelHandler> encoders = new ArrayList<ChannelHandler>();\nencoders.add(lengthEncoder);\n\
      encoders.add(stringEncoder);\n \nregistry.bind(\"encoders\", encoders);\nregistry.bind(\"\
      decoders\", decoders);\n\n-------------------------------------------------------------------------------------------------------------------\n\
      \nSpring's native collections support can be used to specify the codec\nlists\
      \ in an application context\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \   \n<util:list id=\"decoders\" list-class=\"java.util.LinkedList\">\n    \
      \    <bean class=\"org.apache.camel.component.netty4.ChannelHandlerFactories\"\
      \ factory-method=\"newLengthFieldBasedFrameDecoder\">\n            <constructor-arg\
      \ value=\"1048576\"/>\n            <constructor-arg value=\"0\"/>\n        \
      \    <constructor-arg value=\"4\"/>\n            <constructor-arg value=\"0\"\
      />\n            <constructor-arg value=\"4\"/>\n        </bean>\n        <bean\
      \ class=\"io.netty.handler.codec.string.StringDecoder\"/>\n    </util:list>\n\
      \n    <util:list id=\"encoders\" list-class=\"java.util.LinkedList\">\n    \
      \    <bean class=\"io.netty.handler.codec.LengthFieldPrepender\">\n        \
      \    <constructor-arg value=\"4\"/>\n        </bean>\n        <bean class=\"\
      io.netty.handler.codec.string.StringEncoder\"/>\n    </util:list>\n\n    <bean\
      \ id=\"length-encoder\" class=\"io.netty.handler.codec.LengthFieldPrepender\"\
      >\n        <constructor-arg value=\"4\"/>\n    </bean>\n    <bean id=\"string-encoder\"\
      \ class=\"io.netty.handler.codec.string.StringEncoder\"/>\n\n    <bean id=\"\
      length-decoder\" class=\"org.apache.camel.component.netty4.ChannelHandlerFactories\"\
      \ factory-method=\"newLengthFieldBasedFrameDecoder\">\n        <constructor-arg\
      \ value=\"1048576\"/>\n        <constructor-arg value=\"0\"/>\n        <constructor-arg\
      \ value=\"4\"/>\n        <constructor-arg value=\"0\"/>\n        <constructor-arg\
      \ value=\"4\"/>\n    </bean>\n    <bean id=\"string-decoder\" class=\"io.netty.handler.codec.string.StringDecoder\"\
      />\n-------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nThe bean names can then be used in netty endpoint definitions either as\n\
      a comma separated list or contained in a List e.g.\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------\n\
      \ from(\"direct:multiple-codec\").to(\"netty4:tcp://localhost:{{port}}?encoders=#encoders&sync=false\"\
      );\n                \n from(\"netty4:tcp://localhost:{{port}}?decoders=#length-decoder,#string-decoder&sync=false\"\
      ).to(\"mock:multiple-codec\");\n-----------------------------------------------------------------------------------------------------------------------\n\
      \nor via spring.\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------\n\
      \   <camelContext id=\"multiple-netty-codecs-context\" xmlns=\"http://camel.apache.org/schema/spring\"\
      >\n        <route>\n            <from uri=\"direct:multiple-codec\"/>\n    \
      \        <to uri=\"netty4:tcp://localhost:5150?encoders=#encoders&amp;sync=false\"\
      />\n        </route>\n        <route>\n            <from uri=\"netty4:tcp://localhost:5150?decoders=#length-decoder,#string-decoder&amp;sync=false\"\
      />\n            <to uri=\"mock:multiple-codec\"/>\n        </route>\n    </camelContext>\n\
      -------------------------------------------------------------------------------------------------------------\n\
      \n[[Netty4-ClosingChannelWhenComplete]]\nClosing Channel When Complete\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nWhen acting as a server you sometimes want to close the channel when,\nfor\
      \ example, a client conversion is finished. +\n You can do this by simply setting\
      \ the endpoint option\n`disconnect=true`.\n\nHowever you can also instruct Camel\
      \ on a per message basis as follows. +\n To instruct Camel to close the channel,\
      \ you should add a header with\nthe key `CamelNettyCloseChannelWhenComplete`\
      \ set to a boolean `true`\nvalue. +\n For instance, the example below will close\
      \ the channel after it has\nwritten the bye message back to the client:\n\n\
      [source,java]\n--------------------------------------------------------------------------------------------------------\n\
      \        from(\"netty4:tcp://localhost:8080\").process(new Processor() {\n \
      \           public void process(Exchange exchange) throws Exception {\n    \
      \            String body = exchange.getIn().getBody(String.class);\n       \
      \         exchange.getOut().setBody(\"Bye \" + body);\n                // some\
      \ condition which determines if we should close\n                if (close)\
      \ {\n                    exchange.getOut().setHeader(NettyConstants.NETTY_CLOSE_CHANNEL_WHEN_COMPLETE,\
      \ true);\n                }\n            }\n        });\n--------------------------------------------------------------------------------------------------------\n\
      \n[[Netty4-Addingcustomchannelpipelinefactoriestogaincompletecontroloveracreatedpipeline]]\n\
      Adding custom channel pipeline factories to gain complete control over a\ncreated\
      \ pipeline\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nCustom channel pipelines provide complete control to the user over the\nhandler/interceptor\
      \ chain by inserting custom handler(s), encoder(s) &\ndecoders without having\
      \ to specify them in the Netty Endpoint URL in a\nvery simple way.\n\nIn order\
      \ to add a custom pipeline, a custom channel pipeline factory\nmust be created\
      \ and registered with the context via the context registry\n(JNDIRegistry,or\
      \ the camel-spring ApplicationContextRegistry etc).\n\nA custom pipeline factory\
      \ must be constructed as follows\n\n* A Producer linked channel pipeline factory\
      \ must extend the abstract\nclass `ClientPipelineFactory`.\n* A Consumer linked\
      \ channel pipeline factory must extend the abstract\nclass??`ServerInitializerFactory`.\n\
      * The classes should override the initChannel() method in order to\ninsert custom\
      \ handler(s), encoder(s) and decoder(s). Not overriding the\ninitChannel() method\
      \ creates a pipeline with no handlers, encoders or\ndecoders wired to the pipeline.\n\
      \nThe example below shows how ServerInitializerFactory factory may be\ncreated\n\
      \n*Using custom pipeline factory*\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------\n\
      public class SampleServerInitializerFactory extends ServerInitializerFactory\
      \ {\n    private int maxLineSize = 1024;\n\n     protected void initChannel(Channel\
      \ ch) throws Exception {\n        ChannelPipeline channelPipeline = ch.pipeline();\n\
      \n        channelPipeline.addLast(\"encoder-SD\", new StringEncoder(CharsetUtil.UTF_8));\n\
      \        channelPipeline.addLast(\"decoder-DELIM\", new DelimiterBasedFrameDecoder(maxLineSize,\
      \ true, Delimiters.lineDelimiter()));\n        channelPipeline.addLast(\"decoder-SD\"\
      , new StringDecoder(CharsetUtil.UTF_8));\n        // here we add the default\
      \ Camel ServerChannelHandler for the consumer, to allow Camel to route the message\
      \ etc.\n        channelPipeline.addLast(\"handler\", new ServerChannelHandler(consumer));\n\
      \    }\n}\n--------------------------------------------------------------------------------------------------------------------------------\n\
      \nThe custom channel pipeline factory can then be added to the registry\nand\
      \ instantiated/utilized on a camel route in the following way\n\n[source,java]\n\
      ----------------------------------------------------------------------\nRegistry\
      \ registry = camelContext.getRegistry();\nServerInitializerFactory factory =\
      \ new TestServerInitializerFactory();\nregistry.bind(\"spf\", factory);\ncontext.addRoutes(new\
      \ RouteBuilder() {\n  public void configure() {\n      String netty_ssl_endpoint\
      \ =\n         \"netty4:tcp://localhost:5150?serverInitializerFactory=#spf\"\n\
      \      String return_string =\n         \"When You Go Home, Tell Them Of Us\
      \ And Say,\"\n         + \"For Your Tomorrow, We Gave Our Today.\";\n\n    \
      \  from(netty_ssl_endpoint)\n       .process(new Processor() {\n          public\
      \ void process(Exchange exchange) throws Exception {\n            exchange.getOut().setBody(return_string);\n\
      \          }\n       }\n  }\n});\n----------------------------------------------------------------------\n\
      \n[[Netty4-ReusingNettybossandworkerthreadpools]]\nReusing Netty boss and worker\
      \ thread pools\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*Available as\
      \ of Camel 2.12*\n\nNetty has two kind of thread pools: boss and worker. By\
      \ default each\nNetty consumer and producer has their private thread pools.\
      \ If you want\nto reuse these thread pools among multiple consumers or producers\
      \ then\nthe thread pools must be created and enlisted in the\nlink:registry.html[Registry].\n\
      \nFor example using Spring XML we can create a shared worker thread pool\nusing\
      \ the `NettyWorkerPoolBuilder` with 2 worker threads as shown below:\n\n[source,xml]\n\
      -----------------------------------------------------------------------------------------\n\
      \  <!-- use the worker pool builder to create to help create the shared thread\
      \ pool -->\n  <bean id=\"poolBuilder\" class=\"org.apache.camel.component.netty.NettyWorkerPoolBuilder\"\
      >\n    <property name=\"workerCount\" value=\"2\"/>\n  </bean>\n\n  <!-- the\
      \ shared worker thread pool -->\n  <bean id=\"sharedPool\" class=\"org.jboss.netty.channel.socket.nio.WorkerPool\"\
      \n        factory-bean=\"poolBuilder\" factory-method=\"build\" destroy-method=\"\
      shutdown\">\n  </bean>\n-----------------------------------------------------------------------------------------\n\
      \nTIP: For boss thread pool there is a\n`org.apache.camel.component.netty4.NettyServerBossPoolBuilder`\
      \ builder\nfor Netty consumers, and a\n`org.apache.camel.component.netty4.NettyClientBossPoolBuilder`\
      \ for the\nNetty produces.\n\nThen in the Camel routes we can refer to this\
      \ worker pools by\nconfiguring the `workerPool` option in the\nhttps://cwiki.apache.org/confluence/pages/createpage.action?spaceKey=CAMEL&title=URI&linkCreation=true&fromPageId=45877614[URI]\n\
      as shown below:\n\n[source,xml]\n-------------------------------------------------------------------------------------------------------------------------------------\n\
      \    <route>\n      <from uri=\"netty4:tcp://localhost:5021?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;usingExecutorService=false\"\
      />\n      <to uri=\"log:result\"/>\n      ...\n    </route>\n-------------------------------------------------------------------------------------------------------------------------------------\n\
      \nAnd if we have another route we can refer to the shared worker pool:\n\n[source,xml]\n\
      -------------------------------------------------------------------------------------------------------------------------------------\n\
      \    <route>\n      <from uri=\"netty4:tcp://localhost:5022?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;usingExecutorService=false\"\
      />\n      <to uri=\"log:result\"/>\n      ...\n    </route>\n-------------------------------------------------------------------------------------------------------------------------------------\n\
      \n... and so forth.\n\n[[Netty4-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:netty-http.html[Netty\
      \ HTTP]\n* link:mina.html[MINA]\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-netty4-http
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: netty4-http
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: netty4-http
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: netty4-http
          spec:
            containers:
            - image: fabric8/connector-netty4-http:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: netty4-http
        extendsScheme: netty4
        syntax: netty4-http:protocol:host:port/path
        title: Netty4 HTTP
        description: Netty HTTP server and client using the Netty 4.x library.
        label: http
        deprecated: false
        async: true
        lenientProperties: true
        javaType: org.apache.camel.component.netty4.http.NettyHttpComponent
        groupId: org.apache.camel
        artifactId: camel-netty4-http
        version: 2.18.1
      componentProperties:
        nettyHttpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty4.http.NettyHttpBinding
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.netty4.http.NettyHttpBinding for binding to/from Netty and Camel Message API.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        securityConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty4.http.NettyHttpSecurityConfiguration
          deprecated: false
          secret: false
          description: Refers to a org.apache.camel.component.netty4.http.NettyHttpSecurityConfiguration for configuring secure web resources.
        maximumPoolSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The thread pool size for the EventExecutorGroup if its in use. The default value is 16.
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.netty4.NettyConfiguration
          deprecated: false
          secret: false
          description: To use the NettyConfiguration as configuration when creating endpoints.
        executorService:
          kind: property
          type: object
          javaType: io.netty.util.concurrent.EventExecutorGroup
          deprecated: false
          secret: false
          description: To use the given EventExecutorGroup
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - http
          - https
          deprecated: false
          secret: false
          description: The protocol to use which is either http or https
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The local hostname such as localhost or 0.0.0.0 when being a consumer. The remote HTTP server hostname when using producer.
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The host port number
        path:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Resource path
        bridgeEndpoint:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the option is true the producer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the throwExceptionOnFailure to be false to let the producer send all the fault response back. The consumer working in the bridge mode will skip the gzip compression and WWW URL form encoding (by adding the Exchange.SKIP_GZIP_ENCODING and Exchange.SKIP_WWW_FORM_URLENCODED headers to the consumed exchange).
        disconnect:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect(close) from Netty Channel right after use. Can be used for both consumer and producer.
        keepAlive:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to ensure socket is not closed due to inactivity
        reuseAddress:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to facilitate socket multiplexing
        sync:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to set endpoint as one-way or request-response
        tcpNoDelay:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to improve TCP protocol performance
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        matchOnUriPrefix:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not Camel should try to find a target consumer by matching the URI prefix if no exact match is found.
        send503whenSuspended:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to send back HTTP status code 503 when the consumer has been suspended. If the option is false then the Netty Acceptor is unbound when the consumer is suspended so clients cannot connect anymore.
        backlog:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Allows to configure a backlog for netty consumer (server). Note the backlog is just a best effort depending on the OS. Setting this option to a value such as 200 500 or 1000 tells the TCP stack how long the accept queue can be If this option is not configured then the backlog depends on OS setting.
        bossCount:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: When netty works on nio mode it uses default bossCount parameter from Netty which is 1. User can use this operation to override the default bossCount from Netty
        bossGroup:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: io.netty.channel.EventLoopGroup
          deprecated: false
          secret: false
          description: Set the BossGroup which could be used for handling the new connection of the server side across the NettyEndpoint
        chunkedMaxContentLength:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1048576"
          description: Value in bytes the max content length per chunked frame received on the Netty HTTP server.
        compression:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Allow using gzip/deflate for compression on the Netty HTTP server if the client supports it from the HTTP headers.
        disconnectOnNoReply:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If sync is enabled then this option dictates NettyConsumer if it should disconnect where there is no reply to send back.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        httpMethodRestrict:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To disable HTTP methods on the Netty HTTP consumer. You can specify multiple separated by comma.
        mapHeaders:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is enabled then during binding from Netty to Camel Message then the headers will be mapped as well (eg added as header to the Camel Message as well). You can turn off this option to disable this. The headers can still be accessed from the org.apache.camel.component.netty.http.NettyHttpMessage message with the method getHttpRequest() that returns the Netty HTTP request io.netty.handler.codec.http.HttpRequest instance.
        maxHeaderSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8192"
          description: The maximum length of all headers. If the sum of the length of each header exceeds this value a io.netty.handler.codec.TooLongFrameException will be raised.
        nettyServerBootstrapFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.NettyServerBootstrapFactory
          deprecated: false
          secret: false
          description: To use a custom NettyServerBootstrapFactory
        nettySharedHttpServer:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.http.NettySharedHttpServer
          deprecated: false
          secret: false
          description: To use a shared Netty HTTP server. See Netty HTTP Server Example for more details.
        noReplyLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If sync is enabled this option dictates NettyConsumer which logging level to use when logging a there is no reply to send back.
        serverClosedChannelExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: DEBUG
          description: If the server (NettyConsumer) catches an java.nio.channels.ClosedChannelException then its logged using this logging level. This is used to avoid logging the closed channel exceptions as clients can disconnect abruptly and then cause a flood of closed exceptions in the Netty server.
        serverExceptionCaughtLogLevel:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: If the server (NettyConsumer) catches an exception then its logged using this logging level.
        serverInitializerFactory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.ServerInitializerFactory
          deprecated: false
          secret: false
          description: To use a custom ServerInitializerFactory
        traceEnabled:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP TRACE for this Netty HTTP consumer. By default TRACE is turned off.
        urlDecodeHeaders:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is enabled then during binding from Netty to Camel Message then the header values will be URL decoded (eg 20 will be a space character. Notice this option is used by the default org.apache.camel.component.netty.http.NettyHttpBinding and therefore if you implement a custom org.apache.camel.component.netty4.http.NettyHttpBinding then you would need to decode the headers accordingly to this option.
        usingExecutorService:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use ordered thread pool to ensure events are processed orderly on the same channel.
        connectTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Time to wait for a socket connection to be available. Value is in millis.
        requestTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Allows to use a timeout for the Netty producer when calling a remote server. By default no timeout is in use. The value is in milli seconds so eg 30000 is 30 seconds. The requestTimeout is using Netty's ReadTimeoutHandler to trigger the timeout.
        reuseChannel:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option allows producers to reuse the same Netty Channel for the lifecycle of processing the Exchange. This is useable if you need to call a server multiple times in a Camel route and want to use the same network connection. When using this the channel is not returned to the connection pool until the Exchange is done; or disconnected if the disconnect option is set to true. The reused Channel is stored on the Exchange as an exchange property with the key link NettyConstantsNETTY_CHANNEL which allows you to obtain the channel during routing and use it as well.
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        clientInitializerFactory:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: object
          javaType: org.apache.camel.component.netty4.ClientInitializerFactory
          deprecated: false
          secret: false
          description: To use a custom ClientInitializerFactory
        lazyChannelCreation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Channels can be lazily created to avoid exceptions if the remote server is not up and running when the Camel producer is started.
        okStatusCodeRange:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 200-299
          description: The status codes which is considered a success response. The values are inclusive. The range must be defined as from-to with the dash included. The default range is 200-299
        producerPoolEnabled:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: 'Whether producer pool is enabled or not. Important: Do not turn
            this off as the pooling is needed for handling concurrency and reliable request/reply.'
        producerPoolMaxActive:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the cap on the number of objects that can be allocated by the pool (checked out to clients or idle awaiting checkout) at a given time. Use a negative value for no limit.
        producerPoolMaxIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Sets the cap on the number of idle instances in the pool.
        producerPoolMinEvictableIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the minimum amount of time (value in millis) an object may sit idle in the pool before it is eligible for eviction by the idle object evictor.
        producerPoolMinIdle:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the minimum number of instances allowed in the producer pool before the evictor thread (if active) spawns new objects.
        useRelativePath:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use a relative path in HTTP requests.
        allowSerializedHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Only used for TCP when transferExchange is true. When set to true serializable objects in headers and properties will be added to the exchange. Otherwise Camel will exclude any non-serializable objects and log it at WARN level.
        bootstrapConfiguration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty4.NettyServerBootstrapConfiguration
          deprecated: false
          secret: false
          description: To use a custom configured NettyServerBootstrapConfiguration for configuring this endpoint.
        channelGroup:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: io.netty.channel.group.ChannelGroup
          deprecated: false
          secret: false
          description: To use a explicit ChannelGroup.
        configuration:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty4.http.NettyHttpConfiguration
          deprecated: false
          secret: false
          description: To use a custom configured NettyHttpConfiguration for configuring this endpoint.
        disableStreamCache:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Netty HttpRequestgetContent() or HttpResponsetgetContent() is cached or not (Camel will read the stream into a in light-weight memory based Stream caching) cache. By default Camel will cache the Netty input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. Mind that if you enable this option then you cannot read the Netty stream multiple times out of the box and you would need manually to reset the reader index on the Netty raw stream. Also Netty will auto-close the Netty stream when the Netty HTTP server/HTTP client is done processing which means that if the asynchronous routing engine is in use then any asynchronous thread that may continue routing the org.apache.camel.Exchange may not be able to read the Netty stream because Netty has closed it.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        nativeTransport:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to use native transport instead of NIO. Native transport
            takes advantage of the host operating system and is only supported on some platforms.
            You need to add the netty JAR for the host operating system you are using. See
            more details at: http://netty.io/wiki/native-transports.html'
        nettyHttpBinding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.netty4.http.NettyHttpBinding
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.netty4.http.NettyHttpBinding for binding to/from Netty and Camel Message API.
        options:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: option.
          multiValue: true
          deprecated: false
          secret: false
          description: Allows to configure additional netty options using option. as prefix. For example option.child.keepAlive=false to set the netty option child.keepAlive=false. See the Netty documentation for possible options that can be used.
        receiveBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during inbound communication. Size is bytes.
        receiveBufferSizePredictor:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Configures the buffer size predictor. See details at Jetty documentation and this mail thread.
        sendBufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "65536"
          description: The TCP/UDP buffer sizes to be used during outbound communication. Size is bytes.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transferException:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        transferExchange:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Only used for TCP. You can transfer the exchange over the wire instead
            of just the body. The following fields are transferred: In body Out body fault
            body In headers Out headers fault headers exchange properties exchange exception.
            This requires that the objects are serializable. Camel will exclude any non-serializable
            objects and log it at WARN level.'
        workerCount:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: When netty works on nio mode it uses default workerCount parameter from Netty which is cpu_core_threads2. User can use this operation to override the default workerCount from Netty
        workerGroup:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: io.netty.channel.EventLoopGroup
          deprecated: false
          secret: false
          description: To use a explicit EventLoopGroup as the boss thread pool. For example to share a thread pool with multiple consumers or producers. By default each consumer or producer has their own worker pool with 2 x cpu count core threads.
        decoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: io.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: To use a single decoder. This options is deprecated use encoders instead.
        decoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of decoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        encoder:
          kind: parameter
          group: codec
          label: codec
          type: object
          javaType: io.netty.channel.ChannelHandler
          deprecated: true
          secret: false
          description: To use a single encoder. This options is deprecated use encoders instead.
        encoders:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of encoders to be used. You can use a String which have values separated by comma and have the values be looked up in the Registry. Just remember to prefix the value with so Camel knows it should lookup.
        enabledProtocols:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: TLSv1,TLSv1.1,TLSv1.2
          description: Which protocols to enable when using SSL
        keyStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Client side certificate keystore to be used for encryption
        keyStoreFormat:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Keystore format to be used for payload encryption. Defaults to JKS if not set
        keyStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Client side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
        needClientAuth:
          kind: parameter
          group: security
          label: consumer,security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configures whether the server needs client authentication when using SSL.
        passphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password setting to use in order to encrypt/decrypt payloads sent using SSH
        securityConfiguration:
          kind: parameter
          group: security
          label: consumer,security
          type: object
          javaType: org.apache.camel.component.netty4.http.NettyHttpSecurityConfiguration
          deprecated: false
          secret: false
          description: Refers to a org.apache.camel.component.netty4.http.NettyHttpSecurityConfiguration for configuring secure web resources.
        securityOptions:
          kind: parameter
          group: security
          label: consumer,security
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: securityConfiguration.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure NettyHttpSecurityConfiguration using key/value pairs from the map
        securityProvider:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Security provider to be used for payload encryption. Defaults to SunX509 if not set.
        ssl:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Setting to specify whether SSL encryption is applied to this endpoint
        sslClientCertHeaders:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When enabled and in SSL mode then the Netty consumer will enrich the Camel Message with headers having information about the client certificate such as subject name issuer name serial number and the valid date range.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        sslHandler:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: io.netty.handler.ssl.SslHandler
          deprecated: false
          secret: false
          description: Reference to a class that could be used to return an SSL Handler
        trustStoreFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.io.File
          deprecated: false
          secret: false
          description: Server side certificate keystore to be used for encryption
        trustStoreResource:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Server side certificate keystore to be used for encryption. Is loaded
            by default from classpath but you can prefix with classpath: file: or http:
            to load the resource from different systems.'
    documentation.adoc: "[[Netty4HTTP-Netty4HTTPComponent]]\nNetty4 HTTP Component\n\
      ~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.14*\n\nThe *netty4-http* component\
      \ is an extension to??link:netty4.html[Netty4]\ncomponent to facilitiate HTTP\
      \ transport with link:netty4.html[Netty4].\n\nThis camel component supports\
      \ both producer and consumer endpoints.\n\n\nINFO: *Stream*. Netty is stream\
      \ based, which means the input it receives is submitted to\nCamel as a stream.\
      \ That means you will only be able to read the content\nof the stream *once*.\
      \ If you find a situation where the message body appears to be empty or\nyou\
      \ need to access the data multiple times (eg: doing multicasting, or\nredelivery\
      \ error handling) you should use link:stream-caching.html[Stream caching] or\
      \ convert the\nmessage body to a `String` which is safe to be re-read multiple\
      \ times. \nNotice Netty4 HTTP reads the entire stream into memory using\n`io.netty.handler.codec.http.HttpObjectAggregator`\
      \ to build the entire\nfull http message. But the resulting message is still\
      \ a stream based\nmessage which is readable once.\n\nMaven users will need to\
      \ add the following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-netty4-http</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Netty4HTTP-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe URI scheme for a netty\
      \ component is as follows\n\n[source,java]\n-------------------------------------------\n\
      netty4-http:http://localhost:8080[?options]\n-------------------------------------------\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n\nINFO: *Query parameters vs endpoint options*. \nYou may be wondering how\
      \ Camel recognizes URI query parameters and\nendpoint options. For example you\
      \ might create endpoint URI as follows -\n`netty4-http:http//example.com?myParam=myValue&compression=true`\
      \ . In\nthis example `myParam` is the HTTP parameter, while `compression` is\
      \ the\nCamel endpoint option. The strategy used by Camel in such situations\
      \ is\nto resolve available endpoint options and remove them from the URI. It\n\
      means that for the discussed example, the HTTP request sent by Netty\nHTTP producer\
      \ to the endpoint will look as follows\n-??`http//example.com?myParam=myValue`\
      \ , because `compression` endpoint\noption will be resolved and removed from\
      \ the target URL.\nKeep also in mind that you cannot specify endpoint options\
      \ using dynamic\nheaders (like `CamelHttpQuery`). Endpoint options can be specified\
      \ only\nat the endpoint URI definition level (like `to` or `from` DSL elements).\n\
      \n[[Netty4HTTP-HTTPOptions]]\nHTTP Options\n^^^^^^^^^^^^\n\n\nINFO: *A lot more\
      \ options*. *Important:* This component inherits all the options from\nlink:netty4.html[Netty4].\
      \ So make sure to look at\nthe??link:netty4.html[Netty4] documentation as well.\
      \ +\n Notice that some options from??link:netty4.html[Netty4] is not\napplicable\
      \ when using this??Netty4 HTTP component, such as options\nrelated to UDP transport.\n\
      \n\n\n\n\n// component options: START\nThe Netty4 HTTP component supports 6\
      \ options which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| nettyHttpBinding | NettyHttpBinding | To\
      \ use a custom org.apache.camel.component.netty4.http.NettyHttpBinding for binding\
      \ to/from Netty and Camel Message API.\n| headerFilterStrategy | HeaderFilterStrategy\
      \ | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.\n\
      | securityConfiguration | NettyHttpSecurityConfiguration | Refers to a org.apache.camel.component.netty4.http.NettyHttpSecurityConfiguration\
      \ for configuring secure web resources.\n| maximumPoolSize | int | The thread\
      \ pool size for the EventExecutorGroup if its in use. The default value is 16.\n\
      | configuration | NettyConfiguration | To use the NettyConfiguration as configuration\
      \ when creating endpoints.\n| executorService | EventExecutorGroup | To use\
      \ the given EventExecutorGroup\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Netty4 HTTP component supports 82 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* The protocol to use which is either http or https\n| host\
      \ | common |  | String | *Required* The local hostname such as localhost or\
      \ 0.0.0.0 when being a consumer. The remote HTTP server hostname when using\
      \ producer.\n| port | common |  | int | The host port number\n| path | common\
      \ |  | String | Resource path\n| bridgeEndpoint | common | false | boolean |\
      \ If the option is true the producer will ignore the Exchange.HTTP_URI header\
      \ and use the endpoint's URI for request. You may also set the throwExceptionOnFailure\
      \ to be false to let the producer send all the fault response back. The consumer\
      \ working in the bridge mode will skip the gzip compression and WWW URL form\
      \ encoding (by adding the Exchange.SKIP_GZIP_ENCODING and Exchange.SKIP_WWW_FORM_URLENCODED\
      \ headers to the consumed exchange).\n| disconnect | common | false | boolean\
      \ | Whether or not to disconnect(close) from Netty Channel right after use.\
      \ Can be used for both consumer and producer.\n| keepAlive | common | true |\
      \ boolean | Setting to ensure socket is not closed due to inactivity\n| reuseAddress\
      \ | common | true | boolean | Setting to facilitate socket multiplexing\n| sync\
      \ | common | true | boolean | Setting to set endpoint as one-way or request-response\n\
      | tcpNoDelay | common | true | boolean | Setting to improve TCP protocol performance\n\
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | matchOnUriPrefix | consumer | false | boolean | Whether or not Camel should\
      \ try to find a target consumer by matching the URI prefix if no exact match\
      \ is found.\n| send503whenSuspended | consumer | true | boolean | Whether to\
      \ send back HTTP status code 503 when the consumer has been suspended. If the\
      \ option is false then the Netty Acceptor is unbound when the consumer is suspended\
      \ so clients cannot connect anymore.\n| backlog | consumer (advanced) |  | int\
      \ | Allows to configure a backlog for netty consumer (server). Note the backlog\
      \ is just a best effort depending on the OS. Setting this option to a value\
      \ such as 200 500 or 1000 tells the TCP stack how long the accept queue can\
      \ be If this option is not configured then the backlog depends on OS setting.\n\
      | bossCount | consumer (advanced) | 1 | int | When netty works on nio mode it\
      \ uses default bossCount parameter from Netty which is 1. User can use this\
      \ operation to override the default bossCount from Netty\n| bossGroup | consumer\
      \ (advanced) |  | EventLoopGroup | Set the BossGroup which could be used for\
      \ handling the new connection of the server side across the NettyEndpoint\n\
      | chunkedMaxContentLength | consumer (advanced) | 1048576 | int | Value in bytes\
      \ the max content length per chunked frame received on the Netty HTTP server.\n\
      | compression | consumer (advanced) | false | boolean | Allow using gzip/deflate\
      \ for compression on the Netty HTTP server if the client supports it from the\
      \ HTTP headers.\n| disconnectOnNoReply | consumer (advanced) | true | boolean\
      \ | If sync is enabled then this option dictates NettyConsumer if it should\
      \ disconnect where there is no reply to send back.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| httpMethodRestrict | consumer (advanced) |  | String | To\
      \ disable HTTP methods on the Netty HTTP consumer. You can specify multiple\
      \ separated by comma.\n| mapHeaders | consumer (advanced) | true | boolean |\
      \ If this option is enabled then during binding from Netty to Camel Message\
      \ then the headers will be mapped as well (eg added as header to the Camel Message\
      \ as well). You can turn off this option to disable this. The headers can still\
      \ be accessed from the org.apache.camel.component.netty.http.NettyHttpMessage\
      \ message with the method getHttpRequest() that returns the Netty HTTP request\
      \ io.netty.handler.codec.http.HttpRequest instance.\n| maxHeaderSize | consumer\
      \ (advanced) | 8192 | int | The maximum length of all headers. If the sum of\
      \ the length of each header exceeds this value a io.netty.handler.codec.TooLongFrameException\
      \ will be raised.\n| nettyServerBootstrapFactory | consumer (advanced) |  |\
      \ NettyServerBootstrapFactory | To use a custom NettyServerBootstrapFactory\n\
      | nettySharedHttpServer | consumer (advanced) |  | NettySharedHttpServer | To\
      \ use a shared Netty HTTP server. See Netty HTTP Server Example for more details.\n\
      | noReplyLogLevel | consumer (advanced) | WARN | LoggingLevel | If sync is enabled\
      \ this option dictates NettyConsumer which logging level to use when logging\
      \ a there is no reply to send back.\n| serverClosedChannelExceptionCaughtLogLevel\
      \ | consumer (advanced) | DEBUG | LoggingLevel | If the server (NettyConsumer)\
      \ catches an java.nio.channels.ClosedChannelException then its logged using\
      \ this logging level. This is used to avoid logging the closed channel exceptions\
      \ as clients can disconnect abruptly and then cause a flood of closed exceptions\
      \ in the Netty server.\n| serverExceptionCaughtLogLevel | consumer (advanced)\
      \ | WARN | LoggingLevel | If the server (NettyConsumer) catches an exception\
      \ then its logged using this logging level.\n| serverInitializerFactory | consumer\
      \ (advanced) |  | ServerInitializerFactory | To use a custom ServerInitializerFactory\n\
      | traceEnabled | consumer (advanced) | false | boolean | Specifies whether to\
      \ enable HTTP TRACE for this Netty HTTP consumer. By default TRACE is turned\
      \ off.\n| urlDecodeHeaders | consumer (advanced) | false | boolean | If this\
      \ option is enabled then during binding from Netty to Camel Message then the\
      \ header values will be URL decoded (eg 20 will be a space character. Notice\
      \ this option is used by the default org.apache.camel.component.netty.http.NettyHttpBinding\
      \ and therefore if you implement a custom org.apache.camel.component.netty4.http.NettyHttpBinding\
      \ then you would need to decode the headers accordingly to this option.\n| usingExecutorService\
      \ | consumer (advanced) | true | boolean | Whether to use ordered thread pool\
      \ to ensure events are processed orderly on the same channel.\n| connectTimeout\
      \ | producer | 10000 | int | Time to wait for a socket connection to be available.\
      \ Value is in millis.\n| requestTimeout | producer |  | long | Allows to use\
      \ a timeout for the Netty producer when calling a remote server. By default\
      \ no timeout is in use. The value is in milli seconds so eg 30000 is 30 seconds.\
      \ The requestTimeout is using Netty's ReadTimeoutHandler to trigger the timeout.\n\
      | reuseChannel | producer | false | boolean | This option allows producers to\
      \ reuse the same Netty Channel for the lifecycle of processing the Exchange.\
      \ This is useable if you need to call a server multiple times in a Camel route\
      \ and want to use the same network connection. When using this the channel is\
      \ not returned to the connection pool until the Exchange is done; or disconnected\
      \ if the disconnect option is set to true. The reused Channel is stored on the\
      \ Exchange as an exchange property with the key link NettyConstantsNETTY_CHANNEL\
      \ which allows you to obtain the channel during routing and use it as well.\n\
      | throwExceptionOnFailure | producer | true | boolean | Option to disable throwing\
      \ the HttpOperationFailedException in case of failed responses from the remote\
      \ server. This allows you to get all responses regardless of the HTTP status\
      \ code.\n| clientInitializerFactory | producer (advanced) |  | ClientInitializerFactory\
      \ | To use a custom ClientInitializerFactory\n| lazyChannelCreation | producer\
      \ (advanced) | true | boolean | Channels can be lazily created to avoid exceptions\
      \ if the remote server is not up and running when the Camel producer is started.\n\
      | okStatusCodeRange | producer (advanced) | 200-299 | String | The status codes\
      \ which is considered a success response. The values are inclusive. The range\
      \ must be defined as from-to with the dash included. The default range is 200-299\n\
      | producerPoolEnabled | producer (advanced) | true | boolean | Whether producer\
      \ pool is enabled or not. Important: Do not turn this off as the pooling is\
      \ needed for handling concurrency and reliable request/reply.\n| producerPoolMaxActive\
      \ | producer (advanced) | -1 | int | Sets the cap on the number of objects that\
      \ can be allocated by the pool (checked out to clients or idle awaiting checkout)\
      \ at a given time. Use a negative value for no limit.\n| producerPoolMaxIdle\
      \ | producer (advanced) | 100 | int | Sets the cap on the number of idle instances\
      \ in the pool.\n| producerPoolMinEvictableIdle | producer (advanced) | 300000\
      \ | long | Sets the minimum amount of time (value in millis) an object may sit\
      \ idle in the pool before it is eligible for eviction by the idle object evictor.\n\
      | producerPoolMinIdle | producer (advanced) |  | int | Sets the minimum number\
      \ of instances allowed in the producer pool before the evictor thread (if active)\
      \ spawns new objects.\n| useRelativePath | producer (advanced) | false | boolean\
      \ | Sets whether to use a relative path in HTTP requests.\n| allowSerializedHeaders\
      \ | advanced | false | boolean | Only used for TCP when transferExchange is\
      \ true. When set to true serializable objects in headers and properties will\
      \ be added to the exchange. Otherwise Camel will exclude any non-serializable\
      \ objects and log it at WARN level.\n| bootstrapConfiguration | advanced | \
      \ | NettyServerBootstrapConfiguration | To use a custom configured NettyServerBootstrapConfiguration\
      \ for configuring this endpoint.\n| channelGroup | advanced |  | ChannelGroup\
      \ | To use a explicit ChannelGroup.\n| configuration | advanced |  | NettyHttpConfiguration\
      \ | To use a custom configured NettyHttpConfiguration for configuring this endpoint.\n\
      | disableStreamCache | advanced | false | boolean | Determines whether or not\
      \ the raw input stream from Netty HttpRequestgetContent() or HttpResponsetgetContent()\
      \ is cached or not (Camel will read the stream into a in light-weight memory\
      \ based Stream caching) cache. By default Camel will cache the Netty input stream\
      \ to support reading it multiple times to ensure it Camel can retrieve all data\
      \ from the stream. However you can set this option to true when you for example\
      \ need to access the raw stream such as streaming it directly to a file or other\
      \ persistent store. Mind that if you enable this option then you cannot read\
      \ the Netty stream multiple times out of the box and you would need manually\
      \ to reset the reader index on the Netty raw stream. Also Netty will auto-close\
      \ the Netty stream when the Netty HTTP server/HTTP client is done processing\
      \ which means that if the asynchronous routing engine is in use then any asynchronous\
      \ thread that may continue routing the org.apache.camel.Exchange may not be\
      \ able to read the Netty stream because Netty has closed it.\n| headerFilterStrategy\
      \ | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy\
      \ to filter headers.\n| nativeTransport | advanced | false | boolean | Whether\
      \ to use native transport instead of NIO. Native transport takes advantage of\
      \ the host operating system and is only supported on some platforms. You need\
      \ to add the netty JAR for the host operating system you are using. See more\
      \ details at: http://netty.io/wiki/native-transports.html\n| nettyHttpBinding\
      \ | advanced |  | NettyHttpBinding | To use a custom org.apache.camel.component.netty4.http.NettyHttpBinding\
      \ for binding to/from Netty and Camel Message API.\n| options | advanced | \
      \ | Map | Allows to configure additional netty options using option. as prefix.\
      \ For example option.child.keepAlive=false to set the netty option child.keepAlive=false.\
      \ See the Netty documentation for possible options that can be used.\n| receiveBufferSize\
      \ | advanced | 65536 | int | The TCP/UDP buffer sizes to be used during inbound\
      \ communication. Size is bytes.\n| receiveBufferSizePredictor | advanced | \
      \ | int | Configures the buffer size predictor. See details at Jetty documentation\
      \ and this mail thread.\n| sendBufferSize | advanced | 65536 | int | The TCP/UDP\
      \ buffer sizes to be used during outbound communication. Size is bytes.\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | transferException | advanced | false | boolean | If enabled and an Exchange\
      \ failed processing on the consumer side and if the caused Exception was send\
      \ back serialized in the response as a application/x-java-serialized-object\
      \ content type. On the producer side the exception will be deserialized and\
      \ thrown as is instead of the HttpOperationFailedException. The caused exception\
      \ is required to be serialized. This is by default turned off. If you enable\
      \ this then be aware that Java will deserialize the incoming data from the request\
      \ to Java and that can be a potential security risk.\n| transferExchange | advanced\
      \ | false | boolean | Only used for TCP. You can transfer the exchange over\
      \ the wire instead of just the body. The following fields are transferred: In\
      \ body Out body fault body In headers Out headers fault headers exchange properties\
      \ exchange exception. This requires that the objects are serializable. Camel\
      \ will exclude any non-serializable objects and log it at WARN level.\n| workerCount\
      \ | advanced |  | int | When netty works on nio mode it uses default workerCount\
      \ parameter from Netty which is cpu_core_threads2. User can use this operation\
      \ to override the default workerCount from Netty\n| workerGroup | advanced |\
      \  | EventLoopGroup | To use a explicit EventLoopGroup as the boss thread pool.\
      \ For example to share a thread pool with multiple consumers or producers. By\
      \ default each consumer or producer has their own worker pool with 2 x cpu count\
      \ core threads.\n| decoder | codec |  | ChannelHandler | To use a single decoder.\
      \ This options is deprecated use encoders instead.\n| decoders | codec |  |\
      \ String | A list of decoders to be used. You can use a String which have values\
      \ separated by comma and have the values be looked up in the Registry. Just\
      \ remember to prefix the value with so Camel knows it should lookup.\n| encoder\
      \ | codec |  | ChannelHandler | To use a single encoder. This options is deprecated\
      \ use encoders instead.\n| encoders | codec |  | String | A list of encoders\
      \ to be used. You can use a String which have values separated by comma and\
      \ have the values be looked up in the Registry. Just remember to prefix the\
      \ value with so Camel knows it should lookup.\n| enabledProtocols | security\
      \ | TLSv1,TLSv1.1,TLSv1.2 | String | Which protocols to enable when using SSL\n\
      | keyStoreFile | security |  | File | Client side certificate keystore to be\
      \ used for encryption\n| keyStoreFormat | security |  | String | Keystore format\
      \ to be used for payload encryption. Defaults to JKS if not set\n| keyStoreResource\
      \ | security |  | String | Client side certificate keystore to be used for encryption.\
      \ Is loaded by default from classpath but you can prefix with classpath: file:\
      \ or http: to load the resource from different systems.\n| needClientAuth |\
      \ security | false | boolean | Configures whether the server needs client authentication\
      \ when using SSL.\n| passphrase | security |  | String | Password setting to\
      \ use in order to encrypt/decrypt payloads sent using SSH\n| securityConfiguration\
      \ | security |  | NettyHttpSecurityConfiguration | Refers to a org.apache.camel.component.netty4.http.NettyHttpSecurityConfiguration\
      \ for configuring secure web resources.\n| securityOptions | security |  | Map\
      \ | To configure NettyHttpSecurityConfiguration using key/value pairs from the\
      \ map\n| securityProvider | security |  | String | Security provider to be used\
      \ for payload encryption. Defaults to SunX509 if not set.\n| ssl | security\
      \ | false | boolean | Setting to specify whether SSL encryption is applied to\
      \ this endpoint\n| sslClientCertHeaders | security | false | boolean | When\
      \ enabled and in SSL mode then the Netty consumer will enrich the Camel Message\
      \ with headers having information about the client certificate such as subject\
      \ name issuer name serial number and the valid date range.\n| sslContextParameters\
      \ | security |  | SSLContextParameters | To configure security using SSLContextParameters\n\
      | sslHandler | security |  | SslHandler | Reference to a class that could be\
      \ used to return an SSL Handler\n| trustStoreFile | security |  | File | Server\
      \ side certificate keystore to be used for encryption\n| trustStoreResource\
      \ | security |  | String | Server side certificate keystore to be used for encryption.\
      \ Is loaded by default from classpath but you can prefix with classpath: file:\
      \ or http: to load the resource from different systems.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n\n[[Netty4HTTP-MessageHeaders]]\n\
      Message Headers\n^^^^^^^^^^^^^^^\n\nThe following headers can be used on the\
      \ producer to control the HTTP\nrequest.\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHttpMethod` |`String` |Allow to control what\
      \ HTTP method to use such as GET, POST, TRACE etc.\nThe type can also be a `io.netty.handler.codec.http.HttpMethod`\n\
      instance.\n\n|`CamelHttpQuery` |`String` |Allows to provide URI query parameters\
      \ as a `String` value that\noverrides the endpoint configuration. Separate multiple\
      \ parameters using\nthe & sign. For example: `foo=bar&beer=yes`.\n\n|`CamelHttpPath`\
      \ |`String` |Allows to provide URI context-path and query parameters as a `String`\n\
      value that overrides the endpoint configuration. This allows to reuse\nthe same\
      \ producer for calling same remote http server, but using a\ndynamic context-path\
      \ and query parameters.\n\n|`Content-Type` |`String` |To set the content-type\
      \ of the HTTP body. For example:\n`text/plain; charset=\"UTF-8\"`.\n\n|`CamelHttpResponseCode`\
      \ |`int` |Allows to set the HTTP Status code to use. By default 200 is used\
      \ for\nsuccess, and 500 for failure.\n|=======================================================================\n\
      \nThe following headers is provided as meta-data when a route starts from\n\
      an Netty4 HTTP endpoint:\n\nThe description in the table takes offset in a route\
      \ having:\n`from(\"netty4-http:http:0.0.0.0:8080/myapp\")...`\n\n[width=\"100%\"\
      ,cols=\"10%,10%,80%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelHttpMethod` |`String` |The HTTP method used,\
      \ such as GET, POST, TRACE etc.\n\n|`CamelHttpUrl` |`String` |The URL including\
      \ protocol, host and port, etc\n\n|`CamelHttpUri` |`String` |The URI without\
      \ protocol, host and port, etc\n\n|`CamelHttpQuery` |`String` |Any query parameters,\
      \ such as `foo=bar&beer=yes`\n\n|`CamelHttpRawQuery` |`String` |Any query parameters,\
      \ such as `foo=bar&beer=yes`. Stored in the raw\nform, as they arrived to the\
      \ consumer (i.e. before URL decoding).\n\n|`CamelHttpPath` |`String` |Additional\
      \ context-path. This value is empty if the client called the\ncontext-path `/myapp`.\
      \ If the client calls `/myapp/mystuff`, then this\nheader value is `/mystuff`.\
      \ In other words its the value after the\ncontext-path configured on the route\
      \ endpoint.\n\n|`CamelHttpCharacterEncoding` |`String` |The charset from the\
      \ content-type header.\n\n|`CamelHttpAuthentication` |`String` |If the user\
      \ was authenticated using HTTP Basic then this header is added\nwith the value\
      \ `Basic`.\n\n|`Content-Type` |`String` |The content type if provided. For example:\n\
      `text/plain; charset=\"UTF-8\"`.\n|=======================================================================\n\
      \n[[Netty4HTTP-AccesstoNettytypes]]\nAccess to Netty types\n^^^^^^^^^^^^^^^^^^^^^\n\
      \nThis component uses the\n`org.apache.camel.component.netty4.http.NettyHttpMessage`\
      \ as the message\nimplementation on the link:exchange.html[Exchange]. This allows\
      \ end\nusers to get access to the original Netty request/response instances\
      \ if\nneeded, as shown below.??Mind that the original response may not be\n\
      accessible at all times.\n\n[source,java]\n----------------------------------------------------------------------------------------------------------\n\
      io.netty.handler.codec.http.HttpRequest request = exchange.getIn(NettyHttpMessage.class).getHttpRequest();\n\
      ----------------------------------------------------------------------------------------------------------\n\
      \n[[Netty4HTTP-Examples]]\nExamples\n^^^^^^^^\n\nIn the route below we use Netty4\
      \ HTTP as a HTTP server, which returns\nback a hardcoded \"Bye World\" message.\n\
      \n[source,java]\n-----------------------------------------------\n    from(\"\
      netty4-http:http://0.0.0.0:8080/foo\")\n      .transform().constant(\"Bye World\"\
      );\n-----------------------------------------------\n\nAnd we can call this\
      \ HTTP server using Camel also, with the\nlink:producertemplate.html[ProducerTemplate]\
      \ as shown below:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------\n\
      \    String out = template.requestBody(\"netty4-http:http://localhost:8080/foo\"\
      , \"Hello World\", String.class);\n    System.out.println(out);\n------------------------------------------------------------------------------------------------------------\n\
      \nAnd we get back \"Bye World\" as the output.\n\n[[Netty4HTTP-HowdoIletNettymatchwildcards]]\n\
      How do I let Netty match wildcards\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nBy\
      \ default Netty4 HTTP will only match on exact uri's. But you can\ninstruct\
      \ Netty to match prefixes. For example\n\n[source,java]\n-----------------------------------------------------------\n\
      from(\"netty4-http:http://0.0.0.0:8123/foo\").to(\"mock:foo\");\n-----------------------------------------------------------\n\
      \nIn the route above Netty4 HTTP will only match if the uri is an exact\nmatch,\
      \ so it will match if you enter +\n `http://0.0.0.0:8123/foo` but not match\
      \ if you do\n`http://0.0.0.0:8123/foo/bar`.\n\nSo if you want to enable wildcard\
      \ matching you do as follows:\n\n[source,java]\n---------------------------------------------------------------------------------\n\
      from(\"netty4-http:http://0.0.0.0:8123/foo?matchOnUriPrefix=true\").to(\"mock:foo\"\
      );\n---------------------------------------------------------------------------------\n\
      \nSo now Netty matches any endpoints with starts with `foo`.\n\nTo match *any*\
      \ endpoint you can do:\n\n[source,java]\n-----------------------------------------------------------------------------\n\
      from(\"netty4-http:http://0.0.0.0:8123?matchOnUriPrefix=true\").to(\"mock:foo\"\
      );\n-----------------------------------------------------------------------------\n\
      \n[[Netty4HTTP-Usingmultiplerouteswithsameport]]\nUsing multiple routes with\
      \ same port\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIn the same link:camelcontext.html[CamelContext]\
      \ you can have multiple\nroutes from Netty4 HTTP that shares the same port (eg\
      \ a\n`io.netty.bootstrap.ServerBootstrap` instance). Doing this requires a\n\
      number of bootstrap options to be identical in the routes, as the routes\nwill\
      \ share the same `io.netty.bootstrap.ServerBootstrap` instance. The\ninstance\
      \ will be configured with the options from the first route\ncreated.\n\nThe\
      \ options the routes must be identical configured is all the options\ndefined\
      \ in the\n`org.apache.camel.component.netty4.NettyServerBootstrapConfiguration`\n\
      configuration class. If you have configured another route with different\noptions,\
      \ Camel will throw an exception on startup, indicating the\noptions is not identical.\
      \ To mitigate this ensure all options is\nidentical.\n\nHere is an example with\
      \ two routes that share the same port.\n\n*Two routes sharing the same port*\n\
      \n[source,java]\n-----------------------------------------------\nfrom(\"netty4-http:http://0.0.0.0:{{port}}/foo\"\
      )\n  .to(\"mock:foo\")\n  .transform().constant(\"Bye World\");\n\nfrom(\"netty4-http:http://0.0.0.0:{{port}}/bar\"\
      )\n  .to(\"mock:bar\")\n  .transform().constant(\"Bye Camel\");\n-----------------------------------------------\n\
      \nAnd here is an example of a mis configured 2nd route that do not have\nidentical\n\
      `org.apache.camel.component.netty4.NettyServerBootstrapConfiguration`\noption\
      \ as the 1st route. This will cause Camel to fail on startup.\n\n*Two routes\
      \ sharing the same port, but the 2nd route is misconfigured\nand will fail on\
      \ starting*\n\n[source,java]\n--------------------------------------------------------------------------------------\n\
      from(\"netty4-http:http://0.0.0.0:{{port}}/foo\")\n  .to(\"mock:foo\")\n  .transform().constant(\"\
      Bye World\");\n\n// we cannot have a 2nd route on same port with SSL enabled,\
      \ when the 1st route is NOT\nfrom(\"netty4-http:http://0.0.0.0:{{port}}/bar?ssl=true\"\
      )\n  .to(\"mock:bar\")\n  .transform().constant(\"Bye Camel\");\n--------------------------------------------------------------------------------------\n\
      \n[[Netty4HTTP-Reusingsameserverbootstrapconfigurationwithmultipleroutes]]\n\
      Reusing same server bootstrap configuration with multiple routes\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nBy configuring the common server bootstrap option in an single instance\n\
      of a\n`org.apache.camel.component.netty4.NettyServerBootstrapConfiguration`\n\
      type, we can use the `bootstrapConfiguration` option on the Netty4 HTTP\nconsumers\
      \ to refer and reuse the same options across all consumers.\n\n[source,xml]\n\
      -----------------------------------------------------------------------------------------------------------------\n\
      <bean id=\"nettyHttpBootstrapOptions\" class=\"org.apache.camel.component.netty4.NettyServerBootstrapConfiguration\"\
      >\n  <property name=\"backlog\" value=\"200\"/>\n  <property name=\"connectionTimeout\"\
      \ value=\"20000\"/>\n  <property name=\"workerCount\" value=\"16\"/>\n</bean>\n\
      -----------------------------------------------------------------------------------------------------------------\n\
      \nAnd in the routes you refer to this option as shown below\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------------------------------\n\
      <route>\n  <from uri=\"netty4-http:http://0.0.0.0:{{port}}/foo?bootstrapConfiguration=#nettyHttpBootstrapOptions\"\
      />\n  ...\n</route>\n\n<route>\n  <from uri=\"netty4-http:http://0.0.0.0:{{port}}/bar?bootstrapConfiguration=#nettyHttpBootstrapOptions\"\
      />\n  ...\n</route>\n\n<route>\n  <from uri=\"netty4-http:http://0.0.0.0:{{port}}/beer?bootstrapConfiguration=#nettyHttpBootstrapOptions\"\
      />\n  ...\n</route>\n----------------------------------------------------------------------------------------------------------\n\
      \n[[Netty4HTTP-ReusingsameserverbootstrapconfigurationwithmultipleroutesacrossmultiplebundlesinOSGicontainer]]\n\
      Reusing same server bootstrap configuration with multiple routes across multiple\
      \ bundles in OSGi container\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nSee the link:netty-http-server-example.html[Netty HTTP Server Example]\nfor\
      \ more details and example how to do that.\n\n[[Netty4HTTP-UsingHTTPBasicAuthentication]]\n\
      Using HTTP Basic Authentication\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe Netty\
      \ HTTP consumer supports HTTP basic authentication by specifying\nthe security\
      \ realm name to use, as shown below\n\n[source,java]\n------------------------------------------------------------------------------------------\n\
      <route>\n   <from uri=\"netty4-http:http://0.0.0.0:{{port}}/foo?securityConfiguration.realm=karaf\"\
      />\n   ...\n</route>\n------------------------------------------------------------------------------------------\n\
      \nThe realm name is mandatory to enable basic authentication. By default\nthe\
      \ JAAS based authenticator is used, which will use the realm name\nspecified\
      \ (karaf in the example above) and use the JAAS realm and the\nJAAS \\{\\{LoginModule}}s\
      \ of this realm for authentication.\n\nEnd user of Apache Karaf / ServiceMix\
      \ has a karaf realm out of the box,\nand hence why the example above would work\
      \ out of the box in these\ncontainers.\n\n[[Netty4HTTP-SpecifyingACLonwebresources]]\n\
      Specifying ACL on web resources\n+++++++++++++++++++++++++++++++\n\nThe `org.apache.camel.component.netty4.http.SecurityConstraint`\
      \ allows\nto define constrains on web resources. And the\n`org.apache.camel.component.netty.http.SecurityConstraintMapping`\
      \ is\nprovided out of the box, allowing to easily define inclusions and\nexclusions\
      \ with roles.\n\nFor example as shown below in the XML DSL, we define the constraint\n\
      bean:\n\n[source,xml]\n-------------------------------------------------------------------------------------------------\n\
      \  <bean id=\"constraint\" class=\"org.apache.camel.component.netty4.http.SecurityConstraintMapping\"\
      >\n    <!-- inclusions defines url -> roles restrictions -->\n    <!-- a * should\
      \ be used for any role accepted (or even no roles) -->\n    <property name=\"\
      inclusions\">\n      <map>\n        <entry key=\"/*\" value=\"*\"/>\n      \
      \  <entry key=\"/admin/*\" value=\"admin\"/>\n        <entry key=\"/guest/*\"\
      \ value=\"admin,guest\"/>\n      </map>\n    </property>\n    <!-- exclusions\
      \ is used to define public urls, which requires no authentication -->\n    <property\
      \ name=\"exclusions\">\n      <set>\n        <value>/public/*</value>\n    \
      \  </set>\n    </property>\n  </bean>\n-------------------------------------------------------------------------------------------------\n\
      \nThe constraint above is define so that\n\n* access to /* is restricted and\
      \ any roles is accepted (also if user has\nno roles)\n* access to /admin/* requires\
      \ the admin role\n* access to /guest/* requires the admin or guest role\n* access\
      \ to /public/* is an exclusion which means no authentication is\nneeded, and\
      \ is therefore public for everyone without logging in\n\nTo use this constraint\
      \ we just need to refer to the bean id as shown\nbelow:\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      <route>\n   <from uri=\"netty4-http:http://0.0.0.0:{{port}}/foo?matchOnUriPrefix=true&amp;securityConfiguration.realm=karaf&amp;securityConfiguration.securityConstraint=#constraint\"\
      />\n   ...\n</route>\n-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Netty4HTTP-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:netty.html[Netty]\n*\
      \ link:netty-http-server-example.html[Netty HTTP Server Example]\n* link:jetty.html[Jetty]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-openshift
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: openshift
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: openshift
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: openshift
          spec:
            containers:
            - image: fabric8/connector-openshift:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: openshift
        syntax: openshift:clientId
        title: OpenShift
        description: To manage your Openshift 2.x applications.
        label: cloud,paas
        deprecated: true
        async: false
        javaType: org.apache.camel.component.openshift.OpenShiftComponent
        groupId: org.apache.camel
        artifactId: camel-openshift
        version: 2.18.1
      componentProperties:
        username:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The username to login to openshift server.
        password:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password for login to openshift server.
        domain:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Domain name. If not specified then the default domain is used.
        server:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Url to the openshift server. If not specified then the default value from the local openshift configuration file /.openshift/express.conf is used. And if that fails as well then openshift.redhat.com is used.
      properties:
        clientId:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The client id
        domain:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Domain name. If not specified then the default domain is used.
        password:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password for login to openshift server.
        server:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Url to the openshift server. If not specified then the default value from the local openshift configuration file /.openshift/express.conf is used. And if that fails as well then openshift.redhat.com is used.
        username:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The username to login to openshift server.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        application:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The application name to start stop restart or get the state.
        mode:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - pojo
          - json
          deprecated: false
          secret: false
          description: Whether to output the message body as a pojo or json. For pojo the message is a List type.
        operation:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - list
          - start
          - stop
          - restart
          - state
          - getStandaloneCartridge
          - getEmbeddedCartridges
          - addEmbeddedCartridge
          - removeEmbeddedCartridge
          - scaleUp
          - scaleDown
          - getGitUrl
          - getDeploymentType
          - setDeploymentType
          - getAllEnvironmentVariables
          - addEnvironmentVariable
          - addMultipleEnvironmentVariables
          - updateEnvironmentVariable
          - getEnvironmentVariableValue
          - removeEnvironmentVariable
          - getGearProfile
          - addAlias
          - removeAlias
          - getAliases
          deprecated: false
          secret: false
          description: 'The operation to perform which can be: list start stop restart and
            state. The list operation returns information about all the applications in
            json format. The state operation returns the state such as: started stopped
            etc. The other operations does not return any value.'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[Openshift-OpenshiftComponent]]
      Openshift Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The *openshift* component is a component for managing your
      https://www.openshift.com/[OpenShift] applications.??

      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-openshift</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Openshift-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------
      openshift:clientId[?options]
      ----------------------------

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

      [[Openshift-Options]]
      Options
      ^^^^^^^



      // component options: START
      The OpenShift component supports 4 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | username | String | The username to login to openshift server.
      | password | String | The password for login to openshift server.
      | domain | String | Domain name. If not specified then the default domain is used.
      | server | String | Url to the openshift server. If not specified then the default value from the local openshift configuration file /.openshift/express.conf is used. And if that fails as well then openshift.redhat.com is used.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The OpenShift component supports 27 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | clientId | common |  | String | *Required* The client id
      | domain | common |  | String | Domain name. If not specified then the default domain is used.
      | password | common |  | String | *Required* The password for login to openshift server.
      | server | common |  | String | Url to the openshift server. If not specified then the default value from the local openshift configuration file /.openshift/express.conf is used. And if that fails as well then openshift.redhat.com is used.
      | username | common |  | String | *Required* The username to login to openshift server.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | application | producer |  | String | The application name to start stop restart or get the state.
      | mode | producer |  | String | Whether to output the message body as a pojo or json. For pojo the message is a List type.
      | operation | producer |  | String | The operation to perform which can be: list start stop restart and state. The list operation returns information about all the applications in json format. The state operation returns the state such as: started stopped etc. The other operations does not return any value.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Openshift-Examples]]
      Examples
      ^^^^^^^^

      [[Openshift-Listingallapplications]]
      Listing all applications
      ++++++++++++++++++++++++

      [source,java]
      --------------------------------------------------------------------------
      // sending route
      from("direct:apps")
          .to("openshift:myClient?username=foo&password=secret&operation=list");
          .to("log:apps");
      --------------------------------------------------------------------------

      In this case the information about all the applications is returned as
      pojo. If you want a json response, then set mode=json.

      [[Openshift-Stoppinganapplication]]
      Stopping an application
      +++++++++++++++++++++++

      [source,java]
      ---------------------------------------------------------------------------------------------
      // stopping the foobar application
      from("direct:control")
          .to("openshift:myClient?username=foo&password=secret&operation=stop&application=foobar");
      ??
      ---------------------------------------------------------------------------------------------

      In the example above we stop the application named foobar.

      ??

      Polling for gear state changes

      The consumer is used for polling state changes in gears. Such as when a
      new gear is added/removed/ or its lifecycle is changed, eg started, or
      stopped etc.

      [source,java]
      ---------------------------------------------------------------------------------------------------------------------------------------
      // trigger when state changes on our gears
      from("openshift:myClient?username=foo&password=secret&delay=30s")
          .log("Event ${header.CamelOpenShiftEventType} on application ${body.name} changed state to ${header.CamelOpenShiftEventNewState}");
      ---------------------------------------------------------------------------------------------------------------------------------------

      ??

      When the consumer emits an Exchange then the body contains
      the??`com.openshift.client.IApplication` as the message body. And the
      following headers is included.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |May be null |Description

      |CamelOpenShiftEventType |No |The type of the event which can be one of: added, removed or changed.

      |CamelOpenShiftEventOldState |Yes |The old state, when the event type is changed.

      |CamelOpenShiftEventNewState |No |The new state, for any of the event types
      |=======================================================================

      [[Openshift-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-optaplanner
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: optaplanner
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: optaplanner
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: optaplanner
          spec:
            containers:
            - image: fabric8/connector-optaplanner:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: optaplanner
        syntax: optaplanner:configFile
        title: OptaPlanner
        description: Solves the planning problem contained in a message with OptaPlanner.
        label: engine,planning
        deprecated: false
        async: false
        javaType: org.apache.camel.component.optaplanner.OptaPlannerComponent
        groupId: org.apache.camel
        artifactId: camel-optaplanner
        version: 2.18.1
      componentProperties: {}
      properties:
        configFile:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies the location to the solver file
        solverId:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: DEFAULT_SOLVER
          description: Specifies the solverId to user for the solver instance key
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        async:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies to perform operations in async mode
        threadPoolSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Specifies the thread pool size to use when async is true
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[OptaPlanner-OptaPlanner]]
      OptaPlanner
      ~~~~~~~~~~~

      *Available as of Camel 2.13*

      The *optaplanner:* component solves the planning problem contained in a
      message with http://www.optaplanner.org/[OptaPlanner]. +
       For example: feed it an unsolved Vehicle Routing problem and it solves
      it.

      The component supports consumer as BestSolutionChangedEvent listener and
      producer for processing Solution and ProblemFactChange

      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-optaplanner</artifactId>
          <version>x.x.x</version><!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------------------------------

      [[OptaPlanner-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------
      optaplanner:solverConfig[?options]
      ----------------------------------

      The *solverConfig* is the classpath-local URI of the solverConfig, for
      example `/org/foo/barSolverConfig.xml`.

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

      [[OptaPlanner-URIOptions]]
      OptaPlanner Options
      ^^^^^^^^^^^


      // component options: START
      The OptaPlanner component has no options.
      // component options: END



      // endpoint options: START
      The OptaPlanner component supports 8 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | configFile | common |  | String | *Required* Specifies the location to the solver file
      | solverId | common | DEFAULT_SOLVER | String | Specifies the solverId to user for the solver instance key
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | async | producer | false | boolean | Specifies to perform operations in async mode
      | threadPoolSize | producer | 10 | int | Specifies the thread pool size to use when async is true
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[OptaPlanner-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="10%,10%,10%,10%,60%",options="header",]
      |=======================================================================
      |Name |Default Value |Type |Context |Description

      |CamelOptaPlannerSolverId |null |String |Shared |Specifies the solverId to use

      |CamelOptaPlannerIsAsync |PUT |String |Producer |Specify whether to use another thread for submitting Solution instances
      rather than blocking the current thread.
      |=======================================================================

      [[OptaPlanner-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      Camel takes the planning problem for the IN body, solves it and returns
      it on the OUT body. (since v 2.16) The IN body object supports the following use cases:

      * If the body is instance of Solution, then it will be solved using the
      solver identified by solverId and either synchronously or
      asynchronously.
      * If the body is instance of ProblemFactChange, then it will trigger
      addProblemFactChange. If the processing is asynchronously, then it will
      wait till isEveryProblemFactChangeProcessed before returning result.
      * If the body is none of the above types, then the producer will return
      the best result from the solver identified by solverId

      [[OptaPlanner-Termination]]
      Termination
      ^^^^^^^^^^^

      The solving will take as long as specified in the `solverConfig`.

      [source,xml]
      -----------------------------------------------------------------------------
      <solver>
        ...
        <termination>
          <!-- Terminate after 10 seconds, unless it's not feasible by then yet -->
          <terminationCompositionStyle>AND</terminationCompositionStyle>
          <secondsSpentLimit>10</secondsSpentLimit>
          <bestScoreLimit>-1hard/0soft</bestScoreLimit>
        </termination>
        ...
      <solver>
      -----------------------------------------------------------------------------

      ??

      [[OptaPlanner-Samples]]
      Samples
      +++++++

      Solve an planning problem that's on the ActiveMQ queue with OptaPlanner:

      [source,java]
      --------------------------------------------------
      from("activemq:My.Queue").
        .to("optaplanner:/org/foo/barSolverConfig.xml");
      --------------------------------------------------

      Expose OptaPlanner as a REST service:

      [source,java]
      -------------------------------------------------------
      from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
        .to("optaplanner:/org/foo/barSolverConfig.xml");
      -------------------------------------------------------

      [[OptaPlanner-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-paho
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: paho
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: paho
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: paho
          spec:
            containers:
            - image: fabric8/connector-paho:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: paho
        syntax: paho:topic
        title: Paho
        description: Component for communicating with MQTT M2M message brokers using Eclipse Paho MQTT Client.
        label: messaging,iot
        deprecated: false
        async: false
        javaType: org.apache.camel.component.paho.PahoComponent
        groupId: org.apache.camel
        artifactId: camel-paho
        version: 2.18.1
      componentProperties:
        brokerUrl:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URL of the MQTT broker.
        clientId:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: MQTT client identifier.
        connectOptions:
          kind: property
          type: object
          javaType: org.eclipse.paho.client.mqttv3.MqttConnectOptions
          deprecated: false
          secret: false
          description: Client connection options
      properties:
        topic:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the topic
        brokerUrl:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: tcp://localhost:1883
          description: The URL of the MQTT broker.
        clientId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: MQTT client identifier.
        connectOptions:
          kind: parameter
          group: common
          type: object
          javaType: org.eclipse.paho.client.mqttv3.MqttConnectOptions
          deprecated: false
          secret: false
          description: Client connection options
        filePersistenceDirectory:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: Current directory
          description: Base directory used by the file persistence provider.
        persistence:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.paho.PahoPersistence
          enum:
          - FILE
          - MEMORY
          deprecated: false
          secret: false
          defaultValue: MEMORY
          description: Client persistence to be used - memory or file.
        qos:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2"
          description: Client quality of service level (0-2).
        retained:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Retain option
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Paho-PahoComponent]]
      Paho Component
      ~~~~~~~~~~~~~~

      INFO: Available as of Camel 2.16??

      Paho component provides connector for the MQTT messaging protocol using
      the https://eclipse.org/paho/[Eclipse Paho] library. Paho is one of the
      most popular MQTT libraries, so if you would like to integrate it with
      your Java project - Camel Paho connector is a way to go.

      [[Paho-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------
      paho:queueName[?options]
      ------------------------

      For example the following snippet reads messages from the MQTT broker
      installed on the same host as the Camel router:

      [source,java]
      ------------------------
      from("paho:some/queue").
        to("mock:test");
      ------------------------

      While the snippet below sends message to the MQTT broker:

      [source,java]
      -------------------------------
      from("direct:test").
        to("paho:some/target/queue");
      -------------------------------

      You can append query options to the URI in the following
      format:??`?option=value&option=value&...`??. For example this is how
      to??read messages from the remote MQTT broker:??

      ??

      [source,java]
      -------------------------------------------------------------
      from("paho:some/queue?brokerUrl=tcp://iot.eclipse.org:1883").
        to("mock:test");
      -------------------------------------------------------------

      ??

      [[Paho-Addingthecomponenttotheproject]]
      Adding the component to the project
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      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-paho</artifactId>
          <version>x.y.z</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      Keep in mind that Paho artifacts are not hosted in the Maven Central, so
      you need to add Eclipse Paho repository to your POM xml file:

      [source,xml]
      --------------------------------------------------------------------------
      <repositories>
        <repository>
          <id>eclipse-paho</id>
          <url>https://repo.eclipse.org/content/repositories/paho-releases</url>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
        </repository>
      </repositories>
      --------------------------------------------------------------------------

      [[Paho-Defaultpayloadtype]]
      Default payload type
      ^^^^^^^^^^^^^^^^^^^^

      ??

      By default Camel Paho component operates on the binary payloads
      extracted out of (or put into) the MQTT message:

      [source,java]
      ---------------------------------------------------------------------
      // Receive payload
      byte[] payload = (byte[]) consumerTemplate.receiveBody("paho:topic");
      ??
      // Send payload
      byte[] payload = "message".getBytes();
      producerTemplate.sendBody("paho:topic", payload);
      ---------------------------------------------------------------------

      ??

      But of course Camel build-in??link:type-converter.html[type conversion
      API] can perform the automatic data type transformations for you. In the
      example below Camel automatically converts binary payload into String
      (and??conversely):

      ??

      [source,java]
      --------------------------------------------------------------------------
      // Receive payload
      String payload = consumerTemplate.receiveBody("paho:topic", String.class);
      ??
      // Send payload
      String payload = "message";
      producerTemplate.sendBody("paho:topic", payload);
      --------------------------------------------------------------------------

      [[Paho-URIOptions]]
      Paho Options
      ^^^^^^^^^^^^



      // component options: START
      The Paho component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | brokerUrl | String | The URL of the MQTT broker.
      | clientId | String | MQTT client identifier.
      | connectOptions | MqttConnectOptions | Client connection options
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Paho component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | topic | common |  | String | *Required* Name of the topic
      | brokerUrl | common | tcp://localhost:1883 | String | The URL of the MQTT broker.
      | clientId | common |  | String | MQTT client identifier.
      | connectOptions | common |  | MqttConnectOptions | Client connection options
      | filePersistenceDirectory | common | Current directory | String | Base directory used by the file persistence provider.
      | persistence | common | MEMORY | PahoPersistence | Client persistence to be used - memory or file.
      | qos | common | 2 | int | Client quality of service level (0-2).
      | retained | common | false | boolean | Retain option
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Paho-Headers]]
      Headers
      ^^^^^^^

      The following headers are recognized by the Paho component:

      [width="100%",cols="10%,10%,10%,10%,60%",options="header",]
      |=======================================================================
      |Header |Java constant |Endpoint type |Value type |Description

      |`PahoOriginalMessage` |`PahoConstants.HEADER_ORIGINAL_MESSAGE` |Consumer |`org.eclipse.paho.client.mqttv3.MqttMessage` |The original Paho message instance received by the client.
      *Deprecated:*from Camel 2.17 onwards the original MqttMessage is not
      stored as a header but on the
      `org.apache.camel.component.paho.PahoMessage` message that has a getter
      `getMqttMessage`.

      |`CamelMqttTopic` |PahoConstants.MQTT_TOPIC |Consumer |String |*Camel 2.17:*The topic
      |=======================================================================
      ??

      [[Paho-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-paxlogging
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: paxlogging
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: paxlogging
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: paxlogging
          spec:
            containers:
            - image: fabric8/connector-paxlogging:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: paxlogging
        syntax: paxlogging:appender
        title: OSGi PAX Logging
        description: The paxlogging component can be used in an OSGi environment to receive PaxLogging events and process them.
        label: monitoring
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.paxlogging.PaxLoggingComponent
        groupId: org.apache.camel
        artifactId: camel-paxlogging
        version: 2.18.1
      componentProperties:
        bundleContext:
          kind: property
          type: object
          javaType: org.osgi.framework.BundleContext
          deprecated: false
          secret: false
          description: The OSGi BundleContext is automatic injected by Camel
      properties:
        appender:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Appender is the name of the pax appender that need to be configured in the PaxLogging service configuration.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[Pax-Logging-PaxLoggingcomponent]]
      PaxLogging component
      ~~~~~~~~~~~~~~~~~~~~

      *Available in Camel 2.6*

      The `paxlogging` component can be used in an OSGi environment to receive
      http://wiki.ops4j.org/display/paxlogging/Pax+Logging[PaxLogging] events
      and process them.

      [[Pax-Logging-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      Maven users need to add the following dependency to their `pom.xml`

      [source,xml]
      -------------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-paxlogging</artifactId>
        <version>${camel-version}</version>
      </dependency>
      -------------------------------------------

      where `${camel-version`} must be replaced by the actual version of Camel
      (2.6.0 or higher).

      [[Pax-Logging-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,xml]
      -----------------------------
      paxlogging:appender[?options]
      -----------------------------

      where `appender` is the name of the pax appender that need to be
      configured in the PaxLogging service configuration.

      [[Pax-Logging-URIoptions]]
      URI options
      ^^^^^^^^^^^



      // component options: START
      The OSGi PAX Logging component supports 1 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | bundleContext | BundleContext | The OSGi BundleContext is automatic injected by Camel
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The OSGi PAX Logging component supports 5 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | appender | consumer |  | String | *Required* Appender is the name of the pax appender that need to be configured in the PaxLogging service configuration.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Pax-Logging-Messagebody]]
      Message body
      ^^^^^^^^^^^^

      The `in` message body will be set to the received PaxLoggingEvent.

      [[Pax-Logging-Exampleusage]]
      Example usage
      ^^^^^^^^^^^^^

      [source,xml]
      ----------------------------------
      <route>
          <from uri="paxlogging:camel"/>
          <to uri="stream:out"/>
      </route>
      ----------------------------------

      Configuration:

      [source,java]
      ----------------------------------------------------------
      log4j.rootLogger=INFO, out, osgi:VmLogAppender, osgi:camel
      ----------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-pdf
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: pdf
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: pdf
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: pdf
          spec:
            containers:
            - image: fabric8/connector-pdf:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: pdf
        syntax: pdf:operation
        title: PDF
        description: The pdf components provides the ability to create modify or extract content from PDF documents.
        label: pdf,printing
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.pdf.PdfComponent
        groupId: org.apache.camel
        artifactId: camel-pdf
        version: 2.18.1
      componentProperties: {}
      properties:
        operation:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.pdf.PdfOperation
          enum:
          - create
          - append
          - extractText
          deprecated: false
          secret: false
          description: Operation type
        font:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.pdfbox.pdmodel.font.PDFont
          deprecated: false
          secret: false
          defaultValue: Helvetica
          description: Font
        fontSize:
          kind: parameter
          group: producer
          type: number
          javaType: float
          deprecated: false
          secret: false
          defaultValue: "14"
          description: Font size in pixels
        marginBottom:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "20"
          description: Margin bottom in pixels
        marginLeft:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "20"
          description: Margin left in pixels
        marginRight:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "40"
          description: Margin right in pixels
        marginTop:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "20"
          description: Margin top in pixels
        pageSize:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.pdfbox.pdmodel.common.PDRectangle
          enum:
          - PAGE_SIZE_A0
          - PAGE_SIZE_A1
          - PAGE_SIZE_A2
          - PAGE_SIZE_A3
          - PAGE_SIZE_A4
          - PAGE_SIZE_A5
          - PAGE_SIZE_A6
          - PAGE_SIZE_LETTER
          deprecated: false
          secret: false
          defaultValue: PAGE_SIZE_A4
          description: Page size
        textProcessingFactory:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.pdf.TextProcessingFactory
          enum:
          - autoFormatting
          - lineTermination
          deprecated: false
          secret: false
          defaultValue: lineTermination
          description: 'Text processing to use. autoFormatting: Text is getting sliced by
            words then max amount of words that fits in the line will be written into pdf
            document. With this strategy all words that doesn''t fit in the line will be
            moved to the new line. lineTermination: Builds set of classes for line-termination
            writing strategy. Text getting sliced by line termination symbol and then it
            will be written regardless it fits in the line or not.'
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[PDF-PDF]]
      PDF
      ~~~

      **Available as of Camel 2.16.0**

      The *PDF*: components provides the ability to create, modify or extract
      content from PDF documents. This component uses
      https://pdfbox.apache.org/[Apache PDFBox] as underlying library to work
      with PDF documents.

      In order to use the PDF component, Maven users will need to add the
      following dependency to their??`pom.xml`:

      *pom.xml*

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

      [[PDF-URIformat]]
      URI format
      ^^^^^^^^^^

      The PDF component only supports producer endpoints.

      [source,java]
      -----------------------
      pdf:operation[?options]
      -----------------------

      [[PDF-Options]]
      Options
      ^^^^^^^

      // component options: START
      The PDF component has no options.
      // component options: END



      // endpoint options: START
      The PDF component supports 10 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | operation | producer |  | PdfOperation | *Required* Operation type
      | font | producer | Helvetica | PDFont | Font
      | fontSize | producer | 14 | float | Font size in pixels
      | marginBottom | producer | 20 | int | Margin bottom in pixels
      | marginLeft | producer | 20 | int | Margin left in pixels
      | marginRight | producer | 40 | int | Margin right in pixels
      | marginTop | producer | 20 | int | Margin top in pixels
      | pageSize | producer | PAGE_SIZE_A4 | PDRectangle | Page size
      | textProcessingFactory | producer | lineTermination | TextProcessingFactory | Text processing to use. autoFormatting: Text is getting sliced by words then max amount of words that fits in the line will be written into pdf document. With this strategy all words that doesn't fit in the line will be moved to the new line. lineTermination: Builds set of classes for line-termination writing strategy. Text getting sliced by line termination symbol and then it will be written regardless it fits in the line or not.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[PDF-Headers]]
      Headers
      ^^^^^^^
      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Header |Description

      |`pdf-document` |*Mandatory* header for `append` operation and ignored in all other
      operations. Expected type is
      https://pdfbox.apache.org/docs/1.8.9/javadocs/org/apache/pdfbox/pdmodel/PDDocument.html[PDDocument].
      Stores PDF document which will be used for append operation.

      |`protection-policy` |Expected type
      ishttps://pdfbox.apache.org/docs/1.8.9/javadocs/org/apache/pdfbox/pdmodel/encryption/ProtectionPolicy.html[ProtectionPolicy].
      If specified then PDF document will be encrypted with it.

      |`decryption-material` |Expected type
      ishttps://pdfbox.apache.org/docs/1.8.9/javadocs/org/apache/pdfbox/pdmodel/encryption/DecryptionMaterial.html[DecryptionMaterial].
      *Mandatory* header if PDF document is encrypted.
      |=======================================================================

      [[PDF-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      -
      ??
      -
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-pgevent
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: pgevent
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: pgevent
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: pgevent
          spec:
            containers:
            - image: fabric8/connector-pgevent:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: pgevent
        syntax: pgevent:host:port/database/channel
        title: PostgresSQL Event
        description: The pgevent component allows for producing/consuming PostgreSQL events related to the LISTEN/NOTIFY commands.
        label: database,sql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.pgevent.PgEventComponent
        groupId: org.apache.camel
        artifactId: camel-pgevent
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: localhost
          description: To connect using hostname and port to the database.
        port:
          kind: path
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "5432"
          description: To connect using hostname and port to the database.
        database:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The database name
        channel:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The channel name
        datasource:
          kind: parameter
          group: common
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: To connect using the given javax.sql.DataSource instead of using hostname and port.
        pass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for login
        user:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: postgres
          description: Username for login
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[PGEvent-PGEventComponentPostgresSQLEvent]]
      PGEvent Component (PostgresSQL Event)
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      This is a component for Apache Camel which allows for
      Producing/Consuming PostgreSQL events related to the LISTEN/NOTIFY
      commands added since PostgreSQL 8.3.

      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-pgevent</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      URI format

      The pgevent component uses the following two styles of endpoint URI
      notation:

      [source,java]
      -------------------------------------------------
      pgevent:datasource[?parameters]
      pgevent://host:port/database/channel[?parameters]
      -------------------------------------------------

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

      [[PGEvent-Options]]
      Options
      ^^^^^^^


      // component options: START
      The PostgresSQL Event component has no options.
      // component options: END



      // endpoint options: START
      The PostgresSQL Event component supports 11 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common | localhost | String | To connect using hostname and port to the database.
      | port | common | 5432 | Integer | To connect using hostname and port to the database.
      | database | common |  | String | *Required* The database name
      | channel | common |  | String | *Required* The channel name
      | datasource | common |  | DataSource | To connect using the given javax.sql.DataSource instead of using hostname and port.
      | pass | common |  | String | Password for login
      | user | common | postgres | String | Username for login
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[PGEvent-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-pop3
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: pop3
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: pop3
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: pop3
          spec:
            containers:
            - image: fabric8/connector-pop3:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: pop3
        alternativeSchemes: imap,imaps,pop3,pop3s,smtp,smtps
        syntax: pop3:host:port
        alternativeSyntax: pop3:username:password@host:port
        title: POP3
        description: To send or receive emails using imap/pop3 or stmp protocols.
        label: mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mail.MailComponent
        groupId: org.apache.camel
        artifactId: camel-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.MailConfiguration
          deprecated: false
          secret: false
          description: Sets the Mail configuration
        contentTypeResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The mail server host name
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the mail server
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        closeFolder:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
        copyTo:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
        disconnect:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
        handleFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
        peek:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        unseen:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit by unseen mails only.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fetchSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
        folderName:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: INBOX
          description: The folder to poll.
        mailUidGenerator:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailUidGenerator
          deprecated: false
          secret: false
          description: A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
        mapMailMessage:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        postProcessAction:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBoxPostProcessAction
          deprecated: false
          secret: false
          description: Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
        bcc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the BCC email address. Separate multiple email addresses with comma.
        cc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the CC email address. Separate multiple email addresses with comma.
        from:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel@localhost
          description: The from email address
        replyTo:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
        subject:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The Subject of the message being sent. Note: Setting the subject
            in the header takes precedence over this option.'
        to:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the To email address. Separate multiple email addresses with comma.
        javaMailSender:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          required: false
          type: object
          javaType: org.apache.camel.component.mail.JavaMailSender
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
        additionalJavaMailProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          prefix: mail.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
        alternativeBodyHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelMailAlternativeBody
          description: Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
        attachmentsContentTransferEncodingResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver
          deprecated: false
          secret: false
          description: To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBinding
          deprecated: false
          secret: false
          description: Sets the binding used to convert from a Camel message to and from a Mail message
        connectionTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The connection timeout in milliseconds.
        contentType:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text/plain
          description: The mail message content type. Use text/html for HTML mails.
        contentTypeResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
        debugMode:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        ignoreUnsupportedCharset:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        ignoreUriScheme:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        session:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.mail.Session
          deprecated: false
          secret: false
          description: Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useInlineAttachments:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use disposition inline or attachment.
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
        idempotentRepositoryRemoveOnCommit:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
        searchTerm:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: javax.mail.search.SearchTerm
          prefix: searchTerm.
          multiValue: true
          deprecated: false
          secret: false
          description: Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        sortTerm:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
        dummyTrustManager:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for login
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username for login
    documentation.adoc: |+
      [[Mail-MailComponent]]
      Mail Component
      ~~~~~~~~~~~~~~

      The mail component provides access to Email via Spring's Mail support
      and the underlying JavaMail system.

      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-mail</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      WARNING: *Geronimo mail .jar*

      We have discovered that the geronimo mail `.jar` (v1.6) has a bug when
      polling mails with attachments. It cannot correctly identify the
      `Content-Type`. So, if you attach a `.jpeg` file to a mail and you poll
      it, the `Content-Type` is resolved as `text/plain` and not as
      `image/jpeg`. For that reason, we have added an
      `org.apache.camel.component.ContentTypeResolver` SPI interface which
      enables you to provide your own implementation and fix this bug by
      returning the correct Mime type based on the file name. So if the file
      name ends with `jpeg/jpg`, you can return `image/jpeg`.

      You can set your custom resolver on the `MailComponent` instance or on
      the `MailEndpoint` instance.


      TIP: *POP3 or IMAP*
      POP3 has some limitations and end users are encouraged to use IMAP if
      possible.

      INFO: *Using mock-mail for testing*
      You can use a mock framework for unit testing, which allows you to test
      without the need for a real mail server. However you should remember to
      not include the mock-mail when you go into production or other
      environments where you need to send mails to a real mail server. Just
      the presence of the mock-javamail.jar on the classpath means that it
      will kick in and avoid sending the mails.

      [[Mail-URIformat]]
      URI format
      ^^^^^^^^^^

      Mail endpoints can have one of the following URI formats (for the
      protocols, SMTP, POP3, or IMAP, respectively):

      [source,java]
      ---------------------------------------
      smtp://[username@]host[:port][?options]
      pop3://[username@]host[:port][?options]
      imap://[username@]host[:port][?options]
      ---------------------------------------

      The mail component also supports secure variants of these protocols
      (layered over SSL). You can enable the secure protocols by adding `s` to
      the scheme:

      [source,java]
      ----------------------------------------
      smtps://[username@]host[:port][?options]
      pop3s://[username@]host[:port][?options]
      imaps://[username@]host[:port][?options]
      ----------------------------------------

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


      [[Mail-Component-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The Mail component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | MailConfiguration | Sets the Mail configuration
      | contentTypeResolver | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      |=======================================================================
      {% endraw %}
      // component options: END



      [[Mail-Endpoint-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // endpoint options: START
      The Mail component supports 63 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* The mail server host name
      | port | common |  | int | The port number of the mail server
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | closeFolder | consumer | true | boolean | Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
      | copyTo | consumer |  | String | After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
      | delete | consumer | false | boolean | Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
      | disconnect | consumer | false | boolean | Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
      | handleFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | maxMessagesPerPoll | consumer |  | int | Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
      | peek | consumer | true | boolean | Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | skipFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | unseen | consumer | true | boolean | Whether to limit by unseen mails only.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fetchSize | consumer (advanced) | -1 | int | Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
      | folderName | consumer (advanced) | INBOX | String | The folder to poll.
      | mailUidGenerator | consumer (advanced) |  | MailUidGenerator | A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
      | mapMailMessage | consumer (advanced) | true | boolean | Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | postProcessAction | consumer (advanced) |  | MailBoxPostProcessAction | Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
      | bcc | producer |  | String | Sets the BCC email address. Separate multiple email addresses with comma.
      | cc | producer |  | String | Sets the CC email address. Separate multiple email addresses with comma.
      | from | producer | camel@localhost | String | The from email address
      | replyTo | producer |  | String | The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
      | subject | producer |  | String | The Subject of the message being sent. Note: Setting the subject in the header takes precedence over this option.
      | to | producer |  | String | Sets the To email address. Separate multiple email addresses with comma.
      | javaMailSender | producer (advanced) |  | JavaMailSender | To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
      | additionalJavaMailProperties | advanced |  | Properties | Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
      | alternativeBodyHeader | advanced | CamelMailAlternativeBody | String | Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
      | attachmentsContentTransferEncodingResolver | advanced |  | AttachmentsContentTransferEncodingResolver | To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
      | binding | advanced |  | MailBinding | Sets the binding used to convert from a Camel message to and from a Mail message
      | connectionTimeout | advanced | 30000 | int | The connection timeout in milliseconds.
      | contentType | advanced | text/plain | String | The mail message content type. Use text/html for HTML mails.
      | contentTypeResolver | advanced |  | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      | debugMode | advanced | false | boolean | Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | ignoreUnsupportedCharset | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | ignoreUriScheme | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | session | advanced |  | Session | Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useInlineAttachments | advanced | false | boolean | Whether to use disposition inline or attachment.
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
      | idempotentRepositoryRemoveOnCommit | filter | true | boolean | When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
      | searchTerm | filter |  | SearchTerm | Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | sortTerm | sort |  | String | Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
      | dummyTrustManager | security | false | boolean | To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
      | password | security |  | String | The password for login
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | username | security |  | String | The username for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Mail-Sampleendpoints]]
      Sample endpoints
      ++++++++++++++++

      Typically, you specify a URI with login credentials as follows (taking
      SMTP as an example):

      [source,java]
      ------------------------------------------------
      smtp://[username@]host[:port][?password=somepwd]
      ------------------------------------------------

      Alternatively, it is possible to specify both the user name and the
      password as query options:

      [source,java]
      -----------------------------------------------------
      smtp://host[:port]?password=somepwd&username=someuser
      -----------------------------------------------------

      For example:

      [source,java]
      ------------------------------------------------------------
      smtp://mycompany.mailserver:30?password=tiger&username=scott
      ------------------------------------------------------------

      [[Mail-Components]]
      Components
      ^^^^^^^^^^

      - link:imap.html[IMAP]
      - link:imaps.html[IMAPs]
      - link:pop3.html[POP3s]
      - link:pop3s.html[POP3s]
      - link:smtp.html[STMP]
      - link:smtps.html[SMTPs]

      [[Mail-DefaultPortsDefaultports]]
      Default ports
      +++++++++++++

      Default port numbers are supported. If the port number is omitted, Camel
      determines the port number to use based on the protocol.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Protocol |Default Port Number
      |`SMTP` |`25`
      |`SMTPS` |`465`
      |`POP3` |`110`
      |`POP3S` |`995`
      |`IMAP` |`143`
      |`IMAPS` |`993`
      |=======================================================================

      [[Mail-SSLsupport]]
      SSL support
      ^^^^^^^^^^^

      The underlying mail framework is responsible for providing SSL support.
      ??You may either configure SSL/TLS support by completely specifying the
      necessary Java Mail API configuration options, or you may provide a
      configured SSLContextParameters through the component or endpoint
      configuration.

      [[Mail-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of *Camel 2.10*, the mail component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 mail component.

      [[Mail-Programmaticconfigurationoftheendpoint]]
      Programmatic configuration of the endpoint

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      KeyStoreParameters ksp = new KeyStoreParameters();
      ksp.setResource("/users/home/server/truststore.jks");
      ksp.setPassword("keystorePassword");
      TrustManagersParameters tmp = new TrustManagersParameters();
      tmp.setKeyStore(ksp);
      SSLContextParameters scp = new SSLContextParameters();
      scp.setTrustManagers(tmp);
      Registry registry = ...
      registry.bind("sslContextParameters", scp);
      ...
      from(...)
      &nbsp; &nbsp; .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
      ----------------------------------------------------------------------------------------------------------------------------------

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

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      ...
      <camel:sslContextParameters id="sslContextParameters">
        <camel:trustManagers>
          <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/>
        </camel:trustManagers>
      </camel:sslContextParameters>...
      ...
      <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
      ---------------------------------------------------------------------------------------------------------------------------

      [[Mail-ConfiguringJavaMailDirectly]]
      Configuring JavaMail Directly
      +++++++++++++++++++++++++++++

      Camel uses SUN JavaMail, which only trusts certificates issued by well
      known Certificate Authorities (the default JVM trust configuration). If
      you issue your own certificates, you have to import the CA certificates
      into the JVM's Java trust/key store files, override the default JVM
      trust/key store files (see `SSLNOTES.txt` in JavaMail for details).

      [[Mail-MailMessageContent]]
      Mail Message Content
      ^^^^^^^^^^^^^^^^^^^^

      Camel uses the message exchange's IN body as the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      text content. The body is converted to `String.class`.

      Camel copies all of the exchange's IN headers to the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      headers.

      The subject of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      can be configured using a header property on the IN message. The code
      below demonstrates this:

      The same applies for other MimeMessage headers such as recipients, so
      you can use a header property as `To`:

      *Since Camel 2.11* When using the MailProducer the send the mail to
      server, you should be able to get the message id of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      with the key `CamelMailMessageId` from the Camel message header.

      [[Mail-Headerstakeprecedenceoverpre-configuredrecipients]]
      Headers take precedence over pre-configured recipients
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The recipients specified in the message headers always take precedence
      over recipients pre-configured in the endpoint URI. The idea is that if
      you provide any recipients in the message headers, that is what you get.
      The recipients pre-configured in the endpoint URI are treated as a
      fallback.

      In the sample code below, the email message is sent to
      `davsclaus@apache.org`, because it takes precedence over the
      pre-configured recipient, `info@mycompany.com`. Any `CC` and `BCC`
      settings in the endpoint URI are also ignored and those recipients will
      not receive any mail. The choice between headers and pre-configured
      settings is all or nothing: the mail component _either_ takes the
      recipients exclusively from the headers or exclusively from the
      pre-configured settings. It is not possible to mix and match headers and
      pre-configured settings.

      [source,java]
      ------------------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org");

              template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
      ------------------------------------------------------------------------------------------------------------

      [[Mail-Multiplerecipientsforeasierconfiguration]]
      Multiple recipients for easier configuration
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      It is possible to set multiple recipients using a comma-separated or a
      semicolon-separated list. This applies both to header settings and to
      settings in an endpoint URI. For example:

      [source,java]
      ------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
      ------------------------------------------------------------------------------------------------

      The preceding example uses a semicolon, `;`, as the separator character.

      [[Mail-Settingsendernameandemail]]
      Setting sender name and email
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can specify recipients in the format, `name <email>`, to include
      both the name and the email address of the recipient.

      For example, you define the following headers on the a
      link:message.html[Message]:

      [source,java]
      ---------------------------------------------------------
      Map headers = new HashMap();
      map.put("To", "Claus Ibsen <davsclaus@apache.org>");
      map.put("From", "James Strachan <jstrachan@apache.org>");
      map.put("Subject", "Camel is cool");
      ---------------------------------------------------------

      [[Mail-JavaMailAPI(exSUNJavaMail)]]
      JavaMail API (ex SUN JavaMail)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      https://java.net/projects/javamail/pages/Home[JavaMail API] is used
      under the hood for consuming and producing mails. +
       We encourage end-users to consult these references when using either
      POP3 or IMAP protocol. Note particularly that POP3 has a much more
      limited set of features than IMAP.

      * https://javamail.java.net/nonav/docs/api/com/sun/mail/pop3/package-summary.html[JavaMail
      POP3 API]
      * https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/package-summary.html[JavaMail
      IMAP API]
      * And generally about the
      https://javamail.java.net/nonav/docs/api/javax/mail/Flags.html[MAIL
      Flags]

      [[Mail-Samples]]
      Samples
      ^^^^^^^

      We start with a simple route that sends the messages received from a JMS
      queue as emails. The email account is the `admin` account on
      `mymailserver.com`.

      [source,java]
      -------------------------------------------------------------------------------------
      from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
      -------------------------------------------------------------------------------------

      In the next sample, we poll a mailbox for new emails once every minute.
      Notice that we use the special `consumer` option for setting the poll
      interval, `consumer.delay`, as 60000 milliseconds = 60 seconds.

      [source,java]
      -------------------------------------------------------
      from("imap://admin@mymailserver.com
           password=secret&unseen=true&consumer.delay=60000")
          .to("seda://mails");
      -------------------------------------------------------

      In this sample we want to send a mail to multiple recipients:

      [[Mail-Sendingmailwithattachmentsample]]
      Sending mail with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


      WARNING: *Attachments are not support by all Camel components*
      The _Attachments API_ is based on the Java Activation Framework and is
      generally only used by the Mail API. Since many of the other Camel
      components do not support attachments, the attachments could potentially
      be lost as they propagate along the route. The rule of thumb, therefore,
      is to add attachments just before sending a message to the mail
      endpoint.


      The mail component supports attachments. In the sample below, we send a
      mail message containing a plain text message with a logo file
      attachment.

      [[Mail-SSLsample]]
      SSL sample
      ^^^^^^^^^^

      In this sample, we want to poll our Google mail inbox for mails. To
      download mail onto a local mail client, Google mail requires you to
      enable and configure SSL. This is done by logging into your Google mail
      account and changing your settings to allow IMAP access. Google have
      extensive documentation on how to do this.

      [source,java]
      -------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").to("log:newmail");
      -------------------------------------------------------------------------------------

      The preceding route polls the Google mail inbox for new mails once every
      minute and logs the received messages to the `newmail` logger
      category. +
       Running the sample with `DEBUG` logging enabled, we can monitor the
      progress in the logs:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages.
      2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      2008-05-08 06:32:12,187 INFO  newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Mail-Consumingmailswithattachmentsample]]
      Consuming mails with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this sample we poll a mailbox and store all attachments from the
      mails as files. First, we define a route to poll the mailbox. As this
      sample is based on google mail, it uses the same route as shown in the
      SSL sample:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").process(new MyMailProcessor());
      ---------------------------------------------------------------------------------------

      Instead of logging the mail we use a processor where we can process the
      mail from java code:

      [source,java]
      ---------------------------------------------------------------------------------
          public void process(Exchange exchange) throws Exception {
              // the API is a bit clunky so we need to loop
              Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
              if (attachments.size() > 0) {
                  for (String name : attachments.keySet()) {
                      DataHandler dh = attachments.get(name);
                      // get the file name
                      String filename = dh.getName();

                      // get the content and convert it to byte[]
                      byte[] data = exchange.getContext().getTypeConverter()
                                        .convertTo(byte[].class, dh.getInputStream());

                      // write the data to a file
                      FileOutputStream out = new FileOutputStream(filename);
                      out.write(data);
                      out.flush();
                      out.close();
                  }
              }
         }
      ---------------------------------------------------------------------------------

      As you can see the API to handle attachments is a bit clunky but it's
      there so you can get the `javax.activation.DataHandler` so you can
      handle the attachments using standard API.

      [[Mail-Howtosplitamailmessagewithattachments]]
      How to split a mail message with attachments
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this example we consume mail messages which may have a number of
      attachments. What we want to do is to use the
      link:splitter.html[Splitter] EIP per individual attachment, to process
      the attachments separately. For example if the mail message has 5
      attachments, we want the link:splitter.html[Splitter] to process five
      messages, each having a single attachment. To do this we need to provide
      a custom link:expression.html[Expression] to the
      link:splitter.html[Splitter] where we provide a List<Message> that
      contains the five messages with the single attachment.

      The code is provided out of the box in Camel 2.10 onwards in the
      `camel-mail` component. The code is in the class:
      `org.apache.camel.component.mail.SplitAttachmentsExpression`, which you
      can find the source code
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java[here]

      In the Camel route you then need to use this
      link:expression.html[Expression] in the route as shown below:

      If you use XML DSL then you need to declare a method call expression in
      the link:splitter.html[Splitter] as shown below

      [source,xml]
      ---------------------------------------------------------------------------------
      <split>
        <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/>
        <to uri="mock:split"/>
      </split>
      ---------------------------------------------------------------------------------

      ??

      From Camel 2.16 onwards you can also split the attachments as byte[] to
      be stored as the message body. This is done by creating the expression
      with boolean true

      [source,java]
      --------------------------------------------------------------------
      SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
      --------------------------------------------------------------------

      And then use the expression with the splitter eip.

      [[Mail-UsingcustomSearchTerm]]
      Using custom SearchTerm
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can configure a `searchTerm` on the `MailEndpoint` which allows you
      to filter out unwanted mails.

      For example to filter mails to contain Camel in either Subject or Text
      you can do as follows:

      [source,xml]
      -------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------------

      Notice we use the `"searchTerm.subjectOrBody"` as parameter key to
      indicate that we want to search on mail subject or body, to contain the
      word "Camel". +
       The class `org.apache.camel.component.mail.SimpleSearchTerm` has a
      number of options you can configure:

      Or to get the new unseen emails going 24 hours back in time you can do.
      Notice the "now-24h" syntax. See the table below for more details.

      [source,xml]
      --------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      --------------------------------------------------------------------------------------------------

      You can have multiple searchTerm in the endpoint uri configuration. They
      would then be combined together using AND operator, eg so both
      conditions must match. For example to get the last unseen emails going
      back 24 hours which has Camel in the mail subject you can do:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      ---------------------------------------------------------------------------------------------------------------------------

      The `SimpleSearchTerm` is designed to be easily configurable from a
      POJO, so you can also configure it using a <bean> style in XML

      [source,java]
      ---------------------------------------------------------------------------------
      <bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
        <property name="subject" value="Order"/>
        <property name="to" value="acme-order@acme.com"/>
        <property name="fromSentDate" value="now"/>
       </bean>
      ---------------------------------------------------------------------------------

      You can then refer to this bean, using #beanId in your Camel route as
      shown:

      [source,xml]
      -------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------

      In Java there is a builder class to build compound
      `SearchTerms` using the `org.apache.camel.component.mail.SearchTermBuilder`
      class. This allows you to build complex terms such as:

      [source,java]
      --------------------------------------------------------------
      // we just want the unseen mails which is not spam
      SearchTermBuilder builder = new SearchTermBuilder();

      builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
        // which was sent from either foo or bar
        .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
        // .. and we could continue building the terms

      SearchTerm term = builder.build();
      --------------------------------------------------------------

      [[Mail-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-pop3s
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: pop3s
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: pop3s
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: pop3s
          spec:
            containers:
            - image: fabric8/connector-pop3s:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: pop3s
        alternativeSchemes: imap,imaps,pop3,pop3s,smtp,smtps
        syntax: pop3s:host:port
        alternativeSyntax: pop3s:username:password@host:port
        title: POP3S
        description: To send or receive emails using imap/pop3 or stmp protocols.
        label: mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mail.MailComponent
        groupId: org.apache.camel
        artifactId: camel-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.MailConfiguration
          deprecated: false
          secret: false
          description: Sets the Mail configuration
        contentTypeResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The mail server host name
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the mail server
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        closeFolder:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
        copyTo:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
        disconnect:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
        handleFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
        peek:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        unseen:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit by unseen mails only.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fetchSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
        folderName:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: INBOX
          description: The folder to poll.
        mailUidGenerator:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailUidGenerator
          deprecated: false
          secret: false
          description: A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
        mapMailMessage:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        postProcessAction:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBoxPostProcessAction
          deprecated: false
          secret: false
          description: Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
        bcc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the BCC email address. Separate multiple email addresses with comma.
        cc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the CC email address. Separate multiple email addresses with comma.
        from:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel@localhost
          description: The from email address
        replyTo:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
        subject:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The Subject of the message being sent. Note: Setting the subject
            in the header takes precedence over this option.'
        to:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the To email address. Separate multiple email addresses with comma.
        javaMailSender:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          required: false
          type: object
          javaType: org.apache.camel.component.mail.JavaMailSender
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
        additionalJavaMailProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          prefix: mail.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
        alternativeBodyHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelMailAlternativeBody
          description: Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
        attachmentsContentTransferEncodingResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver
          deprecated: false
          secret: false
          description: To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBinding
          deprecated: false
          secret: false
          description: Sets the binding used to convert from a Camel message to and from a Mail message
        connectionTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The connection timeout in milliseconds.
        contentType:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text/plain
          description: The mail message content type. Use text/html for HTML mails.
        contentTypeResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
        debugMode:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        ignoreUnsupportedCharset:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        ignoreUriScheme:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        session:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.mail.Session
          deprecated: false
          secret: false
          description: Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useInlineAttachments:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use disposition inline or attachment.
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
        idempotentRepositoryRemoveOnCommit:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
        searchTerm:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: javax.mail.search.SearchTerm
          prefix: searchTerm.
          multiValue: true
          deprecated: false
          secret: false
          description: Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        sortTerm:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
        dummyTrustManager:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for login
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username for login
    documentation.adoc: |+
      [[Mail-MailComponent]]
      Mail Component
      ~~~~~~~~~~~~~~

      The mail component provides access to Email via Spring's Mail support
      and the underlying JavaMail system.

      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-mail</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      WARNING: *Geronimo mail .jar*

      We have discovered that the geronimo mail `.jar` (v1.6) has a bug when
      polling mails with attachments. It cannot correctly identify the
      `Content-Type`. So, if you attach a `.jpeg` file to a mail and you poll
      it, the `Content-Type` is resolved as `text/plain` and not as
      `image/jpeg`. For that reason, we have added an
      `org.apache.camel.component.ContentTypeResolver` SPI interface which
      enables you to provide your own implementation and fix this bug by
      returning the correct Mime type based on the file name. So if the file
      name ends with `jpeg/jpg`, you can return `image/jpeg`.

      You can set your custom resolver on the `MailComponent` instance or on
      the `MailEndpoint` instance.


      TIP: *POP3 or IMAP*
      POP3 has some limitations and end users are encouraged to use IMAP if
      possible.

      INFO: *Using mock-mail for testing*
      You can use a mock framework for unit testing, which allows you to test
      without the need for a real mail server. However you should remember to
      not include the mock-mail when you go into production or other
      environments where you need to send mails to a real mail server. Just
      the presence of the mock-javamail.jar on the classpath means that it
      will kick in and avoid sending the mails.

      [[Mail-URIformat]]
      URI format
      ^^^^^^^^^^

      Mail endpoints can have one of the following URI formats (for the
      protocols, SMTP, POP3, or IMAP, respectively):

      [source,java]
      ---------------------------------------
      smtp://[username@]host[:port][?options]
      pop3://[username@]host[:port][?options]
      imap://[username@]host[:port][?options]
      ---------------------------------------

      The mail component also supports secure variants of these protocols
      (layered over SSL). You can enable the secure protocols by adding `s` to
      the scheme:

      [source,java]
      ----------------------------------------
      smtps://[username@]host[:port][?options]
      pop3s://[username@]host[:port][?options]
      imaps://[username@]host[:port][?options]
      ----------------------------------------

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


      [[Mail-Component-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The Mail component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | MailConfiguration | Sets the Mail configuration
      | contentTypeResolver | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      |=======================================================================
      {% endraw %}
      // component options: END



      [[Mail-Endpoint-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // endpoint options: START
      The Mail component supports 63 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* The mail server host name
      | port | common |  | int | The port number of the mail server
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | closeFolder | consumer | true | boolean | Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
      | copyTo | consumer |  | String | After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
      | delete | consumer | false | boolean | Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
      | disconnect | consumer | false | boolean | Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
      | handleFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | maxMessagesPerPoll | consumer |  | int | Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
      | peek | consumer | true | boolean | Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | skipFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | unseen | consumer | true | boolean | Whether to limit by unseen mails only.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fetchSize | consumer (advanced) | -1 | int | Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
      | folderName | consumer (advanced) | INBOX | String | The folder to poll.
      | mailUidGenerator | consumer (advanced) |  | MailUidGenerator | A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
      | mapMailMessage | consumer (advanced) | true | boolean | Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | postProcessAction | consumer (advanced) |  | MailBoxPostProcessAction | Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
      | bcc | producer |  | String | Sets the BCC email address. Separate multiple email addresses with comma.
      | cc | producer |  | String | Sets the CC email address. Separate multiple email addresses with comma.
      | from | producer | camel@localhost | String | The from email address
      | replyTo | producer |  | String | The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
      | subject | producer |  | String | The Subject of the message being sent. Note: Setting the subject in the header takes precedence over this option.
      | to | producer |  | String | Sets the To email address. Separate multiple email addresses with comma.
      | javaMailSender | producer (advanced) |  | JavaMailSender | To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
      | additionalJavaMailProperties | advanced |  | Properties | Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
      | alternativeBodyHeader | advanced | CamelMailAlternativeBody | String | Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
      | attachmentsContentTransferEncodingResolver | advanced |  | AttachmentsContentTransferEncodingResolver | To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
      | binding | advanced |  | MailBinding | Sets the binding used to convert from a Camel message to and from a Mail message
      | connectionTimeout | advanced | 30000 | int | The connection timeout in milliseconds.
      | contentType | advanced | text/plain | String | The mail message content type. Use text/html for HTML mails.
      | contentTypeResolver | advanced |  | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      | debugMode | advanced | false | boolean | Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | ignoreUnsupportedCharset | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | ignoreUriScheme | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | session | advanced |  | Session | Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useInlineAttachments | advanced | false | boolean | Whether to use disposition inline or attachment.
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
      | idempotentRepositoryRemoveOnCommit | filter | true | boolean | When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
      | searchTerm | filter |  | SearchTerm | Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | sortTerm | sort |  | String | Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
      | dummyTrustManager | security | false | boolean | To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
      | password | security |  | String | The password for login
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | username | security |  | String | The username for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Mail-Sampleendpoints]]
      Sample endpoints
      ++++++++++++++++

      Typically, you specify a URI with login credentials as follows (taking
      SMTP as an example):

      [source,java]
      ------------------------------------------------
      smtp://[username@]host[:port][?password=somepwd]
      ------------------------------------------------

      Alternatively, it is possible to specify both the user name and the
      password as query options:

      [source,java]
      -----------------------------------------------------
      smtp://host[:port]?password=somepwd&username=someuser
      -----------------------------------------------------

      For example:

      [source,java]
      ------------------------------------------------------------
      smtp://mycompany.mailserver:30?password=tiger&username=scott
      ------------------------------------------------------------

      [[Mail-Components]]
      Components
      ^^^^^^^^^^

      - link:imap.html[IMAP]
      - link:imaps.html[IMAPs]
      - link:pop3.html[POP3s]
      - link:pop3s.html[POP3s]
      - link:smtp.html[STMP]
      - link:smtps.html[SMTPs]

      [[Mail-DefaultPortsDefaultports]]
      Default ports
      +++++++++++++

      Default port numbers are supported. If the port number is omitted, Camel
      determines the port number to use based on the protocol.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Protocol |Default Port Number
      |`SMTP` |`25`
      |`SMTPS` |`465`
      |`POP3` |`110`
      |`POP3S` |`995`
      |`IMAP` |`143`
      |`IMAPS` |`993`
      |=======================================================================

      [[Mail-SSLsupport]]
      SSL support
      ^^^^^^^^^^^

      The underlying mail framework is responsible for providing SSL support.
      ??You may either configure SSL/TLS support by completely specifying the
      necessary Java Mail API configuration options, or you may provide a
      configured SSLContextParameters through the component or endpoint
      configuration.

      [[Mail-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of *Camel 2.10*, the mail component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 mail component.

      [[Mail-Programmaticconfigurationoftheendpoint]]
      Programmatic configuration of the endpoint

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      KeyStoreParameters ksp = new KeyStoreParameters();
      ksp.setResource("/users/home/server/truststore.jks");
      ksp.setPassword("keystorePassword");
      TrustManagersParameters tmp = new TrustManagersParameters();
      tmp.setKeyStore(ksp);
      SSLContextParameters scp = new SSLContextParameters();
      scp.setTrustManagers(tmp);
      Registry registry = ...
      registry.bind("sslContextParameters", scp);
      ...
      from(...)
      &nbsp; &nbsp; .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
      ----------------------------------------------------------------------------------------------------------------------------------

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

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      ...
      <camel:sslContextParameters id="sslContextParameters">
        <camel:trustManagers>
          <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/>
        </camel:trustManagers>
      </camel:sslContextParameters>...
      ...
      <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
      ---------------------------------------------------------------------------------------------------------------------------

      [[Mail-ConfiguringJavaMailDirectly]]
      Configuring JavaMail Directly
      +++++++++++++++++++++++++++++

      Camel uses SUN JavaMail, which only trusts certificates issued by well
      known Certificate Authorities (the default JVM trust configuration). If
      you issue your own certificates, you have to import the CA certificates
      into the JVM's Java trust/key store files, override the default JVM
      trust/key store files (see `SSLNOTES.txt` in JavaMail for details).

      [[Mail-MailMessageContent]]
      Mail Message Content
      ^^^^^^^^^^^^^^^^^^^^

      Camel uses the message exchange's IN body as the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      text content. The body is converted to `String.class`.

      Camel copies all of the exchange's IN headers to the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      headers.

      The subject of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      can be configured using a header property on the IN message. The code
      below demonstrates this:

      The same applies for other MimeMessage headers such as recipients, so
      you can use a header property as `To`:

      *Since Camel 2.11* When using the MailProducer the send the mail to
      server, you should be able to get the message id of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      with the key `CamelMailMessageId` from the Camel message header.

      [[Mail-Headerstakeprecedenceoverpre-configuredrecipients]]
      Headers take precedence over pre-configured recipients
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The recipients specified in the message headers always take precedence
      over recipients pre-configured in the endpoint URI. The idea is that if
      you provide any recipients in the message headers, that is what you get.
      The recipients pre-configured in the endpoint URI are treated as a
      fallback.

      In the sample code below, the email message is sent to
      `davsclaus@apache.org`, because it takes precedence over the
      pre-configured recipient, `info@mycompany.com`. Any `CC` and `BCC`
      settings in the endpoint URI are also ignored and those recipients will
      not receive any mail. The choice between headers and pre-configured
      settings is all or nothing: the mail component _either_ takes the
      recipients exclusively from the headers or exclusively from the
      pre-configured settings. It is not possible to mix and match headers and
      pre-configured settings.

      [source,java]
      ------------------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org");

              template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
      ------------------------------------------------------------------------------------------------------------

      [[Mail-Multiplerecipientsforeasierconfiguration]]
      Multiple recipients for easier configuration
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      It is possible to set multiple recipients using a comma-separated or a
      semicolon-separated list. This applies both to header settings and to
      settings in an endpoint URI. For example:

      [source,java]
      ------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
      ------------------------------------------------------------------------------------------------

      The preceding example uses a semicolon, `;`, as the separator character.

      [[Mail-Settingsendernameandemail]]
      Setting sender name and email
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can specify recipients in the format, `name <email>`, to include
      both the name and the email address of the recipient.

      For example, you define the following headers on the a
      link:message.html[Message]:

      [source,java]
      ---------------------------------------------------------
      Map headers = new HashMap();
      map.put("To", "Claus Ibsen <davsclaus@apache.org>");
      map.put("From", "James Strachan <jstrachan@apache.org>");
      map.put("Subject", "Camel is cool");
      ---------------------------------------------------------

      [[Mail-JavaMailAPI(exSUNJavaMail)]]
      JavaMail API (ex SUN JavaMail)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      https://java.net/projects/javamail/pages/Home[JavaMail API] is used
      under the hood for consuming and producing mails. +
       We encourage end-users to consult these references when using either
      POP3 or IMAP protocol. Note particularly that POP3 has a much more
      limited set of features than IMAP.

      * https://javamail.java.net/nonav/docs/api/com/sun/mail/pop3/package-summary.html[JavaMail
      POP3 API]
      * https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/package-summary.html[JavaMail
      IMAP API]
      * And generally about the
      https://javamail.java.net/nonav/docs/api/javax/mail/Flags.html[MAIL
      Flags]

      [[Mail-Samples]]
      Samples
      ^^^^^^^

      We start with a simple route that sends the messages received from a JMS
      queue as emails. The email account is the `admin` account on
      `mymailserver.com`.

      [source,java]
      -------------------------------------------------------------------------------------
      from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
      -------------------------------------------------------------------------------------

      In the next sample, we poll a mailbox for new emails once every minute.
      Notice that we use the special `consumer` option for setting the poll
      interval, `consumer.delay`, as 60000 milliseconds = 60 seconds.

      [source,java]
      -------------------------------------------------------
      from("imap://admin@mymailserver.com
           password=secret&unseen=true&consumer.delay=60000")
          .to("seda://mails");
      -------------------------------------------------------

      In this sample we want to send a mail to multiple recipients:

      [[Mail-Sendingmailwithattachmentsample]]
      Sending mail with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


      WARNING: *Attachments are not support by all Camel components*
      The _Attachments API_ is based on the Java Activation Framework and is
      generally only used by the Mail API. Since many of the other Camel
      components do not support attachments, the attachments could potentially
      be lost as they propagate along the route. The rule of thumb, therefore,
      is to add attachments just before sending a message to the mail
      endpoint.


      The mail component supports attachments. In the sample below, we send a
      mail message containing a plain text message with a logo file
      attachment.

      [[Mail-SSLsample]]
      SSL sample
      ^^^^^^^^^^

      In this sample, we want to poll our Google mail inbox for mails. To
      download mail onto a local mail client, Google mail requires you to
      enable and configure SSL. This is done by logging into your Google mail
      account and changing your settings to allow IMAP access. Google have
      extensive documentation on how to do this.

      [source,java]
      -------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").to("log:newmail");
      -------------------------------------------------------------------------------------

      The preceding route polls the Google mail inbox for new mails once every
      minute and logs the received messages to the `newmail` logger
      category. +
       Running the sample with `DEBUG` logging enabled, we can monitor the
      progress in the logs:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages.
      2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      2008-05-08 06:32:12,187 INFO  newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Mail-Consumingmailswithattachmentsample]]
      Consuming mails with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this sample we poll a mailbox and store all attachments from the
      mails as files. First, we define a route to poll the mailbox. As this
      sample is based on google mail, it uses the same route as shown in the
      SSL sample:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").process(new MyMailProcessor());
      ---------------------------------------------------------------------------------------

      Instead of logging the mail we use a processor where we can process the
      mail from java code:

      [source,java]
      ---------------------------------------------------------------------------------
          public void process(Exchange exchange) throws Exception {
              // the API is a bit clunky so we need to loop
              Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
              if (attachments.size() > 0) {
                  for (String name : attachments.keySet()) {
                      DataHandler dh = attachments.get(name);
                      // get the file name
                      String filename = dh.getName();

                      // get the content and convert it to byte[]
                      byte[] data = exchange.getContext().getTypeConverter()
                                        .convertTo(byte[].class, dh.getInputStream());

                      // write the data to a file
                      FileOutputStream out = new FileOutputStream(filename);
                      out.write(data);
                      out.flush();
                      out.close();
                  }
              }
         }
      ---------------------------------------------------------------------------------

      As you can see the API to handle attachments is a bit clunky but it's
      there so you can get the `javax.activation.DataHandler` so you can
      handle the attachments using standard API.

      [[Mail-Howtosplitamailmessagewithattachments]]
      How to split a mail message with attachments
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this example we consume mail messages which may have a number of
      attachments. What we want to do is to use the
      link:splitter.html[Splitter] EIP per individual attachment, to process
      the attachments separately. For example if the mail message has 5
      attachments, we want the link:splitter.html[Splitter] to process five
      messages, each having a single attachment. To do this we need to provide
      a custom link:expression.html[Expression] to the
      link:splitter.html[Splitter] where we provide a List<Message> that
      contains the five messages with the single attachment.

      The code is provided out of the box in Camel 2.10 onwards in the
      `camel-mail` component. The code is in the class:
      `org.apache.camel.component.mail.SplitAttachmentsExpression`, which you
      can find the source code
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java[here]

      In the Camel route you then need to use this
      link:expression.html[Expression] in the route as shown below:

      If you use XML DSL then you need to declare a method call expression in
      the link:splitter.html[Splitter] as shown below

      [source,xml]
      ---------------------------------------------------------------------------------
      <split>
        <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/>
        <to uri="mock:split"/>
      </split>
      ---------------------------------------------------------------------------------

      ??

      From Camel 2.16 onwards you can also split the attachments as byte[] to
      be stored as the message body. This is done by creating the expression
      with boolean true

      [source,java]
      --------------------------------------------------------------------
      SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
      --------------------------------------------------------------------

      And then use the expression with the splitter eip.

      [[Mail-UsingcustomSearchTerm]]
      Using custom SearchTerm
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can configure a `searchTerm` on the `MailEndpoint` which allows you
      to filter out unwanted mails.

      For example to filter mails to contain Camel in either Subject or Text
      you can do as follows:

      [source,xml]
      -------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------------

      Notice we use the `"searchTerm.subjectOrBody"` as parameter key to
      indicate that we want to search on mail subject or body, to contain the
      word "Camel". +
       The class `org.apache.camel.component.mail.SimpleSearchTerm` has a
      number of options you can configure:

      Or to get the new unseen emails going 24 hours back in time you can do.
      Notice the "now-24h" syntax. See the table below for more details.

      [source,xml]
      --------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      --------------------------------------------------------------------------------------------------

      You can have multiple searchTerm in the endpoint uri configuration. They
      would then be combined together using AND operator, eg so both
      conditions must match. For example to get the last unseen emails going
      back 24 hours which has Camel in the mail subject you can do:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      ---------------------------------------------------------------------------------------------------------------------------

      The `SimpleSearchTerm` is designed to be easily configurable from a
      POJO, so you can also configure it using a <bean> style in XML

      [source,java]
      ---------------------------------------------------------------------------------
      <bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
        <property name="subject" value="Order"/>
        <property name="to" value="acme-order@acme.com"/>
        <property name="fromSentDate" value="now"/>
       </bean>
      ---------------------------------------------------------------------------------

      You can then refer to this bean, using #beanId in your Camel route as
      shown:

      [source,xml]
      -------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------

      In Java there is a builder class to build compound
      `SearchTerms` using the `org.apache.camel.component.mail.SearchTermBuilder`
      class. This allows you to build complex terms such as:

      [source,java]
      --------------------------------------------------------------
      // we just want the unseen mails which is not spam
      SearchTermBuilder builder = new SearchTermBuilder();

      builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
        // which was sent from either foo or bar
        .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
        // .. and we could continue building the terms

      SearchTerm term = builder.build();
      --------------------------------------------------------------

      [[Mail-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-properties
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: properties
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: properties
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: properties
          spec:
            containers:
            - image: fabric8/connector-properties:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: properties
        syntax: properties:key
        title: Properties
        description: The properties component is used for using property placeholders in endpoint uris.
        label: core,endpoint
        deprecated: false
        async: false
        javaType: org.apache.camel.component.properties.PropertiesComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        locations:
          kind: property
          type: array
          javaType: java.lang.String[]
          deprecated: false
          secret: false
          description: A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option.
        location:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option.
        encoding:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Encoding to use when loading properties file from the file system or classpath. If no encoding has been set then the properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by link java.util.Propertiesload(java.io.InputStream)
        propertiesResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.properties.PropertiesResolver
          deprecated: false
          secret: false
          description: To use a custom PropertiesResolver
        propertiesParser:
          kind: property
          type: object
          javaType: org.apache.camel.component.properties.PropertiesParser
          deprecated: false
          secret: false
          description: To use a custom PropertiesParser
        cache:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether or not to cache loaded properties. The default value is true.
        propertyPrefix:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Optional prefix prepended to property names before resolution.
        propertySuffix:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Optional suffix appended to property names before resolution.
        fallbackToUnaugmentedProperty:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If true first attempt resolution of property name augmented with propertyPrefix and propertySuffix before falling back the plain property name specified. If false only the augmented property name is searched.
        ignoreMissingLocation:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to silently ignore if a location cannot be located such as a properties file not found.
        prefixToken:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the value of the prefix token used to identify properties to replace. Setting a value of null restores the default token (link link DEFAULT_PREFIX_TOKEN).
        suffixToken:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the value of the suffix token used to identify properties to replace. Setting a value of null restores the default token (link link DEFAULT_SUFFIX_TOKEN).
        initialProperties:
          kind: property
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: Sets initial properties which will be used before any locations are resolved.
        overrideProperties:
          kind: property
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: Sets a special list of override properties that take precedence and will use first if a property exist.
        systemPropertiesMode:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the system property mode.
      properties:
        key:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Property key to use as placeholder
        ignoreMissingLocation:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to silently ignore if a location cannot be located such as a properties file not found.
        locations:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Properties-PropertiesComponent]]\nProperties Component\n\
      ~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.3*\n\n[[Properties-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source]\n----\nproperties:key[?options]\n----\n\n\
      Where *key* is the key for the property to lookup\n\n[[Properties-Options]]\n\
      Options\n^^^^^^^\n\n// component options: START\nThe Properties component supports\
      \ 15 options which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| locations | String[] | A list of locations\
      \ to load properties. You can use comma to separate multiple locations. This\
      \ option will override any default locations and only use the locations from\
      \ this option.\n| location | String | A list of locations to load properties.\
      \ You can use comma to separate multiple locations. This option will override\
      \ any default locations and only use the locations from this option.\n| encoding\
      \ | String | Encoding to use when loading properties file from the file system\
      \ or classpath. If no encoding has been set then the properties files is loaded\
      \ using ISO-8859-1 encoding (latin-1) as documented by link java.util.Propertiesload(java.io.InputStream)\n\
      | propertiesResolver | PropertiesResolver | To use a custom PropertiesResolver\n\
      | propertiesParser | PropertiesParser | To use a custom PropertiesParser\n|\
      \ cache | boolean | Whether or not to cache loaded properties. The default value\
      \ is true.\n| propertyPrefix | String | Optional prefix prepended to property\
      \ names before resolution.\n| propertySuffix | String | Optional suffix appended\
      \ to property names before resolution.\n| fallbackToUnaugmentedProperty | boolean\
      \ | If true first attempt resolution of property name augmented with propertyPrefix\
      \ and propertySuffix before falling back the plain property name specified.\
      \ If false only the augmented property name is searched.\n| ignoreMissingLocation\
      \ | boolean | Whether to silently ignore if a location cannot be located such\
      \ as a properties file not found.\n| prefixToken | String | Sets the value of\
      \ the prefix token used to identify properties to replace. Setting a value of\
      \ null restores the default token (link link DEFAULT_PREFIX_TOKEN).\n| suffixToken\
      \ | String | Sets the value of the suffix token used to identify properties\
      \ to replace. Setting a value of null restores the default token (link link\
      \ DEFAULT_SUFFIX_TOKEN).\n| initialProperties | Properties | Sets initial properties\
      \ which will be used before any locations are resolved.\n| overrideProperties\
      \ | Properties | Sets a special list of override properties that take precedence\
      \ and will use first if a property exist.\n| systemPropertiesMode | int | Sets\
      \ the system property mode.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n// endpoint options: START\nThe\
      \ Properties component supports 7 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| key | common |  | String\
      \ | *Required* Property key to use as placeholder\n| ignoreMissingLocation |\
      \ common | false | boolean | Whether to silently ignore if a location cannot\
      \ be located such as a properties file not found.\n| locations | common |  |\
      \ String | A list of locations to load properties. You can use comma to separate\
      \ multiple locations. This option will override any default locations and only\
      \ use the locations from this option.\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern\
      \ when creating an exchange.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[TIP]\n**Resolving property from\
      \ Java code** +\nYou can use the method `resolvePropertyPlaceholders` on the\n\
      `CamelContext` to resolve a property from any Java code.\n\n[[Properties-UsingPropertyPlaceholder]]\n\
      Using PropertyPlaceholder\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel\
      \ 2.3*\n\nCamel now provides a new `PropertiesComponent` in *camel-core* which\n\
      allows you to use property placeholders when defining Camel\nlink:endpoint.html[Endpoint]\
      \ URIs.\n\nThis works much like you would do if using Spring's\n`<property-placeholder>`\
      \ tag. However Spring have a limitation which\nprevents 3rd party frameworks\
      \ to leverage Spring property placeholders\nto the fullest. See more at\nlink:how-do-i-use-spring-property-placeholder-with-camel-xml.html[How\
      \ do\nI use Spring Property Placeholder with Camel XML].\n\n[TIP]\n**Bridging\
      \ Spring and Camel property placeholders** +\nFrom Camel 2.10 onwards, you can\
      \ bridge the Spring property placeholder\nwith Camel, see further below for\
      \ more details.\n\nThe property placeholder is generally in use when doing:\n\
      \n* lookup or creating endpoints\n* lookup of beans in the link:registry.html[Registry]\n\
      * additional supported in Spring XML (see below in examples)\n* using Blueprint\
      \ PropertyPlaceholder with Camel\nlink:properties.html[Properties] component\n\
      * using `@PropertyInject` to inject a property in a POJO\n* *Camel 2.14.1* Using\
      \ default value if a property does not exists\n* *Camel 2.14.1* Include out\
      \ of the box functions, to lookup property\nvalues from OS environment variables,\
      \ JVM system properties, or the\nservice idiom.\n* *Camel 2.14.1* Using custom\
      \ functions, which can be plugged into the\nproperty component.\n\n[[Properties-Syntax]]\n\
      Syntax\n^^^^^^\n\nThe syntax to use Camel's property placeholder is to use `{{key}}`\
      \ for\nexample `{{file.uri}}` where `file.uri` is the property key.\n\nYou can\
      \ use property placeholders in parts of the endpoint URI's which\nfor example\
      \ you can use placeholders for parameters in the URIs.\n\nFrom??**Camel 2.14.1**\
      \ onwards you can specify a default value to use if\na property with the key\
      \ does not exists, eg??`file.url:/some/path` where\nthe default value is the\
      \ text after the colon (eg /some/path).\n\nNOTE: Do not use colon in the property\
      \ key. The colon is used as a separator\ntoken when you are providing a default\
      \ value, which is supported from\n*Camel 2.14.1* onwards.\n\n[[Properties-PropertyResolver]]\n\
      PropertyResolver\n^^^^^^^^^^^^^^^^\n\nCamel provides a pluggable mechanism which\
      \ allows 3rd part to provide\ntheir own resolver to lookup properties. Camel\
      \ provides a default\nimplementation\n`org.apache.camel.component.properties.DefaultPropertiesResolver`\
      \ which\nis capable of loading properties from the file system, classpath or\n\
      link:registry.html[Registry]. You can prefix the locations with either:\n\n\
      * `ref:` *Camel 2.4:* to lookup in the link:registry.html[Registry]\n* `file:`\
      \ to load the from file system\n* `classpath:` to load from classpath (this\
      \ is also the default if no\nprefix is provided)\n* `blueprint:` *Camel 2.7:*\
      \ to use a specific OSGi blueprint placeholder\nservice\n\n[[Properties-Defininglocation]]\n\
      Defining location\n^^^^^^^^^^^^^^^^^\n\nThe `PropertiesResolver` need to know\
      \ a location(s) where to resolve the\nproperties. You can define 1 to many locations.\
      \ If you define the\nlocation in a single String property you can separate multiple\
      \ locations\nwith comma such as:\n\n[source,java]\n----\npc.setLocation(\"com/mycompany/myprop.properties,com/mycompany/other.properties\"\
      );\n----\n\n[[Properties-Usingsystemandenvironmentvariablesinlocations]]\nUsing\
      \ system and environment variables in locations\n+++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n*Available as of Camel 2.7*\n\nThe location now supports using placeholders\
      \ for JVM system properties\nand OS environments variables.\n\nFor example:\n\
      \n[source]\n----\nlocation=file:${karaf.home}/etc/foo.properties\n----\n\nIn\
      \ the location above we defined a location using the file scheme using\nthe\
      \ JVM system property with key `karaf.home`.\n\nTo use an OS environment variable\
      \ instead you would have to prefix with\nenv:\n\n[source]\n----\nlocation=file:${env:APP_HOME}/etc/foo.properties\n\
      ----\n\nWhere `APP_HOME` is an OS environment.\n\nYou can have multiple placeholders\
      \ in the same location, such as:\n\n[source]\n----\nlocation=file:${env:APP_HOME}/etc/${prop.name}.properties\n\
      ----\n\n[[Properties-Usingsystemandenvironmentvariablestoconfigurepropertyprefixesandsuffixes]]\n\
      Using system and environment variables to configure property prefixes and suffixes\n\
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n*Available as of Camel 2.12.5, 2.13.3, 2.14.0*\n\n`propertyPrefix`, `propertySuffix`\
      \ configuration properties support\nusing placeholders for JVM system properties\
      \ and OS environments\nvariables.\n\nFor example. if??`PropertiesComponent`\
      \ is configured with the following\nproperties file:\n\n[source]\n----\ndev.endpoint\
      \ = result1\ntest.endpoint = result2\n----\n\nThen with the following route\
      \ definition:\n\n[source,java]\n----\nPropertiesComponent pc = context.getComponent(\"\
      properties\", PropertiesComponent.class);\npc.setPropertyPrefix(\"${stage}.\"\
      );\n// ...\ncontext.addRoutes(new RouteBuilder() {\n    @Override\n    public\
      \ void configure() throws Exception {\n        from(\"direct:start\").to(\"\
      properties:mock:{{endpoint}}\");\n    }\n});\n----\n\nit is possible to change\
      \ the target endpoint by changing system\nproperty??`stage` either to??`dev`\
      \ (the message will be routed\nto??`mock:result1`) or??`test` (the message will\
      \ be routed\nto??`mock:result2`).\n\n[[Properties-ConfiguringinJavaDSL]]\nConfiguring\
      \ in Java DSL\n^^^^^^^^^^^^^^^^^^^^^^^\n\nYou have to create and register the\
      \ `PropertiesComponent` under the name\n`properties` such as:\n\n[source,java]\n\
      ----\nPropertiesComponent pc = new PropertiesComponent();\npc.setLocation(\"\
      classpath:com/mycompany/myprop.properties\");\ncontext.addComponent(\"properties\"\
      , pc);\n----\n\n[[Properties-ConfiguringinSpringXML]]\nConfiguring in Spring\
      \ XML\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSpring XML offers two variations to configure.\
      \ You can define a spring\nbean as a `PropertiesComponent` which resembles the\
      \ way done in Java\nDSL. Or you can use the `<propertyPlaceholder>` tag.\n\n\
      [source,xml]\n----\n<bean id=\"properties\" class=\"org.apache.camel.component.properties.PropertiesComponent\"\
      >\n    <property name=\"location\" value=\"classpath:com/mycompany/myprop.properties\"\
      />\n</bean>\n----\n\nUsing the `<propertyPlaceholder>` tag makes the configuration\
      \ a bit more\nfresh such as:\n\n[source,xml]\n----\n<camelContext ...>\n   <propertyPlaceholder\
      \ id=\"properties\" location=\"com/mycompany/myprop.properties\"/>\n</camelContext>\n\
      ----\n\n[TIP]\n**Specifying the cache option inside XML** +\nCamel 2.10 onwards\
      \ supports specifying a value for the cache option both\ninside the Spring as\
      \ well as the Blueprint XML.\n\n[[Properties-UsingaPropertiesfromthe]]\nUsing\
      \ a Properties from the link:registry.html[Registry]\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.4* +\nFor example in OSGi you may want to expose\
      \ a service which returns the\nproperties as a `java.util.Properties` object.\n\
      \nThen you could setup the link:properties.html[Properties] component as\nfollows:\n\
      \n[source,xml]\n----\n   <propertyPlaceholder id=\"properties\" location=\"\
      ref:myProperties\"/>\n----\n\nWhere `myProperties` is the id to use for lookup\
      \ in the OSGi registry.\nNotice we use the `ref:` prefix to tell Camel that\
      \ it should lookup the\nproperties for the link:registry.html[Registry].\n\n\
      [[Properties-Examplesusingpropertiescomponent]]\nExamples using properties component\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWhen using property placeholders in the\
      \ endpoint URIs you can either use\nthe `properties:` component or define the\
      \ placeholders directly in the\nURI. We will show example of both cases, starting\
      \ with the former.\n\n[source,java]\n----\n// properties\ncool.end=mock:result\n\
      \n// route\nfrom(\"direct:start\").to(\"properties:{{cool.end}}\");\n----\n\n\
      You can also use placeholders as a part of the endpoint uri:\n\n[source,java]\n\
      ----\n// properties\ncool.foo=result\n\n// route\nfrom(\"direct:start\").to(\"\
      properties:mock:{{cool.foo}}\");\n----\n\nIn the example above the to endpoint\
      \ will be resolved to `mock:result`.\n\nYou can also have properties with refer\
      \ to each other such as:\n\n[source,java]\n----\n// properties\ncool.foo=result\n\
      cool.concat=mock:{{cool.foo}}\n\n// route\nfrom(\"direct:start\").to(\"properties:mock:{{cool.concat}}\"\
      );\n----\n\nNotice how `cool.concat` refer to another property.\n\nThe `properties:`\
      \ component also offers you to override and provide a\nlocation in the given\
      \ uri using the `locations` option:\n\n[source,java]\n----\n   from(\"direct:start\"\
      ).to(\"properties:bar.end?locations=com/mycompany/bar.properties\");\n----\n\
      \n[[Properties-Examples]]\nExamples\n^^^^^^^^\n\nYou can also use property placeholders\
      \ directly in the endpoint uris\nwithout having to use `properties:`.\n\n[source,java]\n\
      ----\n// properties\ncool.foo=result\n\n// route\nfrom(\"direct:start\").to(\"\
      mock:{{cool.foo}}\");\n----\n\nAnd you can use them in multiple wherever you\
      \ want them:\n\n[source,java]\n----\n// properties\ncool.start=direct:start\n\
      cool.showid=true\ncool.result=result\n\n// route\nfrom(\"{{cool.start}}\")\n\
      \    .to(\"log:{{cool.start}}?showBodyType=false&showExchangeId={{cool.showid}}\"\
      )\n    .to(\"mock:{{cool.result}}\");\n----\n\nYou can also your property placeholders\
      \ when using\nlink:producertemplate.html[ProducerTemplate] for example:\n\n\
      [source,java]\n----\ntemplate.sendBody(\"{{cool.start}}\", \"Hello World\");\n\
      ----\n\n[[Properties-Examplewithlanguage]]\nExample with link:simple.html[Simple]\
      \ language\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe link:simple.html[Simple]\
      \ language now also support using property\nplaceholders, for example in the\
      \ route below:\n\n[source,java]\n----\n// properties\ncheese.quote=Camel rocks\n\
      \n// route\nfrom(\"direct:start\")\n    .transform().simple(\"Hi ${body} do\
      \ you think ${properties:cheese.quote}?\");\n----\n\nYou can also specify the\
      \ location in the link:simple.html[Simple]\nlanguage for example:\n\n[source,java]\n\
      ----\n// bar.properties\nbar.quote=Beer tastes good\n\n// route\nfrom(\"direct:start\"\
      )\n    .transform().simple(\"Hi ${body}. ${properties:com/mycompany/bar.properties:bar.quote}.\"\
      );\n----\n\n[[Properties-AdditionalpropertyplaceholdersupportedinSpringXML]]\n\
      Additional property placeholder supported in Spring XML\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe property placeholders is also supported in many of the Camel Spring\n\
      XML tags such as\n`<package>, <packageScan>, <contextScan>, <jmxAgent>, <endpoint>,\
      \ <routeBuilder>, <proxy>`\nand the others.\n\nThe example below has property\
      \ placeholder in the `<jmxAgent>` tag:\n\nYou can also define property placeholders\
      \ in the various attributes on\nthe `<camelContext>` tag such as `trace` as\
      \ shown here:\n\n[[Properties-OverridingapropertysettingusingaJVMSystemProperty]]\n\
      Overriding a property setting using a JVM System Property\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.5* +\nIt is possible to override a property value\
      \ at runtime using a JVM\nSystem property without the need to restart the application\
      \ to pick up\nthe change. This may also be accomplished from the command line\
      \ by\ncreating a JVM System property of the same name as the property it\nreplaces\
      \ with a new value. An example of this is given below\n\n[source,java]\n----\n\
      PropertiesComponent pc = context.getComponent(\"properties\", PropertiesComponent.class);\n\
      pc.setCache(false);\n\nSystem.setProperty(\"cool.end\", \"mock:override\");\n\
      System.setProperty(\"cool.result\", \"override\");\n\ncontext.addRoutes(new\
      \ RouteBuilder() {\n    @Override\n    public void configure() throws Exception\
      \ {\n        from(\"direct:start\").to(\"properties:cool.end\");\n        from(\"\
      direct:foo\").to(\"properties:mock:{{cool.result}}\");\n    }\n});\ncontext.start();\n\
      \ngetMockEndpoint(\"mock:override\").expectedMessageCount(2);\n\ntemplate.sendBody(\"\
      direct:start\", \"Hello World\");\ntemplate.sendBody(\"direct:foo\", \"Hello\
      \ Foo\");\n\nSystem.clearProperty(\"cool.end\");\nSystem.clearProperty(\"cool.result\"\
      );\n\nassertMockEndpointsSatisfied();\n----\n\n[[Properties-UsingpropertyplaceholdersforanykindofattributeintheXMLDSL]]\n\
      Using property placeholders for any kind of attribute in the XML DSL\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.7*\n\nNOTE: If you use OSGi Blueprint then this only\
      \ works from *2.11.1* or *2.10.5*\nonwards.\n\nPreviously it was only the `xs:string`\
      \ type attributes in the XML DSL\nthat support placeholders. For example often\
      \ a timeout attribute would\nbe a `xs:int` type and thus you cannot set a string\
      \ value as the\nplaceholder key. This is now possible from Camel 2.7 onwards\
      \ using a\nspecial placeholder namespace.\n\nIn the example below we use the\
      \ `prop` prefix for the namespace\n`http://camel.apache.org/schema/placeholder`\
      \ by which we can use the\n`prop` prefix in the attributes in the XML DSLs.\
      \ Notice how we use that\nin the link:multicast.html[Multicast] to indicate\
      \ that the option\n`stopOnException` should be the value of the placeholder\
      \ with the key\n\"stop\".\n\nIn our properties file we have the value defined\
      \ as\n\n[source]\n----\nstop=true\n----\n\n[[Properties-UsingpropertyplaceholderintheJavaDSL]]\n\
      Using property placeholder in the Java DSL\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.7*\n\nLikewise we have added support for defining\
      \ placeholders in the Java DSL\nusing the new `placeholder` DSL as shown in\
      \ the following equivalent\nexample:\n\n[[Properties-UsingBlueprintpropertyplaceholderwithCamelroutes]]\n\
      Using Blueprint property placeholder with Camel routes\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.7*\n\nCamel supports link:using-osgi-blueprint-with-camel.html[Blueprint]\n\
      which also offers a property placeholder service. Camel supports\nconvention\
      \ over configuration, so all you have to do is to define the\nOSGi Blueprint\
      \ property placeholder in the XML file as shown below:\n\n[source]\n{% raw %}\n\
      ----\n<blueprint xmlns=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\"\n    \
      \       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n          \
      \ xmlns:cm=\"http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0\"\n\
      \           xsi:schemaLocation=\"\n           http://www.osgi.org/xmlns/blueprint/v1.0.0\
      \ https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd\">\n \n    <!--\
      \ OSGI blueprint property placeholder -->\n    <cm:property-placeholder id=\"\
      myblueprint.placeholder\" persistent-id=\"camel.blueprint\">\n        <!-- list\
      \ some properties as needed -->\n        <cm:default-properties>\n         \
      \   <cm:property name=\"result\" value=\"mock:result\"/>\n        </cm:default-properties>\n\
      \    </cm:property-placeholder>\n \n    <camelContext xmlns=\"http://camel.apache.org/schema/blueprint\"\
      >\n        <!-- in the route we can use {{ }} placeholders which will lookup\
      \ in blueprint\n             as Camel will auto detect the OSGi blueprint property\
      \ placeholder and use it -->\n        <route>\n            <from uri=\"direct:start\"\
      />\n            <to uri=\"mock:foo\"/>\n            <to uri=\"{{result}}\"/>\n\
      \        </route>\n    </camelContext>\n</blueprint>\n----\n{% endraw %}\n\n\
      *Using OSGi blueprint property placeholders in Camel routes*\n\nBy default Camel\
      \ detects and uses OSGi blueprint property placeholder\nservice. You can disable\
      \ this by setting the attribute\n`useBlueprintPropertyResolver` to false on\
      \ the `<camelContext>`\ndefinition.\n\n[Info]\n====\n**About placeholder syntaxes**\n\
      \nNotice how we can use the Camel syntax for placeholders `{{` and `}}` in the\n\
      Camel route, which will lookup the value from OSGi blueprint.\n\nThe blueprint\
      \ syntax for placeholders is `${ }`. So outside the\n`<camelContext>` you must\
      \ use the `${ }` syntax. Where as inside\n`<camelContext>` you must use `{{`\
      \ and `}}` syntax.\n\nOSGi blueprint allows you to configure the syntax, so\
      \ you can actually\nalign those if you want.\n====\n\nYou can also explicit\
      \ refer to a specific OSGi blueprint property\nplaceholder by its id. For that\
      \ you need to use the Camel's\n`<propertyPlaceholder>` as shown in the example\
      \ below:\n\n[source]\n{% raw %}\n----\n<blueprint xmlns=\"http://www.osgi.org/xmlns/blueprint/v1.0.0\"\
      \n           xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n     \
      \      xmlns:cm=\"http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0\"\
      \n           xsi:schemaLocation=\"\n           http://www.osgi.org/xmlns/blueprint/v1.0.0\
      \ https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd\">\n \n    <!--\
      \ OSGI blueprint property placeholder -->\n    <cm:property-placeholder id=\"\
      myblueprint.placeholder\" persistent-id=\"camel.blueprint\">\n        <!-- list\
      \ some properties as needed -->\n        <cm:default-properties>\n         \
      \   <cm:property name=\"prefix.result\" value=\"mock:result\"/>\n        </cm:default-properties>\n\
      \    </cm:property-placeholder>\n \n    <camelContext xmlns=\"http://camel.apache.org/schema/blueprint\"\
      >\n        <!-- using Camel properties component and refer to the blueprint\
      \ property placeholder by its id -->\n        <propertyPlaceholder id=\"properties\"\
      \ location=\"blueprint:myblueprint.placeholder\"\n                         \
      \    prefixToken=\"[[\" suffixToken=\"]]\"\n                             propertyPrefix=\"\
      prefix.\"/>\n \n        <!-- in the route we can use {{ }} placeholders which\
      \ will lookup in blueprint -->\n        <route>\n            <from uri=\"direct:start\"\
      />\n            <to uri=\"mock:foo\"/>\n            <to uri=\"[[result]]\"/>\n\
      \        </route>\n    </camelContext>\n</blueprint>\n----\n{% endraw %}\n\n\
      *Explicit referring to a OSGi blueprint placeholder in Camel*\n\nNotice how\
      \ we use the `blueprint` scheme to refer to the OSGi blueprint\nplaceholder\
      \ by its id. This allows you to mix and match, for example you\ncan also have\
      \ additional schemes in the location. For example to load a\nfile from the classpath\
      \ you can do:\n\n[source]\n----\nlocation=\"blueprint:myblueprint.placeholder,classpath:myproperties.properties\"\
      \n----\n\nEach location is separated by comma.\n\n[[Properties-OverridingBlueprintpropertyplaceholdersoutsideCamelContext]]\n\
      Overriding Blueprint property placeholders outside CamelContext\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n*Available as of Camel 2.10.4*\n\nWhen using Blueprint property placeholder\
      \ in the Blueprint XML file, you\ncan declare the properties directly in the\
      \ XML file as shown below:\n\nNotice that we have a `<bean>` which refers to\
      \ one of the properties. And\nin the Camel route we refer to the other using\
      \ the `{{` and `}}` notation.\n\nNow if you want to override these Blueprint\
      \ properties from an unit\ntest, you can do this as shown below:\n\nTo do this\
      \ we override and implement the\n`useOverridePropertiesWithConfigAdmin` method.\
      \ We can then put the\nproperties we want to override on the given props parameter.\
      \ And the\nreturn value *must* be the `persistence-id` of the\n`<cm:property-placeholder>`\
      \ tag, which you define in the blueprint XML\nfile.\n\n[[Properties-Using.cfgor.propertiesfileforBlueprintpropertyplaceholders]]\n\
      Using .cfg or .properties file for Blueprint property placeholders\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n*Available as of Camel 2.10.4*\n\nWhen using Blueprint property placeholder\
      \ in the Blueprint XML file, you\ncan declare the properties in a `.properties`\
      \ or `.cfg` file. If you use\nApache ServieMix / Karaf then this container has\
      \ a convention that it\nloads the properties from a file in the etc directory\
      \ with the naming\n`etc/pid.cfg`, where `pid` is the `persistence-id`.\n\nFor\
      \ example in the blueprint XML file we have the\n`persistence-id=\"stuff\"`,\
      \ which mean it will load the configuration file\nas `etc/stuff.cfg`.\n\nNow\
      \ if you want to unit test this blueprint XML file, then you can\noverride the\
      \ `loadConfigAdminConfigurationFile` and tell Camel which\nfile to load as shown\
      \ below:\n\nNotice that this method requires to return a `String[]` with 2 values.\
      \ The\n1st value is the path for the configuration file to load.\nThe 2nd value\
      \ is the `persistence-id` of the `<cm:property-placeholder>`\ntag.\n\nThe `stuff.cfg`\
      \ file is just a plain properties file with the property\nplaceholders such\
      \ as:\n\n[source]\n----\n## this is a comment\ngreeting=Bye\n----\n\n[[Properties-Using.cfgfileandoverridingpropertiesforBlueprintpropertyplaceholders]]\n\
      Using .cfg file and overriding properties for Blueprint property placeholders\n\
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nYou can do both as well. Here is a complete example. First we have the\nBlueprint\
      \ XML file:\n\nAnd in the unit test class we do as follows:\n\nAnd the `etc/stuff.cfg`\
      \ configuration file contains\n\n[source]\n----\ngreeting=Bye\necho=Yay\ndestination=mock:result\n\
      ----\n\n[[Properties-BridgingSpringandCamelpropertyplaceholders]]\nBridging\
      \ Spring and Camel property placeholders\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.10*\n\nThe Spring Framework does not allow 3rd party\
      \ frameworks such as Apache\nCamel to seamless hook into the Spring property\
      \ placeholder mechanism.\nHowever you can easily bridge Spring and Camel by\
      \ declaring a Spring\nbean with the type\n`org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer`,\
      \ which\nis a Spring\n`org.springframework.beans.factory.config.PropertyPlaceholderConfigurer`\n\
      type.\n\nTo bridge Spring and Camel you must define a single bean as shown below:\n\
      \n*Bridging Spring and Camel property placeholders*\n\nYou *must not* use the\
      \ spring <context:property-placeholder> namespace\nat the same time; this is\
      \ not possible.\n\nAfter declaring this bean, you can define property placeholders\
      \ using\nboth the Spring style, and the Camel style within the <camelContext>\
      \ tag\nas shown below:\n\n*Using bridge property placeholders*\n\nNotice how\
      \ the hello bean is using pure Spring property placeholders\nusing the `${ }`\
      \ notation. And in the Camel routes we use the Camel\nplaceholder notation with\
      \ `{{` and `}}`.\n\n[[Properties-ClashingSpringpropertyplaceholderswithCamelslanguage]]\n\
      Clashing Spring property placeholders with Camels link:simple.html[Simple] language\n\
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nTake notice when using Spring bridging placeholder then the spring `${ }`\n\
      syntax clashes with the link:simple.html[Simple] in Camel, and therefore\ntake\
      \ care. For example:\n\n[source,xml]\n----\n<setHeader headerName=\"Exchange.FILE_NAME\"\
      >\n  <simple>{{file.rootdir}}/${in.header.CamelFileName}</simple>\n</setHeader>\n\
      ----\n\nclashes with Spring property placeholders, and you should use `$simple{\
      \ }`\nto indicate using the link:simple.html[Simple] language in Camel.\n\n\
      [source,xml]\n----\n<setHeader headerName=\"Exchange.FILE_NAME\">\n  <simple>{{file.rootdir}}/$simple{in.header.CamelFileName}</simple>\n\
      </setHeader>\n----\n\nAn alternative is to configure the `PropertyPlaceholderConfigurer`\
      \ with\n`ignoreUnresolvablePlaceholders` option to `true`.\n\n[[Properties-OverridingpropertiesfromCameltestkit]]\n\
      Overriding properties from Camel test kit\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.10*\n\nWhen link:testing.html[Testing] with Camel\
      \ and using the\nlink:properties.html[Properties] component, you may want to\
      \ be able to\nprovide the properties to be used from directly within the unit\
      \ test\nsource code. +\nThis is now possible from Camel 2.10 onwards, as the\
      \ Camel test kits, eg\n`CamelTestSupport` class offers the following methods\n\
      \n* `useOverridePropertiesWithPropertiesComponent`\n* `ignoreMissingLocationWithPropertiesComponent`\n\
      \nSo for example in your unit test classes, you can override the\n`useOverridePropertiesWithPropertiesComponent`\
      \ method and return a\n`java.util.Properties` that contains the properties which\
      \ should be\npreferred to be used.\n\n*Providing properties from within unit\
      \ test source*\n\nThis can be done from any of the Camel Test kits, such as\
      \ camel-test,\ncamel-test-spring, and camel-test-blueprint.\n\nThe `ignoreMissingLocationWithPropertiesComponent`\
      \ can be used to\ninstruct Camel to ignore any locations which was not discoverable,\
      \ for\nexample if you run the unit test, in an environment that does not have\n\
      access to the location of the properties.\n\n[[Properties-UsingPropertyInject]]\n\
      Using @PropertyInject\n^^^^^^^^^^^^^^^^^^^^^\n\n*Available as of Camel 2.12*\n\
      \nCamel allows to inject property placeholders in POJOs using the\n`@PropertyInject`\
      \ annotation which can be set on fields and setter\nmethods.\n\nFor example\
      \ you can use that with `RouteBuilder` classes, such as shown\nbelow:\n\n[source,java]\n\
      ----\npublic class MyRouteBuilder extends RouteBuilder {\n\n    @PropertyInject(\"\
      hello\")\n    private String greeting;\n\n    @Override\n    public void configure()\
      \ throws Exception {\n        from(\"direct:start\")\n            .transform().constant(greeting)\n\
      \            .to(\"{{result}}\");\n    }\n\n}\n----\n\nNotice we have annotated\
      \ the greeting field with `@PropertyInject` and\ndefine it to use the key `\"\
      hello\"`. Camel will then lookup the property\nwith this key and inject its\
      \ value, converted to a String type.\n\nYou can also use multiple placeholders\
      \ and text in the key, for example\nwe can do:\n\n[source,java]\n----\n    @PropertyInject(\"\
      Hello {{name}} how are you?\")\n    private String greeting;\n----\n\nThis will\
      \ lookup the placeholder with they key `\"name\"`.\n\nYou can also add a default\
      \ value if the key does not exists, such as:\n\n[source,java]\n----\n    @PropertyInject(value\
      \ = \"myTimeout\", defaultValue = \"5000\")\n    private int timeout;\n----\n\
      \n[[Properties-Usingoutoftheboxfunctions]]\nUsing out of the box functions\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n*Available as of Camel 2.14.1*\n\nThe??link:properties.html[Properties]??component\
      \ includes the following\nfunctions out of the box\n\n* `env` - A function to\
      \ lookup the property from OS environment variables\n* `sys` - A function to\
      \ lookup the property from Java JVM system\nproperties\n* `service` - A function\
      \ to lookup the property from OS environment\nvariables using the service naming\
      \ idiom\n* `service.name` - **Camel 2.16.1:??**A function to lookup the\nproperty??from\
      \ OS environment variables using the service naming idiom\nreturning the hostname\
      \ part only\n* `service.port`??- **Camel 2.16.1:??**A function to lookup the\n\
      property??from OS environment variables using the service naming idiom\nreturning\
      \ the port part only\n\nAs you can see these functions is intended to make it\
      \ easy to lookup\nvalues from the environment. As they are provided out of the\
      \ box, they\ncan easily be used as shown below:\n\n[source,xml]\n----\n  <camelContext\
      \ xmlns=\"http://camel.apache.org/schema/blueprint\">\n\n    <route>\n     \
      \ <from uri=\"direct:start\"/>\n      <to uri=\"{`{env:SOMENAME}`}\"/>\n   \
      \   <to uri=\"{`{sys:MyJvmPropertyName}`}\"/>\n    </route>\n  </camelContext>\n\
      ----\n\nYou can use default values as well, so if the property does not exists,\n\
      you can define a default value as shown below, where the default value\nis a\
      \ `log:foo` and `log:bar` value.\n\n[source,xml]\n----\n  <camelContext xmlns=\"\
      http://camel.apache.org/schema/blueprint\">\n\n    <route>\n      <from uri=\"\
      direct:start\"/>\n      <to uri=\"{`{env:SOMENAME:log:foo}`}\"/>\n      <to\
      \ uri=\"{`{sys:MyJvmPropertyName:log:bar}`}\"/>\n    </route>\n  </camelContext>\n\
      ----\n\n??\n\nThe service function is for looking up a service which is defined\
      \ using\nOS environment variables using the service naming idiom, to refer to\
      \ a\nservice location using `hostname : port`\n\n* __NAME__**_SERVICE_HOST**\n\
      * __NAME__**_SERVICE_PORT**\n\nin other words the service uses `_SERVICE_HOST`\
      \ and `_SERVICE_PORT` as\nprefix. So if the service is named FOO, then the OS\
      \ environment\nvariables should be set as\n\n[source]\n----\nexport $FOO_SERVICE_HOST=myserver\n\
      export $FOO_SERVICE_PORT=8888\n----\n\n??\n\nFor example if the FOO service\
      \ a remote HTTP service, then we can refer\nto the service in the Camel endpoint\
      \ uri, and use\nthe??link:http.html[HTTP]??component to make the HTTP call:\n\
      \n[source,xml]\n----\n  <camelContext xmlns=\"http://camel.apache.org/schema/blueprint\"\
      >\n\n    <route>\n      <from uri=\"direct:start\"/>\n      <to uri=\"http://{`{service:FOO}`}/myapp\"\
      />\n    </route>\n  </camelContext>\n----\n\n??\n\nAnd we can use default values\
      \ if the service has not been defined, for\nexample to call a service on localhost,\
      \ maybe for unit testing etc\n\n[source,xml]\n----\n  <camelContext xmlns=\"\
      http://camel.apache.org/schema/blueprint\">\n\n    <route>\n      <from uri=\"\
      direct:start\"/>\n      <to uri=\"http://{`{service:FOO:localhost:8080}`}/myapp\"\
      />\n    </route>\n  </camelContext>\n----\n\n[[Properties-Usingcustomfunctions]]\n\
      Using custom functions\n^^^^^^^^^^^^^^^^^^^^^^\n\n*Available as of Camel 2.14.1*\n\
      \nThe link:properties.html[Properties] component allow to plugin 3rd party\n\
      functions which can be used during??parsing of the property placeholders.\n\
      These functions are then able to do custom logic to resolve the\nplaceholders,\
      \ such as looking up in databases, do custom computations,\nor whatnot. The\
      \ name of the function becomes the prefix used in the\nplaceholder. This is\
      \ best illustrated in the example code below\n\n[source,xml]\n----\n  <bean\
      \ id=\"beerFunction\" class=\"MyBeerFunction\"/>\n\n  <camelContext xmlns=\"\
      http://camel.apache.org/schema/blueprint\">\n    <propertyPlaceholder id=\"\
      properties\" location=\"none\" ignoreMissingLocation=\"true\">\n      <propertiesFunction\
      \ ref=\"beerFunction\"/>\n    </propertyPlaceholder>\n\n    <route>\n      <from\
      \ uri=\"direct:start\"/>\n      <to uri=\"{`{beer:FOO}`}\"/>\n      <to uri=\"\
      {`{beer:BAR}`}\"/>\n    </route>\n  </camelContext>\n----\n\nHere we have a\
      \ Camel XML route where we have defined the\n`<propertyPlaceholder>` to use\
      \ a custom function, which we refer to be the\nbean id - eg the `beerFunction`.\
      \ As the beer function uses `\"beer\"` as its\nname, then the placeholder syntax\
      \ can trigger the beer function by\nstarting with `beer:value`.\n\nThe implementation\
      \ of the function is only two methods as shown below:\n\n[source,java]\n----\n\
      \    public static final class MyBeerFunction implements PropertiesFunction\
      \ {\n\n        @Override\n        public String getName() {\n            return\
      \ \"beer\";\n        }\n\n        @Override\n        public String apply(String\
      \ remainder) {\n            return \"mock:\" + remainder.toLowerCase();\n  \
      \      }\n    }\n----\n\nThe function must implement\nthe??`org.apache.camel.component.properties.PropertiesFunction`\n\
      interface. The method??`getName` is ??the name of the function, eg beer.\nAnd\
      \ the??`apply` method is where we implement the custom logic to do. As\nthe\
      \ sample code is from an unit test, it just returns a value to refer\nto a mock\
      \ endpoint.\n\nTo register a custom function from Java code is as shown below:\n\
      \n[source,java]\n----\n        PropertiesComponent pc = context.getComponent(\"\
      properties\", PropertiesComponent.class);\n        pc.addFunction(new MyBeerFunction());\n\
      ----\n\n??\n\n[[Properties-SeeAlso]]\nSee Also\n~~~~~~~~\n\n* link:properties.html[Properties]\
      \ component\n\n[[Properties-SeeAlso.1]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:jasypt.html[Jasypt] for\
      \ using encrypted values (eg passwords) in\nthe properties\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-quartz
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: quartz
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: quartz
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: quartz
          spec:
            containers:
            - image: fabric8/connector-quartz:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: quartz
        syntax: quartz:groupName/timerName
        title: Quartz
        description: Provides a scheduled delivery of messages using the Quartz 1.x scheduler.
        label: scheduling
        deprecated: true
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.quartz.QuartzComponent
        groupId: org.apache.camel
        artifactId: camel-quartz
        version: 2.18.1
      componentProperties:
        factory:
          kind: property
          type: object
          javaType: org.quartz.SchedulerFactory
          deprecated: false
          secret: false
          description: To use the custom SchedulerFactory which is used to create the Scheduler.
        scheduler:
          kind: property
          type: object
          javaType: org.quartz.Scheduler
          deprecated: false
          secret: false
          description: To use the custom configured Quartz scheduler instead of creating a new Scheduler.
        properties:
          kind: property
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: Properties to configure the Quartz scheduler.
        propertiesFile:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: File name of the properties to load from the classpath
        startDelayedSeconds:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Seconds to wait before starting the quartz scheduler.
        autoStartScheduler:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether or not the scheduler should be auto started. This options is default true
        enableJmx:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to enable Quartz JMX which allows to manage the Quartz scheduler from JMX. This options is default true
      properties:
        groupName:
          kind: path
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: Camel
          description: The quartz group name to use. The combination of group name and timer name should be unique.
        timerName:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The quartz timer name to use. The combination of group name and timer name should be unique.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        cron:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies a cron expression to define when to trigger.
        deleteJob:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If set to true then the trigger automatically delete when route stop. Else if set to false it will remain in scheduler. When set to false it will also mean user may reuse pre-configured trigger with camel Uri. Just ensure the names match. Notice you cannot have both deleteJob and pauseJob set to true.
        fireNow:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to fire the scheduler asap when its started using the simple trigger (this option does not support cron)
        jobParameters:
          kind: parameter
          group: consumer
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: job.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional options on the job.
        pauseJob:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true then the trigger automatically pauses when route stop. Else if set to false it will remain in scheduler. When set to false it will also mean user may reuse pre-configured trigger with camel Uri. Just ensure the names match. Notice you cannot have both deleteJob and pauseJob set to true.
        startDelayedSeconds:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Seconds to wait before starting the quartz scheduler.
        stateful:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Uses a Quartz StatefulJob instead of the default job.
        triggerParameters:
          kind: parameter
          group: consumer
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: trigger.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional options on the trigger.
        usingFixedCamelContextName:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If it is true JobDataMap uses the CamelContext name directly to reference the CamelContext if it is false JobDataMap uses use the CamelContext management name which could be changed during the deploy time.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Quartz-QuartzComponent]]
      Quartz Component
      ~~~~~~~~~~~~~~~~

      The *quartz:* component provides a scheduled delivery of messages using
      the http://www.quartz-scheduler.org/[Quartz Scheduler 1.x].  +
       Each endpoint represents a different timer (in Quartz terms, a Trigger
      and JobDetail).

      TIP: If you are using Quartz 2.x then from Camel 2.12 onwards there is a
      link:quartz2.html[Quartz2] component you should use

      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-quartz</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Quartz-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------------------
      quartz://timerName?options
      quartz://groupName/timerName?options
      quartz://groupName/timerName?cron=expression
      quartz://timerName?cron=expression
      --------------------------------------------

      The component uses either a `CronTrigger` or a `SimpleTrigger`. If no
      cron expression is provided, the component uses a simple trigger. If no
      `groupName` is provided, the quartz component uses the `Camel` group
      name.

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

      [[Quartz-Options]]
      Options
      ^^^^^^^



      // component options: START
      The Quartz component supports 7 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | factory | SchedulerFactory | To use the custom SchedulerFactory which is used to create the Scheduler.
      | scheduler | Scheduler | To use the custom configured Quartz scheduler instead of creating a new Scheduler.
      | properties | Properties | Properties to configure the Quartz scheduler.
      | propertiesFile | String | File name of the properties to load from the classpath
      | startDelayedSeconds | int | Seconds to wait before starting the quartz scheduler.
      | autoStartScheduler | boolean | Whether or not the scheduler should be auto started. This options is default true
      | enableJmx | boolean | Whether to enable Quartz JMX which allows to manage the Quartz scheduler from JMX. This options is default true
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Quartz component supports 15 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | groupName | consumer | Camel | String | The quartz group name to use. The combination of group name and timer name should be unique.
      | timerName | consumer |  | String | *Required* The quartz timer name to use. The combination of group name and timer name should be unique.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | cron | consumer |  | String | Specifies a cron expression to define when to trigger.
      | deleteJob | consumer | true | boolean | If set to true then the trigger automatically delete when route stop. Else if set to false it will remain in scheduler. When set to false it will also mean user may reuse pre-configured trigger with camel Uri. Just ensure the names match. Notice you cannot have both deleteJob and pauseJob set to true.
      | fireNow | consumer | false | boolean | Whether to fire the scheduler asap when its started using the simple trigger (this option does not support cron)
      | jobParameters | consumer |  | Map | To configure additional options on the job.
      | pauseJob | consumer | false | boolean | If set to true then the trigger automatically pauses when route stop. Else if set to false it will remain in scheduler. When set to false it will also mean user may reuse pre-configured trigger with camel Uri. Just ensure the names match. Notice you cannot have both deleteJob and pauseJob set to true.
      | startDelayedSeconds | consumer |  | int | Seconds to wait before starting the quartz scheduler.
      | stateful | consumer | false | boolean | Uses a Quartz StatefulJob instead of the default job.
      | triggerParameters | consumer |  | Map | To configure additional options on the trigger.
      | usingFixedCamelContextName | consumer | false | boolean | If it is true JobDataMap uses the CamelContext name directly to reference the CamelContext if it is false JobDataMap uses use the CamelContext management name which could be changed during the deploy time.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      When using a
      http://quartz-scheduler.org/api/2.0.0/org/quartz/StatefulJob.html[StatefulJob],
      the
      http://quartz-scheduler.org/api/2.0.0/org/quartz/JobDataMap.html[JobDataMap]
      is re-persisted after every execution of the job, thus preserving state
      for the next execution.


      INFO: *Running in OSGi and having multiple bundles with quartz
      routes*
      If you run in OSGi such as Apache ServiceMix, or Apache Karaf, and have
      multiple bundles with Camel routes that start from
      link:quartz.html[Quartz] endpoints, then make sure if you assign +
       an `id` to the <camelContext> that this id is unique, as this is
      required by the `QuartzScheduler` in the OSGi container. If you do not
      set any `id` on <camelContext> then +
       a unique id is auto assigned, and there is no problem.

      [[Quartz-Configuringquartz.propertiesfile]]
      Configuring quartz.properties file
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      By default Quartz will look for a `quartz.properties` file in the
      `org/quartz` directory of the classpath. If you are using WAR
      deployments this means just drop the quartz.properties in
      `WEB-INF/classes/org/quartz`.

      However the Camel link:quartz.html[Quartz] component also allows you to
      configure properties:

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Parameter |Default |Type |Description

      |`properties` |`null` |`Properties` |*Camel 2.4*: You can configure a `java.util.Properties` instance.

      |`propertiesFile` |`null` |`String` |*Camel 2.4*: File name of the properties to load from the classpath
      |=======================================================================

      To do this you can configure this in Spring XML as follows

      [source,xml]
      -------------------------------------------------------------------------------
      <bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
          <property name="propertiesFile" value="com/mycompany/myquartz.properties"/>
      </bean>
      -------------------------------------------------------------------------------

      [[Quartz-EnablingQuartzschedulerinJMX]]
      Enabling Quartz scheduler in JMX
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You need to configure the quartz scheduler properties to enable JMX. +
       That is typically setting the option
      `"org.quartz.scheduler.jmx.export"` to a `true` value in the
      configuration file.

      From Camel 2.13 onwards Camel will automatic set this option to true,
      unless explicit disabled.

      [[Quartz-StartingtheQuartzscheduler]]
      Starting the Quartz scheduler
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      This is an example:

      [source,xml]
      ----------------------------------------------------------------------------
      <bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
          <property name="startDelayedSeconds" value="5"/>
      </bean>
      ----------------------------------------------------------------------------

      [[Quartz-Clustering]]
      Clustering
      ^^^^^^^^^^

      *Available as of Camel 2.4*

      If you use Quartz in clustered mode, e.g. the `JobStore` is clustered.
      Then from Camel 2.4 onwards the link:quartz.html[Quartz] component will
      *not* pause/remove triggers when a node is being stopped/shutdown. This
      allows the trigger to keep running on the other nodes in the cluster.

      *Note*: When running in clustered node no checking is done to ensure
      unique job name/group for endpoints.

      [[Quartz-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel adds the getters from the Quartz Execution Context as header
      values. The following headers are added: +
       `calendar`, `fireTime`, `jobDetail`, `jobInstance`, `jobRuntTime`,
      `mergedJobDataMap`, `nextFireTime`, `previousFireTime`, `refireCount`,
      `result`, `scheduledFireTime`, `scheduler`, `trigger`, `triggerName`,
      `triggerGroup`.

      The `fireTime` header contains the `java.util.Date` of when the exchange
      was fired.

      [[Quartz-UsingCronTriggers]]
      Using Cron Triggers
      ^^^^^^^^^^^^^^^^^^^

      Quartz supports
      http://www.quartz-scheduler.org/documentation/quartz-2.1.x/tutorials/crontrigger[Cron-like
      expressions] for specifying timers in a handy format. You can use these
      expressions in the `cron` URI parameter; though to preserve valid URI
      encoding we allow + to be used instead of spaces. Quartz provides a
      http://www.quartz-scheduler.org/docs/tutorials/crontrigger.html[little
      tutorial] on how to use cron expressions.

      For example, the following will fire a message every five minutes
      starting at 12pm (noon) to 6pm on weekdays:

      [source,java]
      -----------------------------------------------------------------------------------------------
      from("quartz://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI").to("activemq:Totally.Rocks");
      -----------------------------------------------------------------------------------------------

      which is equivalent to using the cron expression

      [source,java]
      -----------------------
      0 0/5 12-18 ? * MON-FRI
      -----------------------

      The following table shows the URI character encodings we use to preserve
      valid URI syntax:

      [width="100%",cols="50%,50%",options="header",]
      |=======================================================================
      |URI Character |Cron character

      |`+` | _Space_
      |=======================================================================

      [[Quartz-Specifyingtimezone]]
      Specifying time zone
      ^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.8.1* +
       The Quartz Scheduler allows you to configure time zone per trigger. For
      example to use a timezone of your country, then you can do as follows:

      [source,java]
      -------------------------------------------------------------------------------------------
      quartz://groupName/timerName?cron=0+0/5+12-18+?+*+MON-FRI&trigger.timeZone=Europe/Stockholm
      -------------------------------------------------------------------------------------------

      The timeZone value is the values accepted by `java.util.TimeZone`.

      In Camel 2.8.0 or older versions you would have to provide your custom
      `String` to `java.util.TimeZone` link:type-converter.html[Type
      Converter] to be able configure this from the endpoint uri. +
       From Camel 2.8.1 onwards we have included such a
      link:type-converter.html[Type Converter] in the camel-core.

      [[Quartz-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:quartz2.html[Quartz2]
      * link:timer.html[Timer]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-quartz2
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: quartz2
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: quartz2
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: quartz2
          spec:
            containers:
            - image: fabric8/connector-quartz2:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: quartz2
        syntax: quartz2:groupName/triggerName
        title: Quartz2
        description: Provides a scheduled delivery of messages using the Quartz 2.x scheduler.
        label: scheduling
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.quartz2.QuartzComponent
        groupId: org.apache.camel
        artifactId: camel-quartz2
        version: 2.18.1
      componentProperties:
        autoStartScheduler:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether or not the scheduler should be auto started. This options is default true
        startDelayedSeconds:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Seconds to wait before starting the quartz scheduler.
        prefixJobNameWithEndpointId:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to prefix the quartz job with the endpoint id. This option is default false.
        enableJmx:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to enable Quartz JMX which allows to manage the Quartz scheduler from JMX. This options is default true
        properties:
          kind: property
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: Properties to configure the Quartz scheduler.
        propertiesFile:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: File name of the properties to load from the classpath
        prefixInstanceName:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to prefix the Quartz Scheduler instance name with the CamelContext name. This is enabled by default to let each CamelContext use its own Quartz scheduler instance by default. You can set this option to false to reuse Quartz scheduler instances between multiple CamelContext's.
        schedulerFactory:
          kind: property
          type: object
          javaType: org.quartz.SchedulerFactory
          deprecated: false
          secret: false
          description: To use the custom SchedulerFactory which is used to create the Scheduler.
        scheduler:
          kind: property
          type: object
          javaType: org.quartz.Scheduler
          deprecated: false
          secret: false
          description: To use the custom configured Quartz scheduler instead of creating a new Scheduler.
      properties:
        groupName:
          kind: path
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: Camel
          description: The quartz group name to use. The combination of group name and timer name should be unique.
        triggerName:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The quartz timer name to use. The combination of group name and timer name should be unique.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        cron:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specifies a cron expression to define when to trigger.
        deleteJob:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If set to true then the trigger automatically delete when route stop. Else if set to false it will remain in scheduler. When set to false it will also mean user may reuse pre-configured trigger with camel Uri. Just ensure the names match. Notice you cannot have both deleteJob and pauseJob set to true.
        durableJob:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not the job should remain stored after it is orphaned (no triggers point to it).
        pauseJob:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set to true then the trigger automatically pauses when route stop. Else if set to false it will remain in scheduler. When set to false it will also mean user may reuse pre-configured trigger with camel Uri. Just ensure the names match. Notice you cannot have both deleteJob and pauseJob set to true.
        recoverableJob:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Instructs the scheduler whether or not the job should be re-executed if a 'recovery' or 'fail-over' situation is encountered.
        stateful:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Uses a Quartz PersistJobDataAfterExecution and DisallowConcurrentExecution instead of the default job.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        customCalendar:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.quartz.Calendar
          deprecated: false
          secret: false
          description: Specifies a custom calendar to avoid specific range of date
        jobParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: job.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional options on the job.
        prefixJobNameWithEndpointId:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the job name should be prefixed with endpoint id
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        triggerParameters:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: trigger.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional options on the trigger.
        usingFixedCamelContextName:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If it is true JobDataMap uses the CamelContext name directly to reference the CamelContext if it is false JobDataMap uses use the CamelContext management name which could be changed during the deploy time.
        autoStartScheduler:
          kind: parameter
          group: scheduler
          label: scheduler
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not the scheduler should be auto started.
        fireNow:
          kind: parameter
          group: scheduler
          label: scheduler
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If it is true will fire the trigger when the route is start when using SimpleTrigger.
        startDelayedSeconds:
          kind: parameter
          group: scheduler
          label: scheduler
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Seconds to wait before starting the quartz scheduler.
        triggerStartDelay:
          kind: parameter
          group: scheduler
          label: scheduler
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "500"
          description: In case of scheduler has already started we want the trigger start slightly after current time to ensure endpoint is fully started before the job kicks in.
    documentation.adoc: "[[Quartz2-Quartz2Component]]\nQuartz2 Component\n~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.12.0*\n\nThe *quartz2:* component provides a scheduled\
      \ delivery of messages using\nthe http://www.quartz-scheduler.org/[Quartz Scheduler\
      \ 2.x].  +\n Each endpoint represents a different timer (in Quartz terms, a\
      \ Trigger\nand JobDetail).\n\nMaven users will need to add the following dependency\
      \ to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-quartz2</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n*NOTE:* Quartz 2.x API is not compatible with Quartz 1.x. If you need to\n\
      remain on old Quartz 1.x, please +\n use the old link:quartz.html[Quartz] component\
      \ instead.\n\n[[Quartz2-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n\
      ---------------------------------------------\nquartz2://timerName?options\n\
      quartz2://groupName/timerName?options\nquartz2://groupName/timerName?cron=expression\n\
      quartz2://timerName?cron=expression\n---------------------------------------------\n\
      \nThe component uses either a `CronTrigger` or a `SimpleTrigger`. If no\ncron\
      \ expression is provided, the component uses a simple trigger. If no\n`groupName`\
      \ is provided, the quartz component uses the `Camel` group\nname.\n\nYou can\
      \ append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[Quartz2-Options]]\nOptions\n^^^^^^^\n\n\n\n// component options: START\n\
      The Quartz2 component supports 9 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| autoStartScheduler | boolean | Whether or\
      \ not the scheduler should be auto started. This options is default true\n|\
      \ startDelayedSeconds | int | Seconds to wait before starting the quartz scheduler.\n\
      | prefixJobNameWithEndpointId | boolean | Whether to prefix the quartz job with\
      \ the endpoint id. This option is default false.\n| enableJmx | boolean | Whether\
      \ to enable Quartz JMX which allows to manage the Quartz scheduler from JMX.\
      \ This options is default true\n| properties | Properties | Properties to configure\
      \ the Quartz scheduler.\n| propertiesFile | String | File name of the properties\
      \ to load from the classpath\n| prefixInstanceName | boolean | Whether to prefix\
      \ the Quartz Scheduler instance name with the CamelContext name. This is enabled\
      \ by default to let each CamelContext use its own Quartz scheduler instance\
      \ by default. You can set this option to false to reuse Quartz scheduler instances\
      \ between multiple CamelContext's.\n| schedulerFactory | SchedulerFactory |\
      \ To use the custom SchedulerFactory which is used to create the Scheduler.\n\
      | scheduler | Scheduler | To use the custom configured Quartz scheduler instead\
      \ of creating a new Scheduler.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The Quartz2 component supports 21 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| groupName | consumer |\
      \ Camel | String | The quartz group name to use. The combination of group name\
      \ and timer name should be unique.\n| triggerName | consumer |  | String | *Required*\
      \ The quartz timer name to use. The combination of group name and timer name\
      \ should be unique.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | cron | consumer |  | String | Specifies a cron expression to define when to\
      \ trigger.\n| deleteJob | consumer | true | boolean | If set to true then the\
      \ trigger automatically delete when route stop. Else if set to false it will\
      \ remain in scheduler. When set to false it will also mean user may reuse pre-configured\
      \ trigger with camel Uri. Just ensure the names match. Notice you cannot have\
      \ both deleteJob and pauseJob set to true.\n| durableJob | consumer | false\
      \ | boolean | Whether or not the job should remain stored after it is orphaned\
      \ (no triggers point to it).\n| pauseJob | consumer | false | boolean | If set\
      \ to true then the trigger automatically pauses when route stop. Else if set\
      \ to false it will remain in scheduler. When set to false it will also mean\
      \ user may reuse pre-configured trigger with camel Uri. Just ensure the names\
      \ match. Notice you cannot have both deleteJob and pauseJob set to true.\n|\
      \ recoverableJob | consumer | false | boolean | Instructs the scheduler whether\
      \ or not the job should be re-executed if a 'recovery' or 'fail-over' situation\
      \ is encountered.\n| stateful | consumer | false | boolean | Uses a Quartz PersistJobDataAfterExecution\
      \ and DisallowConcurrentExecution instead of the default job.\n| exceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| customCalendar | advanced |  | Calendar\
      \ | Specifies a custom calendar to avoid specific range of date\n| jobParameters\
      \ | advanced |  | Map | To configure additional options on the job.\n| prefixJobNameWithEndpointId\
      \ | advanced | false | boolean | Whether the job name should be prefixed with\
      \ endpoint id\n| synchronous | advanced | false | boolean | Sets whether synchronous\
      \ processing should be strictly used or Camel is allowed to use asynchronous\
      \ processing (if supported).\n| triggerParameters | advanced |  | Map | To configure\
      \ additional options on the trigger.\n| usingFixedCamelContextName | advanced\
      \ | false | boolean | If it is true JobDataMap uses the CamelContext name directly\
      \ to reference the CamelContext if it is false JobDataMap uses use the CamelContext\
      \ management name which could be changed during the deploy time.\n| autoStartScheduler\
      \ | scheduler | true | boolean | Whether or not the scheduler should be auto\
      \ started.\n| fireNow | scheduler | false | boolean | If it is true will fire\
      \ the trigger when the route is start when using SimpleTrigger.\n| startDelayedSeconds\
      \ | scheduler |  | int | Seconds to wait before starting the quartz scheduler.\n\
      | triggerStartDelay | scheduler | 500 | long | In case of scheduler has already\
      \ started we want the trigger start slightly after current time to ensure endpoint\
      \ is fully started before the job kicks in.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\nFor example, the following routing\
      \ rule will fire two timer events to\nthe `mock:results` endpoint:\n\n[source,java]\n\
      --------------------------------------------------------------------------------------------------------------------------\n\
      from(\"quartz2://myGroup/myTimerName?trigger.repeatInterval=2&trigger.repeatCount=1\"\
      ).routeId(\"myRoute\").to(\"mock:result\");\n--------------------------------------------------------------------------------------------------------------------------\n\
      \nWhen using `stateful=true`, the\nhttp://quartz-scheduler.org/api/2.0.0/org/quartz/JobDataMap.html[JobDataMap]\n\
      is re-persisted after every execution of the job, thus preserving state\nfor\
      \ the next execution.\n\nINFO: *Running in OSGi and having multiple bundles\
      \ with quartz\nroutes*\nIf you run in OSGi such as Apache ServiceMix, or Apache\
      \ Karaf, and have\nmultiple bundles with Camel routes that start from\nlink:quartz2.html[Quartz2]\
      \ endpoints, then make sure if you assign an `id` \nto the <camelContext> that\
      \ this id is unique, as this is\nrequired by the `QuartzScheduler` in the OSGi\
      \ container. If you do not\nset any `id` on <camelContext> then a unique id\
      \ is auto assigned, and there is no problem.\n\n[[Quartz2-Configuringquartz.propertiesfile]]\n\
      Configuring quartz.properties file\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nBy\
      \ default Quartz will look for a `quartz.properties` file in the\n`org/quartz`\
      \ directory of the classpath. If you are using WAR\ndeployments this means just\
      \ drop the quartz.properties in\n`WEB-INF/classes/org/quartz`.\n\nHowever the\
      \ Camel link:quartz2.html[Quartz2] component also allows you\nto configure properties:\n\
      \n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Parameter |Default |Type |Description\n\n|`properties` |`null` |`Properties`\
      \ |You can configure a `java.util.Properties` instance.\n\n|`propertiesFile`\
      \ |`null` |`String` |File name of the properties to load from the classpath\n\
      |=======================================================================\n\n\
      To do this you can configure this in Spring XML as follows\n\n[source,xml]\n\
      -------------------------------------------------------------------------------\n\
      <bean id=\"quartz\" class=\"org.apache.camel.component.quartz2.QuartzComponent\"\
      >\n    <property name=\"propertiesFile\" value=\"com/mycompany/myquartz.properties\"\
      />\n</bean>\n-------------------------------------------------------------------------------\n\
      \n[[Quartz2-EnablingQuartzschedulerinJMX]]\nEnabling Quartz scheduler in JMX\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nYou need to configure the quartz scheduler\
      \ properties to enable JMX. +\n That is typically setting the option\n`\"org.quartz.scheduler.jmx.export\"\
      ` to a `true` value in the\nconfiguration file.\n\nFrom Camel 2.13 onwards Camel\
      \ will automatic set this option to true,\nunless explicit disabled.\n\n[[Quartz2-StartingtheQuartzscheduler]]\n\
      Starting the Quartz scheduler\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe link:quartz2.html[Quartz2]\
      \ component offers an option to let the\nQuartz scheduler be started delayed,\
      \ or not auto started at all.\n\nThis is an example:\n\n[source,xml]\n------------------------------------------------------------------------------\n\
      <bean id=\"quartz2\" class=\"org.apache.camel.component.quartz2.QuartzComponent\"\
      >\n    <property name=\"startDelayedSeconds\" value=\"5\"/>\n</bean>\n------------------------------------------------------------------------------\n\
      \n[[Quartz2-Clustering]]\nClustering\n^^^^^^^^^^\n\nIf you use Quartz in clustered\
      \ mode, e.g. the `JobStore` is clustered.\nThen the link:quartz2.html[Quartz2]\
      \ component will *not* pause/remove\ntriggers when a node is being stopped/shutdown.\
      \ This allows the trigger\nto keep running on the other nodes in the cluster.\n\
      \n*Note*: When running in clustered node no checking is done to ensure\nunique\
      \ job name/group for endpoints.\n\n[[Quartz2-MessageHeaders]]\nMessage Headers\n\
      ^^^^^^^^^^^^^^^\n\nCamel adds the getters from the Quartz Execution Context\
      \ as header\nvalues. The following headers are added: +\n `calendar`, `fireTime`,\
      \ `jobDetail`, `jobInstance`, `jobRuntTime`,\n`mergedJobDataMap`, `nextFireTime`,\
      \ `previousFireTime`, `refireCount`,\n`result`, `scheduledFireTime`, `scheduler`,\
      \ `trigger`, `triggerName`,\n`triggerGroup`.\n\nThe `fireTime` header contains\
      \ the `java.util.Date` of when the exchange\nwas fired.\n\n[[Quartz2-UsingCronTriggers]]\n\
      Using Cron Triggers\n^^^^^^^^^^^^^^^^^^^\n\nQuartz supports\nhttp://www.quartz-scheduler.org/documentation/quartz-2.x/tutorials/crontrigger[Cron-like\n\
      expressions] for specifying timers in a handy format. You can use these\nexpressions\
      \ in the `cron` URI parameter; though to preserve valid URI\nencoding we allow\
      \ + to be used instead of spaces.\n\nFor example, the following will fire a\
      \ message every five minutes\nstarting at 12pm (noon) to 6pm on weekdays:\n\n\
      [source,java]\n------------------------------------------------------------------------------------------------\n\
      from(\"quartz2://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI\").to(\"activemq:Totally.Rocks\"\
      );\n------------------------------------------------------------------------------------------------\n\
      \nwhich is equivalent to using the cron expression\n\n[source,java]\n-----------------------\n\
      0 0/5 12-18 ? * MON-FRI\n-----------------------\n\nThe following table shows\
      \ the URI character encodings we use to preserve\nvalid URI syntax:\n\n[width=\"\
      100%\",cols=\"50%,50%\",options=\"header\",]\n|=======================================================================\n\
      |URI Character |Cron character\n\n|`+` | _Space_\n|=======================================================================\n\
      \n[[Quartz2-Specifyingtimezone]]\nSpecifying time zone\n^^^^^^^^^^^^^^^^^^^^\n\
      \nThe Quartz Scheduler allows you to configure time zone per trigger. For\n\
      example to use a timezone of your country, then you can do as follows:\n\n[source,java]\n\
      --------------------------------------------------------------------------------------------\n\
      quartz2://groupName/timerName?cron=0+0/5+12-18+?+*+MON-FRI&trigger.timeZone=Europe/Stockholm\n\
      --------------------------------------------------------------------------------------------\n\
      \nThe timeZone value is the values accepted by `java.util.TimeZone`.\n\n[[Quartz2-UsingQuartzScheduledPollConsumerScheduler]]\n\
      Using QuartzScheduledPollConsumerScheduler\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\
      \nThe link:quartz2.html[Quartz2] component provides a\nlink:polling-consumer.html[Polling\
      \ Consumer] scheduler which allows to\nuse cron based scheduling for link:polling-consumer.html[Polling\n\
      Consumer] such as the link:file2.html[File] and link:ftp2.html[FTP]\nconsumers.\n\
      \nFor example to use a cron based expression to poll for files every 2nd\nsecond,\
      \ then a Camel route can be define simply as:\n\n[source,java]\n---------------------------------------------------------------------\n\
      \    from(\"file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?\")\n \
      \      .to(\"bean:process\");\n---------------------------------------------------------------------\n\
      \nNotice we define the `scheduler=quartz2` to instruct Camel to use the\nlink:quartz2.html[Quartz2]\
      \ based scheduler. Then we use `scheduler.xxx`\noptions to configure the scheduler.\
      \ The link:quartz2.html[Quartz2]\nscheduler requires the cron option to be set.\n\
      \nThe following options is supported:\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Parameter |Default |Type |Description\n\n|`quartzScheduler` |`null` |`org.quartz.Scheduler`\
      \ |To use a custom Quartz scheduler. If none configure then the shared\nscheduler\
      \ from the link:quartz2.html[Quartz2] component is used.\n\n|`cron` |`null`\
      \ |`String` |*Mandatory*: To define the cron expression for triggering the polls.\n\
      \n|`triggerId` |`null` |`String` |To specify the trigger id. If none provided\
      \ then an UUID is generated\nand used.\n\n|`triggerGroup` |`QuartzScheduledPollConsumerScheduler`\
      \ |`String` |To specify the trigger group.\n\n|`timeZone` |`Default` |`TimeZone`\
      \ |The time zone to use for the CRON trigger.\n|=======================================================================\n\
      \n*Important:* Remember configuring these options from the endpoint\nlink:uris.html[URIs]\
      \ must be prefixed with `scheduler.`. \nFor example to configure the trigger\
      \ id and group:\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------------------------\n\
      \    from(\"file:inbox?scheduler=quartz2&scheduler.cron=0/2+*+*+*+*+?&scheduler.triggerId=myId&scheduler.triggerGroup=myGroup\"\
      )\n       .to(\"bean:process\");\n-----------------------------------------------------------------------------------------------------------------------------\n\
      \nThere is also a CRON scheduler in link:spring.html[Spring], so you can\nuse\
      \ the following as well:\n\n[source,java]\n--------------------------------------------------------------------\n\
      \    from(\"file:inbox?scheduler=spring&scheduler.cron=0/2+*+*+*+*+?\")\n  \
      \     .to(\"bean:process\");\n--------------------------------------------------------------------\n\
      \n[[Quartz2-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:quartz.html[Quartz]\n\
      * link:timer.html[Timer]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-quickfix
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: quickfix
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: quickfix
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: quickfix
          spec:
            containers:
            - image: fabric8/connector-quickfix:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: quickfix
        syntax: quickfix:configurationName
        title: QuickFix
        description: The quickfix component allows to send Financial Interchange (FIX) messages to the QuickFix engine.
        label: engine,messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.quickfixj.QuickfixjComponent
        groupId: org.apache.camel
        artifactId: camel-quickfix
        version: 2.18.1
      componentProperties:
        messageFactory:
          kind: property
          type: object
          javaType: quickfix.MessageFactory
          deprecated: false
          secret: false
          description: To use the given MessageFactory
        logFactory:
          kind: property
          type: object
          javaType: quickfix.LogFactory
          deprecated: false
          secret: false
          description: To use the given LogFactory
        messageStoreFactory:
          kind: property
          type: object
          javaType: quickfix.MessageStoreFactory
          deprecated: false
          secret: false
          description: To use the given MessageStoreFactory
        configurations:
          kind: property
          type: object
          javaType: java.util.Map<java.lang.String,org.apache.camel.component.quickfixj.QuickfixjConfiguration>
          deprecated: false
          secret: false
          description: To use the given map of pre configured QuickFix configurations mapped to the key
        lazyCreateEngines:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If set to true the engines will be created and started when needed (when first message is send)
      properties:
        configurationName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The configFile is the name of the QuickFIX/J configuration to use for the FIX engine (located as a resource found in your classpath).
        lazyCreateEngine:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option allows to create QuickFIX/J engine on demand. Value true means the engine is started when first message is send or there's consumer configured in route definition. When false value is used the engine is started at the endpoint creation. When this parameter is missing the value of component's property lazyCreateEngines is being used.
        sessionID:
          kind: parameter
          group: common
          type: object
          javaType: quickfix.SessionID
          deprecated: false
          secret: false
          description: 'The optional sessionID identifies a specific FIX session. The format
            of the sessionID is: (BeginString):(SenderCompID)/(SenderSubID)/(SenderLocationID)-(TargetCompID)/(TargetSubID)/(TargetLocationID)'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      [[ConfluenceContent]]
      [[Quickfix-QuickFIXJComponent]]
      QuickFIX/J Component
      ~~~~~~~~~~~~~~~~~~~~

      The *quickfix* component adapts the
      http://www.quickfixj.org/[QuickFIX/J] FIX engine for using in Camel .
      This component uses the standard http://www.fixprotocol.org/[Financial
      Interchange (FIX) protocol] for message transport.

      [Info]
      ====
      **Previous Versions**

      The *quickfix* component was rewritten for Camel 2.5. For information
      about using the *quickfix* component prior to 2.5 see the documentation
      section below.

      ====

      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-quickfix</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ----

      [[Quickfix-URIformat]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      quickfix:configFile[?sessionID=sessionID&lazyCreateEngine=true|false]
      ----

      The *configFile* is the name of the QuickFIX/J configuration to use for
      the FIX engine (located as a resource found in your classpath). The
      optional *sessionID* identifies a specific FIX session. The format of
      the sessionID is:

      [source]
      ----
      (BeginString):(SenderCompID)[/(SenderSubID)[/(SenderLocationID)]]->(TargetCompID)[/(TargetSubID)[/(TargetLocationID)]]
      ----

      The optional *lazyCreateEngine* (Camel 2.12.3+) parameter allows to
      create QuickFIX/J engine on demand. Value *true* means the engine is
      started when first message is send or there's consumer configured in
      route definition. When??**false** value is used, the engine is started at
      the endpoint creation. When this parameter is missing, the value of
      component's property *lazyCreateEngines* is being used.

      Example URIs:

      [source]
      ----
      quickfix:config.cfg

      quickfix:config.cfg?sessionID=FIX.4.2:MyTradingCompany->SomeExchange

      quickfix:config.cfg?sessionID=FIX.4.2:MyTradingCompany->SomeExchange&lazyCreateEngine=true
      ----

      [[Quickfix-Endpoints]]
      Endpoints
      ~~~~~~~~~

      FIX sessions are endpoints for the *quickfix* component. An endpoint URI
      may specify a single session or all sessions managed by a specific
      QuickFIX/J engine. Typical applications will use only one FIX engine but
      advanced users may create multiple FIX engines by referencing different
      configuration files in *quickfix* component endpoint URIs.

      When a consumer does not include a session ID in the endpoint URI, it
      will receive exchanges for all sessions managed by the FIX engine
      associated with the configuration file specified in the URI. If a
      producer does not specify a session in the endpoint URI then it must
      include the session-related fields in the FIX message being sent. If a
      session is specified in the URI then the component will automatically
      inject the session-related fields into the FIX message.

      [[Quickfix-Options]]
      Options
      ~~~~~~~

      // component options: START
      The QuickFix component supports 5 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | messageFactory | MessageFactory | To use the given MessageFactory
      | logFactory | LogFactory | To use the given LogFactory
      | messageStoreFactory | MessageStoreFactory | To use the given MessageStoreFactory
      | configurations | Map | To use the given map of pre configured QuickFix configurations mapped to the key
      | lazyCreateEngines | boolean | If set to true the engines will be created and started when needed (when first message is send)
      |=======================================================================
      {% endraw %}
      // component options: END

      // endpoint options: START
      The QuickFix component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | configurationName | common |  | String | *Required* The configFile is the name of the QuickFIX/J configuration to use for the FIX engine (located as a resource found in your classpath).
      | lazyCreateEngine | common | false | boolean | This option allows to create QuickFIX/J engine on demand. Value true means the engine is started when first message is send or there's consumer configured in route definition. When false value is used the engine is started at the endpoint creation. When this parameter is missing the value of component's property lazyCreateEngines is being used.
      | sessionID | common |  | SessionID | The optional sessionID identifies a specific FIX session. The format of the sessionID is: (BeginString):(SenderCompID)/(SenderSubID)/(SenderLocationID)-(TargetCompID)/(TargetSubID)/(TargetLocationID)
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Quickfix-ExchangeFormat]]
      Exchange Format
      ^^^^^^^^^^^^^^^

      The exchange headers include information to help with exchange
      filtering, routing and other processing. The following headers are
      available:

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Header Name |Description
      |EventCategory |One of `AppMessageReceived`, `AppMessageSent`,
      `AdminMessageReceived`, `AdminMessageSent`, `SessionCreated`,
      `SessionLogon`, `SessionLogoff`. See the `QuickfixjEventCategory` enum.

      |SessionID |The FIX message SessionID

      |MessageType |The FIX MsgType tag value

      |DataDictionary |Specifies a data dictionary to used for parsing an
      incoming message. Can be an instance of a data dictionary or a resource
      path for a QuickFIX/J data dictionary file
      |=======================================================================

      The DataDictionary header is useful if string messages are being
      received and need to be parsed in a route. QuickFIX/J requires a data
      dictionary to parse certain types of messages (with repeating groups,
      for example). By injecting a DataDictionary header in the route after
      receiving a message string, the FIX engine can properly parse the data.

      [[Quickfix-QuickFIXJConfigurationExtensions]]
      QuickFIX/J Configuration Extensions
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When using QuickFIX/J directly, one typically writes code to create
      instances of logging adapters, message stores and communication
      connectors. The *quickfix* component will automatically create instances
      of these classes based on information in the configuration file. It also
      provides defaults for many of the common required settings and adds
      additional capabilities (like the ability to activate JMX support).

      The following sections describe how the *quickfix* component processes
      the QuickFIX/J configuration. For comprehensive information about
      QuickFIX/J configuration, see the
      http://www.quickfixj.org/quickfixj/usermanual/usage/configuration.html[QFJ
      user manual].

      [[Quickfix-CommunicationConnectors]]
      Communication Connectors
      ++++++++++++++++++++++++

      When the component detects an initiator or acceptor session setting in
      the QuickFIX/J configuration file it will automatically create the
      corresponding initiator and/or acceptor connector. These settings can be
      in the default or in a specific session section of the configuration
      file.

      [width="100%",cols="10%,90%",options="header",]
      |=========================================================
      |Session Setting |Component Action
      |`ConnectionType=initiator` |Create an initiator connector
      |`ConnectionType=acceptor` |Create an acceptor connector
      |=========================================================

      The threading model for the QuickFIX/J session connectors can also be
      specified. These settings affect all sessions in the configuration file
      and must be placed in the settings default section.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Default/Global Setting |Component Action
      |`ThreadModel=ThreadPerConnector` |Use `SocketInitiator` or
      `SocketAcceptor` (default)

      |`ThreadModel=ThreadPerSession` |Use `ThreadedSocketInitiator` or
      `ThreadedSocketAcceptor`
      |=======================================================================

      [[Quickfix-Logging]]
      Logging
      +++++++

      The QuickFIX/J logger implementation can be specified by including the
      following settings in the default section of the configuration file. The
      `ScreenLog` is the default if none of the following settings are present
      in the configuration. It's an error to include settings that imply more
      than one log implementation. The log factory implementation can also be
      set directly on the Quickfix component. This will override any related
      values in the QuickFIX/J settings file.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Default/Global Setting |Component Action
      |`ScreenLogShowEvents` |Use a `ScreenLog`

      |`ScreenLogShowIncoming` |Use a `ScreenLog`

      |`ScreenLogShowOutgoing` |Use a `ScreenLog`

      |`SLF4J*` |**Camel 2.6+**. Use a `SLF4JLog`. Any of the SLF4J settings
      will cause this log to be used.

      |`FileLogPath` |Use a `FileLog`

      |`JdbcDriver` |Use a `JdbcLog`
      |=======================================================================

      [[Quickfix-MessageStore]]
      Message Store
      +++++++++++++

      The QuickFIX/J message store implementation can be specified by
      including the following settings in the default section of the
      configuration file. The `MemoryStore` is the default if none of the
      following settings are present in the configuration. It's an error to
      include settings that imply more than one message store implementation.
      The message store factory implementation can also be set directly on the
      Quickfix component. This will override any related values in the
      QuickFIX/J settings file.

      [width="100%",cols="10%,90%",options="header",]
      |=============================================
      |Default/Global Setting |Component Action
      |`JdbcDriver` |Use a `JdbcStore`
      |`FileStorePath` |Use a `FileStore`
      |`SleepycatDatabaseDir` |Use a `SleepcatStore`
      |=============================================

      [[Quickfix-MessageFactory]]
      Message Factory
      +++++++++++++++

      A message factory is used to construct domain objects from raw FIX
      messages. The default message factory is `DefaultMessageFactory`.
      However, advanced applications may require a custom message factory.
      This can be set on the QuickFIX/J component.

      [[Quickfix-JMX]]
      JMX
      +++

      [width="100%",cols="10%,90%",options="header",]
      |============================================
      |Default/Global Setting |Component Action
      |`UseJmx` |if `Y`, then enable QuickFIX/J JMX
      |============================================

      [[Quickfix-OtherDefaults]]
      Other Defaults
      ++++++++++++++

      The component provides some default settings for what are normally
      required settings in QuickFIX/J configuration files. `SessionStartTime`
      and `SessionEndTime` default to "00:00:00", meaning the session will not
      be automatically started and stopped. The `HeartBtInt` (heartbeat
      interval) defaults to 30 seconds.

      [[Quickfix-MinimalInitiatorConfigurationExample]]
      Minimal Initiator Configuration Example
      +++++++++++++++++++++++++++++++++++++++

      [source]
      ----
      [SESSION]
      ConnectionType=initiator
      BeginString=FIX.4.4
      SenderCompID=YOUR_SENDER
      TargetCompID=YOUR_TARGET
      ----

      [[Quickfix-UsingtheInOutMessageExchangePattern]]
      Using the InOut Message Exchange Pattern
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Camel 2.8+*

      Although the FIX protocol is event-driven and asynchronous, there are
      specific pairs of messages
      that represent a request-reply message exchange. To use an InOut
      exchange pattern, there should
      be a single request message and single reply message to the request.
      Examples include an
      OrderStatusRequest message and UserRequest.

      [[Quickfix-ImplementingInOutExchangesforConsumers]]
      Implementing InOut Exchanges for Consumers
      ++++++++++++++++++++++++++++++++++++++++++

      Add "exchangePattern=InOut" to the QuickFIX/J enpoint URI. The
      `MessageOrderStatusService` in
      the example below is a bean with a synchronous service method. The
      method returns the response
      to the request (an ExecutionReport in this case) which is then sent back
      to the requestor session.

      [source,java]
      ----
          from("quickfix:examples/inprocess.cfg?sessionID=FIX.4.2:MARKET->TRADER&exchangePattern=InOut")
              .filter(header(QuickfixjEndpoint.MESSAGE_TYPE_KEY).isEqualTo(MsgType.ORDER_STATUS_REQUEST))
              .bean(new MarketOrderStatusService());
      ----

      [[Quickfix-ImplementingInOutExchangesforProducers]]
      Implementing InOut Exchanges for Producers
      ++++++++++++++++++++++++++++++++++++++++++

      For producers, sending a message will block until a reply is received or
      a timeout occurs. There
      is no standard way to correlate reply messages in FIX. Therefore, a
      correlation criteria must be
      defined for each type of InOut exchange. The correlation criteria and
      timeout can be specified
      using `Exchange` properties.

      [width="100%",cols="60%,10%,20%,10%",options="header",]
      |=======================================================================
      |Description |Key String |Key Constant |Default
      |Correlation Criteria |"CorrelationCriteria"
      |QuickfixjProducer.CORRELATION_CRITERIA_KEY |None

      |Correlation Timeout in Milliseconds |"CorrelationTimeout"
      |QuickfixjProducer.CORRELATION_TIMEOUT_KEY |1000
      |=======================================================================

      The correlation criteria is defined with a `MessagePredicate` object.
      The following example will treat
      a FIX ExecutionReport from the specified session where the transaction
      type is STATUS and the Order ID
      matches our request. The session ID should be for the __requestor__, the
      sender and target CompID fields
      will be reversed when looking for the reply.

      [source,java]
      ----
      exchange.setProperty(QuickfixjProducer.CORRELATION_CRITERIA_KEY,
          new MessagePredicate(new SessionID(sessionID), MsgType.EXECUTION_REPORT)
              .withField(ExecTransType.FIELD, Integer.toString(ExecTransType.STATUS))
              .withField(OrderID.FIELD, request.getString(OrderID.FIELD)));
      ----

      [[Quickfix-Example]]
      Example
      +++++++

      The source code contains an example called `RequestReplyExample` that
      demonstrates the InOut exchanges
      for a consumer and producer. This example creates a simple HTTP server
      endpoint that accepts order
      status requests. The HTTP request is converted to a FIX
      OrderStatusRequestMessage, is augmented with a
      correlation criteria, and is then routed to a quickfix endpoint. The
      response is then converted to a
      JSON-formatted string and sent back to the HTTP server endpoint to be
      provided as the web response.

      The Spring configuration have changed from Camel 2.9 onwards. See
      further below for example.

      [[Quickfix-SpringConfiguration]]
      Spring Configuration
      ^^^^^^^^^^^^^^^^^^^^

      *Camel 2.6 - 2.8.x*

      The QuickFIX/J component includes a Spring `FactoryBean` for configuring
      the session settings within a Spring context. A type converter for
      QuickFIX/J session ID strings is also included. The following example
      shows a simple configuration of an acceptor and initiator session with
      default settings for both sessions.

      [source,xml]
      ----
      <!--  camel route  -->
      <camelContext xmlns="http://camel.apache.org/schema/spring" id="quickfixjContext">
          <route>
              <from uri="quickfix:example"/>
              <filter>
                  <simple>${in.header.EventCategory} == 'AppMessageReceived'</simple>
                  <to uri="log:test"/>
              </filter>
          </route>
      </camelContext>
              <!--  quickfix component  -->
      <bean id="quickfix" class="org.apache.camel.component.quickfixj.QuickfixjComponent">
      <property name="engineSettings">
          <util:map>
              <entry key="quickfix:example" value-ref="quickfixjSettings"/>
          </util:map>
      </property>
      <property name="messageFactory">
          <bean class="org.apache.camel.component.quickfixj.QuickfixjSpringTest.CustomMessageFactory"/>
      </property>
      </bean>
              <!--  quickfix settings  -->
      <bean id="quickfixjSettings" class="org.apache.camel.component.quickfixj.QuickfixjSettingsFactory">
      <property name="defaultSettings">
          <util:map>
              <entry key="SocketConnectProtocol" value="VM_PIPE"/>
              <entry key="SocketAcceptProtocol" value="VM_PIPE"/>
              <entry key="UseDataDictionary" value="N"/>
          </util:map>
      </property>
      <property name="sessionSettings">
          <util:map>
              <entry key="FIX.4.2:INITIATOR->ACCEPTOR">
                  <util:map>
                      <entry key="ConnectionType" value="initiator"/>
                      <entry key="SocketConnectHost" value="localhost"/>
                      <entry key="SocketConnectPort" value="5000"/>
                  </util:map>
              </entry>
              <entry key="FIX.4.2:ACCEPTOR->INITIATOR">
                  <util:map>
                      <entry key="ConnectionType" value="acceptor"/>
                      <entry key="SocketAcceptPort" value="5000"/>
                  </util:map>
              </entry>
          </util:map>
      </property>
      </bean>
      ----

      *Camel 2.9 onwards*

      The QuickFIX/J component includes a `QuickfixjConfiguration` class for
      configuring the session settings. A type converter for QuickFIX/J
      session ID strings is also included. The following example shows a
      simple configuration of an acceptor and initiator session with default
      settings for both sessions.

      [source,xml]
      ----
      include::../../test/resources/org/apache/camel/component/quickfixj/QuickfixjSpringTest-context.xml[tags=e1]
      ----

      [[Quickfix-Exceptionhandling]]
      Exception handling
      ^^^^^^^^^^^^^^^^^^

      QuickFIX/J behavior can be modified if certain exceptions are thrown
      during processing of a message. If a `RejectLogon` exception is thrown
      while processing an incoming logon administrative message, then the
      logon will be rejected.

      Normally, QuickFIX/J handles the logon process automatically. However,
      sometimes an outgoing logon message must be modified to include
      credentials required by a FIX counterparty. If the FIX logon message
      body is modified when sending a logon message
      (EventCategory=`AdminMessageSent` the modified message will be sent to
      the counterparty. It is important that the outgoing logon message is
      being processed __synchronously__. If it is processed asynchronously (on
      another thread), the FIX engine will immediately send the unmodified
      outgoing message when it's callback method returns.

      [[Quickfix-FIXSequenceNumberManagement]]
      FIX Sequence Number Management
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If an application exception is thrown during _synchronous_ exchange
      processing, this will cause QuickFIX/J to not increment incoming FIX
      message sequence numbers and will cause a resend of the counterparty
      message. This FIX protocol behavior is primarily intended to handle
      _transport_ errors rather than application errors. There are risks
      associated with using this mechanism to handle application errors. The
      primary risk is that the message will repeatedly cause application
      errors each time it's re-received. A better solution is to persist the
      incoming message (database, JMS queue) immediately before processing it.
      This also allows the application to process messages asynchronously
      without losing messages when errors occur.

      Although it's possible to send messages to a FIX session before it's
      logged on (the messages will be sent at logon time), it is usually a
      better practice to wait until the session is logged on. This eliminates
      the required sequence number resynchronization steps at logon. Waiting
      for session logon can be done by setting up a route that processes the
      `SessionLogon` event category and signals the application to start
      sending messages.

      See the FIX protocol specifications and the QuickFIX/J documentation for
      more details about FIX sequence number management.

      [[Quickfix-RouteExamples]]
      Route Examples
      ^^^^^^^^^^^^^^

      Several examples are included in the QuickFIX/J component source code
      (test subdirectories). One of these examples implements a trival trade
      excecution simulation. The example defines an application component that
      uses the URI scheme "trade-executor".

      The following route receives messages for the trade executor session and
      passes application messages to the trade executor component.

      [source,java]
      ----
      from("quickfix:examples/inprocess.cfg?sessionID=FIX.4.2:MARKET->TRADER").
          filter(header(QuickfixjEndpoint.EVENT_CATEGORY_KEY).isEqualTo(QuickfixjEventCategory.AppMessageReceived)).
          to("trade-executor:market");
      ----

      The trade executor component generates messages that are routed back to
      the trade session. The session ID must be set in the FIX message itself
      since no session ID is specified in the endpoint URI.

      [source,java]
      ----
      from("trade-executor:market").to("quickfix:examples/inprocess.cfg");
      ----

      The trader session consumes execution report messages from the market
      and processes them.

      [source,java]
      ----
      from("quickfix:examples/inprocess.cfg?sessionID=FIX.4.2:TRADER->MARKET").
          filter(header(QuickfixjEndpoint.MESSAGE_TYPE_KEY).isEqualTo(MsgType.EXECUTION_REPORT)).
          bean(new MyTradeExecutionProcessor());
      ----

      [[Quickfix-QuickFIXJComponentPriortoCamel2.5]]
      QuickFIX/J Component Prior to Camel 2.5
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      The *quickfix* component is an implementation of the
      http://www.quickfixj.org/[QuickFIX/J] engine for Java . This engine
      allows to connect to a FIX server which is used to exchange financial
      messages according to http://www.fixprotocol.org/[FIX protocol]
      standard.

      *Note:* The component can be used to send/receives messages to a FIX
      server.

      [[Quickfix-URIformat.1]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      quickfix-server:config file
      quickfix-client:config file
      ----

      Where *config file* is the location (in your classpath) of the quickfix
      configuration file used to configure the engine at the startup.

      *Note:* Information about parameters available for quickfix can be found
      on
      http://www.quickfixj.org/quickfixj/usermanual/usage/configuration.html[QuickFIX/J]
      web site.

      The quickfix-server endpoint must be used to receive from FIX server FIX
      messages and quickfix-client endpoint in the case that you want to send
      messages to a FIX gateway.

      [[Quickfix-Exchangedataformat]]
      Exchange data format
      ^^^^^^^^^^^^^^^^^^^^

      The QuickFIX/J engine is like CXF component a messaging bus using MINA
      as protocol layer to create the socket connection with the FIX engine
      gateway.

      When QuickFIX/J engine receives a message, then it create a
      QuickFix.Message instance which is next received by the camel endpoint.
      This object is a 'mapping object' created from a FIX message formatted
      initially as a collection of key value pairs data. You can use this
      object or you can use the method 'toString' to retrieve the original FIX
      message.

      *Note:* Alternatively, you can use link:bindy.html[camel bindy
      dataformat] to transform the FIX message into your own java POJO

      When a message must be send to QuickFix, then you must create a
      QuickFix.Message instance.

      [[Quickfix-Lazycreatingengines]]
      Lazy creating engines
      ^^^^^^^^^^^^^^^^^^^^^

      From *Camel 2.12.3* onwards, you can configure the QuickFixComponent to
      lazy create and start the engines, which then only start these
      on-demand. For example you can use this when you have multiple Camel
      applications in a cluster with master/slaves. And want the slaves to be
      standby.

      [[Quickfix-Samples]]
      Samples
      ^^^^^^^

      Direction : to FIX gateway

      [source,xml]
      ----
      <route>
        <from uri="activemq:queue:fix"/>
        <bean ref="fixService" method="createFixMessage"/> // bean method in charge to transform message into a QuickFix.Message
        <to uri="quickfix-client:META-INF/quickfix/client.cfg"/> // Quickfix engine who will send the FIX messages to the gateway
      </route>
      ----

      Direction : from FIX gateway

      [source,xml]
      ----
      <route>
        <from uri="quickfix-server:META-INF/quickfix/server.cfg"/> // QuickFix engine who will receive the message from FIX gateway
        <bean ref="fixService" method="parseFixMessage"/> // bean method parsing the QuickFix.Message
        <to uri="uri="activemq:queue:fix"/>"
      </route>
      ----

      [[Quickfix-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-rabbitmq
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: rabbitmq
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: rabbitmq
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: rabbitmq
          spec:
            containers:
            - image: fabric8/connector-rabbitmq:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: rabbitmq
        syntax: rabbitmq:hostname:portNumber/exchangeName
        title: RabbitMQ
        description: The rabbitmq component allows you produce and consume messages from RabbitMQ instances.
        label: messaging
        deprecated: false
        async: true
        javaType: org.apache.camel.component.rabbitmq.RabbitMQComponent
        groupId: org.apache.camel
        artifactId: camel-rabbitmq
        version: 2.18.1
      componentProperties: {}
      properties:
        hostname:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hostname of the running rabbitmq instance or cluster.
        portNumber:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5672"
          description: Port number for the host with the running rabbitmq instance or cluster. Default value is 5672.
        exchangeName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The exchange name determines which exchange produced messages will sent to. In the case of consumers the exchange name determines which exchange the queue will bind to.
        autoDelete:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If it is true the exchange will be deleted when it is no longer in use
        connectionTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Connection timeout
        deadLetterExchange:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the dead letter exchange
        deadLetterExchangeType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          enum:
          - direct
          - fanout
          - headers
          - topic
          deprecated: false
          secret: false
          defaultValue: direct
          description: The type of the dead letter exchange
        deadLetterQueue:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the dead letter queue
        deadLetterRoutingKey:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The routing key for the dead letter exchange
        declare:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If the option is true camel declare the exchange and queue name and bind them together. If the option is false camel won't declare the exchange and queue name on the server.
        durable:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If we are declaring a durable exchange (the exchange will survive a server restart)
        exchangeType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          enum:
          - direct
          - fanout
          - headers
          - topic
          deprecated: false
          secret: false
          defaultValue: direct
          description: The exchange type such as direct or topic.
        exclusive:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Exclusive queues may only be accessed by the current connection and are deleted when that connection closes.
        queue:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The queue to receive messages from
        routingKey:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The routing key to use when binding a consumer queue to the exchange. For producer routing keys you set the header rabbitmq.ROUTING_KEY.
        skipExchangeDeclare:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This can be used if we need to declare the queue but not the exchange
        skipQueueBind:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the queue will not be bound to the exchange after declaring it
        skipQueueDeclare:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the producer will not declare and bind a queue. This can be used for directing messages via an existing routing key.
        vhost:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: /
          description: The vhost for the channel
        autoAck:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If messages should be auto acknowledged
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent consumers when consuming from broker. (eg similar as to the same option for the JMS component).
        prefetchCount:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The maximum number of messages that the server will deliver 0 if unlimited. You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
        prefetchEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables the quality of service on the RabbitMQConsumer side. You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
        prefetchGlobal:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the settings should be applied to the entire channel rather than each consumer You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
        prefetchSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The maximum amount of content (measured in octets) that the server will deliver 0 if unlimited. You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        threadPoolSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: The consumer uses a Thread Pool Executor with a fixed number of threads. This setting allows you to set that number of threads.
        bridgeEndpoint:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the bridgeEndpoint is true the producer will ignore the message header of rabbitmq.EXCHANGE_NAME and rabbitmq.ROUTING_KEY
        channelPoolMaxSize:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Get maximum number of opened channel in pool
        channelPoolMaxWait:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Set the maximum number of milliseconds to wait for a channel from the pool
        guaranteedDeliveries:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When true an exception will be thrown when the message cannot be delivered (basic.return) and the message is marked as mandatory. PublisherAcknowledgement will also be activated in this case See also publisher acknowledgements - When will messages be confirmed
        immediate:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This flag tells the server how to react if the message cannot be routed to a queue consumer immediately. If this flag is set the server will return an undeliverable message with a Return method. If this flag is zero the server will queue the message but with no guarantee that it will ever be consumed. If the header is present rabbitmq.IMMEDIATE it will override this option.
        mandatory:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This flag tells the server how to react if the message cannot be routed to a queue. If this flag is set the server will return an unroutable message with a Return method. If this flag is zero the server silently drops the message. If the header is present rabbitmq.MANDATORY it will override this option.
        publisherAcknowledgements:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When true the message will be published with publisher acknowledgements turned on
        publisherAcknowledgementsTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: The amount of time in milliseconds to wait for a basic.ack response from RabbitMQ server
        addresses:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.rabbitmq.client.Address[]
          deprecated: false
          secret: false
          description: If this option is set camel-rabbitmq will try to create connection based on the setting of option addresses. The addresses value is a string which looks like server1:12345 server2:12345
        automaticRecoveryEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Enables connection automatic recovery (uses connection implementation that performs automatic recovery when connection shutdown is not initiated by the application)
        clientProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: Connection client properties (client info used in negotiating with the server)
        connectionFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.rabbitmq.client.ConnectionFactory
          deprecated: false
          secret: false
          description: To use a custom RabbitMQ connection factory. When this option is set all connection options (connectionTimeout requestedChannelMax...) set on URI are not used
        exchangeArgsConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.rabbitmq.ArgsConfigurer
          deprecated: false
          secret: false
          description: Set the configurer for setting the exchange args in Channel.exchangeDeclare
        networkRecoveryInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Network recovery interval in milliseconds (interval used when recovering from network failure)
        queueArgsConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.rabbitmq.ArgsConfigurer
          deprecated: false
          secret: false
          description: Set the configurer for setting the queue args in Channel.queueDeclare
        requestedChannelMax:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Connection requested channel max (max number of channels offered)
        requestedFrameMax:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Connection requested frame max (max size of frame offered)
        requestedHeartbeat:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "60"
          description: Connection requested heartbeat (heart-beat in seconds offered)
        requestTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Set timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds)
        requestTimeoutCheckerInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Set requestTimeoutCheckerInterval for inOut exchange
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        topologyRecoveryEnabled:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Enables connection topology recovery (should topology recovery be performed)
        transferException:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: When true and an inOut Exchange failed on the consumer side send the caused Exception back in the response
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          defaultValue: guest
          description: Password for authenticated access
        sslProtocol:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Enables SSL on connection accepted value are true TLS and 'SSLv3
        trustManager:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: javax.net.ssl.TrustManager
          deprecated: false
          secret: false
          description: Configure SSL trust manager SSL should be enabled for this option to be effective
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          defaultValue: guest
          description: Username in case of authenticated access
    documentation.adoc: |+
      [[RabbitMQ-RabbitMQComponent]]
      RabbitMQ Component
      ~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *rabbitmq:* component allows you produce and consume messages from
      http://www.rabbitmq.com/[RabbitMQ] instances. Using the RabbitMQ AMQP
      client, this component offers a pure RabbitMQ approach over the generic
      http://camel.apache.org/amqp.html[AMQP] component.

      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-rabbitmq</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[RabbitMQ-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------------------------
      rabbitmq://hostname[:port]/exchangeName?[options]
      -------------------------------------------------

      Where *hostname* is the hostname of the running rabbitmq instance or
      cluster. Port is optional and if not specified then defaults to the
      RabbitMQ client default (5672). The exchange name determines which
      exchange produced messages will sent to. In the case of consumers, the
      exchange name determines which exchange the queue will bind to.

      [[RabbitMQ-Options]]
      Options
      ^^^^^^^


      // component options: START
      The RabbitMQ component has no options.
      // component options: END





      // endpoint options: START
      The RabbitMQ component supports 56 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | hostname | common |  | String | *Required* The hostname of the running rabbitmq instance or cluster.
      | portNumber | common | 5672 | int | *Required* Port number for the host with the running rabbitmq instance or cluster. Default value is 5672.
      | exchangeName | common |  | String | *Required* The exchange name determines which exchange produced messages will sent to. In the case of consumers the exchange name determines which exchange the queue will bind to.
      | autoDelete | common | true | boolean | If it is true the exchange will be deleted when it is no longer in use
      | connectionTimeout | common | 60000 | int | Connection timeout
      | deadLetterExchange | common |  | String | The name of the dead letter exchange
      | deadLetterExchangeType | common | direct | String | The type of the dead letter exchange
      | deadLetterQueue | common |  | String | The name of the dead letter queue
      | deadLetterRoutingKey | common |  | String | The routing key for the dead letter exchange
      | declare | common | true | boolean | If the option is true camel declare the exchange and queue name and bind them together. If the option is false camel won't declare the exchange and queue name on the server.
      | durable | common | true | boolean | If we are declaring a durable exchange (the exchange will survive a server restart)
      | exchangeType | common | direct | String | The exchange type such as direct or topic.
      | exclusive | common | false | boolean | Exclusive queues may only be accessed by the current connection and are deleted when that connection closes.
      | queue | common |  | String | The queue to receive messages from
      | routingKey | common |  | String | The routing key to use when binding a consumer queue to the exchange. For producer routing keys you set the header rabbitmq.ROUTING_KEY.
      | skipExchangeDeclare | common | false | boolean | This can be used if we need to declare the queue but not the exchange
      | skipQueueBind | common | false | boolean | If true the queue will not be bound to the exchange after declaring it
      | skipQueueDeclare | common | false | boolean | If true the producer will not declare and bind a queue. This can be used for directing messages via an existing routing key.
      | vhost | common | / | String | The vhost for the channel
      | autoAck | consumer | true | boolean | If messages should be auto acknowledged
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent consumers when consuming from broker. (eg similar as to the same option for the JMS component).
      | prefetchCount | consumer |  | int | The maximum number of messages that the server will deliver 0 if unlimited. You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
      | prefetchEnabled | consumer | false | boolean | Enables the quality of service on the RabbitMQConsumer side. You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
      | prefetchGlobal | consumer | false | boolean | If the settings should be applied to the entire channel rather than each consumer You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
      | prefetchSize | consumer |  | int | The maximum amount of content (measured in octets) that the server will deliver 0 if unlimited. You need to specify the option of prefetchSize prefetchCount prefetchGlobal at the same time
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | threadPoolSize | consumer (advanced) | 10 | int | The consumer uses a Thread Pool Executor with a fixed number of threads. This setting allows you to set that number of threads.
      | bridgeEndpoint | producer | false | boolean | If the bridgeEndpoint is true the producer will ignore the message header of rabbitmq.EXCHANGE_NAME and rabbitmq.ROUTING_KEY
      | channelPoolMaxSize | producer | 10 | int | Get maximum number of opened channel in pool
      | channelPoolMaxWait | producer | 1000 | long | Set the maximum number of milliseconds to wait for a channel from the pool
      | guaranteedDeliveries | producer | false | boolean | When true an exception will be thrown when the message cannot be delivered (basic.return) and the message is marked as mandatory. PublisherAcknowledgement will also be activated in this case See also publisher acknowledgements - When will messages be confirmed
      | immediate | producer | false | boolean | This flag tells the server how to react if the message cannot be routed to a queue consumer immediately. If this flag is set the server will return an undeliverable message with a Return method. If this flag is zero the server will queue the message but with no guarantee that it will ever be consumed. If the header is present rabbitmq.IMMEDIATE it will override this option.
      | mandatory | producer | false | boolean | This flag tells the server how to react if the message cannot be routed to a queue. If this flag is set the server will return an unroutable message with a Return method. If this flag is zero the server silently drops the message. If the header is present rabbitmq.MANDATORY it will override this option.
      | publisherAcknowledgements | producer | false | boolean | When true the message will be published with publisher acknowledgements turned on
      | publisherAcknowledgementsTimeout | producer |  | long | The amount of time in milliseconds to wait for a basic.ack response from RabbitMQ server
      | addresses | advanced |  | Address[] | If this option is set camel-rabbitmq will try to create connection based on the setting of option addresses. The addresses value is a string which looks like server1:12345 server2:12345
      | automaticRecoveryEnabled | advanced |  | Boolean | Enables connection automatic recovery (uses connection implementation that performs automatic recovery when connection shutdown is not initiated by the application)
      | clientProperties | advanced |  | Map | Connection client properties (client info used in negotiating with the server)
      | connectionFactory | advanced |  | ConnectionFactory | To use a custom RabbitMQ connection factory. When this option is set all connection options (connectionTimeout requestedChannelMax...) set on URI are not used
      | exchangeArgsConfigurer | advanced |  | ArgsConfigurer | Set the configurer for setting the exchange args in Channel.exchangeDeclare
      | networkRecoveryInterval | advanced |  | Integer | Network recovery interval in milliseconds (interval used when recovering from network failure)
      | queueArgsConfigurer | advanced |  | ArgsConfigurer | Set the configurer for setting the queue args in Channel.queueDeclare
      | requestedChannelMax | advanced | 0 | int | Connection requested channel max (max number of channels offered)
      | requestedFrameMax | advanced | 0 | int | Connection requested frame max (max size of frame offered)
      | requestedHeartbeat | advanced | 60 | int | Connection requested heartbeat (heart-beat in seconds offered)
      | requestTimeout | advanced |  | long | Set timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds)
      | requestTimeoutCheckerInterval | advanced |  | long | Set requestTimeoutCheckerInterval for inOut exchange
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | topologyRecoveryEnabled | advanced |  | Boolean | Enables connection topology recovery (should topology recovery be performed)
      | transferException | advanced | false | boolean | When true and an inOut Exchange failed on the consumer side send the caused Exception back in the response
      | password | security | guest | String | Password for authenticated access
      | sslProtocol | security |  | String | Enables SSL on connection accepted value are true TLS and 'SSLv3
      | trustManager | security |  | TrustManager | Configure SSL trust manager SSL should be enabled for this option to be effective
      | username | security | guest | String | Username in case of authenticated access
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      See
      http://www.rabbitmq.com/releases/rabbitmq-java-client/current-javadoc/com/rabbitmq/client/ConnectionFactory.html[http://www.rabbitmq.com/releases/rabbitmq-java-client/current-javadoc/com/rabbitmq/client/ConnectionFactory.html]
      and the AMQP specification for more information on connection options.

      [[RabbitMQ-Customconnectionfactory]]
      Custom connection factory
      ~~~~~~~~~~~~~~~~~~~~~~~~~

      [source,xml]
      ----------------------------------------------------------------------------------------
      <bean id="customConnectionFactory" class="com.rabbitmq.client.ConnectionFactory">
        <property name="host" value="localhost"/>
        <property name="port" value="5672"/>
        <property name="username" value="camel"/>
        <property name="password" value="bugsbunny"/>
      </bean>
      <camelContext>
        <route>
          <from uri="direct:rabbitMQEx2"/>
          <to uri="rabbitmq://localhost:5672/ex2?connectionFactory=#customConnectionFactory"/>
        </route>
      </camelContext>
      ----------------------------------------------------------------------------------------


      Headers

      The following headers are set on exchanges when consuming messages.

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

      |`rabbitmq.ROUTING_KEY` |The routing key that was used to receive the message, or the routing key
      that will be used when producing a message

      |`rabbitmq.EXCHANGE_NAME` |The exchange the message was received from

      |`rabbitmq.DELIVERY_TAG` |The rabbitmq delivery tag of the received message

      |`rabbitmq.REQUEUE` |*Camel 2.14.2:* This is used by the consumer to control rejection of the
      message. When the consumer is complete processing the exchange, and if
      the exchange failed, then the consumer is going to reject the message
      from the RabbitMQ broker. The value of this header controls this
      behavior. If the value is false (by default) then the message is
      discarded/dead-lettered. If the value is true, then the message is
      re-queued.??
      |=======================================================================

      The following headers are used by the producer. If these are set on the
      camel exchange then they will be set on the RabbitMQ message.

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

      |`rabbitmq.ROUTING_KEY` |The routing key that will be used when sending the message

      |`rabbitmq.EXCHANGE_NAME` |The exchange the message was received from, or sent to

      |`rabbitmq.CONTENT_TYPE` |The contentType to set on the RabbitMQ message

      |`rabbitmq.PRIORITY` |The priority header to set on the RabbitMQ message

      |`rabbitmq.CORRELATIONID` |The correlationId to set on the RabbitMQ message

      |`rabbitmq.MESSAGE_ID` |The message id to set on the RabbitMQ message

      |`rabbitmq.DELIVERY_MODE` |If the message should be persistent or not

      |`rabbitmq.USERID` |The userId to set on the RabbitMQ message

      |`rabbitmq.CLUSTERID` |The clusterId to set on the RabbitMQ message

      |`rabbitmq.REPLY_TO` |The replyTo to set on the RabbitMQ message

      |`rabbitmq.CONTENT_ENCODING` |The contentEncoding to set on the RabbitMQ message

      |`rabbitmq.TYPE` |The type to set on the RabbitMQ message

      |`rabbitmq.EXPIRATION` |The expiration to set on the RabbitMQ message

      |`rabbitmq.TIMESTAMP` |The timestamp to set on the RabbitMQ message

      |`rabbitmq.APP_ID` |The appId to set on the RabbitMQ message
      |=======================================================================

      Headers are set by the consumer once the message is received. The
      producer will also set the headers for downstream processors once the
      exchange has taken place. Any headers set prior to production that the
      producer sets will be overriden.

      [[RabbitMQ-MessageBody]]
      Message Body
      ^^^^^^^^^^^^

      The component will use the camel exchange in body as the rabbit mq
      message body. The camel exchange in object must be convertible to a byte
      array. Otherwise the producer will throw an exception of unsupported
      body type.

      [[RabbitMQ-Samples]]
      Samples
      ^^^^^^^

      To receive messages from a queue that is bound to an exchange A with the
      routing key B,

      [source,java]
      -------------------------------------------
      from("rabbitmq://localhost/A?routingKey=B")
      -------------------------------------------

      To receive messages from a queue with a single thread with auto
      acknowledge disabled.

      [source,java]
      --------------------------------------------------------------------------
      from("rabbitmq://localhost/A?routingKey=B&threadPoolSize=1&autoAck=false")
      --------------------------------------------------------------------------

      To send messages to an exchange called C

      [source,java]
      -------------------------------
      ...to("rabbitmq://localhost/B")
      -------------------------------

      [[RabbitMQ-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ref
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ref
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ref
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ref
          spec:
            containers:
            - image: fabric8/connector-ref:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ref
        syntax: ref:name
        title: Ref
        description: The ref component is used for lookup of existing endpoints bound in the Registry.
        label: core,endpoint
        deprecated: false
        async: false
        javaType: org.apache.camel.component.ref.RefComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of endpoint to lookup in the registry.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Ref-RefComponent]]\nRef Component\n~~~~~~~~~~~~~\n\nThe\
      \ *ref:* component is used for lookup of existing endpoints bound in\nthe link:registry.html[Registry].\n\
      \n[[Ref-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n----------------------\n\
      ref:someName[?options]\n----------------------\n\nWhere *someName* is the name\
      \ of an endpoint in the\nlink:registry.html[Registry] (usually, but not always,\
      \ the Spring\nregistry). If you are using the Spring registry, `someName` would\
      \ be the\nbean ID of an endpoint in the Spring registry.\n\n[[Ref-Options]]\n\
      Ref Options\n^^^^^^^^^^^\n\n// component options: START\nThe Ref component has\
      \ no options.\n// component options: END\n\n\n// endpoint options: START\nThe\
      \ Ref component supports 5 endpoint options which are listed below:\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| name | common |  | String\
      \ | *Required* Name of endpoint to lookup in the registry.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern\
      \ when creating an exchange.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[Ref-Runtimelookup]]\nRuntime lookup\n\
      ^^^^^^^^^^^^^^\n\nThis component can be used when you need dynamic discovery\
      \ of endpoints\nin the link:registry.html[Registry] where you can compute the\
      \ URI at\nruntime. Then you can look up the endpoint using the following code:\n\
      \n[source,java]\n-------------------------------------------------------------------\n\
      \   // lookup the endpoint\n   String myEndpointRef = \"bigspenderOrder\";\n\
      \   Endpoint endpoint = context.getEndpoint(\"ref:\" + myEndpointRef);\n   \n\
      \   Producer producer = endpoint.createProducer();\n   Exchange exchange = producer.createExchange();\n\
      \   exchange.getIn().setBody(payloadToSend);\n   // send the exchange\n   producer.process(exchange);\n\
      \   ...\n-------------------------------------------------------------------\n\
      \nAnd you could have a list of endpoints defined in the\nlink:registry.html[Registry]\
      \ such as:\n\n[source,xml]\n----------------------------------------------------------------------------------\n\
      \  <camelContext id=\"camel\" xmlns=\"http://activemq.apache.org/camel/schema/spring\"\
      >\n      <endpoint id=\"normalOrder\" uri=\"activemq:order.slow\"/>\n      <endpoint\
      \ id=\"bigspenderOrder\" uri=\"activemq:order.high\"/>\n      ...\n  </camelContext>\n\
      ----------------------------------------------------------------------------------\n\
      \n[[Ref-Sample]]\nSample\n^^^^^^\n\nIn the sample below we use the `ref:` in\
      \ the URI to reference the\nendpoint with the spring ID, `endpoint2`:\n\nYou\
      \ could, of course, have used the `ref` attribute instead:\n\n[source,xml]\n\
      ---------------------------\n      <to ref=\"endpoint2\"/>\n---------------------------\n\
      \nWhich is the more common way to write it.\n\n[[Ref-SeeAlso]]\nSee Also\n^^^^^^^^\n\
      \n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-rest
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: rest
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: rest
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: rest
          spec:
            containers:
            - image: fabric8/connector-rest:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: rest
        syntax: rest:method:path:uriTemplate
        title: REST
        description: The rest component is used for either hosting REST services (consumer) or calling external REST services (producer).
        label: core,rest
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.rest.RestComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        componentName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Camel Rest component to use for the REST transport such as restlet spark-rest. If no component has been explicit configured then Camel will lookup if there is a Camel component that integrates with the Rest DSL or if a org.apache.camel.spi.RestConsumerFactory (consumer) or org.apache.camel.spi.RestProducerFactory (producer) is registered in the registry. If either one is found then that is being used.
        apiDoc:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The swagger api doc resource to use. The resource is loaded from classpath by default and must be in JSon format.
        host:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Host and port of HTTP service to use (override host in swagger schema)
      properties:
        method:
          kind: path
          group: common
          label: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - get
          - post
          - put
          - delete
          - patch
          - head
          - trace
          - connect
          - options
          deprecated: false
          secret: false
          description: HTTP method to use.
        path:
          kind: path
          group: common
          label: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The base path
        uriTemplate:
          kind: path
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The uri template
        componentName:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Camel Rest component to use for the REST transport such as restlet spark-rest. If no component has been explicit configured then Camel will lookup if there is a Camel component that integrates with the Rest DSL or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry. If either one is found then that is being used.
        consumes:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Media type such as: ''text/xml'' or ''application/json'' this REST
            service accepts. By default we accept all kinds of types.'
        inType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To declare the incoming POJO binding type as a FQN class name
        outType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To declare the outgoing POJO binding type as a FQN class name
        produces:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Media type such as: ''text/xml'' or ''application/json'' this REST
            service returns.'
        routeId:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the route this REST services creates
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        description:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Human description to document this REST service
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        apiDoc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The swagger api doc resource to use. The resource is loaded from classpath by default and must be in JSon format.
        host:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Host and port of HTTP service to use (override host in swagger schema)
        queryParameters:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          multiValue: true
          deprecated: false
          secret: false
          description: Query parameters for the HTTP service to call
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Rest-RestComponent]]
      Rest Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The rest component allows to define REST endpoints (consumer) using the
      link:rest-dsl.html[Rest DSL] and plugin to other Camel components as the
      REST transport.

      From Camel 2.18 onwards the rest component can also be used as a client (producer) to call REST services.

      [[Rest-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------------------
        rest://method:path[:uriTemplate]?[options]
      --------------------------------------------

      [[Rest-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      // component options: START
      The REST component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | componentName | String | The Camel Rest component to use for the REST transport such as restlet spark-rest. If no component has been explicit configured then Camel will lookup if there is a Camel component that integrates with the Rest DSL or if a org.apache.camel.spi.RestConsumerFactory (consumer) or org.apache.camel.spi.RestProducerFactory (producer) is registered in the registry. If either one is found then that is being used.
      | apiDoc | String | The swagger api doc resource to use. The resource is loaded from classpath by default and must be in JSon format.
      | host | String | Host and port of HTTP service to use (override host in swagger schema)
      |=======================================================================
      {% endraw %}
      // component options: END

      // endpoint options: START
      The REST component supports 17 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | method | common |  | String | *Required* HTTP method to use.
      | path | common |  | String | *Required* The base path
      | uriTemplate | common |  | String | The uri template
      | componentName | common |  | String | The Camel Rest component to use for the REST transport such as restlet spark-rest. If no component has been explicit configured then Camel will lookup if there is a Camel component that integrates with the Rest DSL or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry. If either one is found then that is being used.
      | consumes | common |  | String | Media type such as: 'text/xml' or 'application/json' this REST service accepts. By default we accept all kinds of types.
      | inType | common |  | String | To declare the incoming POJO binding type as a FQN class name
      | outType | common |  | String | To declare the outgoing POJO binding type as a FQN class name
      | produces | common |  | String | Media type such as: 'text/xml' or 'application/json' this REST service returns.
      | routeId | common |  | String | Name of the route this REST services creates
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | description | consumer |  | String | Human description to document this REST service
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | apiDoc | producer |  | String | The swagger api doc resource to use. The resource is loaded from classpath by default and must be in JSon format.
      | host | producer |  | String | Host and port of HTTP service to use (override host in swagger schema)
      | queryParameters | producer |  | String | Query parameters for the HTTP service to call
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      [[Components-Supported]]
      Supported rest components
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The following components support rest consumer (link:rest-dsl.html[Rest DSL]):

      * camel-coap
      * camel-netty-http
      * camel-netty4-http
      * camel-jetty
      * camel-restlet
      * camel-servlet
      * camel-spark-rest
      * camel-undertow

      The following components support rest producer:

      * camel-http
      * camel-http4
      * camel-netty4-http
      * camel-jetty
      * camel-restlet
      * camel-undertow

      [[Rest-PathanduriTemplatesyntax]]
      Path and uriTemplate syntax
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The path and uriTemplate option is defined using a REST syntax where you
      define the REST context path using support for parameters.??

      TIP:If no uriTemplate is configured then path option works the same way. It
      does not matter if you configure only path or if you configure both
      options. Though configuring both a path and uriTemplate is a more common
      practice with REST.

      The following is a Camel route using a a path only

      [source,java]
      ---------------------------------------
        from("rest:get:hello")
          .transform().constant("Bye World");
      ---------------------------------------

      And the following route uses a parameter which is mapped to a Camel
      header with the key "me".

      [source,java]
      --------------------------------------------
        from("rest:get:hello/{me}")
          .transform().simple("Bye ${header.me}");
      --------------------------------------------

      The following examples have configured a base path as "hello" and then
      have two REST services configured using uriTemplates.

      [source,java]
      ------------------------------------------------
        from("rest:get:hello:/{me}")
          .transform().simple("Hi ${header.me}");
      ??
        from("rest:get:hello:/french/{me}")
          .transform().simple("Bonjour ${header.me}");
      ------------------------------------------------

      [[Rest-Producer]]
      Rest producer examples
      ^^^^^^^^^^^^^^^^^^^^^^

      You can use the rest component to call REST services like any other Camel component.

      For example to call a REST service on using `hello/{me}` you can do

      [source,java]
      --------------------------------------------
        from("direct:start")
          .to("rest:get:hello/{me}");
      --------------------------------------------

      And then the dynamic value `{me}` is mapped to Camel message with the same name.
      So to call this REST service you can send an empty message body and a header as shown:

      [source,java]
      --------------------------------------------
        template.sendBodyAndHeader("direct:start", null, "me", "Donald Duck");
      --------------------------------------------

      The Rest producer needs to know the hostname and port of the REST service, which you can configure
      using the host option as shown:

      [source,java]
      --------------------------------------------
        from("direct:start")
          .to("rest:get:hello/{me}?host=myserver:8080/foo");
      --------------------------------------------

      Instead of using the host option, you can configure the host on the `restConfiguration` as shown:

      [source,java]
      --------------------------------------------
        restConfiguration().host("myserver:8080/foo");

        from("direct:start")
          .to("rest:get:hello/{me}");
      --------------------------------------------

      You can use the `producerComponent` to select which Camel component to use as the HTTP client, for example
      to use http4 you can do:

      [source,java]
      --------------------------------------------
        restConfiguration().host("myserver:8080/foo").producerComponent("http4");

        from("direct:start")
          .to("rest:get:hello/{me}");
      --------------------------------------------


      [[Rest-Producer-Binding]]
      Rest producer binding
      ^^^^^^^^^^^^^^^^^^^^^

      The REST producer supports binding using JSon or XML like the rest-dsl does.

      For example to use jetty with json binding mode turned on you can configure this in the rest configuration:

      [source,java]
      --------------------------------------------
        restConfiguration().component("jetty").host("localhost").port(8080).bindingMode(RestBindingMode.json);

        from("direct:start")
          .to("rest:post:user");
      --------------------------------------------

      Then when calling the REST service using rest producer it will automatic bind any POJOs to json before calling the REST service:

      [source,java]
      --------------------------------------------
        UserPojo user = new UserPojo();
        user.setId(123);
        user.setName("Donald Duck");

        template.sendBody("direct:start", user);
      --------------------------------------------

      In the example above we send a POJO instance `UserPojo` as the message body. And because we have turned on JSon binding
      in the rest configuration, then the POJO will be marshalled from POJO to JSon before calling the REST service.

      However if you want to also perform binding for the response message (eg what the REST service send back as response) you
      would need to configure the `outType` option to specify what is the classname of the POJO to unmarshal from JSon to POJO.

      For example if the REST service returns a JSon payload that binds to `com.foo.MyResponsePojo` you can configure this as shown:

      [source,java]
      --------------------------------------------
        restConfiguration().component("jetty").host("localhost").port(8080).bindingMode(RestBindingMode.json);

        from("direct:start")
          .to("rest:post:user?outType=com.foo.MyResponsePojo");
      --------------------------------------------

      IMPORTANT: You must configure `outType` option if you want POJO binding to happen for the response messages received from calling the REST service.


      [[Rest-Moreexamples]]
      More examples
      ^^^^^^^^^^^^^

      See??link:rest-dsl.html[Rest DSL]??which offers more examples and how you
      can use the Rest DSL to define those in a nicer RESTful way.

      There is a *camel-example-servlet-rest-tomcat* example in the Apache
      Camel distribution, that demonstrates how to use the
      link:rest-dsl.html[Rest DSL] with link:servlet.html[SERVLET]??as
      transport??that can be deployed on Apache Tomcat, or similar web
      containers.

      [[Rest-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:rest-dsl.html[Rest DSL]
      * link:servlet.html[SERVLET]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-rest-api
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: rest-api
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: rest-api
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: rest-api
          spec:
            containers:
            - image: fabric8/connector-rest-api:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: rest-api
        syntax: rest-api:path/contextIdPattern
        title: REST API
        description: The rest-api component is used for providing Swagger API of the REST services which has been defined using the rest-dsl in Camel.
        label: core,rest
        deprecated: false
        async: false
        consumerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.rest.RestApiComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        path:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The base path
        contextIdPattern:
          kind: path
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Optional CamelContext id pattern to only allow Rest APIs from rest services within CamelContext's which name matches the pattern.
        apiComponentName:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Camel Rest API component to use for generating the API of the REST services such as swagger.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        componentName:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Camel Rest component to use for the REST transport such as restlet spark-rest. If no component has been explicit configured then Camel will lookup if there is a Camel component that integrates with the Rest DSL or if a org.apache.camel.spi.RestConsumerFactory is registered in the registry. If either one is found then that is being used.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[RestDSL-RestDSL]]\nRest DSL\n~~~~~~~~\n\n*Available as\
      \ of Camel 2.14*\n\nApache Camel offers a REST styled DSL which can be used\
      \ with Java or\nXML. The intention is to allow end users to define REST services\
      \ using a\nREST style with verbs such as get, post, delete etc.\n\n[[RestDSL-Howitworks]]\n\
      How it works\n++++++++++++\n\nThe Rest DSL is a facade that builds link:rest.html[Rest]??endpoints\
      \ as\nconsumers for Camel routes. The actual REST transport is leveraged by\n\
      using Camel REST components such\nas??link:restlet.html[Restlet],??link:spark-rest.html[Spark-rest],\
      \ and\nothers that has native REST integration.\n\n[[RestDSL-ComponentssupportingRestDSL]]\n\
      Components supporting Rest DSL\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe following\
      \ Camel components supports the Rest DSL. See the bottom of\nthis page for how\
      \ to integrate a component with the Rest DSL.\n\n* camel-coap\n* link:netty-http.html[camel-netty-http]??(also\n\
      supports??link:swagger-java.html[Swagger Java])\n* link:netty4-http.html[camel-netty4-http]??(also\n\
      supports??link:swagger-java.html[Swagger Java])\n* link:jetty.html[camel-jetty]??(also\n\
      supports??link:swagger-java.html[Swagger Java])\n* link:restlet.html[camel-restlet]??(also\n\
      supports??link:swagger-java.html[Swagger Java])\n* link:servlet.html[camel-servlet]??(also\n\
      supports??link:swagger-java.html[Swagger Java])\n* link:spark-rest.html[camel-spark-rest]??(also\n\
      supports??link:swagger-java.html[Swagger Java]??from Camel 2.17 onwards)\n*\
      \ link:undertow.html[camel-undertow]??(also\nsupports??link:swagger-java.html[Swagger\
      \ Java]??from Camel 2.17 onwards)\n\n[[RestDSL-RestDSLwithJava]]\nRest DSL with\
      \ Java\n^^^^^^^^^^^^^^^^^^\n\nTo use the Rest DSL in Java then just do as with\
      \ regular Camel routes by\nextending the??`RouteBuilder` and define the routes\
      \ in the??`configure`\nmethod.\n\nA simple REST service can be define as follows,\
      \ where we use rest() to\ndefine the services as shown below:\n\n[source,java]\n\
      ------------------------------------------------------------------------------\n\
      \    protected RouteBuilder createRouteBuilder() throws Exception {\n      \
      \  return new RouteBuilder() {\n            @Override\n            public void\
      \ configure() throws Exception {\n                rest(\"/say\")\n         \
      \           .get(\"/hello\").to(\"direct:hello\")\n                    .get(\"\
      /bye\").consumes(\"application/json\").to(\"direct:bye\")\n                \
      \    .post(\"/bye\").to(\"mock:update\");\n\n                from(\"direct:hello\"\
      )\n                    .transform().constant(\"Hello World\");\n           \
      \     from(\"direct:bye\")\n                    .transform().constant(\"Bye\
      \ World\");\n            }\n        };\n    }\n------------------------------------------------------------------------------\n\
      \n??\n\nThis defines a REST service with the following url mappings:\n\n[width=\"\
      100%\",cols=\"25%,25%,25%,25%\",options=\"header\",]\n|=======================================================================\n\
      |Base Path |Uri template |Verb |Consumes\n\n|/say |/hello |get |_all_\n\n|/say\
      \ |/bye |get |application/json\n\n|/say |/bye |post |_all_\n|=======================================================================\n\
      \nNotice that in the REST service we route directly to a Camel endpoint\nusing\
      \ the to(). This is because the Rest DSL has a short-hand for\nrouting directly\
      \ to an endpoint using to(). An alternative is to embed a\nCamel route directly\
      \ using route() - there is such an example further\nbelow.\n\n[[RestDSL-RestDSLwithXML]]\n\
      Rest DSL with XML\n^^^^^^^^^^^^^^^^^\n\nThe REST DSL supports the XML DSL also\
      \ using either Spring or Blueprint.\nThe example above can be define in XML\
      \ as shown below:\n\n[source,java]\n--------------------------------------------------------------\n\
      \  <camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n    <rest\
      \ path=\"/say\">\n      <get uri=\"/hello\">\n        <to uri=\"direct:hello\"\
      />\n      </get>\n      <get uri=\"/bye\" consumes=\"application/json\">\n \
      \       <to uri=\"direct:bye\"/>\n      </get>\n      <post uri=\"/bye\">\n\
      \        <to uri=\"mock:update\"/>\n      </post>\n    </rest>\n    <route>\n\
      \      <from uri=\"direct:hello\"/>\n      <transform>\n        <constant>Hello\
      \ World</constant>\n      </transform>\n    </route>\n    <route>\n      <from\
      \ uri=\"direct:bye\"/>\n      <transform>\n        <constant>Bye World</constant>\n\
      \      </transform>\n    </route>\n  </camelContext>\n--------------------------------------------------------------\n\
      \n??\n\n[[RestDSL-Usingbasepath]]\nUsing base path\n^^^^^^^^^^^^^^^\n\nThe REST\
      \ DSL allows to define base path to make the DSL a bit more DRY.\nFor example\
      \ to define a customer path, we can set the base path in\nrest(\"/customer\"\
      ) and then provide the uri templates in the verbs, as\nshown below:\n\n[source,java]\n\
      -------------------------------------------------------\n  rest(\"/customers/\"\
      )\n      .get(\"/{id}\").to(\"direct:customerDetail\")\n      .get(\"/{id}/orders\"\
      ).to(\"direct:customerOrders\")\n      .post(\"/neworder\").to(\"direct:customerNewOrder\"\
      );\n-------------------------------------------------------\n\n??\n\nAnd using\
      \ XML DSL it becomes:\n\n[source,java]\n-------------------------------------------\n\
      \    <rest path=\"/customers/\">\n      <get uri=\"/{id}\">\n        <to uri=\"\
      direct:customerDetail\"/>\n      </get>\n      <get uri=\"/{id}/orders\">\n\
      \        <to uri=\"direct:customerOrders\"/>\n      </get>\n      <post uri=\"\
      /neworder\">\n        <to uri=\"direct:customerNewOrder\"/>\n      </post>\n\
      \    </rest>\n-------------------------------------------\n\nTIP:The REST DSL\
      \ will take care of duplicate path separators when using base\npath and uri\
      \ templates. In the example above the rest base path ends\nwith a slash ( /\
      \ ) and the verb starts with a slash ( / ). But Apache\nCamel will take care\
      \ of this and remove the duplicated slash.\n\nIt is not required to use both\
      \ base path and uri templates. You can omit\nthe bast path and define the base\
      \ path and uri template in the verbs\nonly. The example above can be defined\
      \ as:\n\n[source,java]\n-------------------------------------------\n    <rest>\n\
      \      <get uri=\"/customers/{id}\">\n        <to uri=\"direct:customerDetail\"\
      />\n      </get>\n      <get uri=\"/customers/{id}/orders\">\n        <to uri=\"\
      direct:customerOrders\"/>\n      </get>\n      <post uri=\"/customers/neworder\"\
      >\n        <to uri=\"direct:customerNewOrder\"/>\n      </post>\n    </rest>\n\
      -------------------------------------------\n\n[[RestDSL-UsingDynamicTo]]\n\
      Using Dynamic To\n^^^^^^^^^^^^^^^^\n\n*Available as of Camel 2.16*\n\nThe??link:rest-dsl.html[Rest\
      \ DSL] supports the new .toD <toD> as dynamic\nto in the rest-dsl. For example\
      \ to do a request/reply\nover??link:jms.html[JMS] where the queue name is dynamic\
      \ defined\n\n[source,xml]\n-------------------------------------------------------------------------\n\
      \ public void configure() throws Exception {\n   rest(\"/say\")\n     .get(\"\
      /hello/{language}\").toD(\"jms:queue:hello-${header.language}\");\n}\n-------------------------------------------------------------------------\n\
      \n[[RestDSL-AndinXMLDSL]]\nAnd in XML DSL\n^^^^^^^^^^^^^^\n\n[source,xml]\n\
      ---------------------------------------------------\n<rest uri=\"/say\">\n \
      \ <get uri=\"/hello//{language}\">\n    <toD uri=\"jms:queue:hello-${header.language}\"\
      />\n  </get>\n<rest>\n---------------------------------------------------\n\n\
      ??\n\nSee more details at??link:message-endpoint.html[Message Endpoint] about\n\
      the dynamic to, and what syntax it supports. By default it uses\nthe??link:simple.html[Simple]\
      \ language, but it has more power than so.\n\n[[RestDSL-EmbeddingCamelroutes]]\n\
      Embedding Camel routes\n^^^^^^^^^^^^^^^^^^^^^^\n\nEach of the rest service becomes\
      \ a Camel route,??so in the first example\nwe have 2 x get and 1 x post REST\
      \ service, which each become a Camel\nroute. And we have 2 regular Camel routes,\
      \ meaning we have 3 + 2 = 5\nroutes in total.??\n\nThere are two route modes\
      \ with the Rest DSL\n\n* mini using a singular to\n* embedding a Camel route\
      \ using route??\n\nThe first example is using the former with a singular to.\
      \ And that is\nwhy we end up with 3 + 2 = 5 total routes.\n\nThe same example\
      \ could use embedded Camel routes, which is shown below:\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------------------------\n\
      \    protected RouteBuilder createRouteBuilder() throws Exception {\n      \
      \  return new RouteBuilder() {\n            @Override\n            public void\
      \ configure() throws Exception {\n                rest(\"/say/hello\")\n   \
      \                 .get().route().transform().constant(\"Hello World\");\n  \
      \              rest(\"/say/bye\")\n                    .get().consumes(\"application/json\"\
      ).route().transform().constant(\"Bye World\").endRest()\n                  \
      \  .post().to(\"mock:update\");\n        };\n    }\n-----------------------------------------------------------------------------------------------------------\n\
      \nIn the example above, we are embedding routes directly in the rest\nservice\
      \ using .route(). Notice we need to use .endRest() to tell Camel\nwhere the\
      \ route ends, so we can??_go back_ to the Rest DSL and continue\ndefining REST\
      \ services.\n\nTIP:*Configuring route options*\n\nIn the embedded route you\
      \ can configure the route settings such as\nrouteId, autoStartup and various\
      \ other options you can set on routes\ntoday.\n---------------------------------------------------------------------------------------------\n\
      .get().route().routeId(\"myRestRoute\").autoStartup(false).transform().constant(\"\
      Hello World\");\n---------------------------------------------------------------------------------------------\n\
      \n\n[[RestDSL-ManagingRestservices]]\nManaging Rest services\n^^^^^^^^^^^^^^^^^^^^^^\n\
      \nEach of the rest service becomes a Camel route, so in the first example\n\
      we have 2 x get and 1 x post REST service, which each become a Camel\nroute.\
      \ This makes it??_the same_ from Camel to manage and run these\nservices - as\
      \ they are just Camel routes. This means any tooling and API\ntoday that deals\
      \ with Camel routes, also work with the REST services.\n\nThis means you can\
      \ use JMX to stop/start routes, and also get the JMX\nmetrics about the routes,\
      \ such as number of message processed, and their\nperformance statistics.\n\n\
      There is also a Rest Registry JMX MBean that contains a registry of all\nREST\
      \ services which has been defined.??\n\n[[RestDSL-BindingtoPOJOsusing]]\nBinding\
      \ to POJOs using\n^^^^^^^^^^^^^^^^^^^^^^\n\nThe Rest DSL supports automatic\
      \ binding json/xml contents to/from POJOs\nusing Camels??link:data-format.html[Data\
      \ Format]. By default the binding\nmode is off, meaning there is no automatic\
      \ binding happening for\nincoming and outgoing messages.\n\nYou may want to\
      \ use binding if you develop POJOs that maps to your REST\nservices request\
      \ and response types. This allows you as a developer to\nwork with the POJOs\
      \ in Java code.\n\nThe binding modes are:\n\n[width=\"100%\",cols=\"10%,90%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Binding Mode |Description\n\n|off |Binding is turned off. This is the default\
      \ option.\n\n|auto |Binding is enabled and Camel is relaxed and support json,\
      \ xml or both if\nthe needed data formats are included in the classpath. Notice\
      \ that if\nfor example `camel-jaxb` is not on the classpath, then XML binding\
      \ is\nnot enabled.\n\n|json |Binding to/from json is enabled, and requires a\
      \ json capabile data\nformat on the classpath. By default Camel will use `json-jackson`\
      \ as the\ndata format. See the INFO box below for more details.\n\n|xml |Binding\
      \ to/from xml is enabled, and requires `camel-jaxb` on the\nclasspath. See the\
      \ INFO box below for more details.\n\n|json_xml |Biding to/from json and xml\
      \ is enabled and requires both data formats to\nbe on the classpath. See the\
      \ INFO box below for more details.\n|=======================================================================\n\
      \nTIP:From *Camel 2.14.1* onwards when using camel-jaxb for xml bindings, then\n\
      you can use the option `mustBeJAXBElement` to relax the output message\nbody\
      \ must be a class with JAXB annotations. You can use this in\nsituations where\
      \ the message body is already in XML format, and you want\nto use the message\
      \ body as-is as the output type. If that is the case,\nthen set the dataFormatProperty\
      \ option `mustBeJAXBElement` to `false`\nvalue.\n\nINFO:From??*Camel 2.16.3*??onwards\
      \ the binding from POJO to JSon/JAXB will only\nhappen if the??`content-type`??header\
      \ includes the\nword??`json`??or??`xml`??representatively. This allows you to\
      \ specify a\ncustom content-type if the message body should not attempt to be\n\
      marshalled using the binding. For example if the message body is a\ncustom binary\
      \ payload etc.\n\nTo use binding you must include the necessary data formats\
      \ on the\nclasspath, such as??`camel-jaxb` and/or??`camel-jackson`. And then\
      \ enable\nthe binding mode. You can configure the binding mode globally on the\n\
      rest configuration, and then override per rest service as well.\n\nTo enable\
      \ binding you configure this in Java DSL as shown below\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------\n\
      restConfiguration().component(\"restlet\").host(\"localhost\").port(portNum).bindingMode(RestBindingMode.auto);\n\
      -----------------------------------------------------------------------------------------------------------\n\
      \nAnd in XML DSL\n\n[source,java]\n---------------------------------------------------------------------------\n\
      \    <restConfiguration bindingMode=\"auto\" component=\"restlet\" port=\"8080\"\
      />\n---------------------------------------------------------------------------\n\
      \n??\n\nWhen binding is enabled Camel will bind the incoming and outgoing\n\
      messages automatic, accordingly to the content type of the message. If\nthe\
      \ message is json, then json binding happens; and so if the message is\nxml\
      \ then xml binding happens. The binding happens for incoming and reply\nmessages.\
      \ The table below summaries what binding occurs for incoming and\nreply messages.??\n\
      \n[width=\"100%\",cols=\"25%,25%,25%,25%\",options=\"header\",]\n|=======================================================================\n\
      |Message Body |Direction |Binding Mode |Message Body\n\n|XML |Incoming |auto,\n\
      xml,  \njson_xml??|POJO\n\n|POJO |Outgoing |auto, \nxml, json_xml??|XML\n\n\
      |JSON |Incoming |auto,\njson,\njson_xml??|POJO\n\n|POJO |Outgoing |auto,\njson,\
      \ \njson_xml??|JSON\n|=======================================================================\n\
      ??\nWhen using binding you must also configure what POJO type to map to.\nThis\
      \ is mandatory for incoming messages, and optional for outgoing.??\n\nFor example\
      \ to map from xml/json to a pojo class??`UserPojo` you do this\nin Java DSL\
      \ as shown below:\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------\n\
      // configure to use restlet on localhost with the given port\n// and enable\
      \ auto binding mode\nrestConfiguration().component(\"restlet\").host(\"localhost\"\
      ).port(portNum).bindingMode(RestBindingMode.auto);\n\n// use the rest DSL to\
      \ define the rest services\nrest(\"/users/\")\n    .post().type(UserPojo.class)\n\
      \        .to(\"direct:newUser\");\n-----------------------------------------------------------------------------------------------------------\n\
      \nNotice we use??`type` to define the incoming type. We can optionally\ndefine\
      \ an outgoing type (which can be a good idea, to make it known from\nthe DSL\
      \ and also for tooling and JMX APIs to know both the incoming and\noutgoing\
      \ types of the REST services.). To define the outgoing type, we\nuse??`outType`\
      \ as shown below:\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------\n\
      // configure to use restlet on localhost with the given port\n// and enable\
      \ auto binding mode\nrestConfiguration().component(\"restlet\").host(\"localhost\"\
      ).port(portNum).bindingMode(RestBindingMode.auto);\n\n// use the rest DSL to\
      \ define the rest services\nrest(\"/users/\")\n    .post().type(UserPojo.class).outType(CountryPojo.class)\n\
      \        .to(\"direct:newUser\");\n-----------------------------------------------------------------------------------------------------------\n\
      \nThe??`UserPojo` is just a plain pojo with getter/setter as shown:\n\n[source,java]\n\
      --------------------------------------\npublic class UserPojo {\n    private\
      \ int id;\n    private String name;\n    public int getId() {\n        return\
      \ id;\n    }\n    public void setId(int id) {\n        this.id = id;\n    }\n\
      \    public String getName() {\n        return name;\n    }\n    public void\
      \ setName(String name) {\n        this.name = name;\n    }\n}\n--------------------------------------\n\
      \nThe??`UserPojo` only supports json, as XML requires to use JAXB\nannotations,\
      \ so we can add those annotations if we want to support XML\nalso\n\n[source,java]\n\
      --------------------------------------\n@XmlRootElement(name = \"user\")\n@XmlAccessorType(XmlAccessType.FIELD)\n\
      public class UserPojo {\n    @XmlAttribute\n    private int id;\n    @XmlAttribute\n\
      \    private String name;\n    public int getId() {\n        return id;\n  \
      \  }\n    public void setId(int id) {\n        this.id = id;\n    }\n    public\
      \ String getName() {\n        return name;\n    }\n    public void setName(String\
      \ name) {\n        this.name = name;\n    }\n}\n--------------------------------------\n\
      \nBy having the JAXB annotations the POJO supports both json and xml\nbindings.\n\
      \n[[RestDSL-ConfiguringRestDSL]]\nConfiguring Rest DSL\n^^^^^^^^^^^^^^^^^^^^\n\
      \n\n// component options: START\nThe REST API component has no options.\n//\
      \ component options: END\n\n\n\n// endpoint options: START\nThe REST API component\
      \ supports 8 endpoint options which are listed below:\n\n{% raw %}\n[width=\"\
      100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| path | consumer |  | String\
      \ | *Required* The base path\n| contextIdPattern | consumer |  | String | Optional\
      \ CamelContext id pattern to only allow Rest APIs from rest services within\
      \ CamelContext's which name matches the pattern.\n| apiComponentName | consumer\
      \ |  | String | The Camel Rest API component to use for generating the API of\
      \ the REST services such as swagger.\n| bridgeErrorHandler | consumer | false\
      \ | boolean | 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/ERROR level and ignored.\n\
      | componentName | consumer |  | String | The Camel Rest component to use for\
      \ the REST transport such as restlet spark-rest. If no component has been explicit\
      \ configured then Camel will lookup if there is a Camel component that integrates\
      \ with the Rest DSL or if a org.apache.camel.spi.RestConsumerFactory is registered\
      \ in the registry. If either one is found then that is being used.\n| exceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern\
      \ when creating an exchange.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\nYou can configure properties on\
      \ these levels.??\n\n* component - Is used to set any options on the Component\
      \ class. You can\nalso configure these directly on the component.\n* endpoint\
      \ - Is used set any option on the endpoint level. Many of the\nCamel components\
      \ has many options you can set on endpoint level.\n* consumer - Is used to set\
      \ any option on the consumer level. Some\ncomponents has consumer options, which\
      \ you can also configure from\nendpoint level by prefixing the option with \"\
      consumer.\"??\n* data format - Is used to set any option on the data formats.\
      \ For\nexample to enable pretty print in the json data format.\n* cors headers\
      \ - If cors is enabled, then custom CORS headers can be\nset. See below for\
      \ the default values which are in used. If a custom\nheader is set then that\
      \ value takes precedence over the default value.\n\nYou can set multiple options\
      \ of the same level, so you can can for\nexample configure 2 component options,\
      \ and 3 endpoint options etc.\n\n??\n\n[[RestDSL-EnablingordisablingJacksonJSONfeatures]]\n\
      Enabling or disabling Jackson JSON features\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.15*\n\nWhen using JSON binding you may want to turn\
      \ specific Jackson features\non or off. For example to disable failing on unknown\
      \ properties (eg json\ninput has a property which cannot be mapped to a POJO)\
      \ then configure\nthis using the dataFormatProperty as shown below:\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------------------------\n\
      restConfiguration().component(\"jetty\").host(\"localhost\").port(getPort()).bindingMode(RestBindingMode.json)\n\
      \   .dataFormatProperty(\"json.in.disableFeatures\", \"FAIL_ON_UNKNOWN_PROPERTIES\"\
      );\n----------------------------------------------------------------------------------------------------------\n\
      \nYou can disable more features by separating the values using comma, such\n\
      as:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------\n\
      \   .dataFormatProperty(\"json.in.disableFeatures\", \"FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE\"\
      );\n------------------------------------------------------------------------------------------------------------------\n\
      \nLikewise you can enable features using the enableFeatures such as:\n\n[source,java]\n\
      -----------------------------------------------------------------------------------------------------------------\n\
      restConfiguration().component(\"jetty\").host(\"localhost\").port(getPort()).bindingMode(RestBindingMode.json)\n\
      \   .dataFormatProperty(\"json.in.disableFeatures\", \"FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE\"\
      )\n   .dataFormatProperty(\"json.in.enableFeatures\", \"FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS\"\
      );\n-----------------------------------------------------------------------------------------------------------------\n\
      \nThe values that can be used for enabling and disabling features on\nJackson\
      \ are the names of the enums from the following three Jackson\nclasses\n\n*\
      \ com.fasterxml.jackson.databind.SerializationFeature\n* com.fasterxml.jackson.databind.DeserializationFeature\n\
      * com.fasterxml.jackson.databind.MapperFeature\n\n??\n\nThe rest configuration\
      \ is of course also possible using XML DSL\n\n[source,xml]\n--------------------------------------------------------------------------------------------------------------------------\n\
      <restConfiguration component=\"jetty\" host=\"localhost\" port=\"9090\" bindingMode=\"\
      json\">\n  <dataFormatProperty key=\"json.in.disableFeatures\" value=\"FAIL_ON_UNKNOWN_PROPERTIES,ADJUST_DATES_TO_CONTEXT_TIME_ZONE\"\
      />\n  <dataFormatProperty key=\"json.in.enableFeatures\" value=\"FAIL_ON_NUMBERS_FOR_ENUMS,USE_BIG_DECIMAL_FOR_FLOATS\"\
      />\n</restConfiguration>\n--------------------------------------------------------------------------------------------------------------------------\n\
      \n??\n\n[[RestDSL-DefaultCORSheaders]]\nDefault CORS headers\n^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.14.1*\n\nIf CORS is enabled then the follow headers\
      \ is in use by default. You can\nconfigure custom CORS headers which takes precedence\
      \ over the default\nvalue.\n\n[width=\"100%\",cols=\"50%,50%\",options=\"header\"\
      ,]\n|=======================================================================\n\
      |Key |Value\n\n|Access-Control-Allow-Origin |*\n\n|Access-Control-Allow-Methods\
      \ |GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH\n\n|Access-Control-Allow-Headers\
      \ |Origin, Accept, X-Requested-With, Content-Type,\nAccess-Control-Request-Method,\
      \ Access-Control-Request-Headers\n\n|Access-Control-Max-Age |3600\n|=======================================================================\n\
      ??\n[[RestDSL-Definingacustomerrormessageas-is]]\nDefining a custom error message\
      \ as-is\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf you want to define custom\
      \ error messages to be sent back to the\nclient with a HTTP error code (eg such\
      \ as 400, 404 etc.) then\nfrom??*Camel 2.14.1* onwards you just set a header\
      \ with the\nkey??`Exchange.HTTP_RESPONSE_CODE` to the error code (must be 300+)\
      \ such\nas 404. And then the message body with any reply message, and optionally\n\
      set the content-type header as well. There is a little example shown\nbelow:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------------------------------------------\n\
      \                restConfiguration().component(\"restlet\").host(\"localhost\"\
      ).port(portNum).bindingMode(RestBindingMode.json);\n                // use the\
      \ rest DSL to define the rest services\n                rest(\"/users/\")\n\
      \                    .post(\"lives\").type(UserPojo.class).outType(CountryPojo.class)\n\
      \                        .route()\n                            .choice()\n \
      \                               .when().simple(\"${body.id} < 100\")\n     \
      \                               .bean(new UserErrorService(), \"idToLowError\"\
      )\n                                .otherwise()\n                          \
      \          .bean(new UserService(), \"livesWhere\");\n---------------------------------------------------------------------------------------------------------------------------\n\
      \nIn this example if the input id is a number that is below 100, we want\nto\
      \ send back a custom error message, using the UserErrorService bean,\nwhich\
      \ is implemented as shown:\n\n[source,java]\n------------------------------------------------------------------------\n\
      public class UserErrorService {\n    public void idToLowError(Exchange exchange)\
      \ {\n        exchange.getIn().setBody(\"id value is too low\");\n        exchange.getIn().setHeader(Exchange.CONTENT_TYPE,\
      \ \"text/plain\");\n        exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE,\
      \ 400);\n    }\n}\n------------------------------------------------------------------------\n\
      \nIn the UserErrorService bean we build our custom error message, and set\n\
      the HTTP error code to 400. This is important, as that tells rest-dsl\nthat\
      \ this is a custom error message, and the message should not use the\noutput\
      \ pojo binding (eg would otherwise bind to CountryPojo).\n\n[[RestDSL-CatchingJsonParserExceptionandreturningacustomerrormessage]]\n\
      Catching JsonParserException and returning a custom error message\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nFrom??*Camel 2.14.1* onwards you return a custom message as-is (see\nprevious\
      \ section). So we can leverage this with Camel error handler to\ncatch JsonParserException,\
      \ handle that exception and build our custom\nresponse message. For example\
      \ to return a HTTP error code 400 with a\nhardcoded message, we can do as shown\
      \ below:\n\n[source,java]\n-------------------------------------------------------------\n\
      onException(JsonParseException.class)\n    .handled(true)\n    .setHeader(Exchange.HTTP_RESPONSE_CODE,\
      \ constant(400))\n    .setHeader(Exchange.CONTENT_TYPE, constant(\"text/plain\"\
      ))\n    .setBody().constant(\"Invalid json data\");\n-------------------------------------------------------------\n\
      \n??\n\n[[RestDSL-ParameterdefaultValues]]\nParameter default Values\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nYou can specify default values for parameters in the rest-dsl, such as\nthe\
      \ verbose parameter below:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------\n\
      \  rest(\"/customers/\")\n      .get(\"/{id}\").to(\"direct:customerDetail\"\
      )\n      .get(\"/{id}/orders\")\n        .param().name(\"verbose\").type(RestParamType.query).defaultValue(\"\
      false\").description(\"Verbose order details\").endParam()\n          .to(\"\
      direct:customerOrders\")\n      .post(\"/neworder\").to(\"direct:customerNewOrder\"\
      );\n--------------------------------------------------------------------------------------------------------------------------------\n\
      \nFrom??*Camel 2.17* onwards then the default value is automatic set as\nheader\
      \ on the incoming Camel??`Message`. So if the call\nthe??`/customers/id/orders`\
      \ do not include a query parameter with\nkey??`verbose` then Camel will now\
      \ include a header with key??`verbose`\nand the value??`false` because it was\
      \ declared as the default value. This\nfunctionality is only applicable for\
      \ query parameters.\n\n[[RestDSL-IntegratingaCamelcomponentwithRestDSL]]\nIntegrating\
      \ a Camel component with Rest DSL\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nAny Apache Camel component can integrate with the Rest DSL if they can\nbe\
      \ used as a REST service (eg as a REST consumer in Camel lingo). To\nintegrate\
      \ with the Rest DSL, then the component should implement\nthe??`org.apache.camel.spi.RestConsumerFactory`.\
      \ The Rest DSL will then\ninvoke the??`createConsumer` method when it setup\
      \ the Camel routes from\nthe defined DSL. The component should then implement\
      \ logic to create a\nCamel consumer that exposes the REST services based on\
      \ the given\nparameters, such as path, verb, and other options. For example\
      \ see the\nsource code for camel-restlet, camel-spark-rest.\n\n[[RestDSL-SwaggerAPI]]\n\
      Swagger API\n^^^^^^^^^^^\n\nThe Rest DSL supports link:swagger-java.html[Swagger\
      \ Java]??by\nthe??`camel-swagger-java` module. See more details at\n??link:swagger-java.html[Swagger]??and\
      \ the??`camel-swagger-java`??example\nfrom the Apache Camel distribution.\n\n\
      From??*Camel 2.16* onwards you can define each parameter fine grained\nwith\
      \ details such as name, description, data type, parameter type and so\non, using\
      \ the <param>. For example to define the id path parameter you\ncan do as shown\
      \ below:\n\n[source,xml]\n---------------------------------------------------------------------------------------\n\
      <!-- this is a rest GET to view an user by the given id -->\n<get uri=\"/{id}\"\
      \ outType=\"org.apache.camel.example.rest.User\">\n  <description>Find user\
      \ by id</description>\n  <param name=\"id\" type=\"path\" description=\"The\
      \ id of the user to get\" dataType=\"int\"/>\n  <to uri=\"bean:userService?method=getUser(${header.id})\"\
      />\n</get>\n---------------------------------------------------------------------------------------\n\
      \nAnd in Java DSL\n\n[source,java]\n------------------------------------------------------------------------------------------------------\n\
      .get(\"/{id}\").description(\"Find user by id\").outType(User.class)\n    .param().name(\"\
      id\").type(path).description(\"The id of the user to get\").dataType(\"int\"\
      ).endParam()\n    .to(\"bean:userService?method=getUser(${header.id})\")\n------------------------------------------------------------------------------------------------------\n\
      \nThe body parameter type requires to use body as well for the name. For\nexample\
      \ a REST PUT operation to create/update an user could be done as:\n\n[source,xml]\n\
      -----------------------------------------------------------------------------\n\
      <!-- this is a rest PUT to create/update an user -->\n<put type=\"org.apache.camel.example.rest.User\"\
      >\n  <description>Updates or create a user</description>\n  <param name=\"body\"\
      \ type=\"body\" description=\"The user to update or create\"/>\n  <to uri=\"\
      bean:userService?method=updateUser\"/>\n</put>\n-----------------------------------------------------------------------------\n\
      \nAnd in Java DSL\n\n[source,java]\n-------------------------------------------------------------------------------------------\n\
      .put().description(\"Updates or create a user\").type(User.class)\n    .param().name(\"\
      body\").type(body).description(\"The user to update or create\").endParam()\n\
      \    .to(\"bean:userService?method=updateUser\")\n-------------------------------------------------------------------------------------------\n\
      \n??\n\nFor an example see the??`examples/camel-example-servlet-rest-tomcat`??of\n\
      the Apache Camel distribution.\n\n[[RestDSL-SeeAlso]]\nSee Also\n^^^^^^^^\n\n\
      * link:dsl.html[DSL]\n* link:rest.html[Rest]\n* link:swagger-java.html[Swagger\
      \ Java]\n* link:spark-rest.html[Spark-rest]\n* link:how-do-i-import-rests-from-other-xml-files.html[How\
      \ do I import\nrests from other XML files]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-restlet
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: restlet
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: restlet
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: restlet
          spec:
            containers:
            - image: fabric8/connector-restlet:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: restlet
        syntax: restlet:protocol:host:port/uriPattern
        title: Restlet
        description: Component for consuming and producing Restful resources using Restlet.
        label: rest
        deprecated: false
        async: true
        lenientProperties: true
        javaType: org.apache.camel.component.restlet.RestletComponent
        groupId: org.apache.camel
        artifactId: camel-restlet
        version: 2.18.1
      componentProperties:
        controllerDaemon:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Indicates if the controller thread should be a daemon (not blocking JVM exit).
        controllerSleepTimeMs:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Time for the controller thread to sleep between each control.
        inboundBufferSize:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The size of the buffer when reading messages.
        maxConnectionsPerHost:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of concurrent connections per host (IP address).
        maxThreads:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum threads that will service requests.
        lowThreads:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Number of worker threads determining when the connector is considered overloaded.
        maxTotalConnections:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of concurrent connections in total.
        minThreads:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Minimum threads waiting to service requests.
        outboundBufferSize:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The size of the buffer when writing messages.
        persistingConnections:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Indicates if connections should be kept alive after a call.
        pipeliningConnections:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Indicates if pipelining connections are supported.
        threadMaxIdleTimeMs:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Time for an idle thread to wait for an operation before being collected.
        useForwardedForHeader:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Lookup the X-Forwarded-For header supported by popular proxies and caches and uses it to populate the Request.getClientAddresses() method result. This information is only safe for intermediary components within your local network. Other addresses could easily be changed by setting a fake header and should not be trusted for serious security checks.
        reuseAddress:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Enable/disable the SO_REUSEADDR socket option. See java.io.ServerSocketreuseAddress property for additional details.
        maxQueued:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of calls that can be queued if there aren't any worker thread available to service them. If the value is '0' then no queue is used and calls are rejected if no worker thread is immediately available. If the value is '-1' then an unbounded queue is used and calls are never rejected.
        disableStreamCache:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Determines whether or not the raw input stream from Restlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Restlet input stream to support reading it multiple times to ensure Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultRestletBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times.
        port:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: To configure the port number for the restlet consumer routes. This allows to configure this once to reuse the same port for these consumers.
        synchronous:
          kind: property
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Whether to use synchronous Restlet Client for the producer. Setting this option to true can yield faster performance as it seems the Restlet synchronous Client works better.
        enabledConverters:
          kind: property
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: A list of converters to enable as full class name or simple class name. All the converters automatically registered are enabled if empty or null
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        protocol:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - http
          - https
          deprecated: false
          secret: false
          description: The protocol to use which is http or https
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hostname of the restlet service
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "80"
          description: The port number of the restlet service
        uriPattern:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The resource pattern such as /customer/id
        restletMethod:
          kind: parameter
          group: common
          type: string
          javaType: org.restlet.data.Method
          enum:
          - ALL
          - CONNECT
          - DELETE
          - GET
          - HEAD
          - OPTIONS
          - PATCH
          - POST
          - PUT
          - TRACE
          deprecated: false
          secret: false
          defaultValue: GET
          description: On a producer endpoint specifies the request method to use. On a consumer endpoint specifies that the endpoint consumes only restletMethod requests.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        restletMethods:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Specify one or more methods separated by commas (e.g. restletMethods=postput)
            to be serviced by a restlet consumer endpoint. If both restletMethod and restletMethods
            options are specified the restletMethod setting is ignored. The possible methods
            are: ALLCONNECTDELETEGETHEADOPTIONSPATCHPOSTPUTTRACE'
        restletUriPatterns:
          kind: parameter
          group: consumer
          label: consumer
          type: array
          javaType: java.util.List<java.lang.String>
          deprecated: false
          secret: false
          description: Specify one ore more URI templates to be serviced by a restlet consumer endpoint using the notation to reference a List in the Camel Registry. If a URI pattern has been defined in the endpoint URI both the URI pattern defined in the endpoint and the restletUriPatterns option will be honored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        connectTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The Client will give up connection if the connection is timeout 0 for unlimited wait.
        socketTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The Client socket receive timeout 0 for unlimited wait.
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to throw exception on a producer failure. If this option is false then the http status code is set as a message header which can be checked if it has an error value.
        autoCloseStream:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to auto close the stream representation as response from calling a REST service using the restlet producer. If the response is streaming and the option streamRepresentation is enabled then you may want to auto close the InputStream from the streaming response to ensure the input stream is closed when the Camel Exchange is done being routed. However if you need to read the stream outside a Camel route you may need to not auto close the stream.
        streamRepresentation:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to support stream representation as response from calling a REST service using the restlet producer. If the response is streaming then this option can be enabled to use an java.io.InputStream as the message body on the Camel Message body. If using this option you may want to enable the autoCloseStream option as well to ensure the input stream is closed when the Camel Exchange is done being routed. However if you need to read the stream outside a Camel route you may need to not auto close the stream.
        disableStreamCache:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Restlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Restlet input stream to support reading it multiple times to ensure Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultRestletBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        restletBinding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.restlet.RestletBinding
          deprecated: false
          secret: false
          description: To use a custom RestletBinding to bind between Restlet and Camel message.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        restletRealm:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          deprecated: false
          secret: false
          description: To configure the security realms of restlet as a map.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
    documentation.adoc: "[[Restlet-RestletComponent]]\nRestlet Component\n~~~~~~~~~~~~~~~~~\n\
      \nThe *Restlet* component provides http://www.restlet.org[Restlet] based\nlink:endpoint.html[endpoints]\
      \ for consuming and producing RESTful\nresources.\n\nMaven users will need to\
      \ add the following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-restlet</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Restlet-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n----------------------------\n\
      restlet:restletUrl[?options]\n----------------------------\n\nFormat of restletUrl:\n\
      \n[source,java]\n--------------------------------------------\nprotocol://hostname[:port][/resourcePattern]\n\
      --------------------------------------------\n\nRestlet promotes decoupling\
      \ of protocol and application concerns. The\nreference implementation of\nhttp://www.noelios.com/products/restlet-engine[Restlet\
      \ Engine] supports\na number of protocols. However, we have tested the HTTP\
      \ protocol only.\nThe default port is port 80. We do not automatically switch\
      \ default port\nbased on the protocol yet.\n\nYou can append query options to\
      \ the URI in the following format,\n`?option=value&option=value&...`\n\n??\n\
      \nINFO: It seems Restlet is case sensitive in understanding headers. For example\n\
      to use content-type, use Content-Type, and for location use Location and\nso\
      \ on.\n\nWARNING: We have received a report about drop in performance in camel-restlet\
      \ in\nCamel 2.14.0 and 2.14.1. We have reported this to the Restlet team in\n\
      https://github.com/restlet/restlet-framework-java/issues/996[issue 996].\nTo\
      \ remedy the issue then from Camel 2.14.2 onwards you can set\nsynchronous=true\
      \ as option on the endpoint uris, Or set it on the\nRestletComponent as a global\
      \ option so all endpoints inherit this\noption.\n\n[[Restlet-Options]]\nOptions\n\
      ^^^^^^^\n\n\n\n// component options: START\nThe Restlet component supports 20\
      \ options which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"\
      2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| controllerDaemon | Boolean | Indicates if\
      \ the controller thread should be a daemon (not blocking JVM exit).\n| controllerSleepTimeMs\
      \ | Integer | Time for the controller thread to sleep between each control.\n\
      | inboundBufferSize | Integer | The size of the buffer when reading messages.\n\
      | maxConnectionsPerHost | Integer | Maximum number of concurrent connections\
      \ per host (IP address).\n| maxThreads | Integer | Maximum threads that will\
      \ service requests.\n| lowThreads | Integer | Number of worker threads determining\
      \ when the connector is considered overloaded.\n| maxTotalConnections | Integer\
      \ | Maximum number of concurrent connections in total.\n| minThreads | Integer\
      \ | Minimum threads waiting to service requests.\n| outboundBufferSize | Integer\
      \ | The size of the buffer when writing messages.\n| persistingConnections |\
      \ Boolean | Indicates if connections should be kept alive after a call.\n| pipeliningConnections\
      \ | Boolean | Indicates if pipelining connections are supported.\n| threadMaxIdleTimeMs\
      \ | Integer | Time for an idle thread to wait for an operation before being\
      \ collected.\n| useForwardedForHeader | Boolean | Lookup the X-Forwarded-For\
      \ header supported by popular proxies and caches and uses it to populate the\
      \ Request.getClientAddresses() method result. This information is only safe\
      \ for intermediary components within your local network. Other addresses could\
      \ easily be changed by setting a fake header and should not be trusted for serious\
      \ security checks.\n| reuseAddress | Boolean | Enable/disable the SO_REUSEADDR\
      \ socket option. See java.io.ServerSocketreuseAddress property for additional\
      \ details.\n| maxQueued | Integer | Maximum number of calls that can be queued\
      \ if there aren't any worker thread available to service them. If the value\
      \ is '0' then no queue is used and calls are rejected if no worker thread is\
      \ immediately available. If the value is '-1' then an unbounded queue is used\
      \ and calls are never rejected.\n| disableStreamCache | boolean | Determines\
      \ whether or not the raw input stream from Restlet is cached or not (Camel will\
      \ read the stream into a in memory/overflow to file Stream caching) cache. By\
      \ default Camel will cache the Restlet input stream to support reading it multiple\
      \ times to ensure Camel can retrieve all data from the stream. However you can\
      \ set this option to true when you for example need to access the raw stream\
      \ such as streaming it directly to a file or other persistent store. DefaultRestletBinding\
      \ will copy the request input stream into a stream cache and put it into message\
      \ body if this option is false to support reading the stream multiple times.\n\
      | port | int | To configure the port number for the restlet consumer routes.\
      \ This allows to configure this once to reuse the same port for these consumers.\n\
      | synchronous | Boolean | Whether to use synchronous Restlet Client for the\
      \ producer. Setting this option to true can yield faster performance as it seems\
      \ the Restlet synchronous Client works better.\n| enabledConverters | List |\
      \ A list of converters to enable as full class name or simple class name. All\
      \ the converters automatically registered are enabled if empty or null\n| headerFilterStrategy\
      \ | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header\
      \ to and from Camel message.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The Restlet component supports 21 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| protocol | common |  |\
      \ String | *Required* The protocol to use which is http or https\n| host | common\
      \ |  | String | *Required* The hostname of the restlet service\n| port | common\
      \ | 80 | int | *Required* The port number of the restlet service\n| uriPattern\
      \ | common |  | String | The resource pattern such as /customer/id\n| restletMethod\
      \ | common | GET | Method | On a producer endpoint specifies the request method\
      \ to use. On a consumer endpoint specifies that the endpoint consumes only restletMethod\
      \ requests.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | restletMethods | consumer |  | String | Specify one or more methods separated\
      \ by commas (e.g. restletMethods=postput) to be serviced by a restlet consumer\
      \ endpoint. If both restletMethod and restletMethods options are specified the\
      \ restletMethod setting is ignored. The possible methods are: ALLCONNECTDELETEGETHEADOPTIONSPATCHPOSTPUTTRACE\n\
      | restletUriPatterns | consumer |  | List | Specify one ore more URI templates\
      \ to be serviced by a restlet consumer endpoint using the notation to reference\
      \ a List in the Camel Registry. If a URI pattern has been defined in the endpoint\
      \ URI both the URI pattern defined in the endpoint and the restletUriPatterns\
      \ option will be honored.\n| exceptionHandler | consumer (advanced) |  | ExceptionHandler\
      \ | To let the consumer use a custom ExceptionHandler. Notice if the option\
      \ bridgeErrorHandler is enabled then this options is not in use. By default\
      \ the consumer will deal with exceptions that will be logged at WARN/ERROR level\
      \ and ignored.\n| exchangePattern | consumer (advanced) |  | ExchangePattern\
      \ | Sets the exchange pattern when the consumer creates an exchange.\n| connectTimeout\
      \ | producer | 30000 | int | The Client will give up connection if the connection\
      \ is timeout 0 for unlimited wait.\n| socketTimeout | producer | 30000 | int\
      \ | The Client socket receive timeout 0 for unlimited wait.\n| throwExceptionOnFailure\
      \ | producer | true | boolean | Whether to throw exception on a producer failure.\
      \ If this option is false then the http status code is set as a message header\
      \ which can be checked if it has an error value.\n| autoCloseStream | producer\
      \ (advanced) | false | boolean | Whether to auto close the stream representation\
      \ as response from calling a REST service using the restlet producer. If the\
      \ response is streaming and the option streamRepresentation is enabled then\
      \ you may want to auto close the InputStream from the streaming response to\
      \ ensure the input stream is closed when the Camel Exchange is done being routed.\
      \ However if you need to read the stream outside a Camel route you may need\
      \ to not auto close the stream.\n| streamRepresentation | producer (advanced)\
      \ | false | boolean | Whether to support stream representation as response from\
      \ calling a REST service using the restlet producer. If the response is streaming\
      \ then this option can be enabled to use an java.io.InputStream as the message\
      \ body on the Camel Message body. If using this option you may want to enable\
      \ the autoCloseStream option as well to ensure the input stream is closed when\
      \ the Camel Exchange is done being routed. However if you need to read the stream\
      \ outside a Camel route you may need to not auto close the stream.\n| disableStreamCache\
      \ | advanced | false | boolean | Determines whether or not the raw input stream\
      \ from Restlet is cached or not (Camel will read the stream into a in memory/overflow\
      \ to file Stream caching) cache. By default Camel will cache the Restlet input\
      \ stream to support reading it multiple times to ensure Camel can retrieve all\
      \ data from the stream. However you can set this option to true when you for\
      \ example need to access the raw stream such as streaming it directly to a file\
      \ or other persistent store. DefaultRestletBinding will copy the request input\
      \ stream into a stream cache and put it into message body if this option is\
      \ false to support reading the stream multiple times.\n| headerFilterStrategy\
      \ | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy\
      \ to filter header to and from Camel message.\n| restletBinding | advanced |\
      \  | RestletBinding | To use a custom RestletBinding to bind between Restlet\
      \ and Camel message.\n| synchronous | advanced | false | boolean | Sets whether\
      \ synchronous processing should be strictly used or Camel is allowed to use\
      \ asynchronous processing (if supported).\n| restletRealm | security |  | Map\
      \ | To configure the security realms of restlet as a map.\n| sslContextParameters\
      \ | security |  | SSLContextParameters | To configure security using SSLContextParameters.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n[[Restlet-MessageHeaders]]\nMessage\
      \ Headers\n^^^^^^^^^^^^^^^\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"\
      header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`Content-Type` |`String` |Specifies the content\
      \ type, which can be set on the OUT message by the\napplication/processor. The\
      \ value is the `content-type` of the response\nmessage. If this header is not\
      \ set, the content type is based on the\nobject type of the OUT message body.\
      \ In Camel 2.3 onward, if the\nContent-Type header is specified in the Camel\
      \ IN message, the value of\nthe header determine the content type for the Restlet\
      \ request message.????\nOtherwise, it is defaulted to \"application/x-www-form-urlencoded'.\
      \ Prior\nto release 2.3, it is not possible to change the request content type\n\
      default.\n\n|`CamelAcceptContentType` |`String` |*Since Camel 2.9.3, 2.10.0:*\
      \ The HTTP Accept request header.\n\n|`CamelHttpMethod` |`String` |The HTTP\
      \ request method. This is set in the IN message header.\n\n|`CamelHttpQuery`\
      \ |`String` |The query string of the request URI. It is set on the IN message\
      \ by\n`DefaultRestletBinding` when the restlet component receives a request.\n\
      \n|`CamelHttpResponseCode` |`String` or `Integer` |The response code can be\
      \ set on the OUT message by the\napplication/processor. The value is the response\
      \ code of the response\nmessage. If this header is not set, the response code\
      \ is set by the\nrestlet runtime engine.\n\n|`CamelHttpUri` |`String` |The HTTP\
      \ request URI. This is set in the IN message header.\n\n|`CamelRestletLogin`\
      \ |`String` |Login name for basic authentication. It is set on the IN message\
      \ by the\napplication and gets filtered before the restlet request header by\n\
      Camel.\n\n|`CamelRestletPassword` |`String` |Password name for basic authentication.\
      \ It is set on the IN message by\nthe application and gets filtered before the\
      \ restlet request header by\nCamel.\n\n|`CamelRestletRequest` |`Request` |*Camel\
      \ 2.8:* The `org.restlet.Request` object which holds all request\ndetails.\n\
      \n|`CamelRestletResponse` |`Response` |*Camel 2.8:* The `org.restlet.Response`\
      \ object. You can use this to\ncreate responses using the API from Restlet.\
      \ See examples below.\n\n|`org.restlet.*` |  |Attributes of a Restlet message\
      \ that get propagated to Camel IN headers.\n\n|`cache-control` |`String` or\
      \ `List<CacheDirective>` |*Camel 2.11:* User can set the cache-control with\
      \ the String value or\nthe List of CacheDirective of Restlet from the camel\
      \ message header.\n|=======================================================================\n\
      \n[[Restlet-MessageBody]]\nMessage Body\n^^^^^^^^^^^^\n\nCamel will store the\
      \ restlet response from the external server on the\nOUT body. All headers from\
      \ the IN message will be copied to the OUT\nmessage, so that headers are preserved\
      \ during routing.\n\n[[Restlet-Samples]]\nSamples\n^^^^^^^\n\n[[Restlet-RestletEndpointwithAuthentication]]\n\
      Restlet Endpoint with Authentication\n++++++++++++++++++++++++++++++++++++\n\
      \nThe following route starts a `restlet` consumer endpoint that listens\nfor\
      \ `POST` requests on http://localhost:8080. The processor creates a\nresponse\
      \ that echoes the request body and the value of the `id` header.\n\nThe `restletRealm`\
      \ setting in the URI query is used to look up a Realm\nMap in the registry.\
      \ If this option is specified, the restlet consumer\nuses the information to\
      \ authenticate user logins. Only _authenticated_\nrequests can access the resources.\
      \ In this sample, we create a Spring\napplication context that serves as a registry.\
      \ The bean ID of the Realm\nMap should match the _restletRealmRef_.\n\nThe following\
      \ sample starts a `direct` endpoint that sends requests to\nthe server on http://localhost:8080\
      \ (that is, our restlet consumer\nendpoint).\n\nThat is all we need. We are\
      \ ready to send a request and try out the\nrestlet component:\n\nThe sample\
      \ client sends a request to the `direct:start-auth` endpoint\nwith the following\
      \ headers:\n\n* `CamelRestletLogin` (used internally by Camel)\n* `CamelRestletPassword`\
      \ (used internally by Camel)\n* `id` (application header)\n\nNOTE: `org.apache.camel.restlet.auth.login`\
      \ and\n`org.apache.camel.restlet.auth.password` will not be propagated as\n\
      Restlet header.\n\nThe sample client gets a response like the following:\n\n\
      [source,text]\n--------------------------------------------------\nreceived\
      \ [<order foo='1'/>] as an order id = 89531\n--------------------------------------------------\n\
      \n[[Restlet-SinglerestletendpointtoservicemultiplemethodsandURItemplates]]\n\
      Single restlet endpoint to service multiple methods and URI templates\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nIt is possible to create a single route to service multiple HTTP methods\n\
      using the `restletMethods` option. This snippet also shows how to\nretrieve\
      \ the request method from the header:\n\nIn addition to servicing multiple methods,\
      \ the next snippet shows how to\ncreate an endpoint that supports multiple URI\
      \ templates using the\n`restletUriPatterns` option. The request URI is available\
      \ in the header\nof the IN message as well. If a URI pattern has been defined\
      \ in the\nendpoint URI (which is not the case in this sample), both the URI\n\
      pattern defined in the endpoint and the `restletUriPatterns` option will\nbe\
      \ honored.\n\nThe `restletUriPatterns=#uriTemplates` option references the\n\
      `List<String>` bean defined in the Spring XML configuration.\n\n[source,xml]\n\
      --------------------------------------------------------\n<util:list id=\"uriTemplates\"\
      >\n    <value>/users/{username}</value>\n    <value>/atom/collection/{id}/component/{cid}</value>\n\
      </util:list>\n--------------------------------------------------------\n\n[[Restlet-UsingRestletAPItopopulateresponse]]\n\
      Using Restlet API to populate response\n++++++++++++++++++++++++++++++++++++++\n\
      \n*Available as of Camel 2.8*\n\nYou may want to use the `org.restlet.Response`\
      \ API to populate the\nresponse. This gives you full access to the Restlet API\
      \ and fine grained\ncontrol of the response. See the route snippet below where\
      \ we generate\nthe response from an inlined Camel link:processor.html[Processor]:\n\
      \n*Generating response using Restlet Response API*\n\n[[Restlet-Configuringmaxthreadsoncomponent]]\n\
      Configuring max threads on component\n++++++++++++++++++++++++++++++++++++\n\
      \nTo configure the max threads options you must do this on the component,\n\
      such as:\n\n[source,xml]\n-------------------------------------------------------------------------------\n\
      <bean id=\"restlet\" class=\"org.apache.camel.component.restlet.RestletComponent\"\
      >\n  <property name=\"maxThreads\" value=\"100\"/>\n</bean>\n-------------------------------------------------------------------------------\n\
      \n[[Restlet-UsingtheRestletservletwithinawebapp]]\nUsing the Restlet servlet\
      \ within a webapp\n+++++++++++++++++++++++++++++++++++++++++\n\n*Available as\
      \ of Camel 2.8* +\n There are\nhttp://www.restlet.org/documentation/2.0/jee/ext/org/restlet/ext/servlet/ServerServlet.html[three\n\
      possible ways] to configure a Restlet application within a servlet\ncontainer\
      \ and using the subclassed SpringServerServlet enables\nconfiguration within\
      \ Camel by injecting the Restlet Component.\n\nUse of the Restlet servlet within\
      \ a servlet container enables routes to\nbe configured with relative paths in\
      \ URIs (removing the restrictions of\nhard-coded absolute URIs) and for the\
      \ hosting servlet container to\nhandle incoming requests (rather than have to\
      \ spawn a separate server\nprocess on a new port).\n\nTo configure, add the\
      \ following to your camel-context.xml;\n\n[source,xml]\n-----------------------------------------------------------------------------------------------\n\
      <camelContext>\n  <route id=\"RS_RestletDemo\">\n    <from uri=\"restlet:/demo/{id}\"\
      \ />\n    <transform>\n      <simple>Request type : ${header.CamelHttpMethod}\
      \ and ID : ${header.id}</simple>\n    </transform>\n  </route> \n</camelContext>\n\
      \n<bean id=\"RestletComponent\" class=\"org.restlet.Component\" />\n\n<bean\
      \ id=\"RestletComponentService\" class=\"org.apache.camel.component.restlet.RestletComponent\"\
      >\n  <constructor-arg index=\"0\">\n    <ref bean=\"RestletComponent\" />\n\
      \  </constructor-arg>\n</bean>\n-----------------------------------------------------------------------------------------------\n\
      \nAnd add this to your web.xml;\n\n[source,xml]\n---------------------------------------------------------------------------\n\
      <!-- Restlet Servlet -->\n<servlet>\n  <servlet-name>RestletServlet</servlet-name>\n\
      \  <servlet-class>org.restlet.ext.spring.SpringServerServlet</servlet-class>\n\
      \  <init-param>\n    <param-name>org.restlet.component</param-name>\n    <param-value>RestletComponent</param-value>\n\
      \  </init-param>\n</servlet>\n\n<servlet-mapping>\n  <servlet-name>RestletServlet</servlet-name>\n\
      \  <url-pattern>/rs/*</url-pattern>\n</servlet-mapping>\n---------------------------------------------------------------------------\n\
      \nYou will then be able to access the deployed route at\nhttp://localhost:8080/mywebapp/rs/demo/1234\
      \ where;\n\nlocalhost:8080 is the server and port of your servlet container\
      \ +\n mywebapp is the name of your deployed webapp +\n Your browser will then\
      \ show the following content;\n\n[source,java]\n----------------------------------\n\
      \"Request type : GET and ID : 1234\"\n----------------------------------\n\n\
      You will need to add dependency on the Spring extension to restlet which\nyou\
      \ can do in your Maven pom.xml file:\n\n[source,xml]\n-------------------------------------------------\n\
      <dependency>\n  <groupId>org.restlet.jee</groupId>\n  <artifactId>org.restlet.ext.spring</artifactId>\n\
      \  <version>${restlet-version}</version>\n</dependency>\n-------------------------------------------------\n\
      \nAnd you would need to add dependency on the restlet maven repository as\n\
      well:\n\n[source,xml]\n--------------------------------------------------\n\
      <repository>  \n   <id>maven-restlet</id>  \n   <name>Public online Restlet\
      \ repository</name>  \n   <url>http://maven.restlet.org</url>  \n</repository>\n\
      --------------------------------------------------\n\n[[Restlet-SeeAlso]]\n\
      See Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-rmi
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: rmi
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: rmi
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: rmi
          spec:
            containers:
            - image: fabric8/connector-rmi:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: rmi
        syntax: rmi:hostname:port/name
        title: RMI
        description: The rmi component is for invoking Java RMI beans from Camel.
        label: messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.rmi.RmiComponent
        groupId: org.apache.camel
        artifactId: camel-rmi
        version: 2.18.1
      componentProperties: {}
      properties:
        hostname:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: localhost
          description: Hostname of RMI server
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name to use when binding to RMI server
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1099"
          description: Port number of RMI server
        method:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: You can set the name of the method to invoke.
        remoteInterfaces:
          kind: parameter
          group: common
          type: array
          javaType: java.util.List<java.lang.Class<?>>
          deprecated: false
          secret: false
          description: To specific the remote interfaces.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[RMI-RMIComponent]]
      RMI Component
      ~~~~~~~~~~~~~

      The *rmi:* component binds link:exchange.html[Exchange]s to the RMI
      protocol (JRMP).

      Since this binding is just using RMI, normal RMI rules still apply
      regarding what methods can be invoked. This component supports only
      Exchanges that carry a method invocation from an interface that extends
      the http://java.sun.com/j2se/1.3/docs/api/java/rmi/Remote.html[Remote]
      interface. All parameters in the method should be either
      http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html[Serializable]
      or `Remote` objects.

      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-rmi</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[RMI-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------------------------------------------------
      rmi://rmi-regisitry-host:rmi-registry-port/registry-path[?options]
      ------------------------------------------------------------------

      For example:

      [source,java]
      ------------------------------------
      rmi://localhost:1099/path/to/service
      ------------------------------------

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

      [[RMI-Options]]
      Options
      ^^^^^^^


      // component options: START
      The RMI component has no options.
      // component options: END



      // endpoint options: START
      The RMI component supports 9 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | hostname | common | localhost | String | Hostname of RMI server
      | name | common |  | String | *Required* Name to use when binding to RMI server
      | port | common | 1099 | int | Port number of RMI server
      | method | common |  | String | You can set the name of the method to invoke.
      | remoteInterfaces | common |  | List | To specific the remote interfaces.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[RMI-Using]]
      Using
      ^^^^^

      To call out to an existing RMI service registered in an RMI registry,
      create a route similar to the following:

      [source,java]
      ------------------------------------------------
      from("pojo:foo").to("rmi://localhost:1099/foo");
      ------------------------------------------------

      To bind an existing camel processor or service in an RMI registry,
      define an RMI endpoint as follows:

      [source,java]
      -------------------------------------------------------------------------
      RmiEndpoint endpoint= (RmiEndpoint) endpoint("rmi://localhost:1099/bar");
      endpoint.setRemoteInterfaces(ISay.class);
      from(endpoint).to("pojo:bar");
      -------------------------------------------------------------------------

      Note that when binding an RMI consumer endpoint, you must specify the
      `Remote` interfaces exposed.

      In XML DSL you can do as follows from *Camel 2.7* onwards:

      [source,xml]
      ------------------------------------------------------------------------------------------------------------------------
          <camel:route>
              <from uri="rmi://localhost:37541/helloServiceBean?remoteInterfaces=org.apache.camel.example.osgi.HelloService"/>
              <to uri="bean:helloServiceBean"/>
          </camel:route>
      ------------------------------------------------------------------------------------------------------------------------

      [[RMI-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-routebox
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: routebox
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: routebox
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: routebox
          spec:
            containers:
            - image: fabric8/connector-routebox:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: routebox
        syntax: routebox:routeboxName
        title: RouteBox
        description: The routebox component allows to send/receive messages between Camel routes in a black box way.
        label: eventbus
        deprecated: true
        async: false
        javaType: org.apache.camel.component.routebox.RouteboxComponent
        groupId: org.apache.camel
        artifactId: camel-routebox
        version: 2.18.1
      componentProperties: {}
      properties:
        routeboxName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Logical name for the routebox (eg like a queue name)
        dispatchMap:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          deprecated: false
          secret: false
          description: A string representing a key in the Camel Registry matching an object value of the type HashMap. The HashMap key should contain strings that can be matched against the value set for the exchange header ROUTE_DISPATCH_KEY. The HashMap value should contain inner route consumer URI's to which requests should be directed.
        dispatchStrategy:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.routebox.strategy.RouteboxDispatchStrategy
          deprecated: false
          secret: false
          description: To use a custom RouteboxDispatchStrategy which allows to use custom dispatching instead of the default.
        forkContext:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to fork and create a new inner CamelContext instead of reusing the same CamelContext.
        innerProtocol:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - direct
          - seda
          deprecated: false
          secret: false
          defaultValue: direct
          description: The Protocol used internally by the Routebox component. Can be Direct or SEDA. The Routebox component currently offers protocols that are JVM bound.
        queueSize:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Create a fixed size queue to receive requests.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        pollInterval:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout used when polling from seda. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
        threads:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "20"
          description: Number of threads to be used by the routebox to receive requests.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        connectionTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "20000"
          description: Timeout in millis used by the producer when sending a message.
        sendToConsumer:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Dictates whether a Producer endpoint sends a request to an external routebox consumer. If the setting is false the Producer creates an embedded inner context and processes requests internally.
        innerContext:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.CamelContext
          deprecated: false
          secret: false
          description: A string representing a key in the Camel Registry matching an object value of the type org.apache.camel.CamelContext. If a CamelContext is not provided by the user a CamelContext is automatically created for deployment of inner routes.
        innerProducerTemplate:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.ProducerTemplate
          deprecated: false
          secret: false
          description: The ProducerTemplate to use by the internal embeded CamelContext
        innerRegistry:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.Registry
          deprecated: false
          secret: false
          description: To use a custom registry for the internal embedded CamelContext.
        routeBuilders:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: A string representing a key in the Camel Registry matching an object value of the type List. If the user does not supply an innerContext pre-primed with inner routes the routeBuilders option must be provided as a non-empty list of RouteBuilders containing inner routes
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[Routebox-RouteboxComponent]]\nRoutebox Component\n~~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.6*\n\n*Routebox subject for change*\n\nThe Routebox\
      \ component will be revisited in upcoming releases to see if\nit can be further\
      \ simplified, be more intuitive and user friendly. The\nrelated link:context.html[Context]\
      \ component may be regardes as the\nsimpler component. This component may be\
      \ @deprecated in favor of\nlink:context.html[Context].\n\nThe *routebox* component\
      \ enables the creation of specialized endpoints\nthat offer encapsulation and\
      \ a strategy based indirection service to a\ncollection of camel routes hosted\
      \ in an automatically created or user\ninjected camel context.\n\nRoutebox endpoints\
      \ are camel endpoints that may be invoked directly on\ncamel routes. The routebox\
      \ endpoint performs the following key functions\n\n* encapsulation - acts as\
      \ a blackbox, hosting a collection of camel\nroutes stored in an inner camel\
      \ context. The inner context is fully\nunder the control of the routebox component\
      \ and is *JVM bound*.\n* strategy based indirection - direct payloads sent to\
      \ the routebox\nendpoint along a camel route to specific inner routes based\
      \ on a user\ndefined internal routing strategy or a dispatch map.\n* exchange\
      \ propagation - forward exchanges modified by the routebox\nendpoint to the\
      \ next segment of the camel route.\n\nThe routebox component supports both consumer\
      \ and producer endpoints.\n\nProducer endpoints are of two flavors\n\n* Producers\
      \ that send or dispatch incoming requests to a external\nroutebox consumer endpoint\n\
      * Producers that directly invoke routes in an internal embedded camel\ncontext\
      \ thereby not sending requests to an external consumer.\n\nMaven users will\
      \ need to add the following dependency to their `pom.xml`\nfor this component:\n\
      \n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-routebox</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Routebox-TheneedforaCamelRouteboxendpoint]]\nThe need for a Camel Routebox\
      \ endpoint\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe routebox component\
      \ is designed to ease integration in complex\nenvironments needing\n\n* a large\
      \ collection of routes and\n* involving a wide set of endpoint technologies\
      \ needing integration in\ndifferent ways\n\nIn such environments, it is often\
      \ necessary to craft an integration\nsolution by creating a sense of layering\
      \ among camel routes effectively\norganizing them into\n\n* Coarse grained or\
      \ higher level routes - aggregated collection of inner\nor lower level routes\
      \ exposed as Routebox endpoints that represent an\nintegration focus area. For\
      \ example\n\n[width=\"100%\",cols=\"50%,50%\",options=\"header\",]\n|=======================================================================\n\
      |Focus Area |Coarse grained Route Examples\n\n|Department Focus |HR routes,\
      \ Sales routes etc\n\n|Supply chain & B2B Focus |Shipping routes, Fulfillment\
      \ routes, 3rd party services etc\n\n|Technology Focus |Database routes, JMS\
      \ routes, Scheduled batch routes etc\n|=======================================================================\n\
      \n* Fine grained routes - routes that execute a singular and specific\nbusiness\
      \ and/or integration pattern.\n\nRequests sent to Routebox endpoints on coarse\
      \ grained routes can then\ndelegate requests to inner fine grained routes to\
      \ achieve a specific\nintegration objective, collect the final inner result,\
      \ and continue to\nprogress to the next step along the coarse-grained route.\n\
      \n[[Routebox-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------\n\
      routebox:routeboxname[?options]\n-------------------------------\n\nYou can\
      \ append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[Routebox-Options]]\nOptions\n^^^^^^^\n\n\n// component options: START\n\
      The RouteBox component has no options.\n// component options: END\n\n\n\n//\
      \ endpoint options: START\nThe RouteBox component supports 18 endpoint options\
      \ which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| routeboxName | common\
      \ |  | String | *Required* Logical name for the routebox (eg like a queue name)\n\
      | dispatchMap | common |  | Map | A string representing a key in the Camel Registry\
      \ matching an object value of the type HashMap. The HashMap key should contain\
      \ strings that can be matched against the value set for the exchange header\
      \ ROUTE_DISPATCH_KEY. The HashMap value should contain inner route consumer\
      \ URI's to which requests should be directed.\n| dispatchStrategy | common |\
      \  | RouteboxDispatchStrategy | To use a custom RouteboxDispatchStrategy which\
      \ allows to use custom dispatching instead of the default.\n| forkContext |\
      \ common | true | boolean | Whether to fork and create a new inner CamelContext\
      \ instead of reusing the same CamelContext.\n| innerProtocol | common | direct\
      \ | String | The Protocol used internally by the Routebox component. Can be\
      \ Direct or SEDA. The Routebox component currently offers protocols that are\
      \ JVM bound.\n| queueSize | common |  | int | Create a fixed size queue to receive\
      \ requests.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | pollInterval | consumer | 1000 | long | The timeout used when polling from\
      \ seda. When a timeout occurs the consumer can check whether it is allowed to\
      \ continue running. Setting a lower value allows the consumer to react more\
      \ quickly upon shutdown.\n| threads | consumer | 20 | int | Number of threads\
      \ to be used by the routebox to receive requests.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| connectionTimeout | producer | 20000 | long | Timeout in millis\
      \ used by the producer when sending a message.\n| sendToConsumer | producer\
      \ | true | boolean | Dictates whether a Producer endpoint sends a request to\
      \ an external routebox consumer. If the setting is false the Producer creates\
      \ an embedded inner context and processes requests internally.\n| innerContext\
      \ | advanced |  | CamelContext | A string representing a key in the Camel Registry\
      \ matching an object value of the type org.apache.camel.CamelContext. If a CamelContext\
      \ is not provided by the user a CamelContext is automatically created for deployment\
      \ of inner routes.\n| innerProducerTemplate | advanced |  | ProducerTemplate\
      \ | The ProducerTemplate to use by the internal embeded CamelContext\n| innerRegistry\
      \ | advanced |  | Registry | To use a custom registry for the internal embedded\
      \ CamelContext.\n| routeBuilders | advanced |  | String | A string representing\
      \ a key in the Camel Registry matching an object value of the type List. If\
      \ the user does not supply an innerContext pre-primed with inner routes the\
      \ routeBuilders option must be provided as a non-empty list of RouteBuilders\
      \ containing inner routes\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[Routebox-SendingReceivingMessagestofromtheroutebox]]\n\
      Sending/Receiving Messages to/from the routebox\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nBefore sending requests it is necessary to properly configure the\nroutebox\
      \ by loading the required URI parameters into the Registry as\nshown below.\
      \ In the case of Spring, if the necessary beans are declared\ncorrectly, the\
      \ registry is automatically populated by Camel.\n\n[[Routebox-Step1:LoadinginnerroutedetailsintotheRegistry]]\n\
      Step 1: Loading inner route details into the Registry\n+++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \n[source,java]\n------------------------------------------------------------------------------------------------------------\n\
      @Override\nprotected JndiRegistry createRegistry() throws Exception {\n    JndiRegistry\
      \ registry = new JndiRegistry(createJndiContext());\n        \n    // Wire the\
      \ routeDefinitions & dispatchStrategy to the outer camelContext where the routebox\
      \ is declared\n    List<RouteBuilder> routes = new ArrayList<RouteBuilder>();\n\
      \    routes.add(new SimpleRouteBuilder());\n    registry.bind(\"registry\",\
      \ createInnerRegistry());\n    registry.bind(\"routes\", routes);\n        \n\
      \    // Wire a dispatch map to registry\n    HashMap<String, String> map = new\
      \ HashMap<String, String>();\n    map.put(\"addToCatalog\", \"seda:addToCatalog\"\
      );\n    map.put(\"findBook\", \"seda:findBook\");\n    registry.bind(\"map\"\
      , map);\n    \n    // Alternatively wiring a dispatch strategy to the registry\n\
      \    registry.bind(\"strategy\", new SimpleRouteDispatchStrategy());\n\n   \
      \ return registry;\n}\n    \nprivate JndiRegistry createInnerRegistry() throws\
      \ Exception {\n    JndiRegistry innerRegistry = new JndiRegistry(createJndiContext());\n\
      \    BookCatalog catalogBean = new BookCatalog();\n    innerRegistry.bind(\"\
      library\", catalogBean);        \n        \n    return innerRegistry;\n}\n...\n\
      CamelContext context = new DefaultCamelContext(createRegistry());\n------------------------------------------------------------------------------------------------------------\n\
      \n[[Routebox-Step2:OptionalyusingaDispatchStrategyinsteadofaDispatchMap]]\n\
      Step 2: Optionaly using a Dispatch Strategy instead of a Dispatch Map\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nUsing a dispatch Strategy involves implementing the interface\n_org.apache.camel.component.routebox.strategy.RouteboxDispatchStrategy_\n\
      as shown in the example below.\n\n[source,java]\n-------------------------------------------------------------------------------------------------------------------------------------------------\n\
      public class SimpleRouteDispatchStrategy implements RouteboxDispatchStrategy\
      \ {\n\n    /* (non-Javadoc)\n     * @see org.apache.camel.component.routebox.strategy.RouteboxDispatchStrategy#selectDestinationUri(java.util.List,\
      \ org.apache.camel.Exchange)\n     */\n    public URI selectDestinationUri(List<URI>\
      \ activeDestinations,\n            Exchange exchange) {\n        URI dispatchDestination\
      \ = null;\n            \n        String operation = exchange.getIn().getHeader(\"\
      ROUTE_DISPATCH_KEY\", String.class);\n        for (URI destination : activeDestinations)\
      \ {\n            if (destination.toASCIIString().equalsIgnoreCase(\"seda:\"\
      \ + operation)) {\n                dispatchDestination = destination;\n    \
      \            break;\n            }\n        }\n            \n        return\
      \ dispatchDestination;\n    }\n}\n-------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Routebox-Step2:Launchingarouteboxconsumer]]\nStep 2: Launching a routebox\
      \ consumer\n+++++++++++++++++++++++++++++++++++++\n\nWhen creating a route consumer,\
      \ note that the # entries in the\nrouteboxUri are matched to the created inner\
      \ registry, routebuilder list\nand dispatchStrategy/dispatchMap in the CamelContext\
      \ Registry. Note that\nall routebuilders and associated routes are launched\
      \ in the routebox\ncreated inner context\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------\n\
      private String routeboxUri = \"routebox:multipleRoutes?innerRegistry=#registry&routeBuilders=#routes&dispatchMap=#map\"\
      ;\n\npublic void testRouteboxRequests() throws Exception {\n    CamelContext\
      \ context = createCamelContext();\n    template = new DefaultProducerTemplate(context);\n\
      \    template.start();        \n     \n    context.addRoutes(new RouteBuilder()\
      \ {\n        public void configure() {\n            from(routeboxUri)\n    \
      \            .to(\"log:Routes operation performed?showAll=true\");\n       \
      \ }\n    });\n    context.start();\n\n    // Now use the ProducerTemplate to\
      \ send the request to the routebox\n    template.requestBodyAndHeader(routeboxUri,\
      \ book, \"ROUTE_DISPATCH_KEY\", \"addToCatalog\");\n}\n----------------------------------------------------------------------------------------------------------------------\n\
      \n[[Routebox-Step3:Usingarouteboxproducer]]\nStep 3: Using a routebox producer\n\
      +++++++++++++++++++++++++++++++++\n\nWhen sending requests to the routebox,\
      \ it is not necessary for producers\ndo not need to know the inner route endpoint\
      \ URI and they can simply\ninvoke the Routebox URI endpoint with a dispatch\
      \ strategy or dispatchMap\nas shown below\n\nIt is necessary to set a special\
      \ exchange Header called\n*ROUTE_DISPATCH_KEY* (optional for Dispatch Strategy)\
      \ with a key that\nmatches a key in the dispatch map so that the request can\
      \ be sent to the\ncorrect inner route\n\n[source,java]\n-----------------------------------------------------------------------------------------------------------\n\
      from(\"direct:sendToStrategyBasedRoutebox\")\n    .to(\"routebox:multipleRoutes?innerRegistry=#registry&routeBuilders=#routes&dispatchStrategy=#strategy\"\
      )\n    .to(\"log:Routes operation performed?showAll=true\");\n\nfrom (\"direct:sendToMapBasedRoutebox\"\
      )\n    .setHeader(\"ROUTE_DISPATCH_KEY\", constant(\"addToCatalog\"))\n    .to(\"\
      routebox:multipleRoutes?innerRegistry=#registry&routeBuilders=#routes&dispatchMap=#map\"\
      )\n    .to(\"log:Routes operation performed?showAll=true\");\n-----------------------------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-rss
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: rss
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: rss
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: rss
          spec:
            containers:
            - image: fabric8/connector-rss:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: rss
        extendsScheme: atom
        syntax: rss:feedUri
        title: RSS
        description: The rss component is used for consuming RSS feeds.
        label: rss
        deprecated: false
        async: false
        consumerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.rss.RssComponent
        groupId: org.apache.camel
        artifactId: camel-rss
        version: 2.18.1
      componentProperties: {}
      properties:
        feedUri:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URI to the feed to poll.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        feedHeader:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to add the feed object as a header
        filter:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to use filtering or not of the entries.
        lastUpdate:
          kind: parameter
          group: consumer
          type: string
          javaType: java.util.Date
          deprecated: false
          secret: false
          description: Sets the timestamp to be used for filtering entries from the atom feeds. This options is only in conjunction with the splitEntries.
        password:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the password to be used for basic authentication when polling from a HTTP feed
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        sortEntries:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to sort entries by published date. Only works when splitEntries = true.
        splitEntries:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether or not entries should be sent individually or whether the entire feed should be sent as a single message
        throttleEntries:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether all entries identified in a single feed poll should be delivered immediately. If true only one entry is processed per consumer.delay. Only applicable when splitEntries = true.
        username:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the username to be used for basic authentication when polling from a HTTP feed
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: "[[RSS-RSSComponent]]\nRSS Component\n~~~~~~~~~~~~~\n\nThe\
      \ *rss:* component is used for polling RSS feeds. Camel will default\npoll the\
      \ feed every 60th seconds.\n\nMaven users will need to add the following dependency\
      \ to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-rss</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n*Note:* The component currently only supports polling (consuming) feeds.\n\
      \nNOTE: Camel-rss internally uses a\nhttp://svn.apache.org/repos/asf/servicemix/smx4/bundles/trunk/rome-1.0/[patched\n\
      version] of http://rometools.github.io/rome/[ROME] hosted on ServiceMix\nto\
      \ solve some OSGi https://issues.apache.org/jira/browse/SMX4-510[class\nloading\
      \ issues].\n\n[[RSS-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n----------\n\
      rss:rssUri\n----------\n\nWhere `rssUri` is the URI to the RSS feed to poll.\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[RSS-Options]]\nOptions\n^^^^^^^\n\n\n// component options: START\nThe RSS\
      \ component has no options.\n// component options: END\n\n\n\n// endpoint options:\
      \ START\nThe RSS component supports 28 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| feedUri | consumer | \
      \ | String | *Required* The URI to the feed to poll.\n| bridgeErrorHandler |\
      \ consumer | false | boolean | 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/ERROR level and ignored.\n| feedHeader | consumer\
      \ | true | boolean | Sets whether to add the feed object as a header\n| filter\
      \ | consumer | true | boolean | Sets whether to use filtering or not of the\
      \ entries.\n| lastUpdate | consumer |  | Date | Sets the timestamp to be used\
      \ for filtering entries from the atom feeds. This options is only in conjunction\
      \ with the splitEntries.\n| password | consumer |  | String | Sets the password\
      \ to be used for basic authentication when polling from a HTTP feed\n| sendEmptyMessageWhenIdle\
      \ | consumer | false | boolean | If the polling consumer did not poll any files\
      \ you can enable this option to send an empty message (no body) instead.\n|\
      \ sortEntries | consumer | false | boolean | Sets whether to sort entries by\
      \ published date. Only works when splitEntries = true.\n| splitEntries | consumer\
      \ | true | boolean | Sets whether or not entries should be sent individually\
      \ or whether the entire feed should be sent as a single message\n| throttleEntries\
      \ | consumer | true | boolean | Sets whether all entries identified in a single\
      \ feed poll should be delivered immediately. If true only one entry is processed\
      \ per consumer.delay. Only applicable when splitEntries = true.\n| username\
      \ | consumer |  | String | Sets the username to be used for basic authentication\
      \ when polling from a HTTP feed\n| exceptionHandler | consumer (advanced) |\
      \  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice\
      \ if the option bridgeErrorHandler is enabled then this options is not in use.\
      \ By default the consumer will deal with exceptions that will be logged at WARN/ERROR\
      \ level and ignored.\n| exchangePattern | consumer (advanced) |  | ExchangePattern\
      \ | Sets the exchange pattern when the consumer creates an exchange.\n| pollStrategy\
      \ | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n| backoffErrorThreshold |\
      \ scheduler |  | int | The number of subsequent error polls (failed due some\
      \ error) that should happen before the backoffMultipler should kick-in.\n| backoffIdleThreshold\
      \ | scheduler |  | int | The number of subsequent idle polls that should happen\
      \ before the backoffMultipler should kick-in.\n| backoffMultiplier | scheduler\
      \ |  | int | To let the scheduled polling consumer backoff if there has been\
      \ a number of subsequent idles/errors in a row. The multiplier is then the number\
      \ of polls that will be skipped before the next actual attempt is happening\
      \ again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold\
      \ must also be configured.\n| delay | scheduler | 500 | long | Milliseconds\
      \ before the next poll. You can also specify time values using units such as\
      \ 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| greedy\
      \ | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer\
      \ will run immediately again if the previous run polled 1 or more messages.\n\
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll\
      \ starts. You can also specify time values using units such as 60s (60 seconds)\
      \ 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| runLoggingLevel | scheduler\
      \ | TRACE | LoggingLevel | The consumer logs a start/complete log line when\
      \ it polls. This option allows you to configure the logging level for that.\n\
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows\
      \ for configuring a custom/shared thread pool to use for the consumer. By default\
      \ each consumer has its own single threaded thread pool.\n| scheduler | scheduler\
      \ | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either\
      \ camel-spring or camel-quartz2 component\n| schedulerProperties | scheduler\
      \ |  | Map | To configure additional properties when using a custom scheduler\
      \ or any of the Quartz2 Spring based scheduler.\n| startScheduler | scheduler\
      \ | true | boolean | Whether the scheduler should be auto started.\n| timeUnit\
      \ | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay\
      \ options.\n| useFixedDelay | scheduler | true | boolean | Controls if fixed\
      \ delay or fixed rate is used. See ScheduledExecutorService in JDK for details.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n[[RSS-Exchangedatatypes]]\nExchange\
      \ data types\n^^^^^^^^^^^^^^^^^^^\n\nCamel initializes the In body on the Exchange\
      \ with a ROME `SyndFeed`.\nDepending on the value of the `splitEntries` flag,\
      \ Camel returns either\na `SyndFeed` with one `SyndEntry` or a `java.util.List`\
      \ of `SyndEntrys`.\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\"\
      ,]\n|=======================================================================\n\
      |Option |Value |Behavior\n\n|`splitEntries` |`true` |A single entry from the\
      \ current feed is set in the exchange.\n\n|`splitEntries` |`false` |The entire\
      \ list of entries from the current feed is set in the exchange.\n|=======================================================================\n\
      \n[[RSS-MessageHeaders]]\nMessage Headers\n^^^^^^^^^^^^^^^\n\n[width=\"100%\"\
      ,cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Header |Description\n\n|`CamelRssFeed` |The entire `SyncFeed` object.\n|=======================================================================\n\
      \n[[RSS-RSSDataformat]]\nRSS Dataformat\n^^^^^^^^^^^^^^\n\nThe RSS component\
      \ ships with an RSS dataformat that can be used to\nconvert between String (as\
      \ XML) and ROME RSS model objects.\n\n* marshal = from ROME `SyndFeed` to XML\
      \ `String`\n* unmarshal = from XML `String` to ROME `SyndFeed`\n\nA route using\
      \ this would look something like this:\n\nThe purpose of this feature is to\
      \ make it possible to use Camel's lovely\nbuilt-in expressions for manipulating\
      \ RSS messages. As shown below, an\nXPath expression can be used to filter the\
      \ RSS message:\n\n\nTIP: *Query parameters*\nIf the URL for the RSS feed uses\
      \ query parameters, this component will\nunderstand them as well, for example\
      \ if the feed uses `alt=rss`, then\nyou can for example do \n`from(\"rss:http://someserver.com/feeds/posts/default?alt=rss&splitEntries=false&consumer.delay=1000\"\
      ).to(\"bean:rss\");`\n\n[[RSS-Filteringentries]]\nFiltering entries\n^^^^^^^^^^^^^^^^^\n\
      \nYou can filter out entries quite easily using XPath, as shown in the\ndata\
      \ format section above. You can also exploit Camel's\nlink:bean-integration.html[Bean\
      \ Integration] to implement your own\nconditions. For instance, a filter equivalent\
      \ to the XPath example above\nwould be:\n\nThe custom bean for this would be:\n\
      \n[[RSS-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:atom.html[Atom]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-salesforce
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: salesforce
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: salesforce
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: salesforce
          spec:
            containers:
            - image: fabric8/connector-salesforce:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: salesforce
        syntax: salesforce:operationName:topicName
        title: Salesforce
        description: The salesforce component is used for integrating Camel with the massive Salesforce API.
        label: api,cloud,crm
        deprecated: false
        async: false
        javaType: org.apache.camel.component.salesforce.SalesforceComponent
        groupId: org.apache.camel
        artifactId: camel-salesforce
        version: 2.18.1
      componentProperties:
        loginConfig:
          kind: property
          type: object
          javaType: org.apache.camel.component.salesforce.SalesforceLoginConfig
          deprecated: false
          secret: false
          description: To use the shared SalesforceLoginConfig as login configuration
        config:
          kind: property
          type: object
          javaType: org.apache.camel.component.salesforce.SalesforceEndpointConfig
          deprecated: false
          secret: false
          description: To use the shared SalesforceLoginConfig as configuration
        httpClientProperties:
          kind: property
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: Used for configuring HTTP client properties as key/value pairs
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        httpProxyHost:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To configure HTTP proxy host
        httpProxyPort:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To configure HTTP proxy port
        httpProxyUsername:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To configure HTTP proxy username
        httpProxyPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To configure HTTP proxy password
        isHttpProxySocks4:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Enable for Socks4 proxy false by default
        isHttpProxySecure:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Enable for TLS connections true by default
        httpProxyIncludedAddresses:
          kind: property
          type: object
          javaType: java.util.Set<java.lang.String>
          deprecated: false
          secret: false
          description: HTTP proxy included addresses
        httpProxyExcludedAddresses:
          kind: property
          type: object
          javaType: java.util.Set<java.lang.String>
          deprecated: false
          secret: false
          description: HTTP proxy excluded addresses
        httpProxyAuthUri:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HTTP proxy authentication URI
        httpProxyRealm:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: HTTP proxy authentication realm
        httpProxyUseDigestAuth:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Use HTTP proxy Digest authentication false by default
        packages:
          kind: property
          type: array
          javaType: java.lang.String[]
          deprecated: false
          secret: false
          description: Package names to scan for DTO classes (multiple packages can be separated by comma).
      properties:
        operationName:
          kind: path
          group: common
          type: string
          javaType: org.apache.camel.component.salesforce.internal.OperationName
          enum:
          - GET_VERSIONS
          - GET_RESOURCES
          - GET_GLOBAL_OBJECTS
          - GET_BASIC_INFO
          - GET_DESCRIPTION
          - GET_SOBJECT
          - CREATE_SOBJECT
          - UPDATE_SOBJECT
          - DELETE_SOBJECT
          - GET_SOBJECT_WITH_ID
          - UPSERT_SOBJECT
          - DELETE_SOBJECT_WITH_ID
          - GET_BLOB_FIELD
          - QUERY
          - QUERY_MORE
          - QUERY_ALL
          - SEARCH
          - APEX_CALL
          - CREATE_JOB
          - GET_JOB
          - CLOSE_JOB
          - ABORT_JOB
          - CREATE_BATCH
          - GET_BATCH
          - GET_ALL_BATCHES
          - GET_REQUEST
          - GET_RESULTS
          - CREATE_BATCH_QUERY
          - GET_QUERY_RESULT_IDS
          - GET_QUERY_RESULT
          - GET_RECENT_REPORTS
          - GET_REPORT_DESCRIPTION
          - EXECUTE_SYNCREPORT
          - EXECUTE_ASYNCREPORT
          - GET_REPORT_INSTANCES
          - GET_REPORT_RESULTS
          deprecated: false
          secret: false
        topicName:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
        apexMethod:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: APEX method name
        apexQueryParams:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: Query params for APEX method
        apexUrl:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: APEX method URL
        apiVersion:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Salesforce API version defaults to SalesforceEndpointConfig.DEFAULT_VERSION
        backoffIncrement:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Backoff interval increment for Streaming connection restart attempts for failures beyond CometD auto-reconnect.
        batchId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Bulk API Batch ID
        contentType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.salesforce.api.dto.bulk.ContentType
          enum:
          - XML
          - CSV
          - ZIP_XML
          - ZIP_CSV
          deprecated: false
          secret: false
          description: Bulk API content type one of XML CSV ZIP_XML ZIP_CSV
        defaultReplayId:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Default replayId setting if no value is found in link initialReplayIdMap
        format:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.salesforce.internal.PayloadFormat
          enum:
          - JSON
          - XML
          deprecated: false
          secret: false
          description: Payload format to use for Salesforce API calls either JSON or XML defaults to JSON
        httpClient:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.salesforce.SalesforceHttpClient
          deprecated: false
          secret: false
          description: Custom Jetty Http Client to use to connect to Salesforce.
        includeDetails:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Include details in Salesforce1 Analytics report defaults to false.
        initialReplayIdMap:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Integer>
          deprecated: false
          secret: false
          description: Replay IDs to start from per channel name.
        instanceId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Salesforce1 Analytics report execution instance ID
        jobId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Bulk API Job ID
        maxBackoff:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Maximum backoff interval for Streaming connection restart attempts for failures beyond CometD auto-reconnect.
        notifyForFields:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.salesforce.internal.dto.NotifyForFieldsEnum
          enum:
          - ALL
          - REFERENCED
          - SELECT
          - WHERE
          deprecated: false
          secret: false
          description: Notify for fields options are ALL REFERENCED SELECT WHERE
        notifyForOperationCreate:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Notify for create operation defaults to false (API version = 29.0)
        notifyForOperationDelete:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Notify for delete operation defaults to false (API version = 29.0)
        notifyForOperations:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.salesforce.internal.dto.NotifyForOperationsEnum
          enum:
          - ALL
          - CREATE
          - EXTENDED
          - UPDATE
          deprecated: false
          secret: false
          description: Notify for operations options are ALL CREATE EXTENDED UPDATE (API version 29.0)
        notifyForOperationUndelete:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Notify for un-delete operation defaults to false (API version = 29.0)
        notifyForOperationUpdate:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Notify for update operation defaults to false (API version = 29.0)
        objectMapper:
          kind: parameter
          group: common
          type: object
          javaType: com.fasterxml.jackson.databind.ObjectMapper
          deprecated: false
          secret: false
          description: Custom Jackson ObjectMapper to use when serializing/deserializing Salesforce objects.
        reportId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Salesforce1 Analytics report Id
        reportMetadata:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.salesforce.api.dto.analytics.reports.ReportMetadata
          deprecated: false
          secret: false
          description: Salesforce1 Analytics report metadata for filtering
        resultId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Bulk API Result ID
        sObjectBlobFieldName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SObject blob field name
        sObjectClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Fully qualified SObject class name usually generated using camel-salesforce-maven-plugin
        sObjectFields:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SObject fields to retrieve
        sObjectId:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SObject ID if required by API
        sObjectIdName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SObject external ID field name
        sObjectIdValue:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SObject external ID field value
        sObjectName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SObject name if required or supported by API
        sObjectQuery:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Salesforce SOQL query string
        sObjectSearch:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Salesforce SOSL search string
        updateTopic:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to update an existing Push Topic when using the Streaming API defaults to false
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sap-netweaver
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sap-netweaver
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sap-netweaver
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sap-netweaver
          spec:
            containers:
            - image: fabric8/connector-sap-netweaver:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sap-netweaver
        syntax: sap-netweaver:url
        title: SAP NetWeaver
        description: The sap-netweaver component integrates with the SAP NetWeaver Gateway using HTTP transports.
        label: sap
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.sap.netweaver.NetWeaverComponent
        groupId: org.apache.camel
        artifactId: camel-sap-netweaver
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Url to the SAP net-weaver gateway server.
        flatternMap:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If the JSON Map contains only a single entry then flattern by storing that single entry value as the message body.
        json:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to return data in JSON format. If this option is false then XML is returned in Atom format.
        jsonAsMap:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: To transform the JSON from a String to a Map in the message body.
        password:
          kind: parameter
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for account.
        username:
          kind: parameter
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for account.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[SAPNetWeaver-SAPNetWeaverGatewaycomponent]]
      SAP NetWeaver Gateway component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *sap-netweaver* integrates with the
      http://scn.sap.com/community/developer-center/netweaver-gateway[SAP
      NetWeaver Gateway] using HTTP transports.

      This camel component supports only producer endpoints.

      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-sap-netweaver</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[SAPNetWeaver-URIformat]]
      URI format
      ^^^^^^^^^^

      The URI scheme for a sap netweaver gateway component is as follows

      [source,java]
      -----------------------------------------------------------------
      sap-netweaver:https://host:8080/path?username=foo&password=secret
      -----------------------------------------------------------------

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

      [[SAPNetWeaver-Prerequisites]]
      Prerequisites
      ^^^^^^^^^^^^^

      You would need to have an account to the SAP NetWeaver system to be able
      to leverage this component. SAP provides a
      http://scn.sap.com/docs/DOC-31221#section6[demo setup] where you can
      requires for an account.

      This component uses the basic authentication scheme for logging into SAP
      NetWeaver.

      [[SAPNetWeaver-Componentandendpointoptions]]
      SAPNetWeaver options
      ^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The SAP NetWeaver component has no options.
      // component options: END



      // endpoint options: START
      The SAP NetWeaver component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | producer |  | String | *Required* Url to the SAP net-weaver gateway server.
      | flatternMap | producer | true | boolean | If the JSON Map contains only a single entry then flattern by storing that single entry value as the message body.
      | json | producer | true | boolean | Whether to return data in JSON format. If this option is false then XML is returned in Atom format.
      | jsonAsMap | producer | true | boolean | To transform the JSON from a String to a Map in the message body.
      | password | producer |  | String | *Required* Password for account.
      | username | producer |  | String | *Required* Username for account.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SAPNetWeaver-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The following headers can be used by the producer.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`CamelNetWeaverCommand` |`String` |*Mandatory*: The command to execute in
      http://msdn.microsoft.com/en-us/library/cc956153.aspx[MS ADO.Net Data
      Service] format.
      |=======================================================================

      [[SAPNetWeaver-Examples]]
      Examples
      ^^^^^^^^

      This example is using the flight demo example from SAP, which is
      available online over the internet
      http://scn.sap.com/docs/DOC-31221[here].

      In the route below we request the SAP NetWeaver demo server using the
      following url

      [source,java]
      ----------------------------------------------------------------------
      https://sapes1.sapdevcenter.com/sap/opu/odata/IWBEP/RMTSAMPLEFLIGHT_2/
      ----------------------------------------------------------------------

      And we want to execute the following command

      [source,java]
      -------------------------------------------------------------------------------------------------------
      FlightCollection(AirLineID='AA',FlightConnectionID='0017',FlightDate=datetime'2012-08-29T00%3A00%3A00')
      -------------------------------------------------------------------------------------------------------

      To get flight details for the given flight. The command syntax is in
      http://msdn.microsoft.com/en-us/library/cc956153.aspx[MS ADO.Net Data
      Service] format.

      We have the following Camel route

      [source,java]
      -----------------------------------------------------------------------------
      from("direct:start")
          .toF("sap-netweaver:%s?username=%s&password=%s", url, username, password)
          .to("log:response")
          .to("velocity:flight-info.vm")
      -----------------------------------------------------------------------------

      Where url, username, and password is defined as:

      [source,java]
      ---------------------------------------------------------------------------------------------------------------------------------------
          private String username = "P1909969254";
          private String password = "TODO";
          private String url = "https://sapes1.sapdevcenter.com/sap/opu/odata/IWBEP/RMTSAMPLEFLIGHT_2/";
          private String command = "FlightCollection(AirLineID='AA',FlightConnectionID='0017',FlightDate=datetime'2012-08-29T00%3A00%3A00')";
      ---------------------------------------------------------------------------------------------------------------------------------------

      The password is invalid. You would need to create an account at SAP
      first to run the demo.

      The velocity template is used for formatting the response to a basic
      HTML page

      [source,xml]
      ------------------------------------------------------------------------
      <html>
        <body>
        Flight information:

        <p/>
        <br/>Airline ID: $body["AirLineID"]
        <br/>Aircraft Type: $body["AirCraftType"]
        <br/>Departure city: $body["FlightDetails"]["DepartureCity"]
        <br/>Departure airport: $body["FlightDetails"]["DepartureAirPort"]
        <br/>Destination city: $body["FlightDetails"]["DestinationCity"]
        <br/>Destination airport: $body["FlightDetails"]["DestinationAirPort"]

        </body>
      </html>
      ------------------------------------------------------------------------

      When running the application you get sampel output:

      [source,java]
      -------------------------------
      Flight information:
      Airline ID: AA
      Aircraft Type: 747-400
      Departure city: new york
      Departure airport: JFK
      Destination city: SAN FRANCISCO
      Destination airport: SFO
      -------------------------------

      [[SAPNetWeaver-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:http.html[HTTP]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-scheduler
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: scheduler
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: scheduler
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: scheduler
          spec:
            containers:
            - image: fabric8/connector-scheduler:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: scheduler
        syntax: scheduler:name
        title: Scheduler
        description: The scheduler component is used for generating message exchanges when a scheduler fires.
        label: core,scheduling
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.scheduler.SchedulerComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        concurrentTasks:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Number of threads used by the scheduling thread pool. Is by default using a single thread
      properties:
        name:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the scheduler
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. In other words the error occurred while the polling was gathering information for instance access to a file network failed so Camel cannot access it to scan for files. The default implementation will log the caused exception at WARN level and ignore it.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        concurrentTasks:
          kind: parameter
          group: scheduler
          label: scheduler
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of threads used by the scheduling thread pool. Is by default using a single thread
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. The default value is 500. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. This option allows you to share a thread pool among multiple consumers.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: 'Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler
            to use as the scheduler for firing when the polling consumer runs. The default
            implementation uses the ScheduledExecutorService and there is a Quartz2 and
            Spring based which supports CRON expressions. Notice: If using a custom scheduler
            then the options for initialDelay useFixedDelay timeUnit and scheduledExecutorService
            may not be in use. Use the text quartz2 to refer to use the Quartz2 scheduler;
            and use the text spring to use the Spring based; and use the text myScheduler
            to refer to a custom scheduler by its id in the Registry. See Quartz2 page for
            an example.'
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[Scheduler-SchedulerComponent]]
      Scheduler Component
      ~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.15*

      The *scheduler:* component is used to generate message exchanges when a
      scheduler fires. This component is similar to the
      ??link:timer.html[Timer]??component, but it offers more functionality in
      terms of scheduling. Also this component uses
      JDK??`ScheduledExecutorService`. Where as the timer uses a JDK??`Timer`.

      You can only consume events from this endpoint.

      [[Scheduler-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------------------
      scheduler:name[?options]
      ------------------------

      Where `name` is the name of the scheduler, which is created and shared
      across endpoints. So if you use the same name for all your timer
      endpoints, only one scheduler thread pool??and thread will be used - but
      you can configure the thread pool to allow more concurrent threads.

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

      *Note:* The IN body of the generated exchange is `null`. So
      `exchange.getIn().getBody()` returns `null`.

      [[Scheduler-Options]]
      Options
      ^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | concurrentTasks | int | Number of threads used by the scheduling thread pool. Is by default using a single thread
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The Scheduler component supports 21 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | consumer |  | String | *Required* The name of the scheduler
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. In other words the error occurred while the polling was gathering information for instance access to a file network failed so Camel cannot access it to scan for files. The default implementation will log the caused exception at WARN level and ignore it.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | concurrentTasks | scheduler | 1 | int | Number of threads used by the scheduling thread pool. Is by default using a single thread
      | delay | scheduler | 500 | long | Milliseconds before the next poll. The default value is 500. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. This option allows you to share a thread pool among multiple consumers.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | Allow to plugin a custom org.apache.camel.spi.ScheduledPollConsumerScheduler to use as the scheduler for firing when the polling consumer runs. The default implementation uses the ScheduledExecutorService and there is a Quartz2 and Spring based which supports CRON expressions. Notice: If using a custom scheduler then the options for initialDelay useFixedDelay timeUnit and scheduledExecutorService may not be in use. Use the text quartz2 to refer to use the Quartz2 scheduler; and use the text spring to use the Spring based; and use the text myScheduler to refer to a custom scheduler by its id in the Registry. See Quartz2 page for an example.
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Scheduler-Moreinformation]]
      More information
      ^^^^^^^^^^^^^^^^

      This component is a scheduler
      http://camel.apache.org/polling-consumer.html[Polling Consumer]??where
      you can find more information about the options above, and examples at
      the http://camel.apache.org/polling-consumer.html[Polling
      Consumer]??page.

      [[Scheduler-ExchangeProperties]]
      Exchange Properties
      ^^^^^^^^^^^^^^^^^^^

      When the timer is fired, it adds the following information as properties
      to the `Exchange`:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`Exchange.TIMER_NAME` |`String` |The value of the `name` option.

      |`Exchange.TIMER_FIRED_TIME` |`Date` |The time when the consumer fired.
      |=======================================================================

      [[Scheduler-Sample]]
      Sample
      ^^^^^^

      To set up a route that generates an event every 60 seconds:

      [source,java]
      ------------------------------------------------------------------------------
         from("scheduler://foo?period=60s").to("bean:myBean?method=someMethodName");
      ------------------------------------------------------------------------------

      ??

      The above route will generate an event and then invoke the
      `someMethodName` method on the bean called `myBean` in the
      link:registry.html[Registry] such as JNDI or link:spring.html[Spring].

      And the route in Spring DSL:

      [source,xml]
      -------------------------------------------------
        <route>
          <from uri="scheduler://foo?period=60s"/>
          <to uri="bean:myBean?method=someMethodName"/>
        </route>
      -------------------------------------------------

      ??

      [[Scheduler-Forcingtheschedulertotriggerimmediatelywhencompleted]]
      Forcing the scheduler to trigger immediately when completed
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      To let the scheduler trigger as soon as the previous task is complete,
      you can set the option greedy=true. But beware then the scheduler will
      keep firing all the time. So use this with caution.

      [[Scheduler-Forcingtheschedulertobeidle]]
      Forcing the scheduler to be idle
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      There can be use cases where you want the scheduler to trigger and be
      greedy. But sometimes you want "tell the scheduler" that there was no
      task to poll, so the scheduler can change into idle mode using the
      backoff options. To do this you would need to set a property on the
      exchange with the key??`Exchange.SCHEDULER_POLLED_MESSAGES` to a boolean
      value of false. This will cause the consumer to indicate that there was
      no messages polled.??

      The consumer will otherwise as by default return 1 message polled to the
      scheduler, every time the consumer has completed processing the
      exchange.

      ??

      [[Scheduler-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:timer.html[Timer]
      * link:quartz.html[Quartz]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-schematron
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: schematron
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: schematron
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: schematron
          spec:
            containers:
            - image: fabric8/connector-schematron:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: schematron
        syntax: schematron:path
        title: Schematron
        description: Validates the payload of a message using the Schematron Library.
        label: validation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.schematron.SchematronComponent
        groupId: org.apache.camel
        artifactId: camel-schematron
        version: 2.18.1
      componentProperties: {}
      properties:
        path:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The path to the schematron rules file. Can either be in class path or location in the file system.
        abort:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flag to abort the route and throw a schematron validation exception.
        rules:
          kind: parameter
          group: producer
          type: object
          javaType: javax.xml.transform.Templates
          deprecated: false
          secret: false
          description: To use the given schematron rules instead of loading from the path
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        uriResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.transform.URIResolver
          deprecated: false
          secret: false
          description: Set the URIResolver to be used for resolving schematron includes in the rules file.
    documentation.adoc: "[[Schematron-SchematronComponent]]\nSchematron Component\n\
      ~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.14*\n\nhttp://www.schematron.com/index.html[Schematron]??is\
      \ an XML-based\nlanguage for validating XML instance documents. It is used to\
      \ make\nassertions about data in an XML document and it is also used to express\n\
      operational and business rules. Schematron is\nan??http://standards.iso.org/ittf/PubliclyAvailableStandards/index.html[ISO\n\
      Standard]. The schematron component uses the leading\nhttp://www.schematron.com/implementation.html[implementation]\
      \ of ISO\nschematron. It is an XSLT based implementation. The schematron rules\
      \ is\nrun through http://www.schematron.com/implementation.html[four XSLT\n\
      pipelines], which generates a final XSLT which will be used as the basis\nfor\
      \ running the assertion against the XML document. The component is\nwritten\
      \ in a way that Schematron rules are loaded at the start of the\nendpoint (only\
      \ once) this is to minimise the overhead of instantiating a\nJava Templates\
      \ object representing the rules.\n\n[[Schematron-URIformat]]\nURI format\n^^^^^^^^^^\n\
      \n[source,java]\n---------------------------\nschematron://path?[options]\n\
      ---------------------------\n\n[[Schematron-URIoptions]]\nURI options\n^^^^^^^^^^^\n\
      \n\n// component options: START\nThe Schematron component has no options.\n\
      // component options: END\n\n\n\n\n\n// endpoint options: START\nThe Schematron\
      \ component supports 5 endpoint options which are listed below:\n\n{% raw %}\n\
      [width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| path | producer |  | String\
      \ | *Required* The path to the schematron rules file. Can either be in class\
      \ path or location in the file system.\n| abort | producer | false | boolean\
      \ | Flag to abort the route and throw a schematron validation exception.\n|\
      \ rules | producer |  | Templates | To use the given schematron rules instead\
      \ of loading from the path\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n| uriResolver | advanced |\
      \  | URIResolver | Set the URIResolver to be used for resolving schematron includes\
      \ in the rules file.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n[[Schematron-Headers]]\nHeaders\n\
      ^^^^^^^\n\n[width=\"100%\",cols=\"10%,10%,10%,70%\",options=\"header\",]\n|=======================================================================\n\
      |Name |Description |Type |In/Out\n\n|CamelSchematronValidationStatus |The schematron\
      \ validation status: SUCCESS / FAILED |String |IN\n\n|CamelSchematronValidationReport\
      \ |The schematrion report body in XML format. See an example below |String |IN\n\
      |=======================================================================\n\n\
      [[Schematron-URIandpathsyntax]]\nURI and path syntax\n^^^^^^^^^^^^^^^^^^^\n\n\
      The following example shows how to invoke the schematron processor in\nJava\
      \ DSL. The schematron rules file is sourced from the class path:\n\n[source,java]\n\
      ----------------------------------------------------------------------------\n\
      from(\"direct:start\").to(\"schematron://sch/schematron.sch\").to(\"mock:result\"\
      )\n----------------------------------------------------------------------------\n\
      \n??\n\nThe following example shows how to invoke the schematron processor in\n\
      XML DSL. The schematrion rules file is sourced from the file system:\n\n[source,xml]\n\
      -----------------------------------------------------------------------------------------------\n\
      <route>\n   <from uri=\"direct:start\" />\n   <to uri=\"schematron:///usr/local/sch/schematron.sch\"\
      \ />\n   <log message=\"Schematron validation status: ${in.header.CamelSchematronValidationStatus}\"\
      \ />\n   <choice>\n      <when>\n         <simple>${in.header.CamelSchematronValidationStatus}\
      \ == 'SUCCESS'</simple>\n         <to uri=\"mock:success\" />\n      </when>\n\
      \      <otherwise>\n         <log message=\"Failed schematron validation\" />\n\
      \         <setBody>\n            <header>CamelSchematronValidationReport</header>\n\
      \         </setBody>\n         <to uri=\"mock:failure\" />\n      </otherwise>\n\
      \   </choice>\n</route>\n-----------------------------------------------------------------------------------------------\n\
      \nTIP: *Where to store schematron rules?*\nSchematron rules can change with\
      \ business requirement, as such it is\nrecommended to store these rules somewhere\
      \ in file system. When the\nschematron component endpoint is started, the rules\
      \ are compiled into\nXSLT as a ??Java Templates Object. This is done only once\
      \ to minimise the\noverhead of instantiating Java Templates object, which can\
      \ be an\nexpensive operation for large set of rules and given that the process\n\
      goes through four pipelines\nof??http://www.schematron.com/implementation.html[XSLT\
      \ transformations].\nSo if you happen to store the rules in the file system,\
      \ in the event of\nan update, all you need is to restart the route or the component.\
      \ No\nharm in storing these rules in the class path though, but you will have\n\
      to build and deploy the component to pick up the changes.\n\n[[Schematron-Schematronrulesandreportsamples]]\n\
      Schematron rules and report samples\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\
      Here is an example of schematron rules\n\n[source,xml]\n--------------------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<schema xmlns=\"http://purl.oclc.org/dsdl/schematron\"\
      >\n   <title>Check Sections 12/07</title>\n   <pattern id=\"section-check\"\
      >\n      <rule context=\"section\">\n         <assert test=\"title\">This section\
      \ has no title</assert>\n         <assert test=\"para\">This section has no\
      \ paragraphs</assert>\n      </rule>\n   </pattern>\n</schema>\n--------------------------------------------------------------------\n\
      \nHere is an example of schematron report:\n\n[source,xml]\n------------------------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<svrl:schematron-output xmlns:svrl=\"\
      http://purl.oclc.org/dsdl/svrl\"\n xmlns:iso=\"http://purl.oclc.org/dsdl/schematron\"\
      \n xmlns:saxon=\"http://saxon.sf.net/\"\n xmlns:schold=\"http://www.ascc.net/xml/schematron\"\
      \n xmlns:xhtml=\"http://www.w3.org/1999/xhtml\"\n xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"\
      \n xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" schemaVersion=\"\" title=\"\
      \">\n   \n   <svrl:active-pattern document=\"\" />\n   <svrl:fired-rule context=\"\
      chapter\" />\n   <svrl:failed-assert test=\"title\" location=\"/doc[1]/chapter[1]\"\
      >\n      <svrl:text>A chapter should have a title</svrl:text>\n   </svrl:failed-assert>\n\
      \   <svrl:fired-rule context=\"chapter\" />\n   <svrl:failed-assert test=\"\
      title\" location=\"/doc[1]/chapter[2]\">\n      <svrl:text>A chapter should\
      \ have a title</svrl:text>\n   </svrl:failed-assert>\n   <svrl:fired-rule context=\"\
      chapter\" />\n</svrl:schematron-output>\n------------------------------------------------------------------------\n\
      \nTIP: *Useful Links and resources*\n* http://www.mulberrytech.com/papers/schematron-Philly.pdf[Introduction\n\
      to Schematron]??by Mulleberry technologies. An excellent document in PDF\nto\
      \ get you started on Schematron.\n* http://www.schematron.com[Schematron official\
      \ site]. This contains\nlinks to other resources\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-scp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: scp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: scp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: scp
          spec:
            containers:
            - image: fabric8/connector-scp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: scp
        extendsScheme: ftp
        syntax: scp:host:port/directoryName
        title: SCP
        description: To copy files using the secure copy protocol (SCP).
        label: file
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.scp.ScpComponent
        groupId: org.apache.camel
        artifactId: camel-jsch
        version: 2.18.1
      componentProperties:
        verboseLogging:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: JSCH is verbose logging out of the box. Therefore we turn the logging down to DEBUG logging by default. But setting this option to true turns on the verbose logging again.
      properties:
        host:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the FTP server
        port:
          kind: path
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port of the FTP server
        directoryName:
          kind: path
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The starting directory
        disconnect:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
        chmod:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "664"
          description: Allows you to set chmod on the stored file. For example chmod=664.
        fileName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Use Expression such as File Language to dynamically set the filename.
            For consumers it''s used as a filename filter. For producers it''s used to evaluate
            the filename to write. If an expression is set it take precedence over the CamelFileName
            header. (Note: The header itself can also be an Expression). The expression
            options support both String and Expression types. If the expression is a String
            type it is always evaluated using the File Language. If the expression is an
            Expression type the specified Expression type is used - this allows you for
            instance to use OGNL expressions. For the consumer you can use it to filter
            filenames so you can for instance consume today''s file using the File Language
            syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName
            header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName
            is a header that is used only once and makes it easier as this avoids to temporary
            store CamelFileName and have to restore it afterwards.'
        flatten:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
        strictHostKeyChecking:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - no
          - yes
          deprecated: false
          secret: false
          defaultValue: no
          description: 'Sets whether to use strict host key checking. Possible values are:
            no yes'
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
        disconnectOnBatchComplete:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
        connectTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
        soTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the so timeout Used only by FTPClient
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        timeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Sets the data timeout for waiting for reply Used only by FTPClient
        knownHostsFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the known_hosts file so that the jsch endpoint can do host key verification.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use for login
        privateKeyFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Set the private key file to that the SFTP endpoint can do private key verification.
        privateKeyFilePassphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Set the private key file passphrase to that the SFTP endpoint can do private key verification.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use for login
        useUserKnownHostsFile:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If knownHostFile has not been explicit configured then use the host file from System.getProperty(user.home) /.ssh/known_hosts
        ciphers:
          kind: parameter
          group: security (advanced)
          label: security,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Set a comma separated list of ciphers that will be used in order
            of preference. Possible cipher names are defined by JCraft JSCH. Some examples
            include: aes128-ctraes128-cbc3des-ctr3des-cbcblowfish-cbcaes192-cbcaes256-cbc.
            If not specified the default list from JSCH will be used.'
    documentation.adoc: |+
      [[Jsch-Jsch]]
      Jsch
      ~~~~

      The *camel-jsch* component supports the
      http://en.wikipedia.org/wiki/Secure_copy[SCP protocol] using the Client
      API of the http://www.jcraft.com/jsch/[Jsch] project. Jsch is already
      used in camel by the link:ftp.html[FTP] component for the *sftp:*
      protocol.

      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-jsch</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Jsch-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------
      scp://host[:port]/destination[?options]
      ---------------------------------------

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

      The file name can be specified either in the <path> part of the URI or
      as a "CamelFileName" header on the message (`Exchange.FILE_NAME` if used
      in code).

      [[Jsch-Options]]
      Options
      ^^^^^^^




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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | verboseLogging | boolean | JSCH is verbose logging out of the box. Therefore we turn the logging down to DEBUG logging by default. But setting this option to true turns on the verbose logging again.
      |=======================================================================
      {% endraw %}
      // component options: END









      // endpoint options: START
      The SCP component supports 21 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | producer |  | String | *Required* Hostname of the FTP server
      | port | producer |  | int | Port of the FTP server
      | directoryName | producer |  | String | The starting directory
      | disconnect | common | false | boolean | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
      | chmod | producer | 664 | String | Allows you to set chmod on the stored file. For example chmod=664.
      | fileName | producer |  | String | Use Expression such as File Language to dynamically set the filename. For consumers it's used as a filename filter. For producers it's used to evaluate the filename to write. If an expression is set it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type it is always evaluated using the File Language. If the expression is an Expression type the specified Expression type is used - this allows you for instance to use OGNL expressions. For the consumer you can use it to filter filenames so you can for instance consume today's file using the File Language syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName is a header that is used only once and makes it easier as this avoids to temporary store CamelFileName and have to restore it afterwards.
      | flatten | producer | false | boolean | Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
      | strictHostKeyChecking | producer | no | String | Sets whether to use strict host key checking. Possible values are: no yes
      | allowNullBody | producer (advanced) | false | boolean | Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
      | disconnectOnBatchComplete | producer (advanced) | false | boolean | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
      | connectTimeout | advanced | 10000 | int | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
      | soTimeout | advanced | 300000 | int | Sets the so timeout Used only by FTPClient
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | timeout | advanced | 30000 | int | Sets the data timeout for waiting for reply Used only by FTPClient
      | knownHostsFile | security |  | String | Sets the known_hosts file so that the jsch endpoint can do host key verification.
      | password | security |  | String | Password to use for login
      | privateKeyFile | security |  | String | Set the private key file to that the SFTP endpoint can do private key verification.
      | privateKeyFilePassphrase | security |  | String | Set the private key file passphrase to that the SFTP endpoint can do private key verification.
      | username | security |  | String | Username to use for login
      | useUserKnownHostsFile | security | true | boolean | If knownHostFile has not been explicit configured then use the host file from System.getProperty(user.home) /.ssh/known_hosts
      | ciphers | security (advanced) |  | String | Set a comma separated list of ciphers that will be used in order of preference. Possible cipher names are defined by JCraft JSCH. Some examples include: aes128-ctraes128-cbc3des-ctr3des-cbcblowfish-cbcaes192-cbcaes256-cbc. If not specified the default list from JSCH will be used.
      |=======================================================================
      {% endraw %}
      // endpoint options: END






      [[Jsch-Limitations]]
      Limitations
      ^^^^^^^^^^^

      Currently camel-jsch only supports a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Producer.html[Producer]
      (i.e. copy files to another host).??

      [[Jsch-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-seda
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: seda
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: seda
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: seda
          spec:
            containers:
            - image: fabric8/connector-seda:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: seda
        syntax: seda:name
        title: SEDA
        description: The seda component provides asynchronous call to another endpoint from any CamelContext in the same JVM.
        label: core,endpoint
        deprecated: false
        async: true
        javaType: org.apache.camel.component.seda.SedaComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        queueSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the default maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
        concurrentConsumers:
          kind: property
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Sets the default number of concurrent threads processing exchanges.
        defaultQueueFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.seda.BlockingQueueFactory<org.apache.camel.Exchange>
          deprecated: false
          secret: false
          description: Sets the default queue factory.
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of queue
        size:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent threads processing exchanges.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        limitConcurrentConsumers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit the number of concurrentConsumers to the maximum of 500. By default an exception will be thrown if an endpoint is configured with a greater number. You can disable that check by turning this option off.
        multipleConsumers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether multiple consumers are allowed. If enabled you can use SEDA for Publish-Subscribe messaging. That is you can send a message to the SEDA queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
        pollTimeout:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout used when polling. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
        purgeWhenStopping:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to purge the task queue when stopping the consumer/route. This allows to stop faster as any pending messages on the queue is discarded.
        blockWhenFull:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a thread that sends messages to a full SEDA queue will block until the queue's capacity is no longer exhausted. By default an exception will be thrown stating that the queue is full. By enabling this option the calling thread will instead block and wait until the message can be accepted.
        discardIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should discard the message (do not add the message to the queue) when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
        failIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should fail by throwing an exception when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout (in milliseconds) before a SEDA producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
        waitForTaskToComplete:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.WaitForTaskToComplete
          enum:
          - Never
          - IfReplyExpected
          - Always
          deprecated: false
          secret: false
          defaultValue: IfReplyExpected
          description: 'Option to specify whether the caller should wait for the async task
            to complete or not before continuing. The following three options are supported:
            Always Never or IfReplyExpected. The first two values are self-explanatory.
            The last value IfReplyExpected will only wait if the message is Request Reply
            based. The default option is IfReplyExpected.'
        queue:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.concurrent.BlockingQueue
          deprecated: false
          secret: false
          description: Define the queue instance which will be used by the endpoint. This option is only for rare use-cases where you want to use a custom queue instance.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[SEDA-SEDAComponent]]
      SEDA Component
      ~~~~~~~~~~~~~~

      The *seda:* component provides asynchronous
      http://www.eecs.harvard.edu/~mdw/proj/seda/[SEDA] behavior, so that
      messages are exchanged on a
      http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
      and consumers are invoked in a separate thread from the producer.

      Note that queues are only visible within a _single_
      link:camelcontext.html[CamelContext]. If you want to communicate across
      `CamelContext` instances (for example, communicating between Web
      applications), see the link:vm.html[VM] component.

      This component does not implement any kind of persistence or recovery,
      if the VM terminates while messages are yet to be processed. If you need
      persistence, reliability or distributed SEDA, try using either
      link:jms.html[JMS] or link:activemq.html[ActiveMQ].

      TIP:*Synchronous*
      The link:direct.html[Direct] component provides synchronous invocation
      of any consumers when a producer sends a message exchange.

      [[SEDA-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------
      seda:someName[?options]
      -----------------------

      Where *someName* can be any string that uniquely identifies the endpoint
      within the current link:camelcontext.html[CamelContext].

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

      [[SEDA-Options]]
      Options
      ^^^^^^^

      // component options: START
      The SEDA component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | queueSize | int | Sets the default maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
      | concurrentConsumers | int | Sets the default number of concurrent threads processing exchanges.
      | defaultQueueFactory | Exchange> | Sets the default queue factory.
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The SEDA component supports 17 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Name of queue
      | size | common | 2147483647 | int | The maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent threads processing exchanges.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | limitConcurrentConsumers | consumer (advanced) | true | boolean | Whether to limit the number of concurrentConsumers to the maximum of 500. By default an exception will be thrown if an endpoint is configured with a greater number. You can disable that check by turning this option off.
      | multipleConsumers | consumer (advanced) | false | boolean | Specifies whether multiple consumers are allowed. If enabled you can use SEDA for Publish-Subscribe messaging. That is you can send a message to the SEDA queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
      | pollTimeout | consumer (advanced) | 1000 | int | The timeout used when polling. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
      | purgeWhenStopping | consumer (advanced) | false | boolean | Whether to purge the task queue when stopping the consumer/route. This allows to stop faster as any pending messages on the queue is discarded.
      | blockWhenFull | producer | false | boolean | Whether a thread that sends messages to a full SEDA queue will block until the queue's capacity is no longer exhausted. By default an exception will be thrown stating that the queue is full. By enabling this option the calling thread will instead block and wait until the message can be accepted.
      | discardIfNoConsumers | producer | false | boolean | Whether the producer should discard the message (do not add the message to the queue) when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
      | failIfNoConsumers | producer | false | boolean | Whether the producer should fail by throwing an exception when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
      | timeout | producer | 30000 | long | Timeout (in milliseconds) before a SEDA producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
      | waitForTaskToComplete | producer | IfReplyExpected | WaitForTaskToComplete | Option to specify whether the caller should wait for the async task to complete or not before continuing. The following three options are supported: Always Never or IfReplyExpected. The first two values are self-explanatory. The last value IfReplyExpected will only wait if the message is Request Reply based. The default option is IfReplyExpected.
      | queue | advanced |  | BlockingQueue | Define the queue instance which will be used by the endpoint. This option is only for rare use-cases where you want to use a custom queue instance.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SEDA-ChoosingBlockingQueueimplementation]]
      Choosing BlockingQueue implementation
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.12*

      By default, the SEDA component always intantiates LinkedBlockingQueue,
      but you can use different implementation, you can reference your own
      BlockingQueue implementation, in this case the size option is not used

      [source,java]
      -----------------------------------------------------------
      <bean id="arrayQueue" class="java.util.ArrayBlockingQueue">
      <constructor-arg index="0" value="10" ><!-- size -->
      <constructor-arg index="1" value="true" ><!-- fairness -->
      </bean>
      <!-- ... and later -->
      <from>seda:array?queue=#arrayQueue</from>
      -----------------------------------------------------------

      Or you can reference a BlockingQueueFactory implementation, 3
      implementations are provided LinkedBlockingQueueFactory,
      ArrayBlockingQueueFactory and PriorityBlockingQueueFactory:

      [source,java]
      -----------------------------------------------------------------------------------------------------
      <bean id="priorityQueueFactory" class="org.apache.camel.component.seda.PriorityBlockingQueueFactory">
      <property name="comparator">
      <bean class="org.apache.camel.demo.MyExchangeComparator" />
      </property>
      </bean>
      <!-- ... and later -->
      <from>seda:priority?queueFactory=#priorityQueueFactory&size=100</from>
      -----------------------------------------------------------------------------------------------------

      [[SEDA-UseofRequestReply]]
      Use of Request Reply
      ^^^^^^^^^^^^^^^^^^^^

      The link:seda.html[SEDA] component supports using
      link:request-reply.html[Request Reply], where the caller will wait for
      the link:async.html[Async] route to complete. For instance:

      [source,java]
      -------------------------------------------------------------------------
      from("mina:tcp://0.0.0.0:9876?textline=true&sync=true").to("seda:input");

      from("seda:input").to("bean:processInput").to("bean:createResponse");
      -------------------------------------------------------------------------

      In the route above, we have a TCP listener on port 9876 that accepts
      incoming requests. The request is routed to the `seda:input` queue. As
      it is a link:request-reply.html[Request Reply] message, we wait for the
      response. When the consumer on the `seda:input` queue is complete, it
      copies the response to the original message response.

      NOTE:*until 2.2: Works only with 2 endpoints*
      Using link:request-reply.html[Request Reply] over link:seda.html[SEDA]
      or link:vm.html[VM] only works with 2 endpoints. You *cannot* chain
      endpoints by sending to A -> B -> C etc. Only between A -> B. The reason
      is the implementation logic is fairly simple. To support 3+ endpoints
      makes the logic much more complex to handle ordering and notification
      between the waiting threads properly.
      This has been improved in *Camel 2.3* onwards, which allows you to chain
      as many endpoints as you like.

      [[SEDA-Concurrentconsumers]]
      Concurrent consumers
      ^^^^^^^^^^^^^^^^^^^^

      By default, the SEDA endpoint uses a single consumer thread, but you can
      configure it to use concurrent consumer threads. So instead of thread
      pools you can use:

      [source,java]
      ---------------------------------------------------------
      from("seda:stageName?concurrentConsumers=5").process(...)
      ---------------------------------------------------------

      As for the difference between the two, note a _thread pool_ can
      increase/shrink dynamically at runtime depending on load, whereas the
      number of concurrent consumers is always fixed.

      [[SEDA-Threadpools]]
      Thread pools
      ^^^^^^^^^^^^

      Be aware that adding a thread pool to a SEDA endpoint by doing something
      like:

      [source,java]
      ---------------------------------------------
      from("seda:stageName").thread(5).process(...)
      ---------------------------------------------

      Can wind up with two `BlockQueues`: one from the SEDA endpoint, and one
      from the workqueue of the thread pool, which may not be what you want.
      Instead, you might wish to configure a link:direct.html[Direct] endpoint
      with a thread pool, which can process messages both synchronously and
      asynchronously. For example:

      [source,java]
      -----------------------------------------------
      from("direct:stageName").thread(5).process(...)
      -----------------------------------------------

      You can also directly configure number of threads that process messages
      on a SEDA endpoint using the `concurrentConsumers` option.

      [[SEDA-Sample]]
      Sample
      ^^^^^^

      In the route below we use the SEDA queue to send the request to this
      async queue to be able to send a fire-and-forget message for further
      processing in another thread, and return a constant reply in this thread
      to the original caller.

      Here we send a Hello World message and expects the reply to be OK.

      The "Hello World" message will be consumed from the SEDA queue from
      another thread for further processing. Since this is from a unit test,
      it will be sent to a `mock` endpoint where we can do assertions in the
      unit test.

      [[SEDA-UsingmultipleConsumers]]
      Using multipleConsumers
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.2*

      In this example we have defined two consumers and registered them as
      spring beans.

      Since we have specified *multipleConsumers=true* on the seda foo
      endpoint we can have those two consumers receive their own copy of the
      message as a kind of pub-sub style messaging.

      As the beans are part of an unit test they simply send the message to a
      mock endpoint, but notice how we can use @Consume to consume from the
      seda queue.

      [[SEDA-Extractingqueueinformation.]]
      Extracting queue information.
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If needed, information such as queue size, etc. can be obtained without
      using JMX in this fashion:

      [source,java]
      -----------------------------------------------------
      SedaEndpoint seda = context.getEndpoint("seda:xxxx");
      int size = seda.getExchanges().size();
      -----------------------------------------------------

      [[SEDA-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:vm.html[VM]
      * link:disruptor.html[Disruptor]
      * link:direct.html[Direct]
      * link:async.html[Async]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-servicenow
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: servicenow
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: servicenow
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: servicenow
          spec:
            containers:
            - image: fabric8/connector-servicenow:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: servicenow
        syntax: servicenow:instanceName
        title: ServiceNow
        description: The servicenow component is used to integrate Camel with ServiceNow cloud services.
        label: api,cloud,management
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.servicenow.ServiceNowComponent
        groupId: org.apache.camel
        artifactId: camel-servicenow
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.servicenow.ServiceNowConfiguration
          deprecated: false
          secret: false
          description: The ServiceNow default configuration
        apiUrl:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ServiceNow REST API url
        userName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: ServiceNow user account name
        password:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: ServiceNow account password
        oauthClientId:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth2 ClientID
        oauthClientSecret:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth2 ClientSecret
        oauthTokenUrl:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: OAuth token Url
      properties:
        instanceName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ServiceNow instance name
        display:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - false
          - true
          - all
          deprecated: false
          secret: false
          defaultValue: true
          description: Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this parameter to all to return scorecards with any Display field value. This parameter is true by default.
        displayValue:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - false
          - true
          - all
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Return the display value (true) actual value (false) or both (all)
            for reference fields (default: false)'
        excludeReferenceLink:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: 'True to exclude Table API links for reference fields (default: false)'
        favorites:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return only scorecards that are favorites of the querying user.
        includeAggregates:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to always return all available aggregates for an indicator including when an aggregate has already been applied. If a value is not specified this parameter defaults to false and returns no aggregates.
        includeAvailableAggregates:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return all available aggregates for an indicator when no aggregate has been applied. If a value is not specified this parameter defaults to false and returns no aggregates.
        includeAvailableBreakdowns:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified this parameter defaults to false and returns no breakdowns.
        includeScoreNotes:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return all notes associated with the score. The note element contains the note text as well as the author and timestamp when the note was added.
        includeScores:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return all scores for a scorecard. If a value is not specified this parameter defaults to false and returns only the most recent score value.
        inputDisplayValue:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: 'True to set raw value of input fields (default: false)'
        key:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return only scorecards for key indicators.
        perPage:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Enter the maximum number of scorecards each query can return. By default this value is 10 and the maximum is 100.
        release:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.servicenow.ServiceNowRelease
          enum:
          - FUJI
          - GENEVA
          - HELSINKI
          deprecated: false
          secret: false
          defaultValue: HELSINKI
          description: The ServiceNow release to target default to Helsinki See https://docs.servicenow.com
        requestModels:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          prefix: request-model.
          multiValue: true
          deprecated: false
          secret: false
          description: Defines the request model
        resource:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default resource can be overridden by header CamelServiceNowResource
        responseModels:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          prefix: response-model.
          multiValue: true
          deprecated: false
          secret: false
          description: Defines the response model
        sortBy:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - value
          - change
          - changeperc
          - gap
          - gapperc
          - duedate
          - name
          - order
          - default
          - group
          - indicator_group
          - frequency
          - target
          - date
          - trend
          - bullet
          - direction
          deprecated: false
          secret: false
          description: Specify the value to use when sorting results. By default queries sort records by value.
        sortDir:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - asc
          - desc
          deprecated: false
          secret: false
          description: Specify the sort direction ascending or descending. By default queries sort records in descending order. Use sysparm_sortdir=asc to sort in ascending order.
        suppressAutoSysField:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: 'True to suppress auto generation of system fields (default: false)'
        suppressPaginationHeader:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this value to true to remove the Link header from the response. The Link header allows you to request additional pages of data when the number of records matching your query exceeds the query limit
        table:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default table can be overridden by header CamelServiceNowTable
        target:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Set this parameter to true to return only scorecards that have a target.
        topLevelOnly:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Gets only those categories whose parent is a catalog.
        apiVersion:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ServiceNow REST API version default latest
        mapper:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.fasterxml.jackson.databind.ObjectMapper
          deprecated: false
          secret: false
          description: Sets Jackson's ObjectMapper to use for request/reply
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        apiUrl:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The ServiceNow REST API url
        oauthClientId:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: OAuth2 ClientID
        oauthClientSecret:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: OAuth2 ClientSecret
        oauthTokenUrl:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: OAuth token Url
        password:
          kind: parameter
          group: security
          label: security
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: ServiceNow account password MUST be provided
        userName:
          kind: parameter
          group: security
          label: security
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: ServiceNow user account name MUST be provided
    documentation.adoc: |
      [[ServiceNow-ServiceNowComponent]]
      ServiceNow Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18*

      The ServiceNow component provides access to ServiceNow platform through their REST API.

      NOTE: From Camel 2.18.1 the component supports multiple version of ServiceNow platform with default to Helsinki. Supported version are <<ServiceNow-Fuji>> and <<ServiceNow-Helsinki>>


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

      [source,java]
      -------------------------------------------------
          <dependency>
              <groupId>org.apache.camel</groupId>
              <artifactId>camel-servicenow</artifactId>
              <version>${camel-version}</version>
          </dependency>
      -------------------------------------------------

      [[ServiceNow-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------------
          servicenow://instanceName?[options]
      ---------------------------------------

      [[ServiceNow-Options]]
      Options
      ^^^^^^^


      // component options: START
      The ServiceNow component supports 7 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | ServiceNowConfiguration | The ServiceNow default configuration
      | apiUrl | String | The ServiceNow REST API url
      | userName | String | ServiceNow user account name
      | password | String | ServiceNow account password
      | oauthClientId | String | OAuth2 ClientID
      | oauthClientSecret | String | OAuth2 ClientSecret
      | oauthTokenUrl | String | OAuth token Url
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The ServiceNow component supports 33 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | instanceName | producer |  | String | *Required* The ServiceNow instance name
      | display | producer | true | String | Set this parameter to true to return only scorecards where the indicator Display field is selected. Set this parameter to all to return scorecards with any Display field value. This parameter is true by default.
      | displayValue | producer | false | String | Return the display value (true) actual value (false) or both (all) for reference fields (default: false)
      | excludeReferenceLink | producer |  | Boolean | True to exclude Table API links for reference fields (default: false)
      | favorites | producer |  | Boolean | Set this parameter to true to return only scorecards that are favorites of the querying user.
      | includeAggregates | producer |  | Boolean | Set this parameter to true to always return all available aggregates for an indicator including when an aggregate has already been applied. If a value is not specified this parameter defaults to false and returns no aggregates.
      | includeAvailableAggregates | producer |  | Boolean | Set this parameter to true to return all available aggregates for an indicator when no aggregate has been applied. If a value is not specified this parameter defaults to false and returns no aggregates.
      | includeAvailableBreakdowns | producer |  | Boolean | Set this parameter to true to return all available breakdowns for an indicator. If a value is not specified this parameter defaults to false and returns no breakdowns.
      | includeScoreNotes | producer |  | Boolean | Set this parameter to true to return all notes associated with the score. The note element contains the note text as well as the author and timestamp when the note was added.
      | includeScores | producer |  | Boolean | Set this parameter to true to return all scores for a scorecard. If a value is not specified this parameter defaults to false and returns only the most recent score value.
      | inputDisplayValue | producer |  | Boolean | True to set raw value of input fields (default: false)
      | key | producer |  | Boolean | Set this parameter to true to return only scorecards for key indicators.
      | perPage | producer | 10 | Integer | Enter the maximum number of scorecards each query can return. By default this value is 10 and the maximum is 100.
      | release | producer | HELSINKI | ServiceNowRelease | The ServiceNow release to target default to Helsinki See https://docs.servicenow.com
      | requestModels | producer |  | String | Defines the request model
      | resource | producer |  | String | The default resource can be overridden by header CamelServiceNowResource
      | responseModels | producer |  | String | Defines the response model
      | sortBy | producer |  | String | Specify the value to use when sorting results. By default queries sort records by value.
      | sortDir | producer |  | String | Specify the sort direction ascending or descending. By default queries sort records in descending order. Use sysparm_sortdir=asc to sort in ascending order.
      | suppressAutoSysField | producer |  | Boolean | True to suppress auto generation of system fields (default: false)
      | suppressPaginationHeader | producer |  | Boolean | Set this value to true to remove the Link header from the response. The Link header allows you to request additional pages of data when the number of records matching your query exceeds the query limit
      | table | producer |  | String | The default table can be overridden by header CamelServiceNowTable
      | target | producer |  | Boolean | Set this parameter to true to return only scorecards that have a target.
      | topLevelOnly | producer |  | Boolean | Gets only those categories whose parent is a catalog.
      | apiVersion | advanced |  | String | The ServiceNow REST API version default latest
      | mapper | advanced |  | ObjectMapper | Sets Jackson's ObjectMapper to use for request/reply
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | apiUrl | security |  | String | The ServiceNow REST API url
      | oauthClientId | security |  | String | OAuth2 ClientID
      | oauthClientSecret | security |  | String | OAuth2 ClientSecret
      | oauthTokenUrl | security |  | String | OAuth token Url
      | password | security |  | String | *Required* ServiceNow account password MUST be provided
      | userName | security |  | String | *Required* ServiceNow user account name MUST be provided
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[ServiceNow-Headers]]
      Headers
      ^^^^^^^

      [width="100%",cols="10%,10%,10%,10%,60%",options="header",]
      |===
      |Name |Type |ServiceNow API Parameter |Endpoint option |Description
      |CamelServiceNowResource |String | - | - | The resource to access
      |CamelServiceNowAction |String | - | - | The action to perform
      |CamelServiceNowActionSubject | - | - | String |The subject to which the action should be applied
      |CamelServiceNowModel |Class | - | - | The data model
      |CamelServiceNowRequestModel |Class | - | - | The request data model
      |CamelServiceNowResponseModel |Class | - | - | The response data model
      |CamelServiceNowOffsetNext | - | - | - | -
      |CamelServiceNowOffsetPrev | - | - | - | -
      |CamelServiceNowOffsetFirst | - | - | - | -
      |CamelServiceNowOffsetLast | - | - | - | -
      |CamelServiceNowContentType | - | - | - | -
      |CamelServiceNowContentEncoding | - | - | - | -
      |CamelServiceNowContentMeta | - | - | - | -
      |CamelServiceNowSysId |String | sys_id | - | -
      |CamelServiceNowUserSysId |String | user_sysid | - | -
      |CamelServiceNowUserId |String | user_id | - | -
      |CamelServiceNowCartItemId |String | cart_item_id | - | -
      |CamelServiceNowFileName |String | file_name | - | -
      |CamelServiceNowTable |String | table_name | - | -
      |CamelServiceNowTableSysId |String | table_sys_id | - | -
      |CamelServiceNowEncryptionContext | String | encryption_context | - | -
      |CamelServiceNowCategory | String | sysparm_category  | - | -
      |CamelServiceNowType |String | sysparm_type | - | -
      |CamelServiceNowCatalog | String | sysparm_catalog | - | -
      |CamelServiceNowQuery |String | sysparm_query | - | -
      |CamelServiceNowDisplayValue |String | sysparm_display_value | displayValue  | -
      |CamelServiceNowInputDisplayValue |Boolean | sysparm_input_display_value | inputDisplayValue  | -
      |CamelServiceNowExcludeReferenceLink |Boolean | sysparm_exclude_reference_link | excludeReferenceLink  | -
      |CamelServiceNowFields |String | sysparm_fields | - | -
      |CamelServiceNowLimit |Integer | sysparm_limit | - | -
      |CamelServiceNowText | String | sysparm_text | - | -
      |CamelServiceNowOffset | Integer | sysparm_offset | - | -
      |CamelServiceNowView |String | sysparm_view | - | -
      |CamelServiceNowSuppressAutoSysField |Boolean | sysparm_suppress_auto_sys_field | suppressAutoSysField | -
      |CamelServiceNowSuppressPaginationHeader | Booleab | sysparm_suppress_pagination_header | suppressPaginationHeader | -
      |CamelServiceNowMinFields |String | sysparm_min_fields | - | -
      |CamelServiceNowMaxFields |String | sysparm_max_fields | - | -
      |CamelServiceNowSumFields |String | sysparm_sum_fields | - | -
      |CamelServiceNowAvgFields |String | sysparm_avg_fields | - | -
      |CamelServiceNowCount |Boolean | sysparm_count | - | -
      |CamelServiceGroupBy |String | sysparm_group_by | - | -
      |CamelServiceOrderBy |String | sysparm_order_by | - | -
      |CamelServiceHaving |String | sysparm_having | - | -
      |CamelServiceNowUUID |String | sysparm_uuid | - | -
      |CamelServiceNowBreakdown| String| sysparm_breakdown | - | -
      |CamelServiceNowIncludeScores| Boolean | sysparm_include_scores | includeScores | -
      |CamelServiceNowIncludeScoreNotes | Boolean | sysparm_include_score_notes | includeScoreNotes | -
      |CamelServiceNowIncludeAggregates | Boolean | sysparm_include_aggregates | includeAggregates | -
      |CamelServiceNowIncludeAvailableBreakdowns | Boolean | sysparm_include_available_breakdowns | includeAvailableBreakdowns | -
      |CamelServiceNowIncludeAvailableAggregates | Boolean | sysparm_include_available_aggregates | includeAvailableAggregates | -
      |CamelServiceNowFavorites | Boolean | sysparm_favorites | favorites | -
      |CamelServiceNowKey  | Boolean | sysparm_key | key | -
      |CamelServiceNowTarget | Boolean | sysparm_target | target | -
      |CamelServiceNowDisplay | String | sysparm_display | display | -
      |CamelServiceNowPerPage | Integer | sysparm_per_page | perPage | -
      |CamelServiceNowSortBy | String | sysparm_sortby | sortBy | -
      |CamelServiceNowSortDir | String | sysparm_sortdit | sortDir | -
      |CamelServiceNowContains | String | sysparm_contains | - | -
      |CamelServiceNowTags | String | sysparm_tags | - | -
      |CamelServiceNowPage | String | sysparm_page | - | -
      |CamelServiceNowElementsFilter | String | sysparm_elements_filter | - | -
      |CamelServiceNowBreakdownRelation | String | sysparm_breakdown_relation | - | -
      |CamelServiceNowDataSource | String | sysparm_data_source | - | -
      |CamelServiceNowTopLevelOnly | Boolean | sysparm_top_level_only | topLevelOnly | -
      |CamelServiceNowApiVersion | String | - | - | The REST API version
      |CamelServiceNowResponseMeta | Map | - | - | Meta data provided along with a response
      |===

      [[ServiceNow-Fuji]]
      [cols="10%a,10%a,10%a,70%a", options="header"]
      .API Mapping
      |===
      | CamelServiceNowResource | CamelServiceNowAction | Method | API URI
      1.5+<.^|TABLE
      | RETRIEVE | GET | /api/now/v1/table/{table_name}/{sys_id}
      | CREATE | POST | /api/now/v1/table/{table_name}
      | MODIFY | PUT | /api/now/v1/table/{table_name}/{sys_id}
      | DELETE | DELETE | /api/now/v1/table/{table_name}/{sys_id}
      | UPDATE | PATCH | /api/now/v1/table/{table_name}/{sys_id}

      | AGGREGATE
      | RETRIEVE | GET | /api/now/v1/stats/{table_name}

      1.2+<.^|IMPORT
      | RETRIEVE | GET | /api/now/import/{table_name}/{sys_id}
      | CREATE | POST | /api/now/import/{table_name}
      |===

      NOTE: link:http://wiki.servicenow.com/index.php?title=REST_API#Available_APIs[Fuji REST API Documentation]

      [[ServiceNow-Helsinki]]
      [cols="10%a,10%a,10%a,10%a,60%a", options="header"]
      .API Mapping
      |===
      | CamelServiceNowResource | CamelServiceNowAction | CamelServiceNowActionSubject | Method | API URI
      1.5+<.^|TABLE
      | RETRIEVE | | GET | /api/now/v1/table/{table_name}/{sys_id}
      | CREATE | | POST | /api/now/v1/table/{table_name}
      | MODIFY | | PUT | /api/now/v1/table/{table_name}/{sys_id}
      | DELETE | | DELETE | /api/now/v1/table/{table_name}/{sys_id}
      | UPDATE | | PATCH | /api/now/v1/table/{table_name}/{sys_id}

      | AGGREGATE
      | RETRIEVE | | GET | /api/now/v1/stats/{table_name}

      1.2+<.^|IMPORT
      | RETRIEVE | | GET | /api/now/import/{table_name}/{sys_id}
      | CREATE | | POST | /api/now/import/{table_name}

      1.4+<.^|ATTACHMENT
      | RETRIEVE | | GET | /api/now/api/now/attachment/{sys_id}
      | CONTENT | | GET | /api/now/attachment/{sys_id}/file
      | UPLOAD | | POST | /api/now/api/now/attachment/file
      | DELETE | | DELETE | /api/now/attachment/{sys_id}

      | SCORECARDS
      | RETRIEVE | PERFORMANCE_ANALYTICS | GET | /api/now/pa/scorecards

      1.2+<.^|MISC
      | RETRIEVE | USER_ROLE_INHERITANCE | GET | /api/global/user_role_inheritance
      | CREATE | IDENTIFY_RECONCILE | POST | /api/now/identifyreconcile

      1.2+<.^|SERVICE_CATALOG
      | RETRIEVE | | GET | /sn_sc/servicecatalog/catalogs/{sys_id}
      | RETRIEVE | CATEGORIES |  GET | /sn_sc/servicecatalog/catalogs/{sys_id}/categories

      1.5+<.^|SERVICE_CATALOG_ITEMS
      | RETRIEVE | | GET | /sn_sc/servicecatalog/items/{sys_id}
      | RETRIEVE | SUBMIT_GUIDE | POST | /sn_sc/servicecatalog/items/{sys_id}/submit_guide
      | RETRIEVE | CHECKOUT_GUIDE | POST | /sn_sc/servicecatalog/items/{sys_id}/checkout_guide
      | CREATE | SUBJECT_CART | POST | /sn_sc/servicecatalog/items/{sys_id}/add_to_cart
      | CREATE | SUBJECT_PRODUCER | POST | /sn_sc/servicecatalog/items/{sys_id}/submit_producer

      1.6+<.^|SERVICE_CATALOG_CARTS
      | RETRIEVE | | GET | /sn_sc/servicecatalog/cart
      | RETRIEVE | DELIVERY_ADDRESS | GET | /sn_sc/servicecatalog/cart/delivery_address/{user_id}
      | RETRIEVE | CHECKOUT | POST | /sn_sc/servicecatalog/cart/checkout
      | UPDATE | | POST | /sn_sc/servicecatalog/cart/{cart_item_id}
      | UPDATE | CHECKOUT | POST | /sn_sc/servicecatalog/cart/submit_order
      | DELETE | | DELETE | /sn_sc/servicecatalog/cart/{sys_id}/empty

      | SERVICE_CATALOG_CATEGORIES
      | RETRIEVE | | GET | /sn_sc/servicecatalog/categories/{sys_id}

      |===

      NOTE: https://docs.servicenow.com/bundle/helsinki-servicenow-platform/page/integrate/inbound-rest/reference/r_RESTResources.html[Helsinki REST API Documentation]

      [[ServiceNow-Usageexamples]]
      Usage examples:
      ^^^^^^^^^^^^^^^
      ??
      {% raw %}
      [source,java]
      .Retrieve 10 Incidents
      -------------------------------------------------------------------------------------------------------------------
      context.addRoutes(new RouteBuilder() {
          public void configure() {
             from("direct:servicenow")
                 .to("servicenow:{{env:SERVICENOW_INSTANCE}}"
                     + "?userName={{env:SERVICENOW_USERNAME}}"
                     + "&password={{env:SERVICENOW_PASSWORD}}"
                     + "&oauthClientId={{env:SERVICENOW_OAUTH2_CLIENT_ID}}"
                     + "&oauthClientSecret={{env:SERVICENOW_OAUTH2_CLIENT_SECRET}}"
                 .to("mock:servicenow");
          }
      });??

      FluentProducerTemplate.on(context)
          .withHeader(ServiceNowConstants.RESOURCE, "table")
          .withHeader(ServiceNowConstants.ACTION, ServiceNowConstants.ACTION_RETRIEVE)
          .withHeader(ServiceNowConstants.SYSPARM_LIMIT.getId(), "10")
          .withHeader(ServiceNowConstants.TABLE, "incident")
          .withHeader(ServiceNowConstants.MODEL, Incident.class)
          .to("direct:servicenow")
          .send();
      -------------------------------------------------------------------------------------------------------------------
      {% endraw %}
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-servlet
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: servlet
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: servlet
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: servlet
          spec:
            containers:
            - image: fabric8/connector-servlet:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: servlet
        extendsScheme: http
        syntax: servlet:contextPath
        title: Servlet
        description: To use a HTTP Servlet as entry for Camel routes when running in a servlet container.
        label: http
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.servlet.ServletComponent
        groupId: org.apache.camel
        artifactId: camel-servlet
        version: 2.18.1
      componentProperties:
        servletName:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Default name of servlet to use. The default name is CamelServlet.
        httpRegistry:
          kind: property
          type: object
          javaType: org.apache.camel.component.servlet.HttpRegistry
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.servlet.HttpRegistry.
        attachmentMultipartBinding:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to automatic bind multipart/form-data as attachments on the Camel Exchange. This is turn off by default as this may require servlet specific configuration to enable this when using Servlet's.
        httpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        httpConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.http.common.HttpConfiguration
          deprecated: false
          secret: false
          description: To use the shared HttpConfiguration as base configuration.
        allowJavaSerializedObject:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      properties:
        contextPath:
          kind: path
          group: consumer
          label: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The context-path to use
        disableStreamCache:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory/overflow to file Stream caching) cache. By default Camel will cache the Servlet input stream to support reading it multiple times to ensure it Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. DefaultHttpBinding will copy the request input stream into a stream cache and put it into message body if this option is false to support reading the stream multiple times. If you use Servlet to bridge/proxy an endpoint then consider enabling this option to improve performance in case you do not need to read the message payload multiple times. The http/http4 producer will by default cache the response body stream. If setting this option to true then the producers will not cache the response body stream but use the response stream as-is as the message body.
        async:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Configure the consumer to work in async mode
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        chunked:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is false the Servlet will disable the HTTP streaming and set the content-length header on the response
        eagerCheckContentAvailable:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to eager check whether the HTTP requests has content if the content-length header is 0 or not present. This can be turned on in case HTTP clients do not send streamed data.
        headerFilterStrategy:
          kind: parameter
          group: consumer
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        httpBinding:
          kind: parameter
          group: consumer
          type: object
          javaType: org.apache.camel.http.common.HttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        httpMethodRestrict:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.
        matchOnUriPrefix:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
        optionsEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off.
        responseBufferSize:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: To use a custom buffer size on the javax.servlet.ServletResponse.
        servletName:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelServlet
          description: Name of the servlet to use
        traceEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP TRACE for this Servlet consumer. By default TRACE is turned off.
        transferException:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. On the producer side the exception will be deserialized and thrown as is instead of the HttpOperationFailedException. The caused exception is required to be serialized. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        attachmentMultipartBinding:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to automatic bind multipart/form-data as attachments on the Camel Exchange. This is turn off by default as this may require servlet specific configuration to enable this when using Servlet's.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        mapHttpMessageBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Body of the exchange will be mapped to HTTP body. Setting this to false will avoid the HTTP mapping.
        mapHttpMessageFormUrlEncodedBody:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Form Encoded body of the exchange will be mapped to HTTP. Setting this to false will avoid the HTTP Form Encoded body mapping.
        mapHttpMessageHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is true then IN exchange Headers of the exchange will be mapped to HTTP headers. Setting this to false will avoid the HTTP Headers mapping.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[SERVLET-ServletComponent]]\nServlet Component\n~~~~~~~~~~~~~~~~~\n\
      \nThe *servlet:* component provides HTTP based\nlink:endpoint.html[endpoints]\
      \ for consuming HTTP requests that arrive at\na HTTP endpoint that is bound\
      \ to a published Servlet.\n\nMaven users will need to add the following dependency\
      \ to their `pom.xml`\nfor this component:\n\n[source,xml]\n---------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-servlet</artifactId>\n\
      \    <version>x.x.x</version>\n    <\\!-\\- use the same version as your Camel\
      \ core version \\-->\n</dependency>\n---------------------------------------------------------------\n\
      \n\nINFO: *Stream*. \nServlet is stream based, which means the input it receives\
      \ is submitted\nto Camel as a stream. That means you will only be able to read\
      \ the\ncontent of the stream *once*. If you find a situation where the message\n\
      body appears to be empty or you need to access the data multiple times\n(eg:\
      \ doing multicasting, or redelivery error handling) you should use\nlink:stream-caching.html[Stream\
      \ caching] or convert the message body to\na `String` which is safe to be read\
      \ multiple times.\n\n[[SERVLET-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n\
      ---------------------------------\nservlet://relative_path[?options]\n---------------------------------\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[SERVLET-Options]]\nOptions\n^^^^^^^\n\n// component options: START\nThe\
      \ Servlet component supports 7 options which are listed below.\n\n\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| servletName | String | Default name of servlet\
      \ to use. The default name is CamelServlet.\n| httpRegistry | HttpRegistry |\
      \ To use a custom org.apache.camel.component.servlet.HttpRegistry.\n| attachmentMultipartBinding\
      \ | boolean | Whether to automatic bind multipart/form-data as attachments on\
      \ the Camel Exchange. This is turn off by default as this may require servlet\
      \ specific configuration to enable this when using Servlet's.\n| httpBinding\
      \ | HttpBinding | To use a custom HttpBinding to control the mapping between\
      \ Camel message and HttpClient.\n| httpConfiguration | HttpConfiguration | To\
      \ use the shared HttpConfiguration as base configuration.\n| allowJavaSerializedObject\
      \ | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object\
      \ This is by default turned off. If you enable this then be aware that Java\
      \ will deserialize the incoming data from the request to Java and that can be\
      \ a potential security risk.\n| headerFilterStrategy | HeaderFilterStrategy\
      \ | To use a custom HeaderFilterStrategy to filter header to and from Camel\
      \ message.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n// endpoint options: START\nThe Servlet\
      \ component supports 22 endpoint options which are listed below:\n\n{% raw %}\n\
      [width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| contextPath | consumer\
      \ |  | String | *Required* The context-path to use\n| disableStreamCache | common\
      \ | false | boolean | Determines whether or not the raw input stream from Servlet\
      \ is cached or not (Camel will read the stream into a in memory/overflow to\
      \ file Stream caching) cache. By default Camel will cache the Servlet input\
      \ stream to support reading it multiple times to ensure it Camel can retrieve\
      \ all data from the stream. However you can set this option to true when you\
      \ for example need to access the raw stream such as streaming it directly to\
      \ a file or other persistent store. DefaultHttpBinding will copy the request\
      \ input stream into a stream cache and put it into message body if this option\
      \ is false to support reading the stream multiple times. If you use Servlet\
      \ to bridge/proxy an endpoint then consider enabling this option to improve\
      \ performance in case you do not need to read the message payload multiple times.\
      \ The http/http4 producer will by default cache the response body stream. If\
      \ setting this option to true then the producers will not cache the response\
      \ body stream but use the response stream as-is as the message body.\n| async\
      \ | consumer | false | boolean | Configure the consumer to work in async mode\n\
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | chunked | consumer | true | boolean | If this option is false the Servlet\
      \ will disable the HTTP streaming and set the content-length header on the response\n\
      | eagerCheckContentAvailable | consumer | false | boolean | Whether to eager\
      \ check whether the HTTP requests has content if the content-length header is\
      \ 0 or not present. This can be turned on in case HTTP clients do not send streamed\
      \ data.\n| headerFilterStrategy | consumer |  | HeaderFilterStrategy | To use\
      \ a custom HeaderFilterStrategy to filter header to and from Camel message.\n\
      | httpBinding | consumer |  | HttpBinding | To use a custom HttpBinding to control\
      \ the mapping between Camel message and HttpClient.\n| httpMethodRestrict |\
      \ consumer |  | String | Used to only allow consuming if the HttpMethod matches\
      \ such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.\n\
      | matchOnUriPrefix | consumer | false | boolean | Whether or not the consumer\
      \ should try to find a target consumer by matching the URI prefix if no exact\
      \ match is found.\n| optionsEnabled | consumer | false | boolean | Specifies\
      \ whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS\
      \ is turned off.\n| responseBufferSize | consumer |  | Integer | To use a custom\
      \ buffer size on the javax.servlet.ServletResponse.\n| servletName | consumer\
      \ | CamelServlet | String | Name of the servlet to use\n| traceEnabled | consumer\
      \ | false | boolean | Specifies whether to enable HTTP TRACE for this Servlet\
      \ consumer. By default TRACE is turned off.\n| transferException | consumer\
      \ | false | boolean | If enabled and an Exchange failed processing on the consumer\
      \ side and if the caused Exception was send back serialized in the response\
      \ as a application/x-java-serialized-object content type. On the producer side\
      \ the exception will be deserialized and thrown as is instead of the HttpOperationFailedException.\
      \ The caused exception is required to be serialized. This is by default turned\
      \ off. If you enable this then be aware that Java will deserialize the incoming\
      \ data from the request to Java and that can be a potential security risk.\n\
      | attachmentMultipartBinding | consumer (advanced) | false | boolean | Whether\
      \ to automatic bind multipart/form-data as attachments on the Camel Exchange.\
      \ This is turn off by default as this may require servlet specific configuration\
      \ to enable this when using Servlet's.\n| exceptionHandler | consumer (advanced)\
      \ |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| mapHttpMessageBody | advanced | true | boolean | If this option\
      \ is true then IN exchange Body of the exchange will be mapped to HTTP body.\
      \ Setting this to false will avoid the HTTP mapping.\n| mapHttpMessageFormUrlEncodedBody\
      \ | advanced | true | boolean | If this option is true then IN exchange Form\
      \ Encoded body of the exchange will be mapped to HTTP. Setting this to false\
      \ will avoid the HTTP Form Encoded body mapping.\n| mapHttpMessageHeaders |\
      \ advanced | true | boolean | If this option is true then IN exchange Headers\
      \ of the exchange will be mapped to HTTP headers. Setting this to false will\
      \ avoid the HTTP Headers mapping.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n[[SERVLET-MessageHeaders]]\nMessage\
      \ Headers\n^^^^^^^^^^^^^^^\n\nCamel will apply the same Message Headers as the\
      \ link:http.html[HTTP]\ncomponent.\n\nCamel will also populate *all* `request.parameter`\
      \ and\n`request.headers`. For example, if a client request has the URL,\n`http://myserver/myserver?orderid=123`,\
      \ the exchange will contain a\nheader named `orderid` with the value 123.\n\n\
      [[SERVLET-Usage]]\nUsage\n^^^^^\n\nYou can consume only from endpoints generated\
      \ by the Servlet component.\nTherefore, it should be used only as input into\
      \ your Camel routes. To\nissue HTTP requests against other HTTP endpoints, use\
      \ the\nlink:http.html[HTTP Component]\n\n[[SERVLET-PuttingCamelJARsintheappserverbootclasspath]]\n\
      Putting Camel JARs in the app server boot classpath\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nIf you put the Camel JARs such as `camel-core`, `camel-servlet`, etc. in\n\
      the boot classpath of your application server (eg usually in its lib\ndirectory),\
      \ then mind that the servlet mapping list is now shared\nbetween multiple deployed\
      \ Camel application in the app server.\n\nMind that putting Camel JARs in the\
      \ boot classpath of the application\nserver is generally not best practice!\n\
      \nSo in those situations you *must* define a custom and unique servlet\nname\
      \ in each of your Camel application, eg in the `web.xml` define:\n\n[source,xml]\n\
      ---------------------------------------------------------------------------------------------\n\
      <servlet>\n  <servlet-name>MyServlet</servlet-name>\n  <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>\n\
      \  <load-on-startup>1</load-on-startup>\n</servlet>\n\n<servlet-mapping>\n \
      \ <servlet-name>MyServlet</servlet-name>\n  <url-pattern>/*</url-pattern>\n\
      </servlet-mapping>\n---------------------------------------------------------------------------------------------\n\
      \nAnd in your Camel endpoints then include the servlet name as well\n\n[source,xml]\n\
      ---------------------------------------------------\n<route>\n  <from uri=\"\
      servlet://foo?servletName=MyServlet\"/>\n  ...\n</route>\n---------------------------------------------------\n\
      \nFrom *Camel 2.11* onwards Camel will detect this duplicate and fail to\nstart\
      \ the application. You can control to ignore this duplicate by\nsetting the\
      \ servlet init-parameter ignoreDuplicateServletName to true as\nfollows:\n\n\
      [source,xml]\n-----------------------------------------------------------------------------------------------\n\
      \  <servlet>\n    <servlet-name>CamelServlet</servlet-name>\n    <display-name>Camel\
      \ Http Transport Servlet</display-name>\n    <servlet-class>org.apache.camel.component.servlet.CamelHttpTransportServlet</servlet-class>\n\
      \    <init-param>\n      <param-name>ignoreDuplicateServletName</param-name>\n\
      \      <param-value>true</param-value>\n    </init-param>\n  </servlet>\n-----------------------------------------------------------------------------------------------\n\
      \nBut its *strongly advised* to use unique servlet-name for each Camel\napplication\
      \ to avoid this duplication clash, as well any unforeseen\nside-effects.\n\n\
      [[SERVLET-Sample]]\nSample\n^^^^^^\n\nINFO: From Camel 2.7 onwards it's easier\
      \ to use link:servlet.html[Servlet] in\nSpring web applications. See link:servlet-tomcat-example.html[Servlet\n\
      Tomcat Example] for details.\n\nIn this sample, we define a route that exposes\
      \ a HTTP service at\n`http://localhost:8080/camel/services/hello`. +\n First,\
      \ you need to publish the\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java[CamelHttpTransportServlet]\n\
      through the normal Web Container, or OSGi Service. +\n Use the `Web.xml` file\
      \ to publish the\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java[CamelHttpTransportServlet]\n\
      as follows:\n\nThen you can define your route as follows:\n\nNOTE: *Specify\
      \ the relative path for camel-servlet endpoint*\nSince we are binding the Http\
      \ transport with a published servlet, and we\ndon't know the servlet's application\
      \ context path, the `camel-servlet`\nendpoint uses the relative path to specify\
      \ the endpoint's URL. A client\ncan access the `camel-servlet` endpoint through\
      \ the servlet publish\naddress: `(\"http://localhost:8080/camel/services\")\
      \ + RELATIVE_PATH(\"/hello\")`.\n\n[[SERVLET-SamplewhenusingSpring3.x]]\nSample\
      \ when using Spring 3.x\n++++++++++++++++++++++++++++\n\nSee link:servlet-tomcat-example.html[Servlet\
      \ Tomcat Example]\n\n[[SERVLET-SamplewhenusingSpring2.x]]\nSample when using\
      \ Spring 2.x\n++++++++++++++++++++++++++++\n\nWhen using the Servlet component\
      \ in a Camel/Spring application it's\noften required to load the Spring ApplicationContext\
      \ _after_ the Servlet\ncomponent has started. This can be accomplished by using\
      \ Spring's\n`ContextLoaderServlet` instead of `ContextLoaderListener`. In that\
      \ case\nyou'll need to start `ContextLoaderServlet` after\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java[CamelHttpTransportServlet]\n\
      like this:\n\n[source,xml]\n-------------------------------------------------------------------------\n\
      \ \n<web-app>\n  <servlet> \n        <servlet-name>CamelServlet</servlet-name>\
      \ \n        <servlet-class> \n            org.apache.camel.component.servlet.CamelHttpTransportServlet\
      \ \n        </servlet-class> \n        <load-on-startup>1</load-on-startup>\
      \ \n  </servlet> \n  <servlet> \n        <servlet-name>SpringApplicationContext</servlet-name>\
      \ \n        <servlet-class> \n            org.springframework.web.context.ContextLoaderServlet\
      \ \n        </servlet-class> \n        <load-on-startup>2</load-on-startup>\
      \ \n  </servlet> \n<web-app>\n-------------------------------------------------------------------------\n\
      \n[[SERVLET-SamplewhenusingOSGi]]\nSample when using OSGi\n++++++++++++++++++++++\n\
      \nFrom *Camel 2.6.0*, you can publish the\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java[CamelHttpTransportServlet]\n\
      as an OSGi service with help of SpringDM like this.\n\nThen use this service\
      \ in your camel route like this:\n\nFor versions prior to Camel 2.6 you can\
      \ use an `Activator` to publish\nthe\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-servlet/src/main/java/org/apache/camel/component/servlet/CamelHttpTransportServlet.java[CamelHttpTransportServlet]\n\
      on the OSGi platform\n\n[[SERVLET-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:servlet-tomcat-example.html[Servlet\
      \ Tomcat Example]\n* link:servlet-tomcat-no-spring-example.html[Servlet Tomcat\
      \ No Spring\nExample]\n* link:http.html[HTTP]\n* link:jetty.html[Jetty]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sftp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sftp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sftp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sftp
          spec:
            containers:
            - image: fabric8/connector-sftp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sftp
        extendsScheme: file
        syntax: sftp:host:port/directoryName
        title: SFTP
        description: The sftp (FTP over SSH) component is used for uploading or downloading files from SFTP servers.
        label: file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.file.remote.SftpComponent
        groupId: org.apache.camel
        artifactId: camel-ftp
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the FTP server
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port of the FTP server
        directoryName:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The starting directory
        charset:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
        disconnect:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
        doneFileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Producer: If provided then Camel will write a 2nd done file when
            the original file has been written. The done file will be empty. This option
            configures what file name to use. Either you can specify a fixed name. Or you
            can use dynamic placeholders. The done file will always be written in the same
            folder as the original file. Consumer: If provided Camel will only consume files
            if a done file exists. This option configures what file name to use. Either
            you can specify a fixed name. Or you can use dynamic placeholders.The done file
            is always expected in the same folder as the original file. Only $file.name
            and $file.name.noext is supported as dynamic placeholders.'
        fileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Use Expression such as File Language to dynamically set the filename.
            For consumers it''s used as a filename filter. For producers it''s used to evaluate
            the filename to write. If an expression is set it take precedence over the CamelFileName
            header. (Note: The header itself can also be an Expression). The expression
            options support both String and Expression types. If the expression is a String
            type it is always evaluated using the File Language. If the expression is an
            Expression type the specified Expression type is used - this allows you for
            instance to use OGNL expressions. For the consumer you can use it to filter
            filenames so you can for instance consume today''s file using the File Language
            syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName
            header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName
            is a header that is used only once and makes it easier as this avoids to temporary
            store CamelFileName and have to restore it afterwards.'
        jschLoggingLevel:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: The logging level to use for JSCH activity logging. As JSCH is verbose at by default at INFO level the threshold is WARN by default.
        separator:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.file.remote.RemoteFileConfiguration.PathSeparator
          deprecated: false
          secret: false
          defaultValue: UNIX
          description: Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name
        fastExistsCheck:
          kind: parameter
          group: common (advanced)
          label: common,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set this option to be true camel-ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly if the option is false camel-ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server has a lot of files.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file will be deleted after it is processed successfully.
        moveFailed:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the move failure expression based on Simple language. For example
            to move files into a .error subdirectory use: .error. Note: When moving the
            files to the fail location Camel will handle the error and will not pick up
            the file again.'
        noop:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
        preMove:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
        recursive:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If a directory will look for files in all the sub-directories as well.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        streamDownload:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets the download method to use when not using a local working directory. If set to true the remote files are streamed to the route as they are read. When set to false the remote files are loaded into memory before being sent into the route.
        directoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
        download:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the FTP consumer should download the file. If this option is set to false then the message body will be null but the consumer will still trigger a Camel Exchange that has details about the file such as file name file size etc. It's just that the file will not be downloaded.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        ignoreFileNotFoundOrPermissionError:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to ignore when trying to download a file which does not exist or due to permission error. By default when a file does not exists or insufficient permission then an exception is thrown. Setting this option to true allows to ignore that instead.
        inProgressRepository:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
        localWorkDirectory:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
        onCompletionExceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        processStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.file.GenericFileProcessStrategy<T>
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
        startingDirectoryMustExist:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
        fileExist:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.component.file.GenericFileExist
          enum:
          - Override
          - Append
          - Fail
          - Ignore
          - Move
          - TryRename
          deprecated: false
          secret: false
          defaultValue: Override
          description: What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
        flatten:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
        moveExisting:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Expression (such as File Language) used to compute file name to
            use when fileExist=Move is configured. To move files into a backup subdirectory
            just enter backup. This option only supports the following File Language tokens:
            file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext
            and file:parent. Notice the file:parent is not supported by the FTP component
            as the FTP component can only move any existing files to a relative directory
            based on current dir as base.'
        tempFileName:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
        tempPrefix:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
        chmod:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Allows you to set chmod on the stored file. For example chmod=640.
        disconnectOnBatchComplete:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
        eagerDeleteTargetFile:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
        keepLastModified:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Will keep the last modified timestamp from the source file (if any).
            Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This
            header can contain either a java.util.Date or long with the timestamp. If the
            timestamp exists and the option is enabled it will set this timestamp on the
            written file. Note: This option only applies to the file producer. You cannot
            use this option with any of the ftp producers.'
        sendNoop:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid which allows to silently re-connect to be able to upload the file. However if this causes problems you can turn this option off.
        autoCreate:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "131072"
          description: Write buffer sized in bytes.
        bulkRequests:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Specifies how many requests may be outstanding at any one time. Increasing this value may slightly improve file transfer speed but will increase memory usage.
        compression:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'To use compression. Specify a level from 1 to 10. Important: You
            must manually add the needed JSCH zlib JAR to the classpath for compression
            support.'
        connectTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
        maximumReconnectAttempts:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior.
        proxy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: com.jcraft.jsch.Proxy
          deprecated: false
          secret: false
          description: To use a custom configured com.jcraft.jsch.Proxy. This proxy is used to consume/send messages from the target SFTP host.
        reconnectDelay:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Delay in millis Camel will wait before performing a reconnect attempt.
        serverAliveCountMax:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Allows you to set the serverAliveCountMax of the sftp session
        serverAliveInterval:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Allows you to set the serverAliveInterval of the sftp session
        soTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Sets the so timeout Used only by FTPClient
        stepwise:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether we should stepwise change directories while traversing file structures when downloading files or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        throwExceptionOnConnectFailed:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should an exception be thrown if connection failed (exhausted) By default exception is not thrown and a WARN is logged. You can use this to enable exception being thrown and handle the thrown exception from the org.apache.camel.spi.PollingConsumerPollStrategy rollback method.
        timeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Sets the data timeout for waiting for reply Used only by FTPClient
        antExclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
        antFilterCaseSensitive:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets case sensitive flag on ant fiter
        antInclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
        eagerMaxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
        exclude:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        filter:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.component.file.GenericFileFilter<T>
          deprecated: false
          secret: false
          description: Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
        filterDirectory:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
        filterFile:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
        idempotent:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
        idempotentKey:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'To use a custom idempotent key. By default the absolute path of
            the file is used. You can use the File Language for example to use the file
            name and file size you can do: idempotentKey=$file:name-$file:size'
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
        include:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
        maxDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum depth to traverse when recursively processing a directory.
        maxMessagesPerPoll:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'To define a maximum messages to gather per poll. By default no maximum
            is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the
            server that there are thousands of files. Set a value of 0 or negative to disabled
            it. Notice: If this option is in use then the File and FTP components will limit
            before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500
            then only the first 500 files will be picked up and then sorted. You can use
            the eagerMaxMessagesPerPoll option and set this to false to allow to scan all
            files first and then sort afterwards.'
        minDepth:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
        move:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
        exclusiveReadLockStrategy:
          kind: parameter
          group: lock
          label: consumer,lock
          type: object
          javaType: org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy<T>
          deprecated: false
          secret: false
          description: Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
        readLock:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: java.lang.String
          enum:
          - none
          - markerFile
          - fileLock
          - rename
          - changed
          - idempotent
          deprecated: false
          secret: false
          description: 'Used by consumer to only poll the files if it has exclusive read-lock
            on the file (i.e. the file is not in-progress or being written). Camel will
            wait until the file lock is granted. This option provides the build in strategies:
            none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock)
            and then holds a lock on it. This option is not available for the FTP component
            changed - Changed is using file length/modification timestamp to detect whether
            the file is currently being copied or not. Will at least use 1 sec to determine
            this so this option cannot consume files as fast as the others but can be more
            reliable as the JDK IO API cannot always determine whether a file is currently
            being used by another process. The option readLockCheckInterval can be used
            to set the check frequency. fileLock - is for using java.nio.channels.FileLock.
            This option is not avail for the FTP component. This approach should be avoided
            when accessing a remote file system via a mount/share unless that file system
            supports distributed file locks. rename - rename is for using a try to rename
            the file as a test if we can get exclusive read-lock. idempotent - (only for
            file component) idempotent is for using a idempotentRepository as the read-lock.
            This allows to use read locks that supports clustering if the idempotent repository
            implementation supports that. Notice: The various read locks is not all suited
            to work in clustered mode where concurrent consumers on different nodes is competing
            for the same files on a shared file system. The markerFile using a close to
            atomic operation to create the empty marker file but its not guaranteed to work
            in a cluster. The fileLock may work better but then the file system need to
            support distributed file locks and so on. Using the idempotent read lock can
            support clustering if the idempotent repository supports clustering such as
            Hazelcast Component or Infinispan.'
        readLockCheckInterval:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: 'Interval in millis for the read-lock if supported by the read lock.
            This interval is used for sleeping between attempts to acquire the read lock.
            For example when using the changed read lock you can set a higher interval period
            to cater for slow writes. The default of 1 sec. may be too fast if the producer
            is very slow writing the file. Notice: For FTP the default readLockCheckInterval
            is 5000. The readLockTimeout value must be higher than readLockCheckInterval
            but a rule of thumb is to have a timeout that is at least 2 or more times higher
            than the readLockCheckInterval. This is needed to ensure that amble time is
            allowed for the read lock process to try to grab the lock before the timeout
            was hit.'
        readLockDeleteOrphanLockFiles:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
        readLockLoggingLevel:
          kind: parameter
          group: lock
          label: consumer,lock
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          deprecated: false
          secret: false
          defaultValue: WARN
          description: 'Logging level used when a read lock could not be acquired. By default
            a WARN is logged. You can change this level for example to OFF to not have any
            logging. This option is only applicable for readLock of types: changed fileLock
            rename.'
        readLockMarkerFile:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
        readLockMinAge:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
        readLockMinLength:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1"
          description: This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
        readLockRemoveOnCommit:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
        readLockRemoveOnRollback:
          kind: parameter
          group: lock
          label: consumer,lock
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
        readLockTimeout:
          kind: parameter
          group: lock
          label: consumer,lock
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: 'Optional timeout in millis for the read-lock if supported by the
            read-lock. If the read-lock could not be granted and the timeout triggered then
            Camel will skip the file. At next poll Camel will try the file again and this
            time maybe the read-lock could be granted. Use a value of 0 or lower to indicate
            forever. Currently fileLock changed and rename support the timeout. Notice:
            For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout
            value must be higher than readLockCheckInterval but a rule of thumb is to have
            a timeout that is at least 2 or more times higher than the readLockCheckInterval.
            This is needed to ensure that amble time is allowed for the read lock process
            to try to grab the lock before the timeout was hit.'
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        shuffle:
          kind: parameter
          group: sort
          label: consumer,sort
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To shuffle the list of files (sort in random order)
        sortBy:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
        sorter:
          kind: parameter
          group: sort
          label: consumer,sort
          type: object
          javaType: java.util.Comparator<org.apache.camel.component.file.GenericFile<T>>
          deprecated: false
          secret: false
          description: Pluggable sorter as a java.util.Comparator class.
        ciphers:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Set a comma separated list of ciphers that will be used in order
            of preference. Possible cipher names are defined by JCraft JSCH. Some examples
            include: aes128-ctraes128-cbc3des-ctr3des-cbcblowfish-cbcaes192-cbcaes256-cbc.
            If not specified the default list from JSCH will be used.'
        keyPair:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: java.security.KeyPair
          deprecated: false
          secret: true
          description: Sets a key pair of the public and private key so to that the SFTP endpoint can do public/private key verification.
        knownHosts:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: byte[]
          deprecated: false
          secret: true
          description: Sets the known_hosts from the byte array so that the SFTP endpoint can do host key verification.
        knownHostsFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the known_hosts file so that the SFTP endpoint can do host key verification.
        knownHostsUri:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the known_hosts file (loaded from classpath by default) so that the SFTP endpoint can do host key verification.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password to use for login
        preferredAuthentications:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the preferred authentications which SFTP endpoint will used. Some example include:passwordpublickey. If not specified the default list from JSCH will be used.
        privateKey:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: byte[]
          deprecated: false
          secret: true
          description: Set the private key as byte so that the SFTP endpoint can do private key verification.
        privateKeyFile:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Set the private key file so that the SFTP endpoint can do private key verification.
        privateKeyPassphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Set the private key file passphrase so that the SFTP endpoint can do private key verification.
        privateKeyUri:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Set the private key file (loaded from classpath by default) so that the SFTP endpoint can do private key verification.
        strictHostKeyChecking:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          enum:
          - no
          - yes
          deprecated: false
          secret: false
          defaultValue: no
          description: Sets whether to use strict host key checking.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Username to use for login
        useUserKnownHostsFile:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If knownHostFile has not been explicit configured then use the host file from System.getProperty(user.home)/.ssh/known_hosts
    documentation.adoc: |
      [[SFTPComponent]]
      SFTP Component
      ~~~~~~~~~~~~~~

      This component provides access to remote file systems over the FTP and
      SFTP protocols.

      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-ftp</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      -----------------------------------------------------------------------

      For more information you can look at link:ftp.html[FTP component]

      [[SFTP-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      The options below are exclusive for the FTPS component.

      // component options: START
      The SFTP component has no options.
      // component options: END


      // endpoint options: START
      The SFTP component supports 112 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Hostname of the FTP server
      | port | common |  | int | Port of the FTP server
      | directoryName | common |  | String | The starting directory
      | charset | common |  | String | This option is used to specify the encoding of the file. You can use this on the consumer to specify the encodings of the files which allow Camel to know the charset it should load the file content in case the file content is being accessed. Likewise when writing a file you can use this option to specify which charset to write the file as well.
      | disconnect | common | false | boolean | Whether or not to disconnect from remote FTP server right after use. Disconnect will only disconnect the current connection to the FTP server. If you have a consumer which you want to stop then you need to stop the consumer/route instead.
      | doneFileName | common |  | String | Producer: If provided then Camel will write a 2nd done file when the original file has been written. The done file will be empty. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders. The done file will always be written in the same folder as the original file. Consumer: If provided Camel will only consume files if a done file exists. This option configures what file name to use. Either you can specify a fixed name. Or you can use dynamic placeholders.The done file is always expected in the same folder as the original file. Only $file.name and $file.name.noext is supported as dynamic placeholders.
      | fileName | common |  | String | Use Expression such as File Language to dynamically set the filename. For consumers it's used as a filename filter. For producers it's used to evaluate the filename to write. If an expression is set it take precedence over the CamelFileName header. (Note: The header itself can also be an Expression). The expression options support both String and Expression types. If the expression is a String type it is always evaluated using the File Language. If the expression is an Expression type the specified Expression type is used - this allows you for instance to use OGNL expressions. For the consumer you can use it to filter filenames so you can for instance consume today's file using the File Language syntax: mydata-$date:now:yyyyMMdd.txt. The producers support the CamelOverruleFileName header which takes precedence over any existing CamelFileName header; the CamelOverruleFileName is a header that is used only once and makes it easier as this avoids to temporary store CamelFileName and have to restore it afterwards.
      | jschLoggingLevel | common | WARN | LoggingLevel | The logging level to use for JSCH activity logging. As JSCH is verbose at by default at INFO level the threshold is WARN by default.
      | separator | common | UNIX | PathSeparator | Sets the path separator to be used. UNIX = Uses unix style path separator Windows = Uses windows style path separator Auto = (is default) Use existing path separator in file name
      | fastExistsCheck | common (advanced) | false | boolean | If set this option to be true camel-ftp will use the list file directly to check if the file exists. Since some FTP server may not support to list the file directly if the option is false camel-ftp will use the old way to list the directory and check if the file exists. This option also influences readLock=changed to control whether it performs a fast check to update file information or not. This can be used to speed up the process if the FTP server has a lot of files.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delete | consumer | false | boolean | If true the file will be deleted after it is processed successfully.
      | moveFailed | consumer |  | String | Sets the move failure expression based on Simple language. For example to move files into a .error subdirectory use: .error. Note: When moving the files to the fail location Camel will handle the error and will not pick up the file again.
      | noop | consumer | false | boolean | If true the file is not moved or deleted in any way. This option is good for readonly data or for ETL type requirements. If noop=true Camel will set idempotent=true as well to avoid consuming the same files over and over again.
      | preMove | consumer |  | String | Expression (such as File Language) used to dynamically set the filename when moving it before processing. For example to move in-progress files into the order directory set this value to order.
      | recursive | consumer | false | boolean | If a directory will look for files in all the sub-directories as well.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | streamDownload | consumer | false | boolean | Sets the download method to use when not using a local working directory. If set to true the remote files are streamed to the route as they are read. When set to false the remote files are loaded into memory before being sent into the route.
      | directoryMustExist | consumer (advanced) | false | boolean | Similar to startingDirectoryMustExist but this applies during polling recursive sub directories.
      | download | consumer (advanced) | false | boolean | Whether the FTP consumer should download the file. If this option is set to false then the message body will be null but the consumer will still trigger a Camel Exchange that has details about the file such as file name file size etc. It's just that the file will not be downloaded.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | ignoreFileNotFoundOrPermissionError | consumer (advanced) | false | boolean | Whether to ignore when trying to download a file which does not exist or due to permission error. By default when a file does not exists or insufficient permission then an exception is thrown. Setting this option to true allows to ignore that instead.
      | inProgressRepository | consumer (advanced) |  | String> | A pluggable in-progress repository org.apache.camel.spi.IdempotentRepository. The in-progress repository is used to account the current in progress files being consumed. By default a memory based repository is used.
      | localWorkDirectory | consumer (advanced) |  | String | When consuming a local work directory can be used to store the remote file content directly in local files to avoid loading the content into memory. This is beneficial if you consume a very big remote file and thus can conserve memory.
      | onCompletionExceptionHandler | consumer (advanced) |  | ExceptionHandler | To use a custom org.apache.camel.spi.ExceptionHandler to handle any thrown exceptions that happens during the file on completion process where the consumer does either a commit or rollback. The default implementation will log any exception at WARN level and ignore.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | processStrategy | consumer (advanced) |  | GenericFileProcessStrategy<T> | A pluggable org.apache.camel.component.file.GenericFileProcessStrategy allowing you to implement your own readLock option or similar. Can also be used when special conditions must be met before a file can be consumed such as a special ready file exists. If this option is set then the readLock option does not apply.
      | startingDirectoryMustExist | consumer (advanced) | false | boolean | Whether the starting directory must exist. Mind that the autoCreate option is default enabled which means the starting directory is normally auto created if it doesn't exist. You can disable autoCreate and enable this to ensure the starting directory must exist. Will thrown an exception if the directory doesn't exist.
      | fileExist | producer | Override | GenericFileExist | What to do if a file already exists with the same name. Override which is the default replaces the existing file. Append - adds content to the existing file. Fail - throws a GenericFileOperationException indicating that there is already an existing file. Ignore - silently ignores the problem and does not override the existing file but assumes everything is okay. Move - option requires to use the moveExisting option to be configured as well. The option eagerDeleteTargetFile can be used to control what to do if an moving the file and there exists already an existing file otherwise causing the move operation to fail. The Move option will move any existing files before writing the target file. TryRename Camel is only applicable if tempFileName option is in use. This allows to try renaming the file from the temporary name to the actual name without doing any exists check.This check may be faster on some file systems and especially FTP servers.
      | flatten | producer | false | boolean | Flatten is used to flatten the file name path to strip any leading paths so it's just the file name. This allows you to consume recursively into sub-directories but when you eg write the files to another directory they will be written in a single directory. Setting this to true on the producer enforces that any file name in CamelFileName header will be stripped for any leading paths.
      | moveExisting | producer |  | String | Expression (such as File Language) used to compute file name to use when fileExist=Move is configured. To move files into a backup subdirectory just enter backup. This option only supports the following File Language tokens: file:name file:name.ext file:name.noext file:onlyname file:onlyname.noext file:ext and file:parent. Notice the file:parent is not supported by the FTP component as the FTP component can only move any existing files to a relative directory based on current dir as base.
      | tempFileName | producer |  | String | The same as tempPrefix option but offering a more fine grained control on the naming of the temporary filename as it uses the File Language.
      | tempPrefix | producer |  | String | This option is used to write the file using a temporary name and then after the write is complete rename it to the real name. Can be used to identify files being written and also avoid consumers (not using exclusive read locks) reading in progress files. Is often used by FTP when uploading big files.
      | allowNullBody | producer (advanced) | false | boolean | Used to specify if a null body is allowed during file writing. If set to true then an empty file will be created when set to false and attempting to send a null body to the file component a GenericFileWriteException of 'Cannot write null body to file.' will be thrown. If the fileExist option is set to 'Override' then the file will be truncated and if set to append the file will remain unchanged.
      | chmod | producer (advanced) |  | String | Allows you to set chmod on the stored file. For example chmod=640.
      | disconnectOnBatchComplete | producer (advanced) | false | boolean | Whether or not to disconnect from remote FTP server right after a Batch upload is complete. disconnectOnBatchComplete will only disconnect the current connection to the FTP server.
      | eagerDeleteTargetFile | producer (advanced) | true | boolean | Whether or not to eagerly delete any existing target file. This option only applies when you use fileExists=Override and the tempFileName option as well. You can use this to disable (set it to false) deleting the target file before the temp file is written. For example you may write big files and want the target file to exists during the temp file is being written. This ensure the target file is only deleted until the very last moment just before the temp file is being renamed to the target filename. This option is also used to control whether to delete any existing files when fileExist=Move is enabled and an existing file exists. If this option copyAndDeleteOnRenameFails false then an exception will be thrown if an existing file existed if its true then the existing file is deleted before the move operation.
      | keepLastModified | producer (advanced) | false | boolean | Will keep the last modified timestamp from the source file (if any). Will use the Exchange.FILE_LAST_MODIFIED header to located the timestamp. This header can contain either a java.util.Date or long with the timestamp. If the timestamp exists and the option is enabled it will set this timestamp on the written file. Note: This option only applies to the file producer. You cannot use this option with any of the ftp producers.
      | sendNoop | producer (advanced) | true | boolean | Whether to send a noop command as a pre-write check before uploading files to the FTP server. This is enabled by default as a validation of the connection is still valid which allows to silently re-connect to be able to upload the file. However if this causes problems you can turn this option off.
      | autoCreate | advanced | true | boolean | Automatically create missing directories in the file's pathname. For the file consumer that means creating the starting directory. For the file producer it means the directory the files should be written to.
      | bufferSize | advanced | 131072 | int | Write buffer sized in bytes.
      | bulkRequests | advanced |  | Integer | Specifies how many requests may be outstanding at any one time. Increasing this value may slightly improve file transfer speed but will increase memory usage.
      | compression | advanced |  | int | To use compression. Specify a level from 1 to 10. Important: You must manually add the needed JSCH zlib JAR to the classpath for compression support.
      | connectTimeout | advanced | 10000 | int | Sets the connect timeout for waiting for a connection to be established Used by both FTPClient and JSCH
      | maximumReconnectAttempts | advanced |  | int | Specifies the maximum reconnect attempts Camel performs when it tries to connect to the remote FTP server. Use 0 to disable this behavior.
      | proxy | advanced |  | Proxy | To use a custom configured com.jcraft.jsch.Proxy. This proxy is used to consume/send messages from the target SFTP host.
      | reconnectDelay | advanced |  | long | Delay in millis Camel will wait before performing a reconnect attempt.
      | serverAliveCountMax | advanced | 1 | int | Allows you to set the serverAliveCountMax of the sftp session
      | serverAliveInterval | advanced |  | int | Allows you to set the serverAliveInterval of the sftp session
      | soTimeout | advanced | 300000 | int | Sets the so timeout Used only by FTPClient
      | stepwise | advanced | true | boolean | Sets whether we should stepwise change directories while traversing file structures when downloading files or as well when uploading a file to a directory. You can disable this if you for example are in a situation where you cannot change directory on the FTP server due security reasons.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | throwExceptionOnConnectFailed | advanced | false | boolean | Should an exception be thrown if connection failed (exhausted) By default exception is not thrown and a WARN is logged. You can use this to enable exception being thrown and handle the thrown exception from the org.apache.camel.spi.PollingConsumerPollStrategy rollback method.
      | timeout | advanced | 30000 | int | Sets the data timeout for waiting for reply Used only by FTPClient
      | antExclude | filter |  | String | Ant style filter exclusion. If both antInclude and antExclude are used antExclude takes precedence over antInclude. Multiple exclusions may be specified in comma-delimited format.
      | antFilterCaseSensitive | filter | true | boolean | Sets case sensitive flag on ant fiter
      | antInclude | filter |  | String | Ant style filter inclusion. Multiple inclusions may be specified in comma-delimited format.
      | eagerMaxMessagesPerPoll | filter | true | boolean | Allows for controlling whether the limit from maxMessagesPerPoll is eager or not. If eager then the limit is during the scanning of files. Where as false would scan all files and then perform sorting. Setting this option to false allows for sorting all files first and then limit the poll. Mind that this requires a higher memory usage as all file details are in memory to perform the sorting.
      | exclude | filter |  | String | Is used to exclude files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
      | filter | filter |  | GenericFileFilter<T> | Pluggable filter as a org.apache.camel.component.file.GenericFileFilter class. Will skip files if filter returns false in its accept() method.
      | filterDirectory | filter |  | String | Filters the directory based on Simple language. For example to filter on current date you can use a simple date pattern such as $date:now:yyyMMdd
      | filterFile | filter |  | String | Filters the file based on Simple language. For example to filter on file size you can use $file:size 5000
      | idempotent | filter | false | Boolean | Option to use the Idempotent Consumer EIP pattern to let Camel skip already processed files. Will by default use a memory based LRUCache that holds 1000 entries. If noop=true then idempotent will be enabled as well to avoid consuming the same files over and over again.
      | idempotentKey | filter |  | String | To use a custom idempotent key. By default the absolute path of the file is used. You can use the File Language for example to use the file name and file size you can do: idempotentKey=$file:name-$file:size
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which by default use MemoryMessageIdRepository if none is specified and idempotent is true.
      | include | filter |  | String | Is used to include files if filename matches the regex pattern (matching is case in-senstive). Notice if you use symbols such as plus sign and others you would need to configure this using the RAW() syntax if configuring this as an endpoint uri. See more details at configuring endpoint uris
      | maxDepth | filter | 2147483647 | int | The maximum depth to traverse when recursively processing a directory.
      | maxMessagesPerPoll | filter |  | int | To define a maximum messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disabled it. Notice: If this option is in use then the File and FTP components will limit before any sorting. For example if you have 100000 files and use maxMessagesPerPoll=500 then only the first 500 files will be picked up and then sorted. You can use the eagerMaxMessagesPerPoll option and set this to false to allow to scan all files first and then sort afterwards.
      | minDepth | filter |  | int | The minimum depth to start processing when recursively processing a directory. Using minDepth=1 means the base directory. Using minDepth=2 means the first sub directory.
      | move | filter |  | String | Expression (such as Simple Language) used to dynamically set the filename when moving it after processing. To move files into a .done subdirectory just enter .done.
      | exclusiveReadLockStrategy | lock |  | GenericFileExclusiveReadLockStrategy<T> | Pluggable read-lock as a org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy implementation.
      | readLock | lock |  | String | Used by consumer to only poll the files if it has exclusive read-lock on the file (i.e. the file is not in-progress or being written). Camel will wait until the file lock is granted. This option provides the build in strategies: none - No read lock is in use markerFile - Camel creates a marker file (fileName.camelLock) and then holds a lock on it. This option is not available for the FTP component changed - Changed is using file length/modification timestamp to detect whether the file is currently being copied or not. Will at least use 1 sec to determine this so this option cannot consume files as fast as the others but can be more reliable as the JDK IO API cannot always determine whether a file is currently being used by another process. The option readLockCheckInterval can be used to set the check frequency. fileLock - is for using java.nio.channels.FileLock. This option is not avail for the FTP component. This approach should be avoided when accessing a remote file system via a mount/share unless that file system supports distributed file locks. rename - rename is for using a try to rename the file as a test if we can get exclusive read-lock. idempotent - (only for file component) idempotent is for using a idempotentRepository as the read-lock. This allows to use read locks that supports clustering if the idempotent repository implementation supports that. Notice: The various read locks is not all suited to work in clustered mode where concurrent consumers on different nodes is competing for the same files on a shared file system. The markerFile using a close to atomic operation to create the empty marker file but its not guaranteed to work in a cluster. The fileLock may work better but then the file system need to support distributed file locks and so on. Using the idempotent read lock can support clustering if the idempotent repository supports clustering such as Hazelcast Component or Infinispan.
      | readLockCheckInterval | lock | 1000 | long | Interval in millis for the read-lock if supported by the read lock. This interval is used for sleeping between attempts to acquire the read lock. For example when using the changed read lock you can set a higher interval period to cater for slow writes. The default of 1 sec. may be too fast if the producer is very slow writing the file. Notice: For FTP the default readLockCheckInterval is 5000. The readLockTimeout value must be higher than readLockCheckInterval but a rule of thumb is to have a timeout that is at least 2 or more times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the read lock process to try to grab the lock before the timeout was hit.
      | readLockDeleteOrphanLockFiles | lock | true | boolean | Whether or not read lock with marker files should upon startup delete any orphan read lock files which may have been left on the file system if Camel was not properly shutdown (such as a JVM crash). If turning this option to false then any orphaned lock file will cause Camel to not attempt to pickup that file this could also be due another node is concurrently reading files from the same shared directory.
      | readLockLoggingLevel | lock | WARN | LoggingLevel | Logging level used when a read lock could not be acquired. By default a WARN is logged. You can change this level for example to OFF to not have any logging. This option is only applicable for readLock of types: changed fileLock rename.
      | readLockMarkerFile | lock | true | boolean | Whether to use marker file with the changed rename or exclusive read lock types. By default a marker file is used as well to guard against other processes picking up the same files. This behavior can be turned off by setting this option to false. For example if you do not want to write marker files to the file systems by the Camel application.
      | readLockMinAge | lock | 0 | long | This option applied only for readLock=change. This option allows to specify a minimum age the file must be before attempting to acquire the read lock. For example use readLockMinAge=300s to require the file is at last 5 minutes old. This can speedup the changed read lock as it will only attempt to acquire files which are at least that given age.
      | readLockMinLength | lock | 1 | long | This option applied only for readLock=changed. This option allows you to configure a minimum file length. By default Camel expects the file to contain data and thus the default value is 1. You can set this option to zero to allow consuming zero-length files.
      | readLockRemoveOnCommit | lock | false | boolean | This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file is succeeded and a commit happens. By default the file is not removed which ensures that any race-condition do not occur so another active node may attempt to grab the file. Instead the idempotent repository may support eviction strategies that you can configure to evict the file name entry after X minutes - this ensures no problems with race conditions.
      | readLockRemoveOnRollback | lock | true | boolean | This option applied only for readLock=idempotent. This option allows to specify whether to remove the file name entry from the idempotent repository when processing the file failed and a rollback happens. If this option is false then the file name entry is confirmed (as if the file did a commit).
      | readLockTimeout | lock | 10000 | long | Optional timeout in millis for the read-lock if supported by the read-lock. If the read-lock could not be granted and the timeout triggered then Camel will skip the file. At next poll Camel will try the file again and this time maybe the read-lock could be granted. Use a value of 0 or lower to indicate forever. Currently fileLock changed and rename support the timeout. Notice: For FTP the default readLockTimeout value is 20000 instead of 10000. The readLockTimeout value must be higher than readLockCheckInterval but a rule of thumb is to have a timeout that is at least 2 or more times higher than the readLockCheckInterval. This is needed to ensure that amble time is allowed for the read lock process to try to grab the lock before the timeout was hit.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | shuffle | sort | false | boolean | To shuffle the list of files (sort in random order)
      | sortBy | sort |  | String | Built-in sort by using the File Language. Supports nested sorts so you can have a sort by file name and as a 2nd group sort by modified date.
      | sorter | sort |  | GenericFile<T>> | Pluggable sorter as a java.util.Comparator class.
      | ciphers | security |  | String | Set a comma separated list of ciphers that will be used in order of preference. Possible cipher names are defined by JCraft JSCH. Some examples include: aes128-ctraes128-cbc3des-ctr3des-cbcblowfish-cbcaes192-cbcaes256-cbc. If not specified the default list from JSCH will be used.
      | keyPair | security |  | KeyPair | Sets a key pair of the public and private key so to that the SFTP endpoint can do public/private key verification.
      | knownHosts | security |  | byte[] | Sets the known_hosts from the byte array so that the SFTP endpoint can do host key verification.
      | knownHostsFile | security |  | String | Sets the known_hosts file so that the SFTP endpoint can do host key verification.
      | knownHostsUri | security |  | String | Sets the known_hosts file (loaded from classpath by default) so that the SFTP endpoint can do host key verification.
      | password | security |  | String | Password to use for login
      | preferredAuthentications | security |  | String | Set the preferred authentications which SFTP endpoint will used. Some example include:passwordpublickey. If not specified the default list from JSCH will be used.
      | privateKey | security |  | byte[] | Set the private key as byte so that the SFTP endpoint can do private key verification.
      | privateKeyFile | security |  | String | Set the private key file so that the SFTP endpoint can do private key verification.
      | privateKeyPassphrase | security |  | String | Set the private key file passphrase so that the SFTP endpoint can do private key verification.
      | privateKeyUri | security |  | String | Set the private key file (loaded from classpath by default) so that the SFTP endpoint can do private key verification.
      | strictHostKeyChecking | security | no | String | Sets whether to use strict host key checking.
      | username | security |  | String | Username to use for login
      | useUserKnownHostsFile | security | true | boolean | If knownHostFile has not been explicit configured then use the host file from System.getProperty(user.home)/.ssh/known_hosts
      |=======================================================================
      {% endraw %}
      // endpoint options: END
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sip
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sip
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sip
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sip
          spec:
            containers:
            - image: fabric8/connector-sip:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sip
        alternativeSchemes: sip,sips
        syntax: sip:uri
        title: SIP
        description: To send and receive messages using the SIP protocol (used in telco and mobile).
        label: mobile
        deprecated: false
        async: false
        javaType: org.apache.camel.component.sip.SipComponent
        groupId: org.apache.camel
        artifactId: camel-sip
        version: 2.18.1
      componentProperties: {}
      properties:
        uri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: 'URI of the SIP server to connect to (the username and password can
            be included such as: john:secretmyserver:9999)'
        cacheConnections:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should connections be cached by the SipStack to reduce cost of connection creation. This is useful if the connection is used for long running conversations.
        contentSubType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: plain
          description: Setting for contentSubType can be set to any valid MimeSubType.
        contentType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text
          description: Setting for contentType can be set to any valid MimeType.
        eventHeaderName:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Setting for a String based event type.
        eventId:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Setting for a String based event Id. Mandatory setting unless a registry based FromHeader is specified
        fromHost:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the message originator. Mandatory setting unless a registry based FromHeader is specified
        fromPort:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port of the message originator. Mandatory setting unless a registry based FromHeader is specified
        fromUser:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username of the message originator. Mandatory setting unless a registry based custom FromHeader is specified.
        msgExpiration:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "3600"
          description: The amount of time a message received at an endpoint is considered valid
        receiveTimeoutMillis:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Setting for specifying amount of time to wait for a Response and/or Acknowledgement can be received from another SIP stack
        stackName:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: NAME_NOT_SET
          description: Name of the SIP Stack instance associated with an SIP Endpoint.
        toHost:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the message receiver. Mandatory setting unless a registry based ToHeader is specified
        toPort:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Portname of the message receiver. Mandatory setting unless a registry based ToHeader is specified
        toUser:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username of the message receiver. Mandatory setting unless a registry based custom ToHeader is specified.
        transport:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          enum:
          - tcp
          - udp
          deprecated: false
          secret: false
          defaultValue: tcp
          description: Setting for choice of transport protocol. Valid choices are tcp or udp.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        consumer:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This setting is used to determine whether the kind of header (FromHeaderToHeader etc) that needs to be created for this endpoint
        presenceAgent:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This setting is used to distinguish between a Presence Agent & a consumer. This is due to the fact that the SIP Camel component ships with a basic Presence Agent (for testing purposes only). Consumers have to set this flag to true.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        addressFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.address.AddressFactory
          deprecated: false
          secret: false
          description: To use a custom AddressFactory
        callIdHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.CallIdHeader
          deprecated: false
          secret: false
          description: A custom Header object containing call details. Must implement the type javax.sip.header.CallIdHeader
        contactHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ContactHeader
          deprecated: false
          secret: false
          description: An optional custom Header object containing verbose contact details (email phone number etc). Must implement the type javax.sip.header.ContactHeader
        contentTypeHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ContentTypeHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message content details. Must implement the type javax.sip.header.ContentTypeHeader
        eventHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.EventHeader
          deprecated: false
          secret: false
          description: A custom Header object containing event details. Must implement the type javax.sip.header.EventHeader
        expiresHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ExpiresHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message expiration details. Must implement the type javax.sip.header.ExpiresHeader
        extensionHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ExtensionHeader
          deprecated: false
          secret: false
          description: A custom Header object containing user/application specific details. Must implement the type javax.sip.header.ExtensionHeader
        fromHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.FromHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message originator settings. Must implement the type javax.sip.header.FromHeader
        headerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.HeaderFactory
          deprecated: false
          secret: false
          description: To use a custom HeaderFactory
        listeningPoint:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.ListeningPoint
          deprecated: false
          secret: false
          description: To use a custom ListeningPoint implementation
        maxForwardsHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.MaxForwardsHeader
          deprecated: false
          secret: false
          description: A custom Header object containing details on maximum proxy forwards. This header places a limit on the viaHeaders possible. Must implement the type javax.sip.header.MaxForwardsHeader
        maxMessageSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1048576"
          description: Setting for maximum allowed Message size in bytes.
        messageFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.message.MessageFactory
          deprecated: false
          secret: false
          description: To use a custom MessageFactory
        sipFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.SipFactory
          deprecated: false
          secret: false
          description: To use a custom SipFactory to create the SipStack to be used
        sipStack:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.SipStack
          deprecated: false
          secret: false
          description: To use a custom SipStack
        sipUri:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.address.SipURI
          deprecated: false
          secret: false
          description: To use a custom SipURI. If none configured then the SipUri fallback to use the options toUser toHost:toPort
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        toHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ToHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message receiver settings. Must implement the type javax.sip.header.ToHeader
        viaHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: array
          javaType: java.util.List<javax.sip.header.ViaHeader>
          deprecated: false
          secret: false
          description: List of custom Header objects of the type javax.sip.header.ViaHeader. Each ViaHeader containing a proxy address for request forwarding. (Note this header is automatically updated by each proxy when the request arrives at its listener)
        implementationDebugLogFile:
          kind: parameter
          group: logging
          label: logging
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of client debug log file to use for logging
        implementationServerLogFile:
          kind: parameter
          group: logging
          label: logging
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of server log file to use for logging
        implementationTraceLevel:
          kind: parameter
          group: logging
          label: logging
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Logging level for tracing
        maxForwards:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Number of maximum proxy forwards
        useRouterForAllUris:
          kind: parameter
          group: proxy
          label: proxy
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This setting is used when requests are sent to the Presence Agent via a proxy.
    documentation.adoc: "[[Sip-SIPComponent]]\nSIP Component\n~~~~~~~~~~~~~\n\n*Available\
      \ as of Camel 2.5*\n\nThe *sip* component in Camel is a communication component,\
      \ based on the\nJain SIP implementation (available under the JCP license).\n\
      \nSession Initiation Protocol (SIP) is an IETF-defined signaling protocol,\n\
      widely used for controlling multimedia communication sessions such as\nvoice\
      \ and video calls over Internet Protocol (IP).The SIP protocol is an\nApplication\
      \ Layer protocol designed to be independent of the underlying\ntransport layer;\
      \ it can run on Transmission Control Protocol (TCP), User\nDatagram Protocol\
      \ (UDP) or Stream Control Transmission Protocol (SCTP).\n\nThe Jain SIP implementation\
      \ supports TCP and UDP only.\n\nThe Camel SIP component *only* supports the\
      \ SIP Publish and Subscribe\ncapability as described in the\nhttp://www.ietf.org/rfc/rfc3903.txt[RFC3903\
      \ - Session Initiation\nProtocol (SIP) Extension for Event]\n\nThis camel component\
      \ supports both producer and consumer endpoints.\n\nCamel SIP Producers (Event\
      \ Publishers) and SIP Consumers (Event\nSubscribers) communicate event & state\
      \ information to each other using\nan intermediary entity called a SIP Presence\
      \ Agent (a stateful brokering\nentity).\n\nFor SIP based communication, a SIP\
      \ Stack with a listener *must* be\ninstantiated on both the SIP Producer and\
      \ Consumer (using separate ports\nif using localhost). This is necessary in\
      \ order to support the\nhandshakes & acknowledgements exchanged between the\
      \ SIP Stacks during\ncommunication.\n\nMaven users will need to add the following\
      \ dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-sip</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Sip-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe URI scheme for a sip endpoint\
      \ is as follows:\n\n[source,java]\n-----------------------------------------\n\
      sip://johndoe@localhost:99999[?options]\nsips://johndoe@localhost:99999/[?options]\n\
      -----------------------------------------\n\nThis component supports producer\
      \ and consumer endpoints for both TCP and\nUDP.\n\nYou can append query options\
      \ to the URI in the following format,\n`?option=value&option=value&...`\n\n\
      [[Sip-Options]]\nOptions\n^^^^^^^\n\nThe SIP Component offers an extensive set\
      \ of configuration options &\ncapability to create custom stateful headers needed\
      \ to propagate state\nvia the SIP protocol.\n\n\n// component options: START\n\
      The SIP component has no options.\n// component options: END\n\n\n\n// endpoint\
      \ options: START\nThe SIP component supports 45 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| uri | common |  | URI\
      \ | *Required* URI of the SIP server to connect to (the username and password\
      \ can be included such as: john:secretmyserver:9999)\n| cacheConnections | common\
      \ | false | boolean | Should connections be cached by the SipStack to reduce\
      \ cost of connection creation. This is useful if the connection is used for\
      \ long running conversations.\n| contentSubType | common | plain | String |\
      \ Setting for contentSubType can be set to any valid MimeSubType.\n| contentType\
      \ | common | text | String | Setting for contentType can be set to any valid\
      \ MimeType.\n| eventHeaderName | common |  | String | Setting for a String based\
      \ event type.\n| eventId | common |  | String | Setting for a String based event\
      \ Id. Mandatory setting unless a registry based FromHeader is specified\n| fromHost\
      \ | common |  | String | Hostname of the message originator. Mandatory setting\
      \ unless a registry based FromHeader is specified\n| fromPort | common |  |\
      \ int | Port of the message originator. Mandatory setting unless a registry\
      \ based FromHeader is specified\n| fromUser | common |  | String | Username\
      \ of the message originator. Mandatory setting unless a registry based custom\
      \ FromHeader is specified.\n| msgExpiration | common | 3600 | int | The amount\
      \ of time a message received at an endpoint is considered valid\n| receiveTimeoutMillis\
      \ | common | 10000 | long | Setting for specifying amount of time to wait for\
      \ a Response and/or Acknowledgement can be received from another SIP stack\n\
      | stackName | common | NAME_NOT_SET | String | Name of the SIP Stack instance\
      \ associated with an SIP Endpoint.\n| toHost | common |  | String | Hostname\
      \ of the message receiver. Mandatory setting unless a registry based ToHeader\
      \ is specified\n| toPort | common |  | int | Portname of the message receiver.\
      \ Mandatory setting unless a registry based ToHeader is specified\n| toUser\
      \ | common |  | String | Username of the message receiver. Mandatory setting\
      \ unless a registry based custom ToHeader is specified.\n| transport | common\
      \ | tcp | String | Setting for choice of transport protocol. Valid choices are\
      \ tcp or udp.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | consumer | consumer | false | boolean | This setting is used to determine\
      \ whether the kind of header (FromHeaderToHeader etc) that needs to be created\
      \ for this endpoint\n| presenceAgent | consumer | false | boolean | This setting\
      \ is used to distinguish between a Presence Agent & a consumer. This is due\
      \ to the fact that the SIP Camel component ships with a basic Presence Agent\
      \ (for testing purposes only). Consumers have to set this flag to true.\n| exceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| addressFactory | advanced |  | AddressFactory\
      \ | To use a custom AddressFactory\n| callIdHeader | advanced |  | CallIdHeader\
      \ | A custom Header object containing call details. Must implement the type\
      \ javax.sip.header.CallIdHeader\n| contactHeader | advanced |  | ContactHeader\
      \ | An optional custom Header object containing verbose contact details (email\
      \ phone number etc). Must implement the type javax.sip.header.ContactHeader\n\
      | contentTypeHeader | advanced |  | ContentTypeHeader | A custom Header object\
      \ containing message content details. Must implement the type javax.sip.header.ContentTypeHeader\n\
      | eventHeader | advanced |  | EventHeader | A custom Header object containing\
      \ event details. Must implement the type javax.sip.header.EventHeader\n| expiresHeader\
      \ | advanced |  | ExpiresHeader | A custom Header object containing message\
      \ expiration details. Must implement the type javax.sip.header.ExpiresHeader\n\
      | extensionHeader | advanced |  | ExtensionHeader | A custom Header object containing\
      \ user/application specific details. Must implement the type javax.sip.header.ExtensionHeader\n\
      | fromHeader | advanced |  | FromHeader | A custom Header object containing\
      \ message originator settings. Must implement the type javax.sip.header.FromHeader\n\
      | headerFactory | advanced |  | HeaderFactory | To use a custom HeaderFactory\n\
      | listeningPoint | advanced |  | ListeningPoint | To use a custom ListeningPoint\
      \ implementation\n| maxForwardsHeader | advanced |  | MaxForwardsHeader | A\
      \ custom Header object containing details on maximum proxy forwards. This header\
      \ places a limit on the viaHeaders possible. Must implement the type javax.sip.header.MaxForwardsHeader\n\
      | maxMessageSize | advanced | 1048576 | int | Setting for maximum allowed Message\
      \ size in bytes.\n| messageFactory | advanced |  | MessageFactory | To use a\
      \ custom MessageFactory\n| sipFactory | advanced |  | SipFactory | To use a\
      \ custom SipFactory to create the SipStack to be used\n| sipStack | advanced\
      \ |  | SipStack | To use a custom SipStack\n| sipUri | advanced |  | SipURI\
      \ | To use a custom SipURI. If none configured then the SipUri fallback to use\
      \ the options toUser toHost:toPort\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n| toHeader | advanced\
      \ |  | ToHeader | A custom Header object containing message receiver settings.\
      \ Must implement the type javax.sip.header.ToHeader\n| viaHeaders | advanced\
      \ |  | List | List of custom Header objects of the type javax.sip.header.ViaHeader.\
      \ Each ViaHeader containing a proxy address for request forwarding. (Note this\
      \ header is automatically updated by each proxy when the request arrives at\
      \ its listener)\n| implementationDebugLogFile | logging |  | String | Name of\
      \ client debug log file to use for logging\n| implementationServerLogFile |\
      \ logging |  | String | Name of server log file to use for logging\n| implementationTraceLevel\
      \ | logging | 0 | String | Logging level for tracing\n| maxForwards | proxy\
      \ |  | int | Number of maximum proxy forwards\n| useRouterForAllUris | proxy\
      \ | false | boolean | This setting is used when requests are sent to the Presence\
      \ Agent via a proxy.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n[[Sip-SendingMessagestofromaSIPendpoint]]\n\
      Sending Messages to/from a SIP endpoint\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[Sip-CreatingaCamelSIPPublisher]]\nCreating a Camel SIP Publisher\n++++++++++++++++++++++++++++++\n\
      \nIn the example below, a SIP Publisher is created to send SIP Event\npublications\
      \ to  +\n a user \"agent@localhost:5152\". This is the address of the SIP Presence\n\
      Agent which acts as a broker between the SIP Publisher and Subscriber\n\n* using\
      \ a SIP Stack named client\n* using a registry based eventHeader called evtHdrName\n\
      * using a registry based eventId called evtId\n* from a SIP Stack with Listener\
      \ set up as user2@localhost:3534\n* The Event being published is EVENT_A\n*\
      \ A Mandatory Header called REQUEST_METHOD is set to Request.Publish\nthereby\
      \ setting up the endpoint as a Event publisher\"\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      producerTemplate.sendBodyAndHeader(  \n    \"sip://agent@localhost:5152?stackName=client&eventHeaderName=evtHdrName&eventId=evtid&fromUser=user2&fromHost=localhost&fromPort=3534\"\
      ,   \n    \"EVENT_A\",  \n    \"REQUEST_METHOD\",   \n    Request.PUBLISH);\
      \  \n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Sip-CreatingaCamelSIPSubscriber]]\nCreating a Camel SIP Subscriber\n+++++++++++++++++++++++++++++++\n\
      \nIn the example below, a SIP Subscriber is created to receive SIP Event\npublications\
      \ sent to  +\n a user \"johndoe@localhost:5154\"\n\n* using a SIP Stack named\
      \ Subscriber\n* registering with a Presence Agent user called agent@localhost:5152\n\
      * using a registry based eventHeader called evtHdrName. The evtHdrName\ncontains\
      \ the Event which is se to \"Event_A\"\n* using a registry based eventId called\
      \ evtId\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      @Override  \nprotected RouteBuilder createRouteBuilder() throws Exception {\
      \  \n    return new RouteBuilder() {  \n        @Override  \n        public\
      \ void configure() throws Exception {    \n            // Create PresenceAgent\
      \  \n            from(\"sip://agent@localhost:5152?stackName=PresenceAgent&presenceAgent=true&eventHeaderName=evtHdrName&eventId=evtid\"\
      )  \n                .to(\"mock:neverland\");  \n                  \n      \
      \      // Create Sip Consumer(Event Subscriber)  \n            from(\"sip://johndoe@localhost:5154?stackName=Subscriber&toUser=agent&toHost=localhost&toPort=5152&eventHeaderName=evtHdrName&eventId=evtid\"\
      )  \n                .to(\"log:ReceivedEvent?level=DEBUG\")  \n            \
      \    .to(\"mock:notification\");  \n                  \n        }  \n    };\
      \  \n}  \n----------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n*The Camel SIP component also ships with a Presence Agent that is meant\n\
      to be used for Testing and Demo purposes only.* An example of\ninstantiating\
      \ a Presence Agent is given above.\n\nNote that the Presence Agent is set up\
      \ as a user agent@localhost:5152\nand is capable of communicating with both\
      \ Publisher as well as\nSubscriber. It has a separate SIP stackName distinct\
      \ from Publisher as\nwell as Subscriber. While it is set up as a Camel Consumer,\
      \ it does not\nactually send any messages along the route to the endpoint\n\"\
      mock:neverland\".\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sips
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sips
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sips
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sips
          spec:
            containers:
            - image: fabric8/connector-sips:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sips
        alternativeSchemes: sip,sips
        syntax: sips:uri
        title: SIP
        description: To send and receive messages using the SIP protocol (used in telco and mobile).
        label: mobile
        deprecated: false
        async: false
        javaType: org.apache.camel.component.sip.SipComponent
        groupId: org.apache.camel
        artifactId: camel-sip
        version: 2.18.1
      componentProperties: {}
      properties:
        uri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: 'URI of the SIP server to connect to (the username and password can
            be included such as: john:secretmyserver:9999)'
        cacheConnections:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should connections be cached by the SipStack to reduce cost of connection creation. This is useful if the connection is used for long running conversations.
        contentSubType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: plain
          description: Setting for contentSubType can be set to any valid MimeSubType.
        contentType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text
          description: Setting for contentType can be set to any valid MimeType.
        eventHeaderName:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Setting for a String based event type.
        eventId:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Setting for a String based event Id. Mandatory setting unless a registry based FromHeader is specified
        fromHost:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the message originator. Mandatory setting unless a registry based FromHeader is specified
        fromPort:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port of the message originator. Mandatory setting unless a registry based FromHeader is specified
        fromUser:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username of the message originator. Mandatory setting unless a registry based custom FromHeader is specified.
        msgExpiration:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "3600"
          description: The amount of time a message received at an endpoint is considered valid
        receiveTimeoutMillis:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Setting for specifying amount of time to wait for a Response and/or Acknowledgement can be received from another SIP stack
        stackName:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: NAME_NOT_SET
          description: Name of the SIP Stack instance associated with an SIP Endpoint.
        toHost:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the message receiver. Mandatory setting unless a registry based ToHeader is specified
        toPort:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Portname of the message receiver. Mandatory setting unless a registry based ToHeader is specified
        toUser:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username of the message receiver. Mandatory setting unless a registry based custom ToHeader is specified.
        transport:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          enum:
          - tcp
          - udp
          deprecated: false
          secret: false
          defaultValue: tcp
          description: Setting for choice of transport protocol. Valid choices are tcp or udp.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        consumer:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This setting is used to determine whether the kind of header (FromHeaderToHeader etc) that needs to be created for this endpoint
        presenceAgent:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This setting is used to distinguish between a Presence Agent & a consumer. This is due to the fact that the SIP Camel component ships with a basic Presence Agent (for testing purposes only). Consumers have to set this flag to true.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        addressFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.address.AddressFactory
          deprecated: false
          secret: false
          description: To use a custom AddressFactory
        callIdHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.CallIdHeader
          deprecated: false
          secret: false
          description: A custom Header object containing call details. Must implement the type javax.sip.header.CallIdHeader
        contactHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ContactHeader
          deprecated: false
          secret: false
          description: An optional custom Header object containing verbose contact details (email phone number etc). Must implement the type javax.sip.header.ContactHeader
        contentTypeHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ContentTypeHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message content details. Must implement the type javax.sip.header.ContentTypeHeader
        eventHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.EventHeader
          deprecated: false
          secret: false
          description: A custom Header object containing event details. Must implement the type javax.sip.header.EventHeader
        expiresHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ExpiresHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message expiration details. Must implement the type javax.sip.header.ExpiresHeader
        extensionHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ExtensionHeader
          deprecated: false
          secret: false
          description: A custom Header object containing user/application specific details. Must implement the type javax.sip.header.ExtensionHeader
        fromHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.FromHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message originator settings. Must implement the type javax.sip.header.FromHeader
        headerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.HeaderFactory
          deprecated: false
          secret: false
          description: To use a custom HeaderFactory
        listeningPoint:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.ListeningPoint
          deprecated: false
          secret: false
          description: To use a custom ListeningPoint implementation
        maxForwardsHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.MaxForwardsHeader
          deprecated: false
          secret: false
          description: A custom Header object containing details on maximum proxy forwards. This header places a limit on the viaHeaders possible. Must implement the type javax.sip.header.MaxForwardsHeader
        maxMessageSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1048576"
          description: Setting for maximum allowed Message size in bytes.
        messageFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.message.MessageFactory
          deprecated: false
          secret: false
          description: To use a custom MessageFactory
        sipFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.SipFactory
          deprecated: false
          secret: false
          description: To use a custom SipFactory to create the SipStack to be used
        sipStack:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.SipStack
          deprecated: false
          secret: false
          description: To use a custom SipStack
        sipUri:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.address.SipURI
          deprecated: false
          secret: false
          description: To use a custom SipURI. If none configured then the SipUri fallback to use the options toUser toHost:toPort
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        toHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.sip.header.ToHeader
          deprecated: false
          secret: false
          description: A custom Header object containing message receiver settings. Must implement the type javax.sip.header.ToHeader
        viaHeaders:
          kind: parameter
          group: advanced
          label: advanced
          type: array
          javaType: java.util.List<javax.sip.header.ViaHeader>
          deprecated: false
          secret: false
          description: List of custom Header objects of the type javax.sip.header.ViaHeader. Each ViaHeader containing a proxy address for request forwarding. (Note this header is automatically updated by each proxy when the request arrives at its listener)
        implementationDebugLogFile:
          kind: parameter
          group: logging
          label: logging
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of client debug log file to use for logging
        implementationServerLogFile:
          kind: parameter
          group: logging
          label: logging
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of server log file to use for logging
        implementationTraceLevel:
          kind: parameter
          group: logging
          label: logging
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Logging level for tracing
        maxForwards:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Number of maximum proxy forwards
        useRouterForAllUris:
          kind: parameter
          group: proxy
          label: proxy
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: This setting is used when requests are sent to the Presence Agent via a proxy.
    documentation.adoc: "[[Sip-SIPComponent]]\nSIP Component\n~~~~~~~~~~~~~\n\n*Available\
      \ as of Camel 2.5*\n\nThe *sip* component in Camel is a communication component,\
      \ based on the\nJain SIP implementation (available under the JCP license).\n\
      \nSession Initiation Protocol (SIP) is an IETF-defined signaling protocol,\n\
      widely used for controlling multimedia communication sessions such as\nvoice\
      \ and video calls over Internet Protocol (IP).The SIP protocol is an\nApplication\
      \ Layer protocol designed to be independent of the underlying\ntransport layer;\
      \ it can run on Transmission Control Protocol (TCP), User\nDatagram Protocol\
      \ (UDP) or Stream Control Transmission Protocol (SCTP).\n\nThe Jain SIP implementation\
      \ supports TCP and UDP only.\n\nThe Camel SIP component *only* supports the\
      \ SIP Publish and Subscribe\ncapability as described in the\nhttp://www.ietf.org/rfc/rfc3903.txt[RFC3903\
      \ - Session Initiation\nProtocol (SIP) Extension for Event]\n\nThis camel component\
      \ supports both producer and consumer endpoints.\n\nCamel SIP Producers (Event\
      \ Publishers) and SIP Consumers (Event\nSubscribers) communicate event & state\
      \ information to each other using\nan intermediary entity called a SIP Presence\
      \ Agent (a stateful brokering\nentity).\n\nFor SIP based communication, a SIP\
      \ Stack with a listener *must* be\ninstantiated on both the SIP Producer and\
      \ Consumer (using separate ports\nif using localhost). This is necessary in\
      \ order to support the\nhandshakes & acknowledgements exchanged between the\
      \ SIP Stacks during\ncommunication.\n\nMaven users will need to add the following\
      \ dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-sip</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Sip-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe URI scheme for a sip endpoint\
      \ is as follows:\n\n[source,java]\n-----------------------------------------\n\
      sip://johndoe@localhost:99999[?options]\nsips://johndoe@localhost:99999/[?options]\n\
      -----------------------------------------\n\nThis component supports producer\
      \ and consumer endpoints for both TCP and\nUDP.\n\nYou can append query options\
      \ to the URI in the following format,\n`?option=value&option=value&...`\n\n\
      [[Sip-Options]]\nOptions\n^^^^^^^\n\nThe SIP Component offers an extensive set\
      \ of configuration options &\ncapability to create custom stateful headers needed\
      \ to propagate state\nvia the SIP protocol.\n\n\n// component options: START\n\
      The SIP component has no options.\n// component options: END\n\n\n\n// endpoint\
      \ options: START\nThe SIP component supports 45 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| uri | common |  | URI\
      \ | *Required* URI of the SIP server to connect to (the username and password\
      \ can be included such as: john:secretmyserver:9999)\n| cacheConnections | common\
      \ | false | boolean | Should connections be cached by the SipStack to reduce\
      \ cost of connection creation. This is useful if the connection is used for\
      \ long running conversations.\n| contentSubType | common | plain | String |\
      \ Setting for contentSubType can be set to any valid MimeSubType.\n| contentType\
      \ | common | text | String | Setting for contentType can be set to any valid\
      \ MimeType.\n| eventHeaderName | common |  | String | Setting for a String based\
      \ event type.\n| eventId | common |  | String | Setting for a String based event\
      \ Id. Mandatory setting unless a registry based FromHeader is specified\n| fromHost\
      \ | common |  | String | Hostname of the message originator. Mandatory setting\
      \ unless a registry based FromHeader is specified\n| fromPort | common |  |\
      \ int | Port of the message originator. Mandatory setting unless a registry\
      \ based FromHeader is specified\n| fromUser | common |  | String | Username\
      \ of the message originator. Mandatory setting unless a registry based custom\
      \ FromHeader is specified.\n| msgExpiration | common | 3600 | int | The amount\
      \ of time a message received at an endpoint is considered valid\n| receiveTimeoutMillis\
      \ | common | 10000 | long | Setting for specifying amount of time to wait for\
      \ a Response and/or Acknowledgement can be received from another SIP stack\n\
      | stackName | common | NAME_NOT_SET | String | Name of the SIP Stack instance\
      \ associated with an SIP Endpoint.\n| toHost | common |  | String | Hostname\
      \ of the message receiver. Mandatory setting unless a registry based ToHeader\
      \ is specified\n| toPort | common |  | int | Portname of the message receiver.\
      \ Mandatory setting unless a registry based ToHeader is specified\n| toUser\
      \ | common |  | String | Username of the message receiver. Mandatory setting\
      \ unless a registry based custom ToHeader is specified.\n| transport | common\
      \ | tcp | String | Setting for choice of transport protocol. Valid choices are\
      \ tcp or udp.\n| bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | consumer | consumer | false | boolean | This setting is used to determine\
      \ whether the kind of header (FromHeaderToHeader etc) that needs to be created\
      \ for this endpoint\n| presenceAgent | consumer | false | boolean | This setting\
      \ is used to distinguish between a Presence Agent & a consumer. This is due\
      \ to the fact that the SIP Camel component ships with a basic Presence Agent\
      \ (for testing purposes only). Consumers have to set this flag to true.\n| exceptionHandler\
      \ | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| addressFactory | advanced |  | AddressFactory\
      \ | To use a custom AddressFactory\n| callIdHeader | advanced |  | CallIdHeader\
      \ | A custom Header object containing call details. Must implement the type\
      \ javax.sip.header.CallIdHeader\n| contactHeader | advanced |  | ContactHeader\
      \ | An optional custom Header object containing verbose contact details (email\
      \ phone number etc). Must implement the type javax.sip.header.ContactHeader\n\
      | contentTypeHeader | advanced |  | ContentTypeHeader | A custom Header object\
      \ containing message content details. Must implement the type javax.sip.header.ContentTypeHeader\n\
      | eventHeader | advanced |  | EventHeader | A custom Header object containing\
      \ event details. Must implement the type javax.sip.header.EventHeader\n| expiresHeader\
      \ | advanced |  | ExpiresHeader | A custom Header object containing message\
      \ expiration details. Must implement the type javax.sip.header.ExpiresHeader\n\
      | extensionHeader | advanced |  | ExtensionHeader | A custom Header object containing\
      \ user/application specific details. Must implement the type javax.sip.header.ExtensionHeader\n\
      | fromHeader | advanced |  | FromHeader | A custom Header object containing\
      \ message originator settings. Must implement the type javax.sip.header.FromHeader\n\
      | headerFactory | advanced |  | HeaderFactory | To use a custom HeaderFactory\n\
      | listeningPoint | advanced |  | ListeningPoint | To use a custom ListeningPoint\
      \ implementation\n| maxForwardsHeader | advanced |  | MaxForwardsHeader | A\
      \ custom Header object containing details on maximum proxy forwards. This header\
      \ places a limit on the viaHeaders possible. Must implement the type javax.sip.header.MaxForwardsHeader\n\
      | maxMessageSize | advanced | 1048576 | int | Setting for maximum allowed Message\
      \ size in bytes.\n| messageFactory | advanced |  | MessageFactory | To use a\
      \ custom MessageFactory\n| sipFactory | advanced |  | SipFactory | To use a\
      \ custom SipFactory to create the SipStack to be used\n| sipStack | advanced\
      \ |  | SipStack | To use a custom SipStack\n| sipUri | advanced |  | SipURI\
      \ | To use a custom SipURI. If none configured then the SipUri fallback to use\
      \ the options toUser toHost:toPort\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n| toHeader | advanced\
      \ |  | ToHeader | A custom Header object containing message receiver settings.\
      \ Must implement the type javax.sip.header.ToHeader\n| viaHeaders | advanced\
      \ |  | List | List of custom Header objects of the type javax.sip.header.ViaHeader.\
      \ Each ViaHeader containing a proxy address for request forwarding. (Note this\
      \ header is automatically updated by each proxy when the request arrives at\
      \ its listener)\n| implementationDebugLogFile | logging |  | String | Name of\
      \ client debug log file to use for logging\n| implementationServerLogFile |\
      \ logging |  | String | Name of server log file to use for logging\n| implementationTraceLevel\
      \ | logging | 0 | String | Logging level for tracing\n| maxForwards | proxy\
      \ |  | int | Number of maximum proxy forwards\n| useRouterForAllUris | proxy\
      \ | false | boolean | This setting is used when requests are sent to the Presence\
      \ Agent via a proxy.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n[[Sip-SendingMessagestofromaSIPendpoint]]\n\
      Sending Messages to/from a SIP endpoint\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n[[Sip-CreatingaCamelSIPPublisher]]\nCreating a Camel SIP Publisher\n++++++++++++++++++++++++++++++\n\
      \nIn the example below, a SIP Publisher is created to send SIP Event\npublications\
      \ to  +\n a user \"agent@localhost:5152\". This is the address of the SIP Presence\n\
      Agent which acts as a broker between the SIP Publisher and Subscriber\n\n* using\
      \ a SIP Stack named client\n* using a registry based eventHeader called evtHdrName\n\
      * using a registry based eventId called evtId\n* from a SIP Stack with Listener\
      \ set up as user2@localhost:3534\n* The Event being published is EVENT_A\n*\
      \ A Mandatory Header called REQUEST_METHOD is set to Request.Publish\nthereby\
      \ setting up the endpoint as a Event publisher\"\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      producerTemplate.sendBodyAndHeader(  \n    \"sip://agent@localhost:5152?stackName=client&eventHeaderName=evtHdrName&eventId=evtid&fromUser=user2&fromHost=localhost&fromPort=3534\"\
      ,   \n    \"EVENT_A\",  \n    \"REQUEST_METHOD\",   \n    Request.PUBLISH);\
      \  \n----------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Sip-CreatingaCamelSIPSubscriber]]\nCreating a Camel SIP Subscriber\n+++++++++++++++++++++++++++++++\n\
      \nIn the example below, a SIP Subscriber is created to receive SIP Event\npublications\
      \ sent to  +\n a user \"johndoe@localhost:5154\"\n\n* using a SIP Stack named\
      \ Subscriber\n* registering with a Presence Agent user called agent@localhost:5152\n\
      * using a registry based eventHeader called evtHdrName. The evtHdrName\ncontains\
      \ the Event which is se to \"Event_A\"\n* using a registry based eventId called\
      \ evtId\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      @Override  \nprotected RouteBuilder createRouteBuilder() throws Exception {\
      \  \n    return new RouteBuilder() {  \n        @Override  \n        public\
      \ void configure() throws Exception {    \n            // Create PresenceAgent\
      \  \n            from(\"sip://agent@localhost:5152?stackName=PresenceAgent&presenceAgent=true&eventHeaderName=evtHdrName&eventId=evtid\"\
      )  \n                .to(\"mock:neverland\");  \n                  \n      \
      \      // Create Sip Consumer(Event Subscriber)  \n            from(\"sip://johndoe@localhost:5154?stackName=Subscriber&toUser=agent&toHost=localhost&toPort=5152&eventHeaderName=evtHdrName&eventId=evtid\"\
      )  \n                .to(\"log:ReceivedEvent?level=DEBUG\")  \n            \
      \    .to(\"mock:notification\");  \n                  \n        }  \n    };\
      \  \n}  \n----------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n*The Camel SIP component also ships with a Presence Agent that is meant\n\
      to be used for Testing and Demo purposes only.* An example of\ninstantiating\
      \ a Presence Agent is given above.\n\nNote that the Presence Agent is set up\
      \ as a user agent@localhost:5152\nand is capable of communicating with both\
      \ Publisher as well as\nSubscriber. It has a separate SIP stackName distinct\
      \ from Publisher as\nwell as Subscriber. While it is set up as a Camel Consumer,\
      \ it does not\nactually send any messages along the route to the endpoint\n\"\
      mock:neverland\".\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sjms
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sjms
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sjms
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sjms
          spec:
            containers:
            - image: fabric8/connector-sjms:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sjms
        syntax: sjms:destinationType:destinationName
        title: Simple JMS
        description: The sjms component (simple jms) allows messages to be sent to (or consumed from) a JMS Queue or Topic.
        label: messaging
        deprecated: false
        async: true
        javaType: org.apache.camel.component.sjms.SjmsComponent
        groupId: org.apache.camel
        artifactId: camel-sjms
        version: 2.18.1
      componentProperties:
        connectionFactory:
          kind: property
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource.
        headerFilterStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        connectionResource:
          kind: property
          type: object
          javaType: org.apache.camel.component.sjms.jms.ConnectionResource
          deprecated: false
          secret: false
          description: A ConnectionResource is an interface that allows for customization and container control of the ConnectionFactory. See Plugable Connection Resource Management for further details.
        connectionCount:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The maximum number of connections available to endpoints started under this component
        jmsKeyFormatStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides one implementation out
            of the box: default. The default strategy will safely marshal dots and hyphens
            (. and -). Can be used for JMS brokers which do not care whether JMS header
            keys contain illegal characters. You can provide your own implementation of
            the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using
            the notation.'
        transactionCommitStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.sjms.TransactionCommitStrategy
          deprecated: false
          secret: false
          description: To configure which kind of commit strategy to use. Camel provides two implementations out of the box default and batch.
        destinationCreationStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.sjms.jms.DestinationCreationStrategy
          deprecated: false
          secret: false
          description: To use a custom DestinationCreationStrategy.
        timedTaskManager:
          kind: property
          type: object
          javaType: org.apache.camel.component.sjms.taskmanager.TimedTaskManager
          deprecated: false
          secret: false
          description: To use a custom TimedTaskManager
        messageCreatedStrategy:
          kind: property
          type: object
          javaType: org.apache.camel.component.sjms.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
      properties:
        destinationType:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          enum:
          - queue
          - topic
          deprecated: false
          secret: false
          defaultValue: queue
          description: The kind of destination to use
        destinationName:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: DestinationName is a JMS queue or topic name. By default the destinationName is interpreted as a queue name.
        acknowledgementMode:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.sjms.jms.SessionAcknowledgementType
          enum:
          - SESSION_TRANSACTED
          - CLIENT_ACKNOWLEDGE
          - AUTO_ACKNOWLEDGE
          - DUPS_OK_ACKNOWLEDGE
          deprecated: false
          secret: false
          defaultValue: AUTO_ACKNOWLEDGE
          description: 'The JMS acknowledgement name which is one of: SESSION_TRANSACTED
            CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        consumerCount:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Sets the number of consumer listeners used for this endpoint.
        durableSubscriptionId:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the durable subscription Id required for durable topics.
        synchronous:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        messageSelector:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the JMS Message selector syntax.
        namedReplyTo:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the reply to destination name used for InOut producer endpoints.
        persistent:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Flag used to enable/disable message persistence.
        producerCount:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Sets the number of producers used for this endpoint.
        ttl:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: -1
          description: Flag used to adjust the Time To Live value of produced messages.
        allowNullBody:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
        prefillPool:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to prefill the producer connection pool on startup or create connections lazy when needed.
        responseTimeOut:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Sets the amount of time we should wait before timing out a InOut response.
        asyncStartListener:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to startup the consumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
        asyncStopListener:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to stop the consumer message listener asynchronously when stopping a route.
        connectionCount:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The maximum number of connections available to this endpoint
        connectionFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: Initializes the connectionFactory for the endpoint which takes precedence over the component's connectionFactory if any
        connectionResource:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sjms.jms.ConnectionResource
          deprecated: false
          secret: false
          description: Initializes the connectionResource for the endpoint which takes precedence over the component's connectionResource if any
        destinationCreationStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sjms.jms.DestinationCreationStrategy
          deprecated: false
          secret: false
          description: To use a custom DestinationCreationStrategy.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        includeAllJMSXProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to include all JMSXxxx properties when mapping from JMS
            to Camel Message. Setting this to true will include properties such as JMSXAppID
            and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then
            this option does not apply.'
        jmsKeyFormatStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides two implementations
            out of the box: default and passthrough. The default strategy will safely marshal
            dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can
            be used for JMS brokers which do not care whether JMS header keys contain illegal
            characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy
            and refer to it using the notation.'
        mapJmsMessage:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
        messageCreatedStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sjms.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
        transacted:
          kind: parameter
          group: transaction
          label: consumer,transaction
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to use transacted mode
        transactionBatchCount:
          kind: parameter
          group: transaction
          label: consumer,transaction
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: If transacted sets the number of messages to process before committing a transaction.
        transactionBatchTimeout:
          kind: parameter
          group: transaction
          label: consumer,transaction
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Sets timeout (in millis) for batch transactions the value should be 1000 or higher.
        transactionCommitStrategy:
          kind: parameter
          group: transaction
          label: transaction
          type: object
          javaType: org.apache.camel.component.sjms.TransactionCommitStrategy
          deprecated: false
          secret: false
          description: Sets the commit strategy.
    documentation.adoc: |
      ifdef::env-github[]
      :icon-smile: :smiley:
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      ifndef::env-github[]
      :icons: font
      :icon-smile: icon:smile-o[fw,role=yellow]
      endif::[]

      [[ConfluenceContent]]
      [[SJMS-SJMSComponent]]
      SJMS Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.11*

      The Simple JMS Component, or SJMS, is a JMS client for use with Camel
      that uses well known best practices when it comes to JMS client creation
      and configuration. SJMS contains a brand new JMS client API written
      explicitly for Camel eliminating third party messaging implementations
      keeping it light and resilient. The following features is included:

      * Standard Queue and Topic Support (Durable & Non-Durable)
      * InOnly & InOut MEP Support
      * Asynchronous Producer and Consumer Processing
      * Internal JMS Transaction Support

      Additional key features include:

      * Plugable Connection Resource Management
      * Session, Consumer, & Producer Pooling & Caching Management
      * Batch Consumers and Producers
      * Transacted Batch Consumers & Producers
      * Support for Customizable Transaction Commit Strategies (Local JMS
      Transactions only)

      [NOTE]
      ====
      *Why the S in SJMS*

      S stands for Simple and Standard and Springless. Also camel-jms was
      already taken. {icon-smile}
      ====

      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-sjms</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ----

      [[SJMS-URIformat]]
      URI format
      ++++++++++

      [source]
      ----
      sjms:[queue:|topic:]destinationName[?options]
      ----

      Where `destinationName` is a JMS queue or topic name. By default, the
      `destinationName` is interpreted as a queue name. For example, to
      connect to the queue, `FOO.BAR` use:

      [source]
      ----
      sjms:FOO.BAR
      ----

      You can include the optional `queue:` prefix, if you prefer:

      [source]
      ----
      sjms:queue:FOO.BAR
      ----

      To connect to a topic, you _must_ include the `topic:` prefix. For
      example, to connect to the topic, `Stocks.Prices`, use:

      [source]
      ----
      sjms:topic:Stocks.Prices
      ----

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

      [[SJMS-ComponentOptionsandConfigurations]]
      Component Options and Configurations
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^




      // component options: START
      The Simple JMS component supports 9 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | connectionFactory | ConnectionFactory | A ConnectionFactory is required to enable the SjmsComponent. It can be set directly or set set as part of a ConnectionResource.
      | headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | connectionResource | ConnectionResource | A ConnectionResource is an interface that allows for customization and container control of the ConnectionFactory. See Plugable Connection Resource Management for further details.
      | connectionCount | Integer | The maximum number of connections available to endpoints started under this component
      | jmsKeyFormatStrategy | JmsKeyFormatStrategy | Pluggable strategy for encoding and decoding JMS keys so they can be compliant with the JMS specification. Camel provides one implementation out of the box: default. The default strategy will safely marshal dots and hyphens (. and -). Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the notation.
      | transactionCommitStrategy | TransactionCommitStrategy | To configure which kind of commit strategy to use. Camel provides two implementations out of the box default and batch.
      | destinationCreationStrategy | DestinationCreationStrategy | To use a custom DestinationCreationStrategy.
      | timedTaskManager | TimedTaskManager | To use a custom TimedTaskManager
      | messageCreatedStrategy | MessageCreatedStrategy | To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
      |=======================================================================
      {% endraw %}
      // component options: END








      // endpoint options: START
      The Simple JMS component supports 32 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | destinationType | common | queue | String | The kind of destination to use
      | destinationName | common |  | String | *Required* DestinationName is a JMS queue or topic name. By default the destinationName is interpreted as a queue name.
      | acknowledgementMode | common | AUTO_ACKNOWLEDGE | SessionAcknowledgementType | The JMS acknowledgement name which is one of: SESSION_TRANSACTED CLIENT_ACKNOWLEDGE AUTO_ACKNOWLEDGE DUPS_OK_ACKNOWLEDGE
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | consumerCount | consumer | 1 | int | Sets the number of consumer listeners used for this endpoint.
      | durableSubscriptionId | consumer |  | String | Sets the durable subscription Id required for durable topics.
      | synchronous | consumer | true | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | messageSelector | consumer (advanced) |  | String | Sets the JMS Message selector syntax.
      | namedReplyTo | producer |  | String | Sets the reply to destination name used for InOut producer endpoints.
      | persistent | producer | true | boolean | Flag used to enable/disable message persistence.
      | producerCount | producer | 1 | int | Sets the number of producers used for this endpoint.
      | ttl | producer | -1 | long | Flag used to adjust the Time To Live value of produced messages.
      | allowNullBody | producer (advanced) | true | boolean | Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
      | prefillPool | producer (advanced) | true | boolean | Whether to prefill the producer connection pool on startup or create connections lazy when needed.
      | responseTimeOut | producer (advanced) | 5000 | long | Sets the amount of time we should wait before timing out a InOut response.
      | asyncStartListener | advanced | false | boolean | Whether to startup the consumer message listener asynchronously when starting a route. For example if a JmsConsumer cannot get a connection to a remote JMS broker then it may block while retrying and/or failover. This will cause Camel to block while starting routes. By setting this option to true you will let routes startup while the JmsConsumer connects to the JMS broker using a dedicated thread in asynchronous mode. If this option is used then beware that if the connection could not be established then an exception is logged at WARN level and the consumer will not be able to receive messages; You can then restart the route to retry.
      | asyncStopListener | advanced | false | boolean | Whether to stop the consumer message listener asynchronously when stopping a route.
      | connectionCount | advanced |  | Integer | The maximum number of connections available to this endpoint
      | connectionFactory | advanced |  | ConnectionFactory | Initializes the connectionFactory for the endpoint which takes precedence over the component's connectionFactory if any
      | connectionResource | advanced |  | ConnectionResource | Initializes the connectionResource for the endpoint which takes precedence over the component's connectionResource if any
      | destinationCreationStrategy | advanced |  | DestinationCreationStrategy | To use a custom DestinationCreationStrategy.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | includeAllJMSXProperties | advanced | false | boolean | Whether to include all JMSXxxx properties when mapping from JMS to Camel Message. Setting this to true will include properties such as JMSXAppID and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then this option does not apply.
      | jmsKeyFormatStrategy | advanced |  | JmsKeyFormatStrategy | Pluggable strategy for encoding and decoding JMS keys so they can be compliant with the JMS specification. Camel provides two implementations out of the box: default and passthrough. The default strategy will safely marshal dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the notation.
      | mapJmsMessage | advanced | true | boolean | Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
      | messageCreatedStrategy | advanced |  | MessageCreatedStrategy | To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
      | transacted | transaction | false | boolean | Specifies whether to use transacted mode
      | transactionBatchCount | transaction | -1 | int | If transacted sets the number of messages to process before committing a transaction.
      | transactionBatchTimeout | transaction | 5000 | long | Sets timeout (in millis) for batch transactions the value should be 1000 or higher.
      | transactionCommitStrategy | transaction |  | TransactionCommitStrategy | Sets the commit strategy.
      |=======================================================================
      {% endraw %}
      // endpoint options: END





      Below is an example of how to configure the `SjmsComponent` with its
      required `ConnectionFactory` provider. It will create a single connection
      by default and store it using the components internal pooling APIs to
      ensure that it is able to service Session creation requests in a thread
      safe manner.

      [source,java]
      ----
      SjmsComponent component = new SjmsComponent();
      component.setConnectionFactory(new ActiveMQConnectionFactory("tcp://localhost:61616"));
      getContext().addComponent("sjms", component);
      ----

      For a SJMS component that is required to support a durable subscription,
      you can override the default `ConnectionFactoryResource` instance and set
      the `clientId` property.

      [source,java]
      ----
      ConnectionFactoryResource connectionResource = new ConnectionFactoryResource();
      connectionResource.setConnectionFactory(new ActiveMQConnectionFactory("tcp://localhost:61616"));
      connectionResource.setClientId("myclient-id");

      SjmsComponent component = new SjmsComponent();
      component.setConnectionResource(connectionResource);
      component.setMaxConnections(1);
      ----

      [[SJMS-ProducerUsage]]
      Producer Usage
      ^^^^^^^^^^^^^^

      [[SJMS-InOnlyProducer]]
      InOnly Producer - (Default)
      +++++++++++++++++++++++++++

      The _InOnly_ producer is the default behavior of the SJMS Producer
      Endpoint.

      [source,java]
      ----
      from("direct:start")
          .to("sjms:queue:bar");
      ----

      [[SJMS-InOutProducer]]
      InOut Producer
      ++++++++++++++

      To enable _InOut_ behavior append the `exchangePattern` attribute to the
      URI. By default it will use a dedicated TemporaryQueue for each
      consumer.

      [source,java]
      ----
      from("direct:start")
          .to("sjms:queue:bar?exchangePattern=InOut");
      ----

      You can specify a `namedReplyTo` though which can provide a better
      monitor point.

      [source,java]
      ----
      from("direct:start")
          .to("sjms:queue:bar?exchangePattern=InOut&namedReplyTo=my.reply.to.queue");
      ----

      [[SJMS-ConsumerUsage]]
      Consumer Usage
      ^^^^^^^^^^^^^^

      [[SJMS-InOnlyConsumer]]
      InOnly Consumer - (Default)
      +++++++++++++++++++++++++++

      The _InOnly_ xonsumer is the default Exchange behavior of the SJMS
      Consumer Endpoint.

      [source,java]
      ----
      from("sjms:queue:bar")
          .to("mock:result");
      ----

      [[SJMS-InOutConsumer]]
      InOut Consumer
      ++++++++++++++

      To enable _InOut_ behavior append the `exchangePattern` attribute to the
      URI.

      [source,java]
      ----
      from("sjms:queue:in.out.test?exchangePattern=InOut")
          .transform(constant("Bye Camel"));
      ----

      [[SJMS-AdvancedUsageNotes]]
      Advanced Usage Notes
      ^^^^^^^^^^^^^^^^^^^^

      [[SJMS-PlugableConnectionResourceManagementconnectionresource]]
      Plugable Connection Resource Management [[SJMS-connectionresource]]
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      SJMS provides JMS
      http://docs.oracle.com/javaee/5/api/javax/jms/Connection.html[`Connection`]
      resource management through built-in connection pooling. This eliminates
      the need to depend on third party API pooling logic. However there may
      be times that you are required to use an external Connection resource
      manager such as those provided by J2EE or OSGi containers. For this SJMS
      provides an interface that can be used to override the internal SJMS
      Connection pooling capabilities. This is accomplished through the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/ConnectionResource.java[`ConnectionResource`]
      interface.

      The
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/jms/ConnectionResource.java[`ConnectionResource`]
      provides methods for borrowing and returning Connections as needed is
      the contract used to provide
      http://docs.oracle.com/javaee/5/api/javax/jms/Connection.html[`Connection`]
      pools to the SJMS component. A user should use when it is necessary to
      integrate SJMS with an external connection pooling manager.

      It is recommended though that for standard
      http://docs.oracle.com/javaee/5/api/javax/jms/ConnectionFactory.html[`ConnectionFactory`]
      providers you use the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/ConnectionResourceIT.java[`ConnectionFactoryResource`]
      implementation that is provided with SJMS as-is or extend as it is
      optimized for this component.

      Below is an example of using the plugable ConnectionResource with the
      ActiveMQ `PooledConnectionFactory`:

      [source,java]
      ----
      public class AMQConnectionResource implements ConnectionResource {
          private PooledConnectionFactory pcf;

          public AMQConnectionResource(String connectString, int maxConnections) {
              super();
              pcf = new PooledConnectionFactory(connectString);
              pcf.setMaxConnections(maxConnections);
              pcf.start();
          }

          public void stop() {
              pcf.stop();
          }

          @Override
          public Connection borrowConnection() throws Exception {
              Connection answer = pcf.createConnection();
              answer.start();
              return answer;
          }

          @Override
          public Connection borrowConnection(long timeout) throws Exception {
              // SNIPPED...
          }

          @Override
          public void returnConnection(Connection connection) throws Exception {
              // Do nothing since there isn't a way to return a Connection
              // to the instance of PooledConnectionFactory
              log.info("Connection returned");
          }
      }
      ----

      Then pass in the `ConnectionResource` to the `SjmsComponent`:

      [source,java]
      ----
      CamelContext camelContext = new DefaultCamelContext();
      AMQConnectionResource pool = new AMQConnectionResource("tcp://localhost:33333", 1);
      SjmsComponent component = new SjmsComponent();
      component.setConnectionResource(pool);
      camelContext.addComponent("sjms", component);
      ----

      To see the full example of its usage please refer to the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/test/java/org/apache/camel/component/sjms/it/ConnectionResourceIT.java[`ConnectionResourceIT`].

      [[SJMS-Session,Consumer,&ProducerPooling&CachingManagement]]
      Session, Consumer, & Producer Pooling & Caching Management
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      Coming soon ...

      [[SJMS-BatchMessageSupport]]
      Batch Message Support
      +++++++++++++++++++++

      The SjmsProducer supports publishing a collection of messages by
      creating an Exchange that encapsulates a `List`. This SjmsProducer will
      take then iterate through the contents of the List and publish each
      message individually.

      If when producing a batch of messages there is the need to set headers
      that are unique to each message you can use the SJMS
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/BatchMessage.java[`BatchMessage`]
      class. When the SjmsProducer encounters a `BatchMessage` list it will
      iterate each `BatchMessage` and publish the included payload and headers.

      Below is an example of using the BatchMessage class. First we create a
      list of `BatchMessage`:

      [source,java]
      ----
      List<BatchMessage<String>> messages = new ArrayList<BatchMessage<String>>();
      for (int i = 1; i <= messageCount; i++) {
          String body = "Hello World " + i;
          BatchMessage<String> message = new BatchMessage<String>(body, null);
          messages.add(message);
      }
      ----

      Then publish the list:

      [source,java]
      ----
      template.sendBody("sjms:queue:batch.queue", messages);
      ----

      [[SJMS-CustomizableTransactionCommitStrategies]]
      Customizable Transaction Commit Strategies (Local JMS Transactions only)
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      SJMS provides a developer the means to create a custom and plugable
      transaction strategy through the use of the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/TransactionCommitStrategy.java[`TransactionCommitStrategy`]
      interface. This allows a user to define a unique set of circumstances
      that the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/tx/SessionTransactionSynchronization.java[`SessionTransactionSynchronization`]
      will use to determine when to commit the Session. An example of its use
      is the
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sjms/src/main/java/org/apache/camel/component/sjms/tx/BatchTransactionCommitStrategy.java[`BatchTransactionCommitStrategy`]
      which is detailed further in the next section.

      [[SJMS-TransactedBatchConsumersAndProducers]]
      Transacted Batch Consumers & Producers
      ++++++++++++++++++++++++++++++++++++++

      The SJMS component has been designed to support the batching of local JMS
      transactions on both the Producer and Consumer endpoints. How they are
      handled on each is very different though.

      The SJMS consumer endpoint is a straightforward implementation that will
      process X messages before committing them with the associated Session.
      To enable batched transaction on the consumer first enable transactions
      by setting the `transacted` parameter to true and then adding the
      `transactionBatchCount` and setting it to any value that is greater than
      0. For example the following configuration will commit the Session every
      10 messages:

      [source]
      ----
      sjms:queue:transacted.batch.consumer?transacted=true&transactionBatchCount=10
      ----

      If an exception occurs during the processing of a batch on the consumer
      endpoint, the Session rollback is invoked causing the messages to be
      redelivered to the next available consumer. The counter is also reset to
      0 for the `BatchTransactionCommitStrategy` for the associated Session as
      well. It is the responsibility of the user to ensure they put hooks in
      their processors of batch messages to watch for messages with the
      JMSRedelivered header set to true. This is the indicator that messages
      were rolled back at some point and that a verification of a successful
      processing should occur.

      A transacted batch consumer also carries with it an instance of an
      internal timer that waits a default amount of time (5000ms) between
      messages before committing the open transactions on the Session. The
      default value of 5000ms (minimum of 1000ms) should be adequate for most
      use-cases but if further tuning is necessary simply set the
      `transactionBatchTimeout` parameter.

      [source]
      ----
      sjms:queue:transacted.batch.consumer?transacted=true&transactionBatchCount=10&transactionBatchTimeout=2000
      ----

      The minimal value that will be accepted is 1000ms as the amount of
      context switching may cause unnecessary performance impacts without
      gaining benefit.

      The producer endpoint is handled much differently though. With the
      producer after each message is delivered to its destination the Exchange
      is closed and there is no longer a reference to that message. To make a
      available all the messages available for redelivery you simply enable
      transactions on a Producer Endpoint that is publishing BatchMessages.
      The transaction will commit at the conclusion of the exchange which
      includes all messages in the batch list. Nothing additional need be
      configured. For example:

      [source,java]
      ----
      List<BatchMessage<String>> messages = new ArrayList<BatchMessage<String>>();
      for (int i = 1; i <= messageCount; i++) {
          String body = "Hello World " + i;
          BatchMessage<String> message = new BatchMessage<String>(body, null);
          messages.add(message);
      }
      ----

      Now publish the List with transactions enabled:

      [source,java]
      ----
      template.sendBody("sjms:queue:batch.queue?transacted=true", messages);
      ----

      [[SJMS-AdditionalNotes]]
      Additional Notes
      ^^^^^^^^^^^^^^^^

      [[SJMS-MessageHeaderFormat]]
      Message Header Format
      +++++++++++++++++++++

      The SJMS Component uses the same header format strategy that is used in
      the Camel JMS Component. This plugable strategy ensures that messages
      sent over the wire conform to the JMS Message spec.

      For the `exchange.in.header` the following rules apply for the header
      keys:

      * Keys starting with `JMS` or `JMSX` are reserved.
      * `exchange.in.headers` keys must be literals and all be valid Java
      identifiers (do not use dots in the key name).
      * Camel replaces dots & hyphens and the reverse when when consuming JMS
      messages:

      ** is replaced by _DOT_ and the reverse replacement when Camel consumes
      the message.
      ** is replaced by _HYPHEN_ and the reverse replacement when Camel
      consumes the message. +
      See also the option `jmsKeyFormatStrategy`, which allows use of your own
      custom strategy for formatting keys.

      For the `exchange.in.header`, the following rules apply for the header
      values:

      [[SJMS-MessageContent]]
      Message Content
      +++++++++++++++

      To deliver content over the wire we must ensure that the body of the
      message that is being delivered adheres to the JMS Message
      Specification. Therefore, all that are produced must either be
      primitives or their counter objects (such as `Integer`, `Long`, `Character`).
      The types, `String`, `CharSequence`, `Date`, `BigDecimal` and `BigInteger` are all
      converted to their `toString()` representation. All other types are
      dropped.

      [[SJMS-Clustering]]
      Clustering
      ++++++++++

      When using _InOut_ with SJMS in a clustered environment you must either
      use TemporaryQueue destinations or use a unique named reply to
      destination per InOut producer endpoint. Message correlation is handled
      by the endpoint, not with message selectors at the broker. The InOut
      Producer Endpoint uses Java Concurrency Exchangers cached by the Message
      `JMSCorrelationID`. This provides a nice performance increase while
      reducing the overhead on the broker since all the messages are consumed
      from the destination in the order they are produced by the interested
      consumer.

      Currently the only correlation strategy is to use the `JMSCorrelationId`.
      The _InOut_ Consumer uses this strategy as well ensuring that all
      responses messages to the included `JMSReplyTo` destination also have the
      `JMSCorrelationId` copied from the request as well.

      [[SJMS-TransactionSupporttransactions]]
      Transaction Support [[SJMS-transactions]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      SJMS currently only supports the use of internal JMS Transactions. There
      is no support for the Camel Transaction Processor or the Java
      Transaction API (JTA).

      [[SJMS-DoesSpringlessMeanICantUseSpring]]
      Does Springless Mean I Can't Use Spring?
      ++++++++++++++++++++++++++++++++++++++++

      Not at all. Below is an example of the SJMS component using the Spring
      DSL:

      [source,java]
      ----
      <route
          id="inout.named.reply.to.producer.route">
          <from
              uri="direct:invoke.named.reply.to.queue" />
          <to
              uri="sjms:queue:named.reply.to.queue?namedReplyTo=my.response.queue&amp;exchangePattern=InOut" />
      </route>
      ----

      Springless refers to moving away from the dependency on the Spring JMS
      API. A new JMS client API is being developed from the ground up to power
      SJMS.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sjms-batch
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sjms-batch
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sjms-batch
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sjms-batch
          spec:
            containers:
            - image: fabric8/connector-sjms-batch:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sjms-batch
        syntax: sjms-batch:destinationName
        title: Simple JMS Batch
        description: The sjms-batch component is a specialized for highly performant transactional batch consumption from a JMS queue.
        label: messaging
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.sjms.batch.SjmsBatchComponent
        groupId: org.apache.camel
        artifactId: camel-sjms
        version: 2.18.1
      componentProperties:
        connectionFactory:
          kind: property
          type: object
          javaType: javax.jms.ConnectionFactory
          deprecated: false
          secret: false
          description: A ConnectionFactory is required to enable the SjmsBatchComponent.
      properties:
        destinationName:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The destination name. Only queues are supported names may be prefixed by 'queue:'.
        aggregationStrategy:
          kind: parameter
          group: consumer
          required: true
          type: object
          javaType: org.apache.camel.processor.aggregate.AggregationStrategy
          deprecated: false
          secret: false
          description: The aggregation strategy to use which merges all the batched messages into a single message
        allowNullBody:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        completionInterval:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The completion interval in millis which causes batches to be completed in a scheduled fixed rate every interval. The batch may be empty if the timeout triggered and there was no messages in the batch. Notice you cannot use both completion timeout and completion interval at the same time only one can be configured.
        completionPredicate:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The completion predicate which causes batches to be completed when the predicate evaluates as true. The predicate can also be configured using the simple language using the string syntax. You may want to set the option eagerCheckCompletion to true to let the predicate match the incoming message as otherwise it matches the aggregated message.
        completionSize:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "200"
          description: The number of messages consumed at which the batch will be completed
        completionTimeout:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "500"
          description: The timeout in millis from receipt of the first first message when the batch will be completed. The batch may be empty if the timeout triggered and there was no messages in the batch. Notice you cannot use both completion timeout and completion interval at the same time only one can be configured.
        consumerCount:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: The number of JMS sessions to consume from
        eagerCheckCompletion:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange.
        includeAllJMSXProperties:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 'Whether to include all JMSXxxx properties when mapping from JMS
            to Camel Message. Setting this to true will include properties such as JMSXAppID
            and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then
            this option does not apply.'
        mapJmsMessage:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
        pollDuration:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The duration in milliseconds of each poll for messages. completionTimeOut will be used if it is shorter and a batch has started.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If using completion timeout or interval then the batch may be empty if the timeout triggered and there was no messages in the batch. If this option is true and the batch is empty then an empty message is added to the batch so an empty message is routed.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        jmsKeyFormatStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sjms.jms.JmsKeyFormatStrategy
          deprecated: false
          secret: false
          description: 'Pluggable strategy for encoding and decoding JMS keys so they can
            be compliant with the JMS specification. Camel provides two implementations
            out of the box: default and passthrough. The default strategy will safely marshal
            dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can
            be used for JMS brokers which do not care whether JMS header keys contain illegal
            characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy
            and refer to it using the notation.'
        messageCreatedStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sjms.jms.MessageCreatedStrategy
          deprecated: false
          secret: false
          description: To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        timeoutCheckerExecutorService:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          deprecated: false
          secret: false
          description: If using the completionInterval option a background thread is created to trigger the completion interval. Set this option to provide a custom thread pool to be used rather than creating a new thread for every consumer.
    documentation.adoc: |
      [[ConfluenceContent]]
      [[SJMSBatch-SJMSBatchComponent]]
      SJMS Batch Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      SJMS Batch is a specialized component for highly performant,
      transactional batch consumption from a JMS queue. It can be thought of
      as a hybrid of a consumer-only component and an
      link:aggregator2.html[aggregator].

      A common use case in Camel is to consume messages from a queue and
      aggregate them before sending the aggregated state to another endpoint.
      In order to ensure that data is not lost if the system performing the
      processing fails, it is typically consumed within a transaction from the
      queue, and once aggregated stored in a persistent
      `AggregationRepository`, such as the one found in the
      link:jdbc.html[JDBC Component].

      The behavior of the aggregator pattern involves fetching data from the
      `AggregationRepository` before an incoming message is aggregated, and
      writing back the result afterwards. By nature, the reads and writes take
      progressively longer as the number of aggregated artifacts increases. A
      rough example of this using arbitrary time units that demonstrates the
      impact of this is as follows:

      [cols=",,,",options="header",]
      |=======================================
      |Item |Read Time |Write Time |Total Time
      |0 |0 |1 |1
      |1 |1 |2 |4
      |2 |2 |3 |9
      |3 |3 |4 |16
      |4 |4 |5 |25
      |5 |5 |6 |36
      |6 |6 |7 |49
      |7 |7 |8 |64
      |8 |8 |9 |81
      |9 |9 |10 |100
      |=======================================

      In contrast, consumption performance using the SJMS Batch component is
      linear. Each message is consumed and aggregated using an
      `AggregationStrategy` before the next one is fetched. As all of the
      consumption and aggregation is performed in a single JMS transaction no
      external storage is required to persist the intermediate state - this
      avoids the read and write costs described above. In practice, this
      yields multiple orders of magnitude higher throughput.

      Once a completion condition is met, either by size or period since first
      message, the aggregated `Exchange` is passed into the route. During the
      processing of this `Exchange`, if an exception is thrown or the system
      shuts down, all of the original consumed messages end up back on the
      queue (or are placed on the dead-letter queue depending on the broker
      configuration).

      Unlike using a regular aggregator, there is no facility for an
      aggregation condition, meaning that it is not possible to batch consume
      into multiple groups of messages. All consumed messages are aggregated
      together into a single batch.

      Multiple JMS consumer support is available which allows you to consume
      in parallel using the one route, and at the same time use facilities
      like JMS message groups to group related messages.

      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-sjms</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ----

      [[SJMSBatch-URIformat]]
      URI format
      ++++++++++

      [source]
      ----
      sjms:[queue:]destinationName[?options]
      ----

      Where `destinationName` is a JMS queue. By default, the
      `destinationName` is interpreted as a queue name.

      [source]
      ----
      sjms:FOO.BAR
      ----

      You can include the optional `queue:` prefix, if you prefer:

      [source]
      ----
      sjms:queue:FOO.BAR
      ----

      Topic consumption is not supported, as there is no advantage to using
      batch consumption within that context. Topic messages are usually
      non-persistent, and loss is acceptable. If consumed within a transaction
      that fails, a topic message will likely not be redelivered by the
      broker. A plain link:sjms.html[SJMS] consumer endpoint can be used in
      conjunction with a regular non-persistence backed
      link:aggregator2.html[aggregator] in this scenario.

      [[SJMSBatch-ComponentOptionsandConfigurations]]
      Component Options and Configurations
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^




      // component options: START
      The Simple JMS Batch component supports 1 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | connectionFactory | ConnectionFactory | A ConnectionFactory is required to enable the SjmsBatchComponent.
      |=======================================================================
      {% endraw %}
      // component options: END









      // endpoint options: START
      The Simple JMS Batch component supports 21 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | destinationName | consumer |  | String | *Required* The destination name. Only queues are supported names may be prefixed by 'queue:'.
      | aggregationStrategy | consumer |  | AggregationStrategy | *Required* The aggregation strategy to use which merges all the batched messages into a single message
      | allowNullBody | consumer | true | boolean | Whether to allow sending messages with no body. If this option is false and the message body is null then an JMSException is thrown.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | completionInterval | consumer | 1000 | int | The completion interval in millis which causes batches to be completed in a scheduled fixed rate every interval. The batch may be empty if the timeout triggered and there was no messages in the batch. Notice you cannot use both completion timeout and completion interval at the same time only one can be configured.
      | completionPredicate | consumer |  | String | The completion predicate which causes batches to be completed when the predicate evaluates as true. The predicate can also be configured using the simple language using the string syntax. You may want to set the option eagerCheckCompletion to true to let the predicate match the incoming message as otherwise it matches the aggregated message.
      | completionSize | consumer | 200 | int | The number of messages consumed at which the batch will be completed
      | completionTimeout | consumer | 500 | int | The timeout in millis from receipt of the first first message when the batch will be completed. The batch may be empty if the timeout triggered and there was no messages in the batch. Notice you cannot use both completion timeout and completion interval at the same time only one can be configured.
      | consumerCount | consumer | 1 | int | The number of JMS sessions to consume from
      | eagerCheckCompletion | consumer | false | boolean | Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to without eager completion checking the completionPredicate will use the aggregated Exchange.
      | includeAllJMSXProperties | consumer | false | boolean | Whether to include all JMSXxxx properties when mapping from JMS to Camel Message. Setting this to true will include properties such as JMSXAppID and JMSXUserID etc. Note: If you are using a custom headerFilterStrategy then this option does not apply.
      | mapJmsMessage | consumer | true | boolean | Specifies whether Camel should auto map the received JMS message to a suited payload type such as javax.jms.TextMessage to a String etc. See section about how mapping works below for more details.
      | pollDuration | consumer | 1000 | int | The duration in milliseconds of each poll for messages. completionTimeOut will be used if it is shorter and a batch has started.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If using completion timeout or interval then the batch may be empty if the timeout triggered and there was no messages in the batch. If this option is true and the batch is empty then an empty message is added to the batch so an empty message is routed.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message.
      | jmsKeyFormatStrategy | advanced |  | JmsKeyFormatStrategy | Pluggable strategy for encoding and decoding JMS keys so they can be compliant with the JMS specification. Camel provides two implementations out of the box: default and passthrough. The default strategy will safely marshal dots and hyphens (. and -). The passthrough strategy leaves the key as is. Can be used for JMS brokers which do not care whether JMS header keys contain illegal characters. You can provide your own implementation of the org.apache.camel.component.jms.JmsKeyFormatStrategy and refer to it using the notation.
      | messageCreatedStrategy | advanced |  | MessageCreatedStrategy | To use the given MessageCreatedStrategy which are invoked when Camel creates new instances of javax.jms.Message objects when Camel is sending a JMS message.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | timeoutCheckerExecutorService | advanced |  | ScheduledExecutorService | If using the completionInterval option a background thread is created to trigger the completion interval. Set this option to provide a custom thread pool to be used rather than creating a new thread for every consumer.
      |=======================================================================
      {% endraw %}
      // endpoint options: END





      The `completionSize` endpoint attribute is used in conjunction with
      `completionTimeout`, where the first condition to be met will cause the
      aggregated `Exchange` to be emitted down the route.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-slack
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: slack
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: slack
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: slack
          spec:
            containers:
            - image: fabric8/connector-slack:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: slack
        syntax: slack:channel
        title: Slack
        description: The slack component allows you to send messages to Slack.
        label: social
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.slack.SlackComponent
        groupId: org.apache.camel
        artifactId: camel-slack
        version: 2.18.1
      componentProperties:
        webhookUrl:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The incoming webhook URL
      properties:
        channel:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The channel name (syntax name) or slackuser (syntax userName) to send a message directly to an user.
        iconEmoji:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Use a Slack emoji as an avatar
        iconUrl:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The avatar that the component will use when sending message to a channel or user.
        username:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: This is the username that the bot will have when sending messages to a channel or user.
        webhookUrl:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The incoming webhook URL
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Slack-SlackComponent]]
      Slack Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.16*

      The??*slack*??component allows you to connect to an instance
      of??http://www.slack.com/[Slack]??and delivers a message contained in the
      message body via a pre
      established??https://api.slack.com/incoming-webhooks[Slack incoming
      webhook].

      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-slack</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Slack-URIformat]]
      URI format
      ^^^^^^^^^^

      To send a message to a channel.

      [source,java]
      ------------------------
      slack:#channel[?options]
      ------------------------

      To send a direct message to a slackuser.

      [source,java]
      -------------------------
      slack:@username[?options]
      -------------------------

      [[Slack-Options]]
      Options
      ^^^^^^^



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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | webhookUrl | String | The incoming webhook URL
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Slack component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | channel | producer |  | String | *Required* The channel name (syntax name) or slackuser (syntax userName) to send a message directly to an user.
      | iconEmoji | producer |  | String | Use a Slack emoji as an avatar
      | iconUrl | producer |  | String | The avatar that the component will use when sending message to a channel or user.
      | username | producer |  | String | This is the username that the bot will have when sending messages to a channel or user.
      | webhookUrl | producer |  | String | The incoming webhook URL
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Slack-SlackComponent.1]]
      SlackComponent
      ^^^^^^^^^^^^^^

      The SlackComponent with XML must be configured as a Spring or Blueprint
      bean that contains the incoming webhook url for the integration as a
      parameter.

      [source,xml]
      -----------------------------------------------------------------------------------------------------------------------
      <bean id="slack" class="org.apache.camel.component.slack.SlackComponent">
          <property name="webhookUrl" value="https://hooks.slack.com/services/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"/>
      </bean>
      -----------------------------------------------------------------------------------------------------------------------

      For Java you can configure this using Java code.

      [[Slack-Example]]
      Example
      ^^^^^^^

      A CamelContext with Blueprint could be as:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <?xml version="1.0" encoding="UTF-8"?>
      <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">

          <bean id="slack" class="org.apache.camel.component.slack.SlackComponent">
              <property name="webhookUrl" value="https://hooks.slack.com/services/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"/>
          </bean>

          <camelContext xmlns="http://camel.apache.org/schema/blueprint">
              <route>
                  <from uri="direct:test"/>
                  <to uri="slack:#channel?iconEmoji=:camel:&amp;username=CamelTest"/>
              </route>
          </camelContext>

      </blueprint>
      ---------------------------------------------------------------------------------------------------------------------------

      [[Slack-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-smpp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: smpp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: smpp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: smpp
          spec:
            containers:
            - image: fabric8/connector-smpp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: smpp
        alternativeSchemes: smpp,smpps
        syntax: smpp:host:port
        title: SMPP
        description: To send and receive SMS using a SMSC (Short Message Service Center).
        label: mobile
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.smpp.SmppComponent
        groupId: org.apache.camel
        artifactId: camel-smpp
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.smpp.SmppConfiguration
          deprecated: false
          secret: false
          description: To use the shared SmppConfiguration as configuration.
      properties:
        host:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: localhost
          description: Hostname for the SMSC server to use.
        port:
          kind: path
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2775"
          description: Port number for the SMSC server to use.
        initialReconnectDelay:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Defines the initial delay in milliseconds after the consumer/producer tries to reconnect to the SMSC after the connection was lost.
        maxReconnect:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: Defines the maximum number of attempts to reconnect to the SMSC if SMSC returns a negative bind response
        reconnectDelay:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Defines the interval in milliseconds between the reconnect attempts if the connection to the SMSC was lost and the previous was not succeed.
        splittingPolicy:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.smpp.SmppSplittingPolicy
          enum:
          - ALLOW
          - REJECT
          - TRUNCATE
          deprecated: false
          secret: false
          defaultValue: ALLOW
          description: 'You can specify a policy for handling long messages: ALLOW - the
            default long messages are split to 140 bytes per message TRUNCATE - long messages
            are split and only the first fragment will be sent to the SMSC. Some carriers
            drop subsequent fragments so this reduces load on the SMPP connection sending
            parts of a message that will never be delivered. REJECT - if a message would
            need to be split it is rejected with an SMPP NegativeResponseException and the
            reason code signifying the message is too long.'
        systemType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: cp
          description: This parameter is used to categorize the type of ESME (External Short Message Entity) that is binding to the SMSC (max. 13 characters).
        addressRange:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: You can specify the address range for the SmppConsumer as defined in section 5.2.7 of the SMPP 3.4 specification. The SmppConsumer will receive messages only from SMSC's which target an address (MSISDN or IP address) within this range.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        destAddr:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "1717"
          description: Defines the destination SME address. For mobile terminated messages this is the directory number of the recipient MS. Only for SubmitSm SubmitMulti CancelSm and DataSm.
        destAddrNpi:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "6"
          - "8"
          - "9"
          - "10"
          - "13"
          - "18"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME destination
            address parameters. Only for SubmitSm SubmitMulti CancelSm and DataSm. The following
            NPI values are defined: 0: Unknown 1: ISDN (E163/E164) 2: Data (X.121) 3: Telex
            (F.69) 6: Land Mobile (E.212) 8: National 9: Private 10: ERMES 13: Internet
            (IP) 18: WAP Client Id (to be defined by WAP Forum)'
        destAddrTon:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME destination
            address parameters. Only for SubmitSm SubmitMulti CancelSm and DataSm. The following
            TON values are defined: 0: Unknown 1: International 2: National 3: Network Specific
            4: Subscriber Number 5: Alphanumeric 6: Abbreviated'
        lazySessionCreation:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sessions can be lazily created to avoid exceptions if the SMSC is not available when the Camel producer is started. Camel will check the in message headers 'CamelSmppSystemId' and 'CamelSmppPassword' of the first exchange. If they are present Camel will use these data to connect to the SMSC.
        numberingPlanIndicator:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "6"
          - "8"
          - "9"
          - "10"
          - "13"
          - "18"
          deprecated: false
          secret: false
          description: 'Defines the numeric plan indicator (NPI) to be used in the SME.
            The following NPI values are defined: 0: Unknown 1: ISDN (E163/E164) 2: Data
            (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National 9: Private 10: ERMES
            13: Internet (IP) 18: WAP Client Id (to be defined by WAP Forum)'
        priorityFlag:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          deprecated: false
          secret: false
          description: 'Allows the originating SME to assign a priority level to the short
            message. Only for SubmitSm and SubmitMulti. Four Priority Levels are supported:
            0: Level 0 (lowest) priority 1: Level 1 priority 2: Level 2 priority 3: Level
            3 (highest) priority'
        protocolId:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: byte
          deprecated: false
          secret: false
          description: The protocol id
        registeredDelivery:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          deprecated: false
          secret: false
          description: 'Is used to request an SMSC delivery receipt and/or SME originated
            acknowledgements. The following values are defined: 0: No SMSC delivery receipt
            requested. 1: SMSC delivery receipt requested where final delivery outcome is
            success or failure. 2: SMSC delivery receipt requested where the final delivery
            outcome is delivery failure.'
        replaceIfPresentFlag:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          deprecated: false
          secret: false
          description: 'Used to request the SMSC to replace a previously submitted message
            that is still pending delivery. The SMSC will replace an existing message provided
            that the source address destination address and service type match the same
            fields in the new message. The following replace if present flag values are
            defined: 0: Don''t replace 1: Replace'
        serviceType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - CMT
          - CPT
          - VMN
          - VMA
          - WAP
          - USSD
          deprecated: false
          secret: false
          defaultValue: CMT
          description: 'The service type parameter can be used to indicate the SMS Application
            service associated with the message. The following generic service_types are
            defined: CMT: Cellular Messaging CPT: Cellular Paging VMN: Voice Mail Notification
            VMA: Voice Mail Alerting WAP: Wireless Application Protocol USSD: Unstructured
            Supplementary Services Data'
        sourceAddr:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "1616"
          description: Defines the address of SME (Short Message Entity) which originated this message.
        sourceAddrNpi:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "6"
          - "8"
          - "9"
          - "10"
          - "13"
          - "18"
          deprecated: false
          secret: false
          description: 'Defines the numeric plan indicator (NPI) to be used in the SME originator
            address parameters. The following NPI values are defined: 0: Unknown 1: ISDN
            (E163/E164) 2: Data (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National
            9: Private 10: ERMES 13: Internet (IP) 18: WAP Client Id (to be defined by WAP
            Forum)'
        sourceAddrTon:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME originator
            address parameters. The following TON values are defined: 0: Unknown 1: International
            2: National 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated'
        typeOfNumber:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME. The following
            TON values are defined: 0: Unknown 1: International 2: National 3: Network Specific
            4: Subscriber Number 5: Alphanumeric 6: Abbreviated'
        enquireLinkTimer:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Defines the interval in milliseconds between the confidence checks. The confidence check is used to test the communication path between an ESME and an SMSC.
        sessionStateListener:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.jsmpp.session.SessionStateListener
          deprecated: false
          secret: false
          description: You can refer to a org.jsmpp.session.SessionStateListener in the Registry to receive callbacks when the session state changed.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transactionTimer:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Defines the maximum period of inactivity allowed after a transaction after which an SMPP entity may assume that the session is no longer active. This timer may be active on either communicating SMPP entity (i.e. SMSC or ESME).
        alphabet:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: byte
          enum:
          - "0"
          - "4"
          - "8"
          deprecated: false
          secret: false
          description: 'Defines encoding of data according the SMPP 3.4 specification section
            5.2.19. 0: SMSC Default Alphabet 4: 8 bit Alphabet 8: UCS2 Alphabet'
        dataCoding:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: byte
          deprecated: false
          secret: false
          description: 'Defines the data coding according the SMPP 3.4 specification section
            5.2.19. Example data encodings are: 0: SMSC Default Alphabet 3: Latin 1 (ISO-8859-1)
            4: Octet unspecified (8-bit binary) 8: UCS2 (ISO/IEC-10646) 13: Extended Kanji
            JIS(X 0212-1990)'
        encoding:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: ISO-8859-1
          description: Defines the encoding scheme of the short message user data. Only for SubmitSm ReplaceSm and SubmitMulti.
        httpProxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If you need to tunnel SMPP through a HTTP proxy set this attribute to the hostname or ip address of your HTTP proxy.
        httpProxyPassword:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If your HTTP proxy requires basic authentication set this attribute to the password required for your HTTP proxy.
        httpProxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "3128"
          description: If you need to tunnel SMPP through a HTTP proxy set this attribute to the port of your HTTP proxy.
        httpProxyUsername:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If your HTTP proxy requires basic authentication set this attribute to the username required for your HTTP proxy.
        proxyHeaders:
          kind: parameter
          group: proxy
          label: proxy
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          deprecated: false
          secret: false
          description: These headers will be passed to the proxy server while establishing the connection.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for connecting to SMSC server.
        systemId:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          defaultValue: smppclient
          description: The system id (username) for connecting to SMSC server.
        usingSSL:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether using SSL with the smpps protocol
    documentation.adoc: "[[SMPP-SMPPComponent]]\nSMPP Component\n~~~~~~~~~~~~~~\n\n\
      *CamelSmppFinalStatusAvailable as of Camel 2.2*\n\nThis component provides access\
      \ to an SMSC (Short Message Service Center)\nover the http://smsforum.net/SMPP_v3_4_Issue1_2.zip[SMPP]\
      \ protocol to\nsend and receive SMS. The http://jsmpp.org[JSMPP] library is\
      \ used for\nthe protocol implementation.\n\nThe Camel component currently operates\
      \ as an\nhttp://en.wikipedia.org/wiki/ESME[ESME] (External Short Messaging\n\
      Entity) and not as an SMSC itself.\n\nStarting with*Camel 2.9*??you are also\
      \ able to execute ReplaceSm,\nQuerySm, SubmitMulti, CancelSm and DataSm.\n\n\
      Maven users will need to add the following dependency to their `pom.xml`\nfor\
      \ this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-smpp</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[SMPP-SMSlimitations]]\nSMS limitations\n^^^^^^^^^^^^^^^\n\nSMS is neither\
      \ reliable or secure.?? Users who require reliable and\nsecure delivery may\
      \ want to consider using the XMPP or SIP components\ninstead, combined with\
      \ a smartphone app supporting the chosen protocol.\n\n* Reliability: although\
      \ the SMPP standard offers a range of feedback\nmechanisms to indicate errors,\
      \ non-delivery and confirmation of delivery\nit is not uncommon for mobile networks\
      \ to hide or simulate these\nresponses.?? For example, some networks automatically\
      \ send a delivery\nconfirmation for every message even if the destination number\
      \ is invalid\nor not switched on.?? Some networks silently drop messages if\
      \ they think\nthey are spam.?? Spam detection rules in the network may be very\
      \ crude,\nsometimes more than 100 messages per day from a single sender may\
      \ be\nconsidered spam.\n* Security: there is basic encryption for the last hop\
      \ from the radio\ntower down to the recipient handset.?? SMS messages are not\
      \ encrypted or\nauthenticated in any other part of the network.?? Some operators\
      \ allow\nstaff in retail outlets or call centres to browse through the SMS\n\
      message histories of their customers.?? Message sender identity can be\neasily\
      \ forged.?? Regulators and even the mobile telephone industry itself\nhas cautioned\
      \ against the use of SMS in two-factor authentication\nschemes and other purposes\
      \ where security is important.\n\nWhile the Camel component makes it as easy\
      \ as possible to send messages\nto the SMS network, it can not offer an easy\
      \ solution to these problems.\n\n[[SMPP-Datacoding,alphabetandinternationalcharactersets]]\n\
      Data coding, alphabet and international character sets\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\
      \nData coding and alphabet can be specified on a per-message basis.??\nDefault\
      \ values can be specified for the endpoint.?? It is important to\nunderstand\
      \ the relationship between these options and the way the\ncomponent acts when\
      \ more than one value is set.\n\nData coding is an 8 bit field in the SMPP wire\
      \ format.\n\nAlphabet corresponds to bits 0-3 of the data coding field.?? For\
      \ some\ntypes of message, where a message class is used (by setting bit 5 of\
      \ the\ndata coding field), the lower two bits of the data coding field are not\n\
      interpreted as alphabet and only bits 2 and 3 impact the alphabet.\n\nFurthermore,\
      \ current version of the JSMPP library only seems to support\nbits 2 and 3,\
      \ assuming that bits 0 and 1 are used for message class.??\nThis is why the\
      \ Alphabet class in JSMPP doesn't support the value 3\n(binary 0011) which indicates\
      \ ISO-8859-1.\n\nAlthough JSMPP provides a representation of the message class\
      \ parameter,\nthe Camel component doesn't currently provide a way to set it\
      \ other than\nmanually setting the corresponding bits in the data coding field.\n\
      \nWhen setting the data coding field in the outgoing message, the Camel\ncomponent\
      \ considers the following values and uses the first one it can\nfind:\n\n* the\
      \ data coding specified in a header\n* the alphabet specified in a header\n\
      * the data coding specified in the endpoint configuration (URI\nparameter)\n\
      \nOlder versions of Camel had bugs in support for international character\n\
      sets.?? This feature only worked when a single encoding was used for all\nmessages\
      \ and was troublesome when users wanted to change it on a\nper-message basis.??\
      \ Users who require this to work should ensure their\nversion of Camel includes\
      \ the fix for??\n\nJIRA Issues Macro: com.atlassian.sal.api.net.ResponseStatusException:\n\
      Unexpected response received. Status code: 404\n\n.\n\nIn addition to trying\
      \ to send the data coding value to the SMSC, the\nCamel component also tries\
      \ to analyze the message body, convert it to a\nJava String (Unicode) and convert\
      \ that to a byte array in the\ncorresponding alphabet?? When deciding which\
      \ alphabet to use in the byte\narray, the Camel SMPP component does not consider\
      \ the data coding value\n(header or configuration), it only considers the specified\
      \ alphabet\n(from either the header or endpoint parameter).\n\nIf some characters\
      \ in the String can't be represented in the chosen\nalphabet, they may be replaced\
      \ by the question mark ( ? ) symbol.?? Users\nof the API may want to consider\
      \ checking if their message body can be\nconverted to ISO-8859-1 before passing\
      \ it to the component and if not,\nsetting the alphabet header to request UCS-2\
      \ encoding.?? If the alphabet\nand data coding options are not specified at\
      \ all then the component may\ntry to detect the required encoding and set the\
      \ data coding for you.\n\nThe list of alphabet codes are specified in the SMPP\
      \ specification v3.4,\nsection 5.2.19.?? One notable limitation of the SMPP\
      \ specification is\nthat there is no alphabet code for explicitly requesting\
      \ use of the GSM\n3.38 (7 bit) character set.?? Choosing the value 0 for the\
      \ alphabet\nselects the SMSC _default_ alphabet, this usually means GSM 3.38\
      \ but it\nis not guaranteed.?? The SMPP gateway Nexmo\nhttps://help.nexmo.com/hc/en-us/articles/204015813-How-to-change-the-character-encoding-in-SMPP-[actually\n\
      allows the default to be mapped to any other character set with a\ncontrol panel\
      \ option]. It is suggested that users check with their SMSC\noperator to confirm\
      \ exactly which character set is being used as the\ndefault.\n\n[[SMPP-Messagesplittingandthrottling]]\n\
      Message splitting and throttling\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAfter\
      \ transforming a message body from a String to a byte array, the\nCamel component\
      \ is also responsible for splitting the message into parts\n(within the 140\
      \ byte SMS size limit) before passing it to JSMPP.?? This\nis completed automatically.\n\
      \nIf the GSM 3.38 alphabet is used, the component will pack up to 160\ncharacters\
      \ into the 140 byte message body.?? If an 8 bit character set is\nused (e.g.\
      \ ISO-8859-1 for western Europe) then 140 characters will be\nallowed within\
      \ the 140 byte message body.?? If 16 bit UCS-2 encoding is\nused then just 70\
      \ characters fit into each 140 byte message.\n\nSome SMSC providers implement\
      \ throttling rules.?? Each part of a message\nthat has been split may be counted\
      \ separately by the provider's\nthrottling mechanism.?? The Camel Throttler\
      \ component can be useful for\nthrottling messages in the SMPP route before\
      \ handing them to the SMSC.\n\n[[SMPP-URIformat]]\nURI format\n^^^^^^^^^^\n\n\
      [source,java]\n--------------------------------------------\nsmpp://[username@]hostname[:port][?options]\n\
      smpps://[username@]hostname[:port][?options]\n--------------------------------------------\n\
      \nIf no *username* is provided, then Camel will provide the default value\n\
      `smppclient`. +\n If no *port* number is provided, then Camel will provide the\
      \ default\nvalue `2775`. +\n *Camel 2.3:* If the protocol name is \"smpps\"\
      , camel-smpp with try to\nuse SSLSocket to init a connection to the server.\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[SMPP-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\n\n\n// component options:\
      \ START\nThe SMPP component supports 1 options which are listed below.\n\n\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | SmppConfiguration | To use\
      \ the shared SmppConfiguration as configuration.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n// endpoint options: START\n\
      The SMPP component supports 40 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | common | localhost\
      \ | String | Hostname for the SMSC server to use.\n| port | common | 2775 |\
      \ Integer | Port number for the SMSC server to use.\n| initialReconnectDelay\
      \ | common | 5000 | long | Defines the initial delay in milliseconds after the\
      \ consumer/producer tries to reconnect to the SMSC after the connection was\
      \ lost.\n| maxReconnect | common | 2147483647 | int | Defines the maximum number\
      \ of attempts to reconnect to the SMSC if SMSC returns a negative bind response\n\
      | reconnectDelay | common | 5000 | long | Defines the interval in milliseconds\
      \ between the reconnect attempts if the connection to the SMSC was lost and\
      \ the previous was not succeed.\n| splittingPolicy | common | ALLOW | SmppSplittingPolicy\
      \ | You can specify a policy for handling long messages: ALLOW - the default\
      \ long messages are split to 140 bytes per message TRUNCATE - long messages\
      \ are split and only the first fragment will be sent to the SMSC. Some carriers\
      \ drop subsequent fragments so this reduces load on the SMPP connection sending\
      \ parts of a message that will never be delivered. REJECT - if a message would\
      \ need to be split it is rejected with an SMPP NegativeResponseException and\
      \ the reason code signifying the message is too long.\n| systemType | common\
      \ | cp | String | This parameter is used to categorize the type of ESME (External\
      \ Short Message Entity) that is binding to the SMSC (max. 13 characters).\n\
      | addressRange | consumer |  | String | You can specify the address range for\
      \ the SmppConsumer as defined in section 5.2.7 of the SMPP 3.4 specification.\
      \ The SmppConsumer will receive messages only from SMSC's which target an address\
      \ (MSISDN or IP address) within this range.\n| bridgeErrorHandler | consumer\
      \ | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| destAddr | producer | 1717 | String | Defines the destination\
      \ SME address. For mobile terminated messages this is the directory number of\
      \ the recipient MS. Only for SubmitSm SubmitMulti CancelSm and DataSm.\n| destAddrNpi\
      \ | producer |  | byte | Defines the type of number (TON) to be used in the\
      \ SME destination address parameters. Only for SubmitSm SubmitMulti CancelSm\
      \ and DataSm. The following NPI values are defined: 0: Unknown 1: ISDN (E163/E164)\
      \ 2: Data (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National 9: Private\
      \ 10: ERMES 13: Internet (IP) 18: WAP Client Id (to be defined by WAP Forum)\n\
      | destAddrTon | producer |  | byte | Defines the type of number (TON) to be\
      \ used in the SME destination address parameters. Only for SubmitSm SubmitMulti\
      \ CancelSm and DataSm. The following TON values are defined: 0: Unknown 1: International\
      \ 2: National 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated\n\
      | lazySessionCreation | producer | false | boolean | Sessions can be lazily\
      \ created to avoid exceptions if the SMSC is not available when the Camel producer\
      \ is started. Camel will check the in message headers 'CamelSmppSystemId' and\
      \ 'CamelSmppPassword' of the first exchange. If they are present Camel will\
      \ use these data to connect to the SMSC.\n| numberingPlanIndicator | producer\
      \ |  | byte | Defines the numeric plan indicator (NPI) to be used in the SME.\
      \ The following NPI values are defined: 0: Unknown 1: ISDN (E163/E164) 2: Data\
      \ (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National 9: Private 10:\
      \ ERMES 13: Internet (IP) 18: WAP Client Id (to be defined by WAP Forum)\n|\
      \ priorityFlag | producer |  | byte | Allows the originating SME to assign a\
      \ priority level to the short message. Only for SubmitSm and SubmitMulti. Four\
      \ Priority Levels are supported: 0: Level 0 (lowest) priority 1: Level 1 priority\
      \ 2: Level 2 priority 3: Level 3 (highest) priority\n| protocolId | producer\
      \ |  | byte | The protocol id\n| registeredDelivery | producer |  | byte | Is\
      \ used to request an SMSC delivery receipt and/or SME originated acknowledgements.\
      \ The following values are defined: 0: No SMSC delivery receipt requested. 1:\
      \ SMSC delivery receipt requested where final delivery outcome is success or\
      \ failure. 2: SMSC delivery receipt requested where the final delivery outcome\
      \ is delivery failure.\n| replaceIfPresentFlag | producer |  | byte | Used to\
      \ request the SMSC to replace a previously submitted message that is still pending\
      \ delivery. The SMSC will replace an existing message provided that the source\
      \ address destination address and service type match the same fields in the\
      \ new message. The following replace if present flag values are defined: 0:\
      \ Don't replace 1: Replace\n| serviceType | producer | CMT | String | The service\
      \ type parameter can be used to indicate the SMS Application service associated\
      \ with the message. The following generic service_types are defined: CMT: Cellular\
      \ Messaging CPT: Cellular Paging VMN: Voice Mail Notification VMA: Voice Mail\
      \ Alerting WAP: Wireless Application Protocol USSD: Unstructured Supplementary\
      \ Services Data\n| sourceAddr | producer | 1616 | String | Defines the address\
      \ of SME (Short Message Entity) which originated this message.\n| sourceAddrNpi\
      \ | producer |  | byte | Defines the numeric plan indicator (NPI) to be used\
      \ in the SME originator address parameters. The following NPI values are defined:\
      \ 0: Unknown 1: ISDN (E163/E164) 2: Data (X.121) 3: Telex (F.69) 6: Land Mobile\
      \ (E.212) 8: National 9: Private 10: ERMES 13: Internet (IP) 18: WAP Client\
      \ Id (to be defined by WAP Forum)\n| sourceAddrTon | producer |  | byte | Defines\
      \ the type of number (TON) to be used in the SME originator address parameters.\
      \ The following TON values are defined: 0: Unknown 1: International 2: National\
      \ 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated\n\
      | typeOfNumber | producer |  | byte | Defines the type of number (TON) to be\
      \ used in the SME. The following TON values are defined: 0: Unknown 1: International\
      \ 2: National 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated\n\
      | enquireLinkTimer | advanced | 5000 | Integer | Defines the interval in milliseconds\
      \ between the confidence checks. The confidence check is used to test the communication\
      \ path between an ESME and an SMSC.\n| sessionStateListener | advanced |  |\
      \ SessionStateListener | You can refer to a org.jsmpp.session.SessionStateListener\
      \ in the Registry to receive callbacks when the session state changed.\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | transactionTimer | advanced | 10000 | Integer | Defines the maximum period\
      \ of inactivity allowed after a transaction after which an SMPP entity may assume\
      \ that the session is no longer active. This timer may be active on either communicating\
      \ SMPP entity (i.e. SMSC or ESME).\n| alphabet | codec |  | byte | Defines encoding\
      \ of data according the SMPP 3.4 specification section 5.2.19. 0: SMSC Default\
      \ Alphabet 4: 8 bit Alphabet 8: UCS2 Alphabet\n| dataCoding | codec |  | byte\
      \ | Defines the data coding according the SMPP 3.4 specification section 5.2.19.\
      \ Example data encodings are: 0: SMSC Default Alphabet 3: Latin 1 (ISO-8859-1)\
      \ 4: Octet unspecified (8-bit binary) 8: UCS2 (ISO/IEC-10646) 13: Extended Kanji\
      \ JIS(X 0212-1990)\n| encoding | codec | ISO-8859-1 | String | Defines the encoding\
      \ scheme of the short message user data. Only for SubmitSm ReplaceSm and SubmitMulti.\n\
      | httpProxyHost | proxy |  | String | If you need to tunnel SMPP through a HTTP\
      \ proxy set this attribute to the hostname or ip address of your HTTP proxy.\n\
      | httpProxyPassword | proxy |  | String | If your HTTP proxy requires basic\
      \ authentication set this attribute to the password required for your HTTP proxy.\n\
      | httpProxyPort | proxy | 3128 | Integer | If you need to tunnel SMPP through\
      \ a HTTP proxy set this attribute to the port of your HTTP proxy.\n| httpProxyUsername\
      \ | proxy |  | String | If your HTTP proxy requires basic authentication set\
      \ this attribute to the username required for your HTTP proxy.\n| proxyHeaders\
      \ | proxy |  | Map | These headers will be passed to the proxy server while\
      \ establishing the connection.\n| password | security |  | String | The password\
      \ for connecting to SMSC server.\n| systemId | security | smppclient | String\
      \ | The system id (username) for connecting to SMSC server.\n| usingSSL | security\
      \ | false | boolean | Whether using SSL with the smpps protocol\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\nYou can have as many of these\
      \ options as you like.\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------\n\
      smpp://smppclient@localhost:2775?password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=consumer\n\
      ------------------------------------------------------------------------------------------------------------------\n\
      \n[[SMPP-ProducerMessageHeaders]]\nProducer Message Headers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe following message headers can be used to affect the behavior of the\n\
      SMPP producer\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n\
      |=======================================================================\n|Header\
      \ |Type |Description\n\n|`CamelSmppDestAddr` |`List`/`String` |*only for SubmitSm,\
      \ SubmitMulti, CancelSm and DataSm* Defines the\ndestination SME address(es).\
      \ For mobile terminated messages, this is the\ndirectory number of the recipient\
      \ MS. Is must be a `List<String>` for\nSubmitMulti and a `String` otherwise.\n\
      \n|`CamelSmppDestAddrTon` |`Byte` |*only for SubmitSm, SubmitMulti, CancelSm\
      \ and DataSm* Defines the type\nof number (TON) to be used in the SME destination\
      \ address parameters.\nUse the `sourceAddrTon` URI option values defined above.\n\
      \n|`CamelSmppDestAddrNpi` |`Byte` |*only for SubmitSm, SubmitMulti, CancelSm\
      \ and DataSm* Defines the\nnumeric plan indicator (NPI) to be used in the SME\
      \ destination address\nparameters. Use the URI option `sourceAddrNpi` values\
      \ defined above.\n\n|`CamelSmppSourceAddr` |`String` |Defines the address of\
      \ SME (Short Message Entity) which originated this\nmessage.\n\n|`CamelSmppSourceAddrTon`\
      \ |`Byte` |Defines the type of number (TON) to be used in the SME originator\n\
      address parameters. Use the `sourceAddrTon` URI option values defined\nabove.\n\
      \n|`CamelSmppSourceAddrNpi` |`Byte` |Defines the numeric plan indicator (NPI)\
      \ to be used in the SME\noriginator address parameters. Use the URI option `sourceAddrNpi`\
      \ values\ndefined above.\n\n|`CamelSmppServiceType` |`String` |The service type\
      \ parameter can be used to indicate the SMS Application\nservice associated\
      \ with the message. Use the URI option `serviceType`\nsettings above.\n\n|`CamelSmppRegisteredDelivery`\
      \ |`Byte` |*only for SubmitSm, ReplaceSm, SubmitMulti and DataSm* Is used to\n\
      request an SMSC delivery receipt and/or SME originated acknowledgements.\nUse\
      \ the URI option `registeredDelivery` settings above.\n\n|`CamelSmppPriorityFlag`\
      \ |`Byte` |*only for SubmitSm and SubmitMulti* Allows the originating SME to\
      \ assign\na priority level to the short message. Use the URI option `priorityFlag`\n\
      settings above.\n\n|`CamelSmppScheduleDeliveryTime` |`Date` |*only for SubmitSm,\
      \ SubmitMulti and ReplaceSm* This parameter specifies\nthe scheduled time at\
      \ which the message delivery should be first\nattempted. It defines either the\
      \ absolute date and time or relative time\nfrom the current SMSC time at which\
      \ delivery of this message will be\nattempted by the SMSC. It can be specified\
      \ in either absolute time\nformat or relative time format. The encoding of a\
      \ time format is\nspecified in chapter 7.1.1. in the smpp specification v3.4.\n\
      \n|`CamelSmppValidityPeriod` |`String`/`Date` |*only for SubmitSm, SubmitMulti\
      \ and ReplaceSm* The validity period\nparameter indicates the SMSC expiration\
      \ time, after which the message\nshould be discarded if not delivered to the\
      \ destination. If it's\nprovided as `Date`, it's interpreted as absolute time.\
      \ *Camel 2.9.1\nonwards:* It can be defined in absolute time format or relative\
      \ time\nformat if you provide it as `String` as specified in chapter 7.1.1 in\n\
      the smpp specification v3.4.\n\n|`CamelSmppReplaceIfPresentFlag` |`Byte` |*only\
      \ for SubmitSm and SubmitMulti* The replace if present flag\nparameter is used\
      \ to request the SMSC to replace a previously submitted\nmessage, that is still\
      \ pending delivery. The SMSC will replace an\nexisting message provided that\
      \ the source address, destination address\nand service type match the same fields\
      \ in the new message. The following\nvalues are defined: `0`, Don't replace\
      \ and `1`, Replace\n\n|`CamelSmppAlphabet` / `CamelSmppDataCoding` |`Byte` |*Camel\
      \ 2.5* *For SubmitSm, SubmitMulti and ReplaceSm* (Prior to *Camel\n2.9* use\
      \ `CamelSmppDataCoding` instead of `CamelSmppAlphabet`.) The data\ncoding according\
      \ to the SMPP 3.4 specification, section 5.2.19. Use the\nURI option `alphabet`\
      \ settings above.\n\n|`CamelSmppOptionalParameters` |`Map<String, String>` |*Deprecated\
      \ and will be removed in Camel 2.13.0/3.0.0* +\n *Camel 2.10.5 and 2.11.1 onwards\
      \ and only for SubmitSm, SubmitMulti and\nDataSm* The optional parameters send\
      \ back by the SMSC.\n\n|`CamelSmppOptionalParameter` |`Map<Short, Object>` |*Camel\
      \ 2.10.7 and 2.11.2 onwards and only for SubmitSm, SubmitMulti and\nDataSm*\
      \ The optional parameter which are send to the SMSC. The value is\nconverted\
      \ in the following way: `String` -> `org.jsmpp.bean.OptionalParameter.COctetString`,\
      \ \n`byte[]` -> `org.jsmpp.bean.OptionalParameter.OctetString`, \n`Byte` ->\
      \ `org.jsmpp.bean.OptionalParameter.Byte`,\n`Integer` -> `org.jsmpp.bean.OptionalParameter.Int`,\n\
      `Short` -> `org.jsmpp.bean.OptionalParameter.Short`, \n`null` -> `org.jsmpp.bean.OptionalParameter.Null`\n\
      \n|CamelSmppEncoding |String |*Camel 2.14.1 and Camel 2.15.0 onwards and**only\
      \ for SubmitSm,\nSubmitMulti and DataSm*.?? Specifies the encoding (character\
      \ set name) of\nthe bytes in the message body.?? If the message body is a string\
      \ then\nthis is not relevant because Java Strings are always Unicode.?? If the\n\
      body is a byte array then this header can be used to indicate that it is\nISO-8859-1\
      \ or some other value.?? Default value is specified by the\nendpoint configuration\
      \ parameter _encoding_\n\n|CamelSmppSplittingPolicy |String |*Camel 2.14.1 and\
      \ Camel 2.15.0 onwards and**only for SubmitSm,\nSubmitMulti and DataSm*.?? Specifies\
      \ the policy for message splitting for\nthis exchange.?? Possible values are\
      \ described in the endpoint\nconfiguration parameter _splittingPolicy_\n|=======================================================================\n\
      \nThe following message headers are used by the SMPP producer to set the\nresponse\
      \ from the SMSC in the message header\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelSmppId` |`List<String>`/`String` |The id\
      \ to identify the submitted short message(s) for later use. *From\nCamel 2.9.0*:\
      \ In case of a ReplaceSm, QuerySm, CancelSm and DataSm this\nheader vaule is\
      \ a `String`. In case of a SubmitSm or SubmitMultiSm this\nheader vaule is a\
      \ `List<String>`.\n\n|`CamelSmppSentMessageCount` |`Integer` |*From Camel 2.9\
      \ onwards only for SubmitSm and SubmitMultiSm* The total\nnumber of messages\
      \ which has been sent.\n\n|`CamelSmppError` |`Map<String, List<Map<String, Object>>>`\
      \ |*From Camel 2.9 onwards only for SubmitMultiSm* The errors which\noccurred\
      \ by sending the short message(s) the form `Map<String, List<Map<String, Object>>>`\
      \ (messageID : (destAddr :\naddress, error : errorCode)).\n\n|`CamelSmppOptionalParameters`\
      \ |`Map<String, String>` |*Deprecated and will be removed in Camel 2.13.0/3.0.0*\
      \ \n*From Camel 2.11.1 onwards only for DataSm* The optional parameters\nwhich\
      \ are returned from the SMSC by sending the message.\n\n|`CamelSmppOptionalParameter`\
      \ |`Map<Short, Object>` |*From Camel 2.10.7, 2.11.2 onwards only for DataSm*\
      \ The optional\nparameter which are returned from the SMSC by sending the message.\
      \ The\nkey is the `Short` code for the optional parameter. The value is\nconverted\
      \ in the following way: \n`org.jsmpp.bean.OptionalParameter.COctetString` ->\
      \ `String`,\n`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,\n`org.jsmpp.bean.OptionalParameter.Byte`\
      \ -> `Byte`,\n`org.jsmpp.bean.OptionalParameter.Int` -> `Integer`,\n`org.jsmpp.bean.OptionalParameter.Short`\
      \ -> `Short`, \n`org.jsmpp.bean.OptionalParameter.Null` -> `null`\n|=======================================================================\n\
      \n[[SMPP-ConsumerMessageHeaders]]\nConsumer Message Headers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe following message headers are used by the SMPP consumer to set the\nrequest\
      \ data from the SMSC in the message header\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelSmppSequenceNumber` |`Integer` |*only for\
      \ AlertNotification, DeliverSm and DataSm* A sequence number\nallows a response\
      \ PDU to be correlated with a request PDU. The\nassociated SMPP response PDU\
      \ must preserve this field.\n\n|`CamelSmppCommandId` |`Integer` |*only for AlertNotification,\
      \ DeliverSm and DataSm* The command id field\nidentifies the particular SMPP\
      \ PDU. For the complete list of defined\nvalues see chapter 5.1.2.1 in the smpp\
      \ specification v3.4.\n\n|`CamelSmppSourceAddr` |`String` |*only for AlertNotification,\
      \ DeliverSm and DataSm* Defines the address\nof SME (Short Message Entity) which\
      \ originated this message.\n\n|`CamelSmppSourceAddrNpi` |`Byte` |*only for AlertNotification\
      \ and DataSm* Defines the numeric plan\nindicator (NPI) to be used in the SME\
      \ originator address parameters. Use\nthe URI option `sourceAddrNpi` values\
      \ defined above.\n\n|`CamelSmppSourceAddrTon` |`Byte` |*only for AlertNotification\
      \ and DataSm* Defines the type of number (TON)\nto be used in the SME originator\
      \ address parameters. Use the\n`sourceAddrTon` URI option values defined above.\n\
      \n|`CamelSmppEsmeAddr` |`String` |*only for AlertNotification* Defines the destination\
      \ ESME address. For\nmobile terminated messages, this is the directory number\
      \ of the\nrecipient MS.\n\n|`CamelSmppEsmeAddrNpi` |`Byte` |*only for AlertNotification*\
      \ Defines the numeric plan indicator (NPI) to\nbe used in the ESME originator\
      \ address parameters. Use the URI option\n`sourceAddrNpi` values defined above.\n\
      \n|`CamelSmppEsmeAddrTon` |`Byte` |*only for AlertNotification* Defines the\
      \ type of number (TON) to be used\nin the ESME originator address parameters.\
      \ Use the `sourceAddrTon` URI\noption values defined above.\n\n|`CamelSmppId`\
      \ |`String` |*only for smsc DeliveryReceipt and DataSm* The message ID allocated\
      \ to\nthe message by the SMSC when originally submitted.\n\n|`CamelSmppDelivered`\
      \ |`Integer` |*only for smsc DeliveryReceipt* Number of short messages delivered.\
      \ This\nis only relevant where the original message was submitted to a\ndistribution\
      \ list.The value is padded with leading zeros if necessary.\n\n|`CamelSmppDoneDate`\
      \ |`Date` |*only for smsc DeliveryReceipt* The time and date at which the short\n\
      message reached it's final state. The format is as follows: YYMMDDhhmm.\n\n\
      |`CamelSmppStatus` |`DeliveryReceiptState` |*only for smsc DeliveryReceipt:*\
      \ The final status of the message. The\nfollowing values are defined: `DELIVRD`:\
      \ Message is delivered to destination,\n`EXPIRED`: Message validity period has\
      \ expired,\n`DELETED`: Message has been deleted, \n`UNDELIV`: Message is undeliverable,\
      \ \n`ACCEPTD`: Message is in accepted state (i.e. has been manually read on\n\
      behalf of the subscriber by customer service),\n`UNKNOWN`: Message is in invalid\
      \ state,\n`REJECTD`: Message is in a rejected state\n\n|`CamelSmppCommandStatus`\
      \ |`Integer` |*only for DataSm* The Command status of the message.\n\n|`CamelSmppError`\
      \ |`String` |*only for smsc DeliveryReceipt* Where appropriate this may hold\
      \ a\nNetwork specific error code or an SMSC error code for the attempted\ndelivery\
      \ of the message. These errors are Network or SMSC specific and\nare not included\
      \ here.\n\n|`CamelSmppSubmitDate` |`Date` |*only for smsc DeliveryReceipt* The\
      \ time and date at which the short\nmessage was submitted. In the case of a\
      \ message which has been replaced,\nthis is the date that the original message\
      \ was replaced. The format is\nas follows: YYMMDDhhmm.\n\n|`CamelSmppSubmitted`\
      \ |`Integer` |*only for smsc DeliveryReceipt* Number of short messages originally\n\
      submitted. This is only relevant when the original message was submitted\nto\
      \ a distribution list.The value is padded with leading zeros if\nnecessary.\n\
      \n|`CamelSmppDestAddr` |`String` |*only for DeliverSm and DataSm:* Defines the\
      \ destination SME address.\nFor mobile terminated messages, this is the directory\
      \ number of the\nrecipient MS.\n\n|`CamelSmppScheduleDeliveryTime` |`String`\
      \ |*only for DeliverSm:* This parameter specifies the scheduled time at\nwhich\
      \ the message delivery should be first attempted. It defines either\nthe absolute\
      \ date and time or relative time from the current SMSC time\nat which delivery\
      \ of this message will be attempted by the SMSC. It can\nbe specified in either\
      \ absolute time format or relative time format. The\nencoding of a time format\
      \ is specified in Section 7.1.1. in the smpp\nspecification v3.4.\n\n|`CamelSmppValidityPeriod`\
      \ |`String` |*only for DeliverSm* The validity period parameter indicates the\
      \ SMSC\nexpiration time, after which the message should be discarded if not\n\
      delivered to the destination. It can be defined in absolute time format\nor\
      \ relative time format. The encoding of absolute and relative time\nformat is\
      \ specified in Section 7.1.1 in the smpp specification v3.4.\n\n|`CamelSmppServiceType`\
      \ |`String` |*only for DeliverSm and DataSm* The service type parameter indicates\
      \ the\nSMS Application service associated with the message.\n\n|`CamelSmppRegisteredDelivery`\
      \ |`Byte` |*only for DataSm* Is used to request an delivery receipt and/or SME\n\
      originated acknowledgements. Same values as in Producer header list\nabove.\n\
      \n|`CamelSmppDestAddrNpi` |`Byte` |*only for DataSm* Defines the numeric plan\
      \ indicator (NPI) in the\ndestination address parameters. Use the URI option\
      \ `sourceAddrNpi`\nvalues defined above.\n\n|`CamelSmppDestAddrTon` |`Byte`\
      \ |*only for DataSm* Defines the type of number (TON) in the destination\naddress\
      \ parameters. Use the `sourceAddrTon` URI option values defined\nabove.\n\n\
      |`CamelSmppMessageType` |`String` |*Camel 2.6 onwards*: Identifies the type\
      \ of an incoming message: \n`AlertNotification`: an SMSC alert notification,\n\
      `DataSm`: an SMSC data short message,\n`DeliveryReceipt`: an SMSC delivery receipt,\n\
      `DeliverSm`: an SMSC deliver short message\n\n|`CamelSmppOptionalParameters`\
      \ |`Map<String, Object>` |*Deprecated and will be removed in Camel 2.13.0/3.0.0*\
      \ \n*Camel 2.10.5 onwards and only for DeliverSm* The optional parameters\n\
      send back by the SMSC.\n\n|`CamelSmppOptionalParameter` |`Map<Short, Object>`\
      \ |*Camel 2.10.7, 2.11.2 onwards and only for DeliverSm* The optional\nparameters\
      \ send back by the SMSC. The key is the `Short` code for the\noptional parameter.\
      \ The value is converted in the following way: \n`org.jsmpp.bean.OptionalParameter.COctetString`\
      \ -> `String`,\n`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,\n\
      `org.jsmpp.bean.OptionalParameter.Byte` -> `Byte`,\n`org.jsmpp.bean.OptionalParameter.Int`\
      \ -> `Integer`,\n`org.jsmpp.bean.OptionalParameter.Short` -> `Short`,\n`org.jsmpp.bean.OptionalParameter.Null`\
      \ -> `null`\n|=======================================================================\n\
      \nTIP: *JSMPP library*\nSee the documentation of the http://jsmpp.org[JSMPP\
      \ Library] for more\ndetails about the underlying library.\n\n[[SMPP-Exceptionhandling]]\n\
      Exception handling\n^^^^^^^^^^^^^^^^^^\n\nThis component supports the general\
      \ Camel exception handling\ncapabilities\n\nWhen an error occurs sending a message\
      \ with SubmitSm (the default\naction), the org.apache.camel.component.smpp.SmppException\
      \ is thrown\nwith a nested exception, org.jsmpp.extra.NegativeResponseException.??\n\
      Call NegativeResponseException.getCommandStatus() to obtain the exact\nSMPP\
      \ negative response code, the values are explained in the SMPP\nspecification\
      \ 3.4, section 5.1.3. +\n *Camel 2.8 onwards*: When the SMPP consumer receives\
      \ a `DeliverSm` or\n`DataSm` short message and the processing of these messages\
      \ fails, you\ncan also throw a `ProcessRequestException` instead of handle the\n\
      failure. In this case, this exception is forwarded to the underlying\nhttp://jsmpp.org[JSMPP\
      \ library] which will return the included error\ncode to the SMSC. This feature\
      \ is useful to e.g. instruct the SMSC to\nresend the short message at a later\
      \ time. This could be done with the\nfollowing lines of code:\n\n[source,java]\n\
      --------------------------------------------------------------------------------------------------------------------------\n\
      from(\"smpp://smppclient@localhost:2775?password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=consumer\"\
      )\n  .doTry()\n    .to(\"bean:dao?method=updateSmsState\")\n  .doCatch(Exception.class)\n\
      \    .throwException(new ProcessRequestException(\"update of sms state failed\"\
      , 100))\n  .end();\n--------------------------------------------------------------------------------------------------------------------------\n\
      \nPlease refer to the http://smsforum.net/SMPP_v3_4_Issue1_2.zip[SMPP\nspecification]\
      \ for the complete list of error codes and their meanings.\n\n[[SMPP-Samples]]\n\
      Samples\n^^^^^^^\n\nA route which sends an SMS using the Java DSL:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------------\n\
      from(\"direct:start\")\n  .to(\"smpp://smppclient@localhost:2775?\n      password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=producer\"\
      );\n------------------------------------------------------------------------------------------\n\
      \nA route which sends an SMS using the Spring XML DSL:\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------\n\
      <route>\n  <from uri=\"direct:start\"/>\n  <to uri=\"smpp://smppclient@localhost:2775?\n\
      \           password=password&amp;enquireLinkTimer=3000&amp;transactionTimer=5000&amp;systemType=producer\"\
      />\n</route>\n-----------------------------------------------------------------------------------------------------------\n\
      \nA route which receives an SMS using the Java DSL:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------\n\
      from(\"smpp://smppclient@localhost:2775?password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=consumer\"\
      )\n  .to(\"bean:foo\");\n--------------------------------------------------------------------------------------------------------------------------\n\
      \nA route which receives an SMS using the Spring XML DSL:\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------------------------------------\n\
      \  <route>\n     <from uri=\"smpp://smppclient@localhost:2775?\n           \
      \     password=password&amp;enquireLinkTimer=3000&amp;transactionTimer=5000&amp;systemType=consumer\"\
      />\n     <to uri=\"bean:foo\"/>\n  </route>\n----------------------------------------------------------------------------------------------------------------\n\
      \n\nTIP: *SMSC simulator*\nIf you need an SMSC simulator for your test, you\
      \ can use the simulator\nprovided by\nhttp://opensmpp.logica.com/CommonPart/Download/download2.html#simulator[Logica].\n\
      \n[[SMPP-Debuglogging]]\nDebug logging\n^^^^^^^^^^^^^\n\nThis component has\
      \ log level *DEBUG*, which can be helpful in debugging\nproblems. If you use\
      \ log4j, you can add the following line to your\nconfiguration:\n\n[source,java]\n\
      --------------------------------------------------\nlog4j.logger.org.apache.camel.component.smpp=DEBUG\n\
      --------------------------------------------------\n\n[[SMPP-SeeAlso]]\nSee\
      \ Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-smpps
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: smpps
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: smpps
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: smpps
          spec:
            containers:
            - image: fabric8/connector-smpps:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: smpps
        alternativeSchemes: smpp,smpps
        syntax: smpps:host:port
        title: SMPP
        description: To send and receive SMS using a SMSC (Short Message Service Center).
        label: mobile
        deprecated: false
        async: false
        lenientProperties: true
        javaType: org.apache.camel.component.smpp.SmppComponent
        groupId: org.apache.camel
        artifactId: camel-smpp
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.smpp.SmppConfiguration
          deprecated: false
          secret: false
          description: To use the shared SmppConfiguration as configuration.
      properties:
        host:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: localhost
          description: Hostname for the SMSC server to use.
        port:
          kind: path
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "2775"
          description: Port number for the SMSC server to use.
        initialReconnectDelay:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Defines the initial delay in milliseconds after the consumer/producer tries to reconnect to the SMSC after the connection was lost.
        maxReconnect:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: Defines the maximum number of attempts to reconnect to the SMSC if SMSC returns a negative bind response
        reconnectDelay:
          kind: parameter
          group: common
          label: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Defines the interval in milliseconds between the reconnect attempts if the connection to the SMSC was lost and the previous was not succeed.
        splittingPolicy:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.smpp.SmppSplittingPolicy
          enum:
          - ALLOW
          - REJECT
          - TRUNCATE
          deprecated: false
          secret: false
          defaultValue: ALLOW
          description: 'You can specify a policy for handling long messages: ALLOW - the
            default long messages are split to 140 bytes per message TRUNCATE - long messages
            are split and only the first fragment will be sent to the SMSC. Some carriers
            drop subsequent fragments so this reduces load on the SMPP connection sending
            parts of a message that will never be delivered. REJECT - if a message would
            need to be split it is rejected with an SMPP NegativeResponseException and the
            reason code signifying the message is too long.'
        systemType:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: cp
          description: This parameter is used to categorize the type of ESME (External Short Message Entity) that is binding to the SMSC (max. 13 characters).
        addressRange:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: You can specify the address range for the SmppConsumer as defined in section 5.2.7 of the SMPP 3.4 specification. The SmppConsumer will receive messages only from SMSC's which target an address (MSISDN or IP address) within this range.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        destAddr:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "1717"
          description: Defines the destination SME address. For mobile terminated messages this is the directory number of the recipient MS. Only for SubmitSm SubmitMulti CancelSm and DataSm.
        destAddrNpi:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "6"
          - "8"
          - "9"
          - "10"
          - "13"
          - "18"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME destination
            address parameters. Only for SubmitSm SubmitMulti CancelSm and DataSm. The following
            NPI values are defined: 0: Unknown 1: ISDN (E163/E164) 2: Data (X.121) 3: Telex
            (F.69) 6: Land Mobile (E.212) 8: National 9: Private 10: ERMES 13: Internet
            (IP) 18: WAP Client Id (to be defined by WAP Forum)'
        destAddrTon:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME destination
            address parameters. Only for SubmitSm SubmitMulti CancelSm and DataSm. The following
            TON values are defined: 0: Unknown 1: International 2: National 3: Network Specific
            4: Subscriber Number 5: Alphanumeric 6: Abbreviated'
        lazySessionCreation:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sessions can be lazily created to avoid exceptions if the SMSC is not available when the Camel producer is started. Camel will check the in message headers 'CamelSmppSystemId' and 'CamelSmppPassword' of the first exchange. If they are present Camel will use these data to connect to the SMSC.
        numberingPlanIndicator:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "6"
          - "8"
          - "9"
          - "10"
          - "13"
          - "18"
          deprecated: false
          secret: false
          description: 'Defines the numeric plan indicator (NPI) to be used in the SME.
            The following NPI values are defined: 0: Unknown 1: ISDN (E163/E164) 2: Data
            (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National 9: Private 10: ERMES
            13: Internet (IP) 18: WAP Client Id (to be defined by WAP Forum)'
        priorityFlag:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          deprecated: false
          secret: false
          description: 'Allows the originating SME to assign a priority level to the short
            message. Only for SubmitSm and SubmitMulti. Four Priority Levels are supported:
            0: Level 0 (lowest) priority 1: Level 1 priority 2: Level 2 priority 3: Level
            3 (highest) priority'
        protocolId:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: byte
          deprecated: false
          secret: false
          description: The protocol id
        registeredDelivery:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          deprecated: false
          secret: false
          description: 'Is used to request an SMSC delivery receipt and/or SME originated
            acknowledgements. The following values are defined: 0: No SMSC delivery receipt
            requested. 1: SMSC delivery receipt requested where final delivery outcome is
            success or failure. 2: SMSC delivery receipt requested where the final delivery
            outcome is delivery failure.'
        replaceIfPresentFlag:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          deprecated: false
          secret: false
          description: 'Used to request the SMSC to replace a previously submitted message
            that is still pending delivery. The SMSC will replace an existing message provided
            that the source address destination address and service type match the same
            fields in the new message. The following replace if present flag values are
            defined: 0: Don''t replace 1: Replace'
        serviceType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - CMT
          - CPT
          - VMN
          - VMA
          - WAP
          - USSD
          deprecated: false
          secret: false
          defaultValue: CMT
          description: 'The service type parameter can be used to indicate the SMS Application
            service associated with the message. The following generic service_types are
            defined: CMT: Cellular Messaging CPT: Cellular Paging VMN: Voice Mail Notification
            VMA: Voice Mail Alerting WAP: Wireless Application Protocol USSD: Unstructured
            Supplementary Services Data'
        sourceAddr:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: "1616"
          description: Defines the address of SME (Short Message Entity) which originated this message.
        sourceAddrNpi:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "6"
          - "8"
          - "9"
          - "10"
          - "13"
          - "18"
          deprecated: false
          secret: false
          description: 'Defines the numeric plan indicator (NPI) to be used in the SME originator
            address parameters. The following NPI values are defined: 0: Unknown 1: ISDN
            (E163/E164) 2: Data (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National
            9: Private 10: ERMES 13: Internet (IP) 18: WAP Client Id (to be defined by WAP
            Forum)'
        sourceAddrTon:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME originator
            address parameters. The following TON values are defined: 0: Unknown 1: International
            2: National 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated'
        typeOfNumber:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: byte
          enum:
          - "0"
          - "1"
          - "2"
          - "3"
          - "4"
          - "5"
          - "6"
          deprecated: false
          secret: false
          description: 'Defines the type of number (TON) to be used in the SME. The following
            TON values are defined: 0: Unknown 1: International 2: National 3: Network Specific
            4: Subscriber Number 5: Alphanumeric 6: Abbreviated'
        enquireLinkTimer:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Defines the interval in milliseconds between the confidence checks. The confidence check is used to test the communication path between an ESME and an SMSC.
        sessionStateListener:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.jsmpp.session.SessionStateListener
          deprecated: false
          secret: false
          description: You can refer to a org.jsmpp.session.SessionStateListener in the Registry to receive callbacks when the session state changed.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transactionTimer:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "10000"
          description: Defines the maximum period of inactivity allowed after a transaction after which an SMPP entity may assume that the session is no longer active. This timer may be active on either communicating SMPP entity (i.e. SMSC or ESME).
        alphabet:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: byte
          enum:
          - "0"
          - "4"
          - "8"
          deprecated: false
          secret: false
          description: 'Defines encoding of data according the SMPP 3.4 specification section
            5.2.19. 0: SMSC Default Alphabet 4: 8 bit Alphabet 8: UCS2 Alphabet'
        dataCoding:
          kind: parameter
          group: codec
          label: codec
          type: integer
          javaType: byte
          deprecated: false
          secret: false
          description: 'Defines the data coding according the SMPP 3.4 specification section
            5.2.19. Example data encodings are: 0: SMSC Default Alphabet 3: Latin 1 (ISO-8859-1)
            4: Octet unspecified (8-bit binary) 8: UCS2 (ISO/IEC-10646) 13: Extended Kanji
            JIS(X 0212-1990)'
        encoding:
          kind: parameter
          group: codec
          label: codec
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: ISO-8859-1
          description: Defines the encoding scheme of the short message user data. Only for SubmitSm ReplaceSm and SubmitMulti.
        httpProxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If you need to tunnel SMPP through a HTTP proxy set this attribute to the hostname or ip address of your HTTP proxy.
        httpProxyPassword:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If your HTTP proxy requires basic authentication set this attribute to the password required for your HTTP proxy.
        httpProxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "3128"
          description: If you need to tunnel SMPP through a HTTP proxy set this attribute to the port of your HTTP proxy.
        httpProxyUsername:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If your HTTP proxy requires basic authentication set this attribute to the username required for your HTTP proxy.
        proxyHeaders:
          kind: parameter
          group: proxy
          label: proxy
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          deprecated: false
          secret: false
          description: These headers will be passed to the proxy server while establishing the connection.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for connecting to SMSC server.
        systemId:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          defaultValue: smppclient
          description: The system id (username) for connecting to SMSC server.
        usingSSL:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether using SSL with the smpps protocol
    documentation.adoc: "[[SMPP-SMPPComponent]]\nSMPP Component\n~~~~~~~~~~~~~~\n\n\
      *CamelSmppFinalStatusAvailable as of Camel 2.2*\n\nThis component provides access\
      \ to an SMSC (Short Message Service Center)\nover the http://smsforum.net/SMPP_v3_4_Issue1_2.zip[SMPP]\
      \ protocol to\nsend and receive SMS. The http://jsmpp.org[JSMPP] library is\
      \ used for\nthe protocol implementation.\n\nThe Camel component currently operates\
      \ as an\nhttp://en.wikipedia.org/wiki/ESME[ESME] (External Short Messaging\n\
      Entity) and not as an SMSC itself.\n\nStarting with*Camel 2.9*??you are also\
      \ able to execute ReplaceSm,\nQuerySm, SubmitMulti, CancelSm and DataSm.\n\n\
      Maven users will need to add the following dependency to their `pom.xml`\nfor\
      \ this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-smpp</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[SMPP-SMSlimitations]]\nSMS limitations\n^^^^^^^^^^^^^^^\n\nSMS is neither\
      \ reliable or secure.?? Users who require reliable and\nsecure delivery may\
      \ want to consider using the XMPP or SIP components\ninstead, combined with\
      \ a smartphone app supporting the chosen protocol.\n\n* Reliability: although\
      \ the SMPP standard offers a range of feedback\nmechanisms to indicate errors,\
      \ non-delivery and confirmation of delivery\nit is not uncommon for mobile networks\
      \ to hide or simulate these\nresponses.?? For example, some networks automatically\
      \ send a delivery\nconfirmation for every message even if the destination number\
      \ is invalid\nor not switched on.?? Some networks silently drop messages if\
      \ they think\nthey are spam.?? Spam detection rules in the network may be very\
      \ crude,\nsometimes more than 100 messages per day from a single sender may\
      \ be\nconsidered spam.\n* Security: there is basic encryption for the last hop\
      \ from the radio\ntower down to the recipient handset.?? SMS messages are not\
      \ encrypted or\nauthenticated in any other part of the network.?? Some operators\
      \ allow\nstaff in retail outlets or call centres to browse through the SMS\n\
      message histories of their customers.?? Message sender identity can be\neasily\
      \ forged.?? Regulators and even the mobile telephone industry itself\nhas cautioned\
      \ against the use of SMS in two-factor authentication\nschemes and other purposes\
      \ where security is important.\n\nWhile the Camel component makes it as easy\
      \ as possible to send messages\nto the SMS network, it can not offer an easy\
      \ solution to these problems.\n\n[[SMPP-Datacoding,alphabetandinternationalcharactersets]]\n\
      Data coding, alphabet and international character sets\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\
      \nData coding and alphabet can be specified on a per-message basis.??\nDefault\
      \ values can be specified for the endpoint.?? It is important to\nunderstand\
      \ the relationship between these options and the way the\ncomponent acts when\
      \ more than one value is set.\n\nData coding is an 8 bit field in the SMPP wire\
      \ format.\n\nAlphabet corresponds to bits 0-3 of the data coding field.?? For\
      \ some\ntypes of message, where a message class is used (by setting bit 5 of\
      \ the\ndata coding field), the lower two bits of the data coding field are not\n\
      interpreted as alphabet and only bits 2 and 3 impact the alphabet.\n\nFurthermore,\
      \ current version of the JSMPP library only seems to support\nbits 2 and 3,\
      \ assuming that bits 0 and 1 are used for message class.??\nThis is why the\
      \ Alphabet class in JSMPP doesn't support the value 3\n(binary 0011) which indicates\
      \ ISO-8859-1.\n\nAlthough JSMPP provides a representation of the message class\
      \ parameter,\nthe Camel component doesn't currently provide a way to set it\
      \ other than\nmanually setting the corresponding bits in the data coding field.\n\
      \nWhen setting the data coding field in the outgoing message, the Camel\ncomponent\
      \ considers the following values and uses the first one it can\nfind:\n\n* the\
      \ data coding specified in a header\n* the alphabet specified in a header\n\
      * the data coding specified in the endpoint configuration (URI\nparameter)\n\
      \nOlder versions of Camel had bugs in support for international character\n\
      sets.?? This feature only worked when a single encoding was used for all\nmessages\
      \ and was troublesome when users wanted to change it on a\nper-message basis.??\
      \ Users who require this to work should ensure their\nversion of Camel includes\
      \ the fix for??\n\nJIRA Issues Macro: com.atlassian.sal.api.net.ResponseStatusException:\n\
      Unexpected response received. Status code: 404\n\n.\n\nIn addition to trying\
      \ to send the data coding value to the SMSC, the\nCamel component also tries\
      \ to analyze the message body, convert it to a\nJava String (Unicode) and convert\
      \ that to a byte array in the\ncorresponding alphabet?? When deciding which\
      \ alphabet to use in the byte\narray, the Camel SMPP component does not consider\
      \ the data coding value\n(header or configuration), it only considers the specified\
      \ alphabet\n(from either the header or endpoint parameter).\n\nIf some characters\
      \ in the String can't be represented in the chosen\nalphabet, they may be replaced\
      \ by the question mark ( ? ) symbol.?? Users\nof the API may want to consider\
      \ checking if their message body can be\nconverted to ISO-8859-1 before passing\
      \ it to the component and if not,\nsetting the alphabet header to request UCS-2\
      \ encoding.?? If the alphabet\nand data coding options are not specified at\
      \ all then the component may\ntry to detect the required encoding and set the\
      \ data coding for you.\n\nThe list of alphabet codes are specified in the SMPP\
      \ specification v3.4,\nsection 5.2.19.?? One notable limitation of the SMPP\
      \ specification is\nthat there is no alphabet code for explicitly requesting\
      \ use of the GSM\n3.38 (7 bit) character set.?? Choosing the value 0 for the\
      \ alphabet\nselects the SMSC _default_ alphabet, this usually means GSM 3.38\
      \ but it\nis not guaranteed.?? The SMPP gateway Nexmo\nhttps://help.nexmo.com/hc/en-us/articles/204015813-How-to-change-the-character-encoding-in-SMPP-[actually\n\
      allows the default to be mapped to any other character set with a\ncontrol panel\
      \ option]. It is suggested that users check with their SMSC\noperator to confirm\
      \ exactly which character set is being used as the\ndefault.\n\n[[SMPP-Messagesplittingandthrottling]]\n\
      Message splitting and throttling\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAfter\
      \ transforming a message body from a String to a byte array, the\nCamel component\
      \ is also responsible for splitting the message into parts\n(within the 140\
      \ byte SMS size limit) before passing it to JSMPP.?? This\nis completed automatically.\n\
      \nIf the GSM 3.38 alphabet is used, the component will pack up to 160\ncharacters\
      \ into the 140 byte message body.?? If an 8 bit character set is\nused (e.g.\
      \ ISO-8859-1 for western Europe) then 140 characters will be\nallowed within\
      \ the 140 byte message body.?? If 16 bit UCS-2 encoding is\nused then just 70\
      \ characters fit into each 140 byte message.\n\nSome SMSC providers implement\
      \ throttling rules.?? Each part of a message\nthat has been split may be counted\
      \ separately by the provider's\nthrottling mechanism.?? The Camel Throttler\
      \ component can be useful for\nthrottling messages in the SMPP route before\
      \ handing them to the SMSC.\n\n[[SMPP-URIformat]]\nURI format\n^^^^^^^^^^\n\n\
      [source,java]\n--------------------------------------------\nsmpp://[username@]hostname[:port][?options]\n\
      smpps://[username@]hostname[:port][?options]\n--------------------------------------------\n\
      \nIf no *username* is provided, then Camel will provide the default value\n\
      `smppclient`. +\n If no *port* number is provided, then Camel will provide the\
      \ default\nvalue `2775`. +\n *Camel 2.3:* If the protocol name is \"smpps\"\
      , camel-smpp with try to\nuse SSLSocket to init a connection to the server.\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[SMPP-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\n\n\n// component options:\
      \ START\nThe SMPP component supports 1 options which are listed below.\n\n\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| configuration | SmppConfiguration | To use\
      \ the shared SmppConfiguration as configuration.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n// endpoint options: START\n\
      The SMPP component supports 40 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | common | localhost\
      \ | String | Hostname for the SMSC server to use.\n| port | common | 2775 |\
      \ Integer | Port number for the SMSC server to use.\n| initialReconnectDelay\
      \ | common | 5000 | long | Defines the initial delay in milliseconds after the\
      \ consumer/producer tries to reconnect to the SMSC after the connection was\
      \ lost.\n| maxReconnect | common | 2147483647 | int | Defines the maximum number\
      \ of attempts to reconnect to the SMSC if SMSC returns a negative bind response\n\
      | reconnectDelay | common | 5000 | long | Defines the interval in milliseconds\
      \ between the reconnect attempts if the connection to the SMSC was lost and\
      \ the previous was not succeed.\n| splittingPolicy | common | ALLOW | SmppSplittingPolicy\
      \ | You can specify a policy for handling long messages: ALLOW - the default\
      \ long messages are split to 140 bytes per message TRUNCATE - long messages\
      \ are split and only the first fragment will be sent to the SMSC. Some carriers\
      \ drop subsequent fragments so this reduces load on the SMPP connection sending\
      \ parts of a message that will never be delivered. REJECT - if a message would\
      \ need to be split it is rejected with an SMPP NegativeResponseException and\
      \ the reason code signifying the message is too long.\n| systemType | common\
      \ | cp | String | This parameter is used to categorize the type of ESME (External\
      \ Short Message Entity) that is binding to the SMSC (max. 13 characters).\n\
      | addressRange | consumer |  | String | You can specify the address range for\
      \ the SmppConsumer as defined in section 5.2.7 of the SMPP 3.4 specification.\
      \ The SmppConsumer will receive messages only from SMSC's which target an address\
      \ (MSISDN or IP address) within this range.\n| bridgeErrorHandler | consumer\
      \ | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler | consumer\
      \ (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| destAddr | producer | 1717 | String | Defines the destination\
      \ SME address. For mobile terminated messages this is the directory number of\
      \ the recipient MS. Only for SubmitSm SubmitMulti CancelSm and DataSm.\n| destAddrNpi\
      \ | producer |  | byte | Defines the type of number (TON) to be used in the\
      \ SME destination address parameters. Only for SubmitSm SubmitMulti CancelSm\
      \ and DataSm. The following NPI values are defined: 0: Unknown 1: ISDN (E163/E164)\
      \ 2: Data (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National 9: Private\
      \ 10: ERMES 13: Internet (IP) 18: WAP Client Id (to be defined by WAP Forum)\n\
      | destAddrTon | producer |  | byte | Defines the type of number (TON) to be\
      \ used in the SME destination address parameters. Only for SubmitSm SubmitMulti\
      \ CancelSm and DataSm. The following TON values are defined: 0: Unknown 1: International\
      \ 2: National 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated\n\
      | lazySessionCreation | producer | false | boolean | Sessions can be lazily\
      \ created to avoid exceptions if the SMSC is not available when the Camel producer\
      \ is started. Camel will check the in message headers 'CamelSmppSystemId' and\
      \ 'CamelSmppPassword' of the first exchange. If they are present Camel will\
      \ use these data to connect to the SMSC.\n| numberingPlanIndicator | producer\
      \ |  | byte | Defines the numeric plan indicator (NPI) to be used in the SME.\
      \ The following NPI values are defined: 0: Unknown 1: ISDN (E163/E164) 2: Data\
      \ (X.121) 3: Telex (F.69) 6: Land Mobile (E.212) 8: National 9: Private 10:\
      \ ERMES 13: Internet (IP) 18: WAP Client Id (to be defined by WAP Forum)\n|\
      \ priorityFlag | producer |  | byte | Allows the originating SME to assign a\
      \ priority level to the short message. Only for SubmitSm and SubmitMulti. Four\
      \ Priority Levels are supported: 0: Level 0 (lowest) priority 1: Level 1 priority\
      \ 2: Level 2 priority 3: Level 3 (highest) priority\n| protocolId | producer\
      \ |  | byte | The protocol id\n| registeredDelivery | producer |  | byte | Is\
      \ used to request an SMSC delivery receipt and/or SME originated acknowledgements.\
      \ The following values are defined: 0: No SMSC delivery receipt requested. 1:\
      \ SMSC delivery receipt requested where final delivery outcome is success or\
      \ failure. 2: SMSC delivery receipt requested where the final delivery outcome\
      \ is delivery failure.\n| replaceIfPresentFlag | producer |  | byte | Used to\
      \ request the SMSC to replace a previously submitted message that is still pending\
      \ delivery. The SMSC will replace an existing message provided that the source\
      \ address destination address and service type match the same fields in the\
      \ new message. The following replace if present flag values are defined: 0:\
      \ Don't replace 1: Replace\n| serviceType | producer | CMT | String | The service\
      \ type parameter can be used to indicate the SMS Application service associated\
      \ with the message. The following generic service_types are defined: CMT: Cellular\
      \ Messaging CPT: Cellular Paging VMN: Voice Mail Notification VMA: Voice Mail\
      \ Alerting WAP: Wireless Application Protocol USSD: Unstructured Supplementary\
      \ Services Data\n| sourceAddr | producer | 1616 | String | Defines the address\
      \ of SME (Short Message Entity) which originated this message.\n| sourceAddrNpi\
      \ | producer |  | byte | Defines the numeric plan indicator (NPI) to be used\
      \ in the SME originator address parameters. The following NPI values are defined:\
      \ 0: Unknown 1: ISDN (E163/E164) 2: Data (X.121) 3: Telex (F.69) 6: Land Mobile\
      \ (E.212) 8: National 9: Private 10: ERMES 13: Internet (IP) 18: WAP Client\
      \ Id (to be defined by WAP Forum)\n| sourceAddrTon | producer |  | byte | Defines\
      \ the type of number (TON) to be used in the SME originator address parameters.\
      \ The following TON values are defined: 0: Unknown 1: International 2: National\
      \ 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated\n\
      | typeOfNumber | producer |  | byte | Defines the type of number (TON) to be\
      \ used in the SME. The following TON values are defined: 0: Unknown 1: International\
      \ 2: National 3: Network Specific 4: Subscriber Number 5: Alphanumeric 6: Abbreviated\n\
      | enquireLinkTimer | advanced | 5000 | Integer | Defines the interval in milliseconds\
      \ between the confidence checks. The confidence check is used to test the communication\
      \ path between an ESME and an SMSC.\n| sessionStateListener | advanced |  |\
      \ SessionStateListener | You can refer to a org.jsmpp.session.SessionStateListener\
      \ in the Registry to receive callbacks when the session state changed.\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | transactionTimer | advanced | 10000 | Integer | Defines the maximum period\
      \ of inactivity allowed after a transaction after which an SMPP entity may assume\
      \ that the session is no longer active. This timer may be active on either communicating\
      \ SMPP entity (i.e. SMSC or ESME).\n| alphabet | codec |  | byte | Defines encoding\
      \ of data according the SMPP 3.4 specification section 5.2.19. 0: SMSC Default\
      \ Alphabet 4: 8 bit Alphabet 8: UCS2 Alphabet\n| dataCoding | codec |  | byte\
      \ | Defines the data coding according the SMPP 3.4 specification section 5.2.19.\
      \ Example data encodings are: 0: SMSC Default Alphabet 3: Latin 1 (ISO-8859-1)\
      \ 4: Octet unspecified (8-bit binary) 8: UCS2 (ISO/IEC-10646) 13: Extended Kanji\
      \ JIS(X 0212-1990)\n| encoding | codec | ISO-8859-1 | String | Defines the encoding\
      \ scheme of the short message user data. Only for SubmitSm ReplaceSm and SubmitMulti.\n\
      | httpProxyHost | proxy |  | String | If you need to tunnel SMPP through a HTTP\
      \ proxy set this attribute to the hostname or ip address of your HTTP proxy.\n\
      | httpProxyPassword | proxy |  | String | If your HTTP proxy requires basic\
      \ authentication set this attribute to the password required for your HTTP proxy.\n\
      | httpProxyPort | proxy | 3128 | Integer | If you need to tunnel SMPP through\
      \ a HTTP proxy set this attribute to the port of your HTTP proxy.\n| httpProxyUsername\
      \ | proxy |  | String | If your HTTP proxy requires basic authentication set\
      \ this attribute to the username required for your HTTP proxy.\n| proxyHeaders\
      \ | proxy |  | Map | These headers will be passed to the proxy server while\
      \ establishing the connection.\n| password | security |  | String | The password\
      \ for connecting to SMSC server.\n| systemId | security | smppclient | String\
      \ | The system id (username) for connecting to SMSC server.\n| usingSSL | security\
      \ | false | boolean | Whether using SSL with the smpps protocol\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\nYou can have as many of these\
      \ options as you like.\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------\n\
      smpp://smppclient@localhost:2775?password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=consumer\n\
      ------------------------------------------------------------------------------------------------------------------\n\
      \n[[SMPP-ProducerMessageHeaders]]\nProducer Message Headers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe following message headers can be used to affect the behavior of the\n\
      SMPP producer\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"header\",]\n\
      |=======================================================================\n|Header\
      \ |Type |Description\n\n|`CamelSmppDestAddr` |`List`/`String` |*only for SubmitSm,\
      \ SubmitMulti, CancelSm and DataSm* Defines the\ndestination SME address(es).\
      \ For mobile terminated messages, this is the\ndirectory number of the recipient\
      \ MS. Is must be a `List<String>` for\nSubmitMulti and a `String` otherwise.\n\
      \n|`CamelSmppDestAddrTon` |`Byte` |*only for SubmitSm, SubmitMulti, CancelSm\
      \ and DataSm* Defines the type\nof number (TON) to be used in the SME destination\
      \ address parameters.\nUse the `sourceAddrTon` URI option values defined above.\n\
      \n|`CamelSmppDestAddrNpi` |`Byte` |*only for SubmitSm, SubmitMulti, CancelSm\
      \ and DataSm* Defines the\nnumeric plan indicator (NPI) to be used in the SME\
      \ destination address\nparameters. Use the URI option `sourceAddrNpi` values\
      \ defined above.\n\n|`CamelSmppSourceAddr` |`String` |Defines the address of\
      \ SME (Short Message Entity) which originated this\nmessage.\n\n|`CamelSmppSourceAddrTon`\
      \ |`Byte` |Defines the type of number (TON) to be used in the SME originator\n\
      address parameters. Use the `sourceAddrTon` URI option values defined\nabove.\n\
      \n|`CamelSmppSourceAddrNpi` |`Byte` |Defines the numeric plan indicator (NPI)\
      \ to be used in the SME\noriginator address parameters. Use the URI option `sourceAddrNpi`\
      \ values\ndefined above.\n\n|`CamelSmppServiceType` |`String` |The service type\
      \ parameter can be used to indicate the SMS Application\nservice associated\
      \ with the message. Use the URI option `serviceType`\nsettings above.\n\n|`CamelSmppRegisteredDelivery`\
      \ |`Byte` |*only for SubmitSm, ReplaceSm, SubmitMulti and DataSm* Is used to\n\
      request an SMSC delivery receipt and/or SME originated acknowledgements.\nUse\
      \ the URI option `registeredDelivery` settings above.\n\n|`CamelSmppPriorityFlag`\
      \ |`Byte` |*only for SubmitSm and SubmitMulti* Allows the originating SME to\
      \ assign\na priority level to the short message. Use the URI option `priorityFlag`\n\
      settings above.\n\n|`CamelSmppScheduleDeliveryTime` |`Date` |*only for SubmitSm,\
      \ SubmitMulti and ReplaceSm* This parameter specifies\nthe scheduled time at\
      \ which the message delivery should be first\nattempted. It defines either the\
      \ absolute date and time or relative time\nfrom the current SMSC time at which\
      \ delivery of this message will be\nattempted by the SMSC. It can be specified\
      \ in either absolute time\nformat or relative time format. The encoding of a\
      \ time format is\nspecified in chapter 7.1.1. in the smpp specification v3.4.\n\
      \n|`CamelSmppValidityPeriod` |`String`/`Date` |*only for SubmitSm, SubmitMulti\
      \ and ReplaceSm* The validity period\nparameter indicates the SMSC expiration\
      \ time, after which the message\nshould be discarded if not delivered to the\
      \ destination. If it's\nprovided as `Date`, it's interpreted as absolute time.\
      \ *Camel 2.9.1\nonwards:* It can be defined in absolute time format or relative\
      \ time\nformat if you provide it as `String` as specified in chapter 7.1.1 in\n\
      the smpp specification v3.4.\n\n|`CamelSmppReplaceIfPresentFlag` |`Byte` |*only\
      \ for SubmitSm and SubmitMulti* The replace if present flag\nparameter is used\
      \ to request the SMSC to replace a previously submitted\nmessage, that is still\
      \ pending delivery. The SMSC will replace an\nexisting message provided that\
      \ the source address, destination address\nand service type match the same fields\
      \ in the new message. The following\nvalues are defined: `0`, Don't replace\
      \ and `1`, Replace\n\n|`CamelSmppAlphabet` / `CamelSmppDataCoding` |`Byte` |*Camel\
      \ 2.5* *For SubmitSm, SubmitMulti and ReplaceSm* (Prior to *Camel\n2.9* use\
      \ `CamelSmppDataCoding` instead of `CamelSmppAlphabet`.) The data\ncoding according\
      \ to the SMPP 3.4 specification, section 5.2.19. Use the\nURI option `alphabet`\
      \ settings above.\n\n|`CamelSmppOptionalParameters` |`Map<String, String>` |*Deprecated\
      \ and will be removed in Camel 2.13.0/3.0.0* +\n *Camel 2.10.5 and 2.11.1 onwards\
      \ and only for SubmitSm, SubmitMulti and\nDataSm* The optional parameters send\
      \ back by the SMSC.\n\n|`CamelSmppOptionalParameter` |`Map<Short, Object>` |*Camel\
      \ 2.10.7 and 2.11.2 onwards and only for SubmitSm, SubmitMulti and\nDataSm*\
      \ The optional parameter which are send to the SMSC. The value is\nconverted\
      \ in the following way: `String` -> `org.jsmpp.bean.OptionalParameter.COctetString`,\
      \ \n`byte[]` -> `org.jsmpp.bean.OptionalParameter.OctetString`, \n`Byte` ->\
      \ `org.jsmpp.bean.OptionalParameter.Byte`,\n`Integer` -> `org.jsmpp.bean.OptionalParameter.Int`,\n\
      `Short` -> `org.jsmpp.bean.OptionalParameter.Short`, \n`null` -> `org.jsmpp.bean.OptionalParameter.Null`\n\
      \n|CamelSmppEncoding |String |*Camel 2.14.1 and Camel 2.15.0 onwards and**only\
      \ for SubmitSm,\nSubmitMulti and DataSm*.?? Specifies the encoding (character\
      \ set name) of\nthe bytes in the message body.?? If the message body is a string\
      \ then\nthis is not relevant because Java Strings are always Unicode.?? If the\n\
      body is a byte array then this header can be used to indicate that it is\nISO-8859-1\
      \ or some other value.?? Default value is specified by the\nendpoint configuration\
      \ parameter _encoding_\n\n|CamelSmppSplittingPolicy |String |*Camel 2.14.1 and\
      \ Camel 2.15.0 onwards and**only for SubmitSm,\nSubmitMulti and DataSm*.?? Specifies\
      \ the policy for message splitting for\nthis exchange.?? Possible values are\
      \ described in the endpoint\nconfiguration parameter _splittingPolicy_\n|=======================================================================\n\
      \nThe following message headers are used by the SMPP producer to set the\nresponse\
      \ from the SMSC in the message header\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelSmppId` |`List<String>`/`String` |The id\
      \ to identify the submitted short message(s) for later use. *From\nCamel 2.9.0*:\
      \ In case of a ReplaceSm, QuerySm, CancelSm and DataSm this\nheader vaule is\
      \ a `String`. In case of a SubmitSm or SubmitMultiSm this\nheader vaule is a\
      \ `List<String>`.\n\n|`CamelSmppSentMessageCount` |`Integer` |*From Camel 2.9\
      \ onwards only for SubmitSm and SubmitMultiSm* The total\nnumber of messages\
      \ which has been sent.\n\n|`CamelSmppError` |`Map<String, List<Map<String, Object>>>`\
      \ |*From Camel 2.9 onwards only for SubmitMultiSm* The errors which\noccurred\
      \ by sending the short message(s) the form `Map<String, List<Map<String, Object>>>`\
      \ (messageID : (destAddr :\naddress, error : errorCode)).\n\n|`CamelSmppOptionalParameters`\
      \ |`Map<String, String>` |*Deprecated and will be removed in Camel 2.13.0/3.0.0*\
      \ \n*From Camel 2.11.1 onwards only for DataSm* The optional parameters\nwhich\
      \ are returned from the SMSC by sending the message.\n\n|`CamelSmppOptionalParameter`\
      \ |`Map<Short, Object>` |*From Camel 2.10.7, 2.11.2 onwards only for DataSm*\
      \ The optional\nparameter which are returned from the SMSC by sending the message.\
      \ The\nkey is the `Short` code for the optional parameter. The value is\nconverted\
      \ in the following way: \n`org.jsmpp.bean.OptionalParameter.COctetString` ->\
      \ `String`,\n`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,\n`org.jsmpp.bean.OptionalParameter.Byte`\
      \ -> `Byte`,\n`org.jsmpp.bean.OptionalParameter.Int` -> `Integer`,\n`org.jsmpp.bean.OptionalParameter.Short`\
      \ -> `Short`, \n`org.jsmpp.bean.OptionalParameter.Null` -> `null`\n|=======================================================================\n\
      \n[[SMPP-ConsumerMessageHeaders]]\nConsumer Message Headers\n^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe following message headers are used by the SMPP consumer to set the\nrequest\
      \ data from the SMSC in the message header\n\n[width=\"100%\",cols=\"10%,10%,80%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Header |Type |Description\n\n|`CamelSmppSequenceNumber` |`Integer` |*only for\
      \ AlertNotification, DeliverSm and DataSm* A sequence number\nallows a response\
      \ PDU to be correlated with a request PDU. The\nassociated SMPP response PDU\
      \ must preserve this field.\n\n|`CamelSmppCommandId` |`Integer` |*only for AlertNotification,\
      \ DeliverSm and DataSm* The command id field\nidentifies the particular SMPP\
      \ PDU. For the complete list of defined\nvalues see chapter 5.1.2.1 in the smpp\
      \ specification v3.4.\n\n|`CamelSmppSourceAddr` |`String` |*only for AlertNotification,\
      \ DeliverSm and DataSm* Defines the address\nof SME (Short Message Entity) which\
      \ originated this message.\n\n|`CamelSmppSourceAddrNpi` |`Byte` |*only for AlertNotification\
      \ and DataSm* Defines the numeric plan\nindicator (NPI) to be used in the SME\
      \ originator address parameters. Use\nthe URI option `sourceAddrNpi` values\
      \ defined above.\n\n|`CamelSmppSourceAddrTon` |`Byte` |*only for AlertNotification\
      \ and DataSm* Defines the type of number (TON)\nto be used in the SME originator\
      \ address parameters. Use the\n`sourceAddrTon` URI option values defined above.\n\
      \n|`CamelSmppEsmeAddr` |`String` |*only for AlertNotification* Defines the destination\
      \ ESME address. For\nmobile terminated messages, this is the directory number\
      \ of the\nrecipient MS.\n\n|`CamelSmppEsmeAddrNpi` |`Byte` |*only for AlertNotification*\
      \ Defines the numeric plan indicator (NPI) to\nbe used in the ESME originator\
      \ address parameters. Use the URI option\n`sourceAddrNpi` values defined above.\n\
      \n|`CamelSmppEsmeAddrTon` |`Byte` |*only for AlertNotification* Defines the\
      \ type of number (TON) to be used\nin the ESME originator address parameters.\
      \ Use the `sourceAddrTon` URI\noption values defined above.\n\n|`CamelSmppId`\
      \ |`String` |*only for smsc DeliveryReceipt and DataSm* The message ID allocated\
      \ to\nthe message by the SMSC when originally submitted.\n\n|`CamelSmppDelivered`\
      \ |`Integer` |*only for smsc DeliveryReceipt* Number of short messages delivered.\
      \ This\nis only relevant where the original message was submitted to a\ndistribution\
      \ list.The value is padded with leading zeros if necessary.\n\n|`CamelSmppDoneDate`\
      \ |`Date` |*only for smsc DeliveryReceipt* The time and date at which the short\n\
      message reached it's final state. The format is as follows: YYMMDDhhmm.\n\n\
      |`CamelSmppStatus` |`DeliveryReceiptState` |*only for smsc DeliveryReceipt:*\
      \ The final status of the message. The\nfollowing values are defined: `DELIVRD`:\
      \ Message is delivered to destination,\n`EXPIRED`: Message validity period has\
      \ expired,\n`DELETED`: Message has been deleted, \n`UNDELIV`: Message is undeliverable,\
      \ \n`ACCEPTD`: Message is in accepted state (i.e. has been manually read on\n\
      behalf of the subscriber by customer service),\n`UNKNOWN`: Message is in invalid\
      \ state,\n`REJECTD`: Message is in a rejected state\n\n|`CamelSmppCommandStatus`\
      \ |`Integer` |*only for DataSm* The Command status of the message.\n\n|`CamelSmppError`\
      \ |`String` |*only for smsc DeliveryReceipt* Where appropriate this may hold\
      \ a\nNetwork specific error code or an SMSC error code for the attempted\ndelivery\
      \ of the message. These errors are Network or SMSC specific and\nare not included\
      \ here.\n\n|`CamelSmppSubmitDate` |`Date` |*only for smsc DeliveryReceipt* The\
      \ time and date at which the short\nmessage was submitted. In the case of a\
      \ message which has been replaced,\nthis is the date that the original message\
      \ was replaced. The format is\nas follows: YYMMDDhhmm.\n\n|`CamelSmppSubmitted`\
      \ |`Integer` |*only for smsc DeliveryReceipt* Number of short messages originally\n\
      submitted. This is only relevant when the original message was submitted\nto\
      \ a distribution list.The value is padded with leading zeros if\nnecessary.\n\
      \n|`CamelSmppDestAddr` |`String` |*only for DeliverSm and DataSm:* Defines the\
      \ destination SME address.\nFor mobile terminated messages, this is the directory\
      \ number of the\nrecipient MS.\n\n|`CamelSmppScheduleDeliveryTime` |`String`\
      \ |*only for DeliverSm:* This parameter specifies the scheduled time at\nwhich\
      \ the message delivery should be first attempted. It defines either\nthe absolute\
      \ date and time or relative time from the current SMSC time\nat which delivery\
      \ of this message will be attempted by the SMSC. It can\nbe specified in either\
      \ absolute time format or relative time format. The\nencoding of a time format\
      \ is specified in Section 7.1.1. in the smpp\nspecification v3.4.\n\n|`CamelSmppValidityPeriod`\
      \ |`String` |*only for DeliverSm* The validity period parameter indicates the\
      \ SMSC\nexpiration time, after which the message should be discarded if not\n\
      delivered to the destination. It can be defined in absolute time format\nor\
      \ relative time format. The encoding of absolute and relative time\nformat is\
      \ specified in Section 7.1.1 in the smpp specification v3.4.\n\n|`CamelSmppServiceType`\
      \ |`String` |*only for DeliverSm and DataSm* The service type parameter indicates\
      \ the\nSMS Application service associated with the message.\n\n|`CamelSmppRegisteredDelivery`\
      \ |`Byte` |*only for DataSm* Is used to request an delivery receipt and/or SME\n\
      originated acknowledgements. Same values as in Producer header list\nabove.\n\
      \n|`CamelSmppDestAddrNpi` |`Byte` |*only for DataSm* Defines the numeric plan\
      \ indicator (NPI) in the\ndestination address parameters. Use the URI option\
      \ `sourceAddrNpi`\nvalues defined above.\n\n|`CamelSmppDestAddrTon` |`Byte`\
      \ |*only for DataSm* Defines the type of number (TON) in the destination\naddress\
      \ parameters. Use the `sourceAddrTon` URI option values defined\nabove.\n\n\
      |`CamelSmppMessageType` |`String` |*Camel 2.6 onwards*: Identifies the type\
      \ of an incoming message: \n`AlertNotification`: an SMSC alert notification,\n\
      `DataSm`: an SMSC data short message,\n`DeliveryReceipt`: an SMSC delivery receipt,\n\
      `DeliverSm`: an SMSC deliver short message\n\n|`CamelSmppOptionalParameters`\
      \ |`Map<String, Object>` |*Deprecated and will be removed in Camel 2.13.0/3.0.0*\
      \ \n*Camel 2.10.5 onwards and only for DeliverSm* The optional parameters\n\
      send back by the SMSC.\n\n|`CamelSmppOptionalParameter` |`Map<Short, Object>`\
      \ |*Camel 2.10.7, 2.11.2 onwards and only for DeliverSm* The optional\nparameters\
      \ send back by the SMSC. The key is the `Short` code for the\noptional parameter.\
      \ The value is converted in the following way: \n`org.jsmpp.bean.OptionalParameter.COctetString`\
      \ -> `String`,\n`org.jsmpp.bean.OptionalParameter.OctetString` -> `byte[]`,\n\
      `org.jsmpp.bean.OptionalParameter.Byte` -> `Byte`,\n`org.jsmpp.bean.OptionalParameter.Int`\
      \ -> `Integer`,\n`org.jsmpp.bean.OptionalParameter.Short` -> `Short`,\n`org.jsmpp.bean.OptionalParameter.Null`\
      \ -> `null`\n|=======================================================================\n\
      \nTIP: *JSMPP library*\nSee the documentation of the http://jsmpp.org[JSMPP\
      \ Library] for more\ndetails about the underlying library.\n\n[[SMPP-Exceptionhandling]]\n\
      Exception handling\n^^^^^^^^^^^^^^^^^^\n\nThis component supports the general\
      \ Camel exception handling\ncapabilities\n\nWhen an error occurs sending a message\
      \ with SubmitSm (the default\naction), the org.apache.camel.component.smpp.SmppException\
      \ is thrown\nwith a nested exception, org.jsmpp.extra.NegativeResponseException.??\n\
      Call NegativeResponseException.getCommandStatus() to obtain the exact\nSMPP\
      \ negative response code, the values are explained in the SMPP\nspecification\
      \ 3.4, section 5.1.3. +\n *Camel 2.8 onwards*: When the SMPP consumer receives\
      \ a `DeliverSm` or\n`DataSm` short message and the processing of these messages\
      \ fails, you\ncan also throw a `ProcessRequestException` instead of handle the\n\
      failure. In this case, this exception is forwarded to the underlying\nhttp://jsmpp.org[JSMPP\
      \ library] which will return the included error\ncode to the SMSC. This feature\
      \ is useful to e.g. instruct the SMSC to\nresend the short message at a later\
      \ time. This could be done with the\nfollowing lines of code:\n\n[source,java]\n\
      --------------------------------------------------------------------------------------------------------------------------\n\
      from(\"smpp://smppclient@localhost:2775?password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=consumer\"\
      )\n  .doTry()\n    .to(\"bean:dao?method=updateSmsState\")\n  .doCatch(Exception.class)\n\
      \    .throwException(new ProcessRequestException(\"update of sms state failed\"\
      , 100))\n  .end();\n--------------------------------------------------------------------------------------------------------------------------\n\
      \nPlease refer to the http://smsforum.net/SMPP_v3_4_Issue1_2.zip[SMPP\nspecification]\
      \ for the complete list of error codes and their meanings.\n\n[[SMPP-Samples]]\n\
      Samples\n^^^^^^^\n\nA route which sends an SMS using the Java DSL:\n\n[source,java]\n\
      ------------------------------------------------------------------------------------------\n\
      from(\"direct:start\")\n  .to(\"smpp://smppclient@localhost:2775?\n      password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=producer\"\
      );\n------------------------------------------------------------------------------------------\n\
      \nA route which sends an SMS using the Spring XML DSL:\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------\n\
      <route>\n  <from uri=\"direct:start\"/>\n  <to uri=\"smpp://smppclient@localhost:2775?\n\
      \           password=password&amp;enquireLinkTimer=3000&amp;transactionTimer=5000&amp;systemType=producer\"\
      />\n</route>\n-----------------------------------------------------------------------------------------------------------\n\
      \nA route which receives an SMS using the Java DSL:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------\n\
      from(\"smpp://smppclient@localhost:2775?password=password&enquireLinkTimer=3000&transactionTimer=5000&systemType=consumer\"\
      )\n  .to(\"bean:foo\");\n--------------------------------------------------------------------------------------------------------------------------\n\
      \nA route which receives an SMS using the Spring XML DSL:\n\n[source,xml]\n\
      ----------------------------------------------------------------------------------------------------------------\n\
      \  <route>\n     <from uri=\"smpp://smppclient@localhost:2775?\n           \
      \     password=password&amp;enquireLinkTimer=3000&amp;transactionTimer=5000&amp;systemType=consumer\"\
      />\n     <to uri=\"bean:foo\"/>\n  </route>\n----------------------------------------------------------------------------------------------------------------\n\
      \n\nTIP: *SMSC simulator*\nIf you need an SMSC simulator for your test, you\
      \ can use the simulator\nprovided by\nhttp://opensmpp.logica.com/CommonPart/Download/download2.html#simulator[Logica].\n\
      \n[[SMPP-Debuglogging]]\nDebug logging\n^^^^^^^^^^^^^\n\nThis component has\
      \ log level *DEBUG*, which can be helpful in debugging\nproblems. If you use\
      \ log4j, you can add the following line to your\nconfiguration:\n\n[source,java]\n\
      --------------------------------------------------\nlog4j.logger.org.apache.camel.component.smpp=DEBUG\n\
      --------------------------------------------------\n\n[[SMPP-SeeAlso]]\nSee\
      \ Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-smtp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: smtp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: smtp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: smtp
          spec:
            containers:
            - image: fabric8/connector-smtp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: smtp
        alternativeSchemes: imap,imaps,pop3,pop3s,smtp,smtps
        syntax: smtp:host:port
        alternativeSyntax: smtp:username:password@host:port
        title: SMTP
        description: To send or receive emails using imap/pop3 or stmp protocols.
        label: mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mail.MailComponent
        groupId: org.apache.camel
        artifactId: camel-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.MailConfiguration
          deprecated: false
          secret: false
          description: Sets the Mail configuration
        contentTypeResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The mail server host name
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the mail server
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        closeFolder:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
        copyTo:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
        disconnect:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
        handleFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
        peek:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        unseen:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit by unseen mails only.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fetchSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
        folderName:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: INBOX
          description: The folder to poll.
        mailUidGenerator:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailUidGenerator
          deprecated: false
          secret: false
          description: A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
        mapMailMessage:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        postProcessAction:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBoxPostProcessAction
          deprecated: false
          secret: false
          description: Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
        bcc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the BCC email address. Separate multiple email addresses with comma.
        cc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the CC email address. Separate multiple email addresses with comma.
        from:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel@localhost
          description: The from email address
        replyTo:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
        subject:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The Subject of the message being sent. Note: Setting the subject
            in the header takes precedence over this option.'
        to:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the To email address. Separate multiple email addresses with comma.
        javaMailSender:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          required: false
          type: object
          javaType: org.apache.camel.component.mail.JavaMailSender
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
        additionalJavaMailProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          prefix: mail.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
        alternativeBodyHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelMailAlternativeBody
          description: Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
        attachmentsContentTransferEncodingResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver
          deprecated: false
          secret: false
          description: To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBinding
          deprecated: false
          secret: false
          description: Sets the binding used to convert from a Camel message to and from a Mail message
        connectionTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The connection timeout in milliseconds.
        contentType:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text/plain
          description: The mail message content type. Use text/html for HTML mails.
        contentTypeResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
        debugMode:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        ignoreUnsupportedCharset:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        ignoreUriScheme:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        session:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.mail.Session
          deprecated: false
          secret: false
          description: Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useInlineAttachments:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use disposition inline or attachment.
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
        idempotentRepositoryRemoveOnCommit:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
        searchTerm:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: javax.mail.search.SearchTerm
          prefix: searchTerm.
          multiValue: true
          deprecated: false
          secret: false
          description: Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        sortTerm:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
        dummyTrustManager:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for login
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username for login
    documentation.adoc: |+
      [[Mail-MailComponent]]
      Mail Component
      ~~~~~~~~~~~~~~

      The mail component provides access to Email via Spring's Mail support
      and the underlying JavaMail system.

      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-mail</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      WARNING: *Geronimo mail .jar*

      We have discovered that the geronimo mail `.jar` (v1.6) has a bug when
      polling mails with attachments. It cannot correctly identify the
      `Content-Type`. So, if you attach a `.jpeg` file to a mail and you poll
      it, the `Content-Type` is resolved as `text/plain` and not as
      `image/jpeg`. For that reason, we have added an
      `org.apache.camel.component.ContentTypeResolver` SPI interface which
      enables you to provide your own implementation and fix this bug by
      returning the correct Mime type based on the file name. So if the file
      name ends with `jpeg/jpg`, you can return `image/jpeg`.

      You can set your custom resolver on the `MailComponent` instance or on
      the `MailEndpoint` instance.


      TIP: *POP3 or IMAP*
      POP3 has some limitations and end users are encouraged to use IMAP if
      possible.

      INFO: *Using mock-mail for testing*
      You can use a mock framework for unit testing, which allows you to test
      without the need for a real mail server. However you should remember to
      not include the mock-mail when you go into production or other
      environments where you need to send mails to a real mail server. Just
      the presence of the mock-javamail.jar on the classpath means that it
      will kick in and avoid sending the mails.

      [[Mail-URIformat]]
      URI format
      ^^^^^^^^^^

      Mail endpoints can have one of the following URI formats (for the
      protocols, SMTP, POP3, or IMAP, respectively):

      [source,java]
      ---------------------------------------
      smtp://[username@]host[:port][?options]
      pop3://[username@]host[:port][?options]
      imap://[username@]host[:port][?options]
      ---------------------------------------

      The mail component also supports secure variants of these protocols
      (layered over SSL). You can enable the secure protocols by adding `s` to
      the scheme:

      [source,java]
      ----------------------------------------
      smtps://[username@]host[:port][?options]
      pop3s://[username@]host[:port][?options]
      imaps://[username@]host[:port][?options]
      ----------------------------------------

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


      [[Mail-Component-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The Mail component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | MailConfiguration | Sets the Mail configuration
      | contentTypeResolver | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      |=======================================================================
      {% endraw %}
      // component options: END



      [[Mail-Endpoint-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // endpoint options: START
      The Mail component supports 63 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* The mail server host name
      | port | common |  | int | The port number of the mail server
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | closeFolder | consumer | true | boolean | Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
      | copyTo | consumer |  | String | After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
      | delete | consumer | false | boolean | Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
      | disconnect | consumer | false | boolean | Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
      | handleFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | maxMessagesPerPoll | consumer |  | int | Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
      | peek | consumer | true | boolean | Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | skipFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | unseen | consumer | true | boolean | Whether to limit by unseen mails only.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fetchSize | consumer (advanced) | -1 | int | Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
      | folderName | consumer (advanced) | INBOX | String | The folder to poll.
      | mailUidGenerator | consumer (advanced) |  | MailUidGenerator | A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
      | mapMailMessage | consumer (advanced) | true | boolean | Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | postProcessAction | consumer (advanced) |  | MailBoxPostProcessAction | Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
      | bcc | producer |  | String | Sets the BCC email address. Separate multiple email addresses with comma.
      | cc | producer |  | String | Sets the CC email address. Separate multiple email addresses with comma.
      | from | producer | camel@localhost | String | The from email address
      | replyTo | producer |  | String | The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
      | subject | producer |  | String | The Subject of the message being sent. Note: Setting the subject in the header takes precedence over this option.
      | to | producer |  | String | Sets the To email address. Separate multiple email addresses with comma.
      | javaMailSender | producer (advanced) |  | JavaMailSender | To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
      | additionalJavaMailProperties | advanced |  | Properties | Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
      | alternativeBodyHeader | advanced | CamelMailAlternativeBody | String | Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
      | attachmentsContentTransferEncodingResolver | advanced |  | AttachmentsContentTransferEncodingResolver | To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
      | binding | advanced |  | MailBinding | Sets the binding used to convert from a Camel message to and from a Mail message
      | connectionTimeout | advanced | 30000 | int | The connection timeout in milliseconds.
      | contentType | advanced | text/plain | String | The mail message content type. Use text/html for HTML mails.
      | contentTypeResolver | advanced |  | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      | debugMode | advanced | false | boolean | Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | ignoreUnsupportedCharset | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | ignoreUriScheme | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | session | advanced |  | Session | Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useInlineAttachments | advanced | false | boolean | Whether to use disposition inline or attachment.
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
      | idempotentRepositoryRemoveOnCommit | filter | true | boolean | When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
      | searchTerm | filter |  | SearchTerm | Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | sortTerm | sort |  | String | Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
      | dummyTrustManager | security | false | boolean | To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
      | password | security |  | String | The password for login
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | username | security |  | String | The username for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Mail-Sampleendpoints]]
      Sample endpoints
      ++++++++++++++++

      Typically, you specify a URI with login credentials as follows (taking
      SMTP as an example):

      [source,java]
      ------------------------------------------------
      smtp://[username@]host[:port][?password=somepwd]
      ------------------------------------------------

      Alternatively, it is possible to specify both the user name and the
      password as query options:

      [source,java]
      -----------------------------------------------------
      smtp://host[:port]?password=somepwd&username=someuser
      -----------------------------------------------------

      For example:

      [source,java]
      ------------------------------------------------------------
      smtp://mycompany.mailserver:30?password=tiger&username=scott
      ------------------------------------------------------------

      [[Mail-Components]]
      Components
      ^^^^^^^^^^

      - link:imap.html[IMAP]
      - link:imaps.html[IMAPs]
      - link:pop3.html[POP3s]
      - link:pop3s.html[POP3s]
      - link:smtp.html[STMP]
      - link:smtps.html[SMTPs]

      [[Mail-DefaultPortsDefaultports]]
      Default ports
      +++++++++++++

      Default port numbers are supported. If the port number is omitted, Camel
      determines the port number to use based on the protocol.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Protocol |Default Port Number
      |`SMTP` |`25`
      |`SMTPS` |`465`
      |`POP3` |`110`
      |`POP3S` |`995`
      |`IMAP` |`143`
      |`IMAPS` |`993`
      |=======================================================================

      [[Mail-SSLsupport]]
      SSL support
      ^^^^^^^^^^^

      The underlying mail framework is responsible for providing SSL support.
      ??You may either configure SSL/TLS support by completely specifying the
      necessary Java Mail API configuration options, or you may provide a
      configured SSLContextParameters through the component or endpoint
      configuration.

      [[Mail-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of *Camel 2.10*, the mail component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 mail component.

      [[Mail-Programmaticconfigurationoftheendpoint]]
      Programmatic configuration of the endpoint

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      KeyStoreParameters ksp = new KeyStoreParameters();
      ksp.setResource("/users/home/server/truststore.jks");
      ksp.setPassword("keystorePassword");
      TrustManagersParameters tmp = new TrustManagersParameters();
      tmp.setKeyStore(ksp);
      SSLContextParameters scp = new SSLContextParameters();
      scp.setTrustManagers(tmp);
      Registry registry = ...
      registry.bind("sslContextParameters", scp);
      ...
      from(...)
      &nbsp; &nbsp; .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
      ----------------------------------------------------------------------------------------------------------------------------------

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

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      ...
      <camel:sslContextParameters id="sslContextParameters">
        <camel:trustManagers>
          <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/>
        </camel:trustManagers>
      </camel:sslContextParameters>...
      ...
      <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
      ---------------------------------------------------------------------------------------------------------------------------

      [[Mail-ConfiguringJavaMailDirectly]]
      Configuring JavaMail Directly
      +++++++++++++++++++++++++++++

      Camel uses SUN JavaMail, which only trusts certificates issued by well
      known Certificate Authorities (the default JVM trust configuration). If
      you issue your own certificates, you have to import the CA certificates
      into the JVM's Java trust/key store files, override the default JVM
      trust/key store files (see `SSLNOTES.txt` in JavaMail for details).

      [[Mail-MailMessageContent]]
      Mail Message Content
      ^^^^^^^^^^^^^^^^^^^^

      Camel uses the message exchange's IN body as the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      text content. The body is converted to `String.class`.

      Camel copies all of the exchange's IN headers to the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      headers.

      The subject of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      can be configured using a header property on the IN message. The code
      below demonstrates this:

      The same applies for other MimeMessage headers such as recipients, so
      you can use a header property as `To`:

      *Since Camel 2.11* When using the MailProducer the send the mail to
      server, you should be able to get the message id of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      with the key `CamelMailMessageId` from the Camel message header.

      [[Mail-Headerstakeprecedenceoverpre-configuredrecipients]]
      Headers take precedence over pre-configured recipients
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The recipients specified in the message headers always take precedence
      over recipients pre-configured in the endpoint URI. The idea is that if
      you provide any recipients in the message headers, that is what you get.
      The recipients pre-configured in the endpoint URI are treated as a
      fallback.

      In the sample code below, the email message is sent to
      `davsclaus@apache.org`, because it takes precedence over the
      pre-configured recipient, `info@mycompany.com`. Any `CC` and `BCC`
      settings in the endpoint URI are also ignored and those recipients will
      not receive any mail. The choice between headers and pre-configured
      settings is all or nothing: the mail component _either_ takes the
      recipients exclusively from the headers or exclusively from the
      pre-configured settings. It is not possible to mix and match headers and
      pre-configured settings.

      [source,java]
      ------------------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org");

              template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
      ------------------------------------------------------------------------------------------------------------

      [[Mail-Multiplerecipientsforeasierconfiguration]]
      Multiple recipients for easier configuration
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      It is possible to set multiple recipients using a comma-separated or a
      semicolon-separated list. This applies both to header settings and to
      settings in an endpoint URI. For example:

      [source,java]
      ------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
      ------------------------------------------------------------------------------------------------

      The preceding example uses a semicolon, `;`, as the separator character.

      [[Mail-Settingsendernameandemail]]
      Setting sender name and email
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can specify recipients in the format, `name <email>`, to include
      both the name and the email address of the recipient.

      For example, you define the following headers on the a
      link:message.html[Message]:

      [source,java]
      ---------------------------------------------------------
      Map headers = new HashMap();
      map.put("To", "Claus Ibsen <davsclaus@apache.org>");
      map.put("From", "James Strachan <jstrachan@apache.org>");
      map.put("Subject", "Camel is cool");
      ---------------------------------------------------------

      [[Mail-JavaMailAPI(exSUNJavaMail)]]
      JavaMail API (ex SUN JavaMail)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      https://java.net/projects/javamail/pages/Home[JavaMail API] is used
      under the hood for consuming and producing mails. +
       We encourage end-users to consult these references when using either
      POP3 or IMAP protocol. Note particularly that POP3 has a much more
      limited set of features than IMAP.

      * https://javamail.java.net/nonav/docs/api/com/sun/mail/pop3/package-summary.html[JavaMail
      POP3 API]
      * https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/package-summary.html[JavaMail
      IMAP API]
      * And generally about the
      https://javamail.java.net/nonav/docs/api/javax/mail/Flags.html[MAIL
      Flags]

      [[Mail-Samples]]
      Samples
      ^^^^^^^

      We start with a simple route that sends the messages received from a JMS
      queue as emails. The email account is the `admin` account on
      `mymailserver.com`.

      [source,java]
      -------------------------------------------------------------------------------------
      from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
      -------------------------------------------------------------------------------------

      In the next sample, we poll a mailbox for new emails once every minute.
      Notice that we use the special `consumer` option for setting the poll
      interval, `consumer.delay`, as 60000 milliseconds = 60 seconds.

      [source,java]
      -------------------------------------------------------
      from("imap://admin@mymailserver.com
           password=secret&unseen=true&consumer.delay=60000")
          .to("seda://mails");
      -------------------------------------------------------

      In this sample we want to send a mail to multiple recipients:

      [[Mail-Sendingmailwithattachmentsample]]
      Sending mail with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


      WARNING: *Attachments are not support by all Camel components*
      The _Attachments API_ is based on the Java Activation Framework and is
      generally only used by the Mail API. Since many of the other Camel
      components do not support attachments, the attachments could potentially
      be lost as they propagate along the route. The rule of thumb, therefore,
      is to add attachments just before sending a message to the mail
      endpoint.


      The mail component supports attachments. In the sample below, we send a
      mail message containing a plain text message with a logo file
      attachment.

      [[Mail-SSLsample]]
      SSL sample
      ^^^^^^^^^^

      In this sample, we want to poll our Google mail inbox for mails. To
      download mail onto a local mail client, Google mail requires you to
      enable and configure SSL. This is done by logging into your Google mail
      account and changing your settings to allow IMAP access. Google have
      extensive documentation on how to do this.

      [source,java]
      -------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").to("log:newmail");
      -------------------------------------------------------------------------------------

      The preceding route polls the Google mail inbox for new mails once every
      minute and logs the received messages to the `newmail` logger
      category. +
       Running the sample with `DEBUG` logging enabled, we can monitor the
      progress in the logs:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages.
      2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      2008-05-08 06:32:12,187 INFO  newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Mail-Consumingmailswithattachmentsample]]
      Consuming mails with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this sample we poll a mailbox and store all attachments from the
      mails as files. First, we define a route to poll the mailbox. As this
      sample is based on google mail, it uses the same route as shown in the
      SSL sample:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").process(new MyMailProcessor());
      ---------------------------------------------------------------------------------------

      Instead of logging the mail we use a processor where we can process the
      mail from java code:

      [source,java]
      ---------------------------------------------------------------------------------
          public void process(Exchange exchange) throws Exception {
              // the API is a bit clunky so we need to loop
              Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
              if (attachments.size() > 0) {
                  for (String name : attachments.keySet()) {
                      DataHandler dh = attachments.get(name);
                      // get the file name
                      String filename = dh.getName();

                      // get the content and convert it to byte[]
                      byte[] data = exchange.getContext().getTypeConverter()
                                        .convertTo(byte[].class, dh.getInputStream());

                      // write the data to a file
                      FileOutputStream out = new FileOutputStream(filename);
                      out.write(data);
                      out.flush();
                      out.close();
                  }
              }
         }
      ---------------------------------------------------------------------------------

      As you can see the API to handle attachments is a bit clunky but it's
      there so you can get the `javax.activation.DataHandler` so you can
      handle the attachments using standard API.

      [[Mail-Howtosplitamailmessagewithattachments]]
      How to split a mail message with attachments
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this example we consume mail messages which may have a number of
      attachments. What we want to do is to use the
      link:splitter.html[Splitter] EIP per individual attachment, to process
      the attachments separately. For example if the mail message has 5
      attachments, we want the link:splitter.html[Splitter] to process five
      messages, each having a single attachment. To do this we need to provide
      a custom link:expression.html[Expression] to the
      link:splitter.html[Splitter] where we provide a List<Message> that
      contains the five messages with the single attachment.

      The code is provided out of the box in Camel 2.10 onwards in the
      `camel-mail` component. The code is in the class:
      `org.apache.camel.component.mail.SplitAttachmentsExpression`, which you
      can find the source code
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java[here]

      In the Camel route you then need to use this
      link:expression.html[Expression] in the route as shown below:

      If you use XML DSL then you need to declare a method call expression in
      the link:splitter.html[Splitter] as shown below

      [source,xml]
      ---------------------------------------------------------------------------------
      <split>
        <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/>
        <to uri="mock:split"/>
      </split>
      ---------------------------------------------------------------------------------

      ??

      From Camel 2.16 onwards you can also split the attachments as byte[] to
      be stored as the message body. This is done by creating the expression
      with boolean true

      [source,java]
      --------------------------------------------------------------------
      SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
      --------------------------------------------------------------------

      And then use the expression with the splitter eip.

      [[Mail-UsingcustomSearchTerm]]
      Using custom SearchTerm
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can configure a `searchTerm` on the `MailEndpoint` which allows you
      to filter out unwanted mails.

      For example to filter mails to contain Camel in either Subject or Text
      you can do as follows:

      [source,xml]
      -------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------------

      Notice we use the `"searchTerm.subjectOrBody"` as parameter key to
      indicate that we want to search on mail subject or body, to contain the
      word "Camel". +
       The class `org.apache.camel.component.mail.SimpleSearchTerm` has a
      number of options you can configure:

      Or to get the new unseen emails going 24 hours back in time you can do.
      Notice the "now-24h" syntax. See the table below for more details.

      [source,xml]
      --------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      --------------------------------------------------------------------------------------------------

      You can have multiple searchTerm in the endpoint uri configuration. They
      would then be combined together using AND operator, eg so both
      conditions must match. For example to get the last unseen emails going
      back 24 hours which has Camel in the mail subject you can do:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      ---------------------------------------------------------------------------------------------------------------------------

      The `SimpleSearchTerm` is designed to be easily configurable from a
      POJO, so you can also configure it using a <bean> style in XML

      [source,java]
      ---------------------------------------------------------------------------------
      <bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
        <property name="subject" value="Order"/>
        <property name="to" value="acme-order@acme.com"/>
        <property name="fromSentDate" value="now"/>
       </bean>
      ---------------------------------------------------------------------------------

      You can then refer to this bean, using #beanId in your Camel route as
      shown:

      [source,xml]
      -------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------

      In Java there is a builder class to build compound
      `SearchTerms` using the `org.apache.camel.component.mail.SearchTermBuilder`
      class. This allows you to build complex terms such as:

      [source,java]
      --------------------------------------------------------------
      // we just want the unseen mails which is not spam
      SearchTermBuilder builder = new SearchTermBuilder();

      builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
        // which was sent from either foo or bar
        .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
        // .. and we could continue building the terms

      SearchTerm term = builder.build();
      --------------------------------------------------------------

      [[Mail-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-smtps
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: smtps
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: smtps
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: smtps
          spec:
            containers:
            - image: fabric8/connector-smtps:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: smtps
        alternativeSchemes: imap,imaps,pop3,pop3s,smtp,smtps
        syntax: smtps:host:port
        alternativeSyntax: smtps:username:password@host:port
        title: SMTPS
        description: To send or receive emails using imap/pop3 or stmp protocols.
        label: mail
        deprecated: false
        async: false
        javaType: org.apache.camel.component.mail.MailComponent
        groupId: org.apache.camel
        artifactId: camel-mail
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.MailConfiguration
          deprecated: false
          secret: false
          description: Sets the Mail configuration
        contentTypeResolver:
          kind: property
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The mail server host name
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The port number of the mail server
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        closeFolder:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
        copyTo:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
        delete:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
        disconnect:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
        handleFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
        peek:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        skipFailedMessage:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
        unseen:
          kind: parameter
          group: consumer
          label: consumer
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit by unseen mails only.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        fetchSize:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
        folderName:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: INBOX
          description: The folder to poll.
        mailUidGenerator:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailUidGenerator
          deprecated: false
          secret: false
          description: A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
        mapMailMessage:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        postProcessAction:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBoxPostProcessAction
          deprecated: false
          secret: false
          description: Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
        bcc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the BCC email address. Separate multiple email addresses with comma.
        cc:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the CC email address. Separate multiple email addresses with comma.
        from:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: camel@localhost
          description: The from email address
        replyTo:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
        subject:
          kind: parameter
          group: producer
          label: producer
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'The Subject of the message being sent. Note: Setting the subject
            in the header takes precedence over this option.'
        to:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the To email address. Separate multiple email addresses with comma.
        javaMailSender:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          required: false
          type: object
          javaType: org.apache.camel.component.mail.JavaMailSender
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
        additionalJavaMailProperties:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Properties
          prefix: mail.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
        alternativeBodyHeader:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: CamelMailAlternativeBody
          description: Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
        attachmentsContentTransferEncodingResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver
          deprecated: false
          secret: false
          description: To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
        binding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.MailBinding
          deprecated: false
          secret: false
          description: Sets the binding used to convert from a Camel message to and from a Mail message
        connectionTimeout:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: The connection timeout in milliseconds.
        contentType:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: text/plain
          description: The mail message content type. Use text/html for HTML mails.
        contentTypeResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.mail.ContentTypeResolver
          deprecated: false
          secret: false
          description: Resolver to determine Content-Type for file attachments.
        debugMode:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
        ignoreUnsupportedCharset:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        ignoreUriScheme:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
        session:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.mail.Session
          deprecated: false
          secret: false
          description: Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useInlineAttachments:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use disposition inline or attachment.
        idempotentRepository:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: org.apache.camel.spi.IdempotentRepository<java.lang.String>
          deprecated: false
          secret: false
          description: A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
        idempotentRepositoryRemoveOnCommit:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
        searchTerm:
          kind: parameter
          group: filter
          label: consumer,filter
          type: object
          javaType: javax.mail.search.SearchTerm
          prefix: searchTerm.
          multiValue: true
          deprecated: false
          secret: false
          description: Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        sortTerm:
          kind: parameter
          group: sort
          label: consumer,sort
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
        dummyTrustManager:
          kind: parameter
          group: security
          label: security
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for login
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters.
        username:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username for login
    documentation.adoc: |+
      [[Mail-MailComponent]]
      Mail Component
      ~~~~~~~~~~~~~~

      The mail component provides access to Email via Spring's Mail support
      and the underlying JavaMail system.

      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-mail</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      WARNING: *Geronimo mail .jar*

      We have discovered that the geronimo mail `.jar` (v1.6) has a bug when
      polling mails with attachments. It cannot correctly identify the
      `Content-Type`. So, if you attach a `.jpeg` file to a mail and you poll
      it, the `Content-Type` is resolved as `text/plain` and not as
      `image/jpeg`. For that reason, we have added an
      `org.apache.camel.component.ContentTypeResolver` SPI interface which
      enables you to provide your own implementation and fix this bug by
      returning the correct Mime type based on the file name. So if the file
      name ends with `jpeg/jpg`, you can return `image/jpeg`.

      You can set your custom resolver on the `MailComponent` instance or on
      the `MailEndpoint` instance.


      TIP: *POP3 or IMAP*
      POP3 has some limitations and end users are encouraged to use IMAP if
      possible.

      INFO: *Using mock-mail for testing*
      You can use a mock framework for unit testing, which allows you to test
      without the need for a real mail server. However you should remember to
      not include the mock-mail when you go into production or other
      environments where you need to send mails to a real mail server. Just
      the presence of the mock-javamail.jar on the classpath means that it
      will kick in and avoid sending the mails.

      [[Mail-URIformat]]
      URI format
      ^^^^^^^^^^

      Mail endpoints can have one of the following URI formats (for the
      protocols, SMTP, POP3, or IMAP, respectively):

      [source,java]
      ---------------------------------------
      smtp://[username@]host[:port][?options]
      pop3://[username@]host[:port][?options]
      imap://[username@]host[:port][?options]
      ---------------------------------------

      The mail component also supports secure variants of these protocols
      (layered over SSL). You can enable the secure protocols by adding `s` to
      the scheme:

      [source,java]
      ----------------------------------------
      smtps://[username@]host[:port][?options]
      pop3s://[username@]host[:port][?options]
      imaps://[username@]host[:port][?options]
      ----------------------------------------

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


      [[Mail-Component-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // component options: START
      The Mail component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | MailConfiguration | Sets the Mail configuration
      | contentTypeResolver | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      |=======================================================================
      {% endraw %}
      // component options: END



      [[Mail-Endpoint-Options]]
      ^^^^^^^^^^^^^^^^^^^^^^^^^^


      // endpoint options: START
      The Mail component supports 63 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* The mail server host name
      | port | common |  | int | The port number of the mail server
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | closeFolder | consumer | true | boolean | Whether the consumer should close the folder after polling. Setting this option to false and having disconnect=false as well then the consumer keep the folder open between polls.
      | copyTo | consumer |  | String | After processing a mail message it can be copied to a mail folder with the given name. You can override this configuration value with a header with the key copyTo allowing you to copy messages to folder names configured at runtime.
      | delete | consumer | false | boolean | Deletes the messages after they have been processed. This is done by setting the DELETED flag on the mail message. If false the SEEN flag is set instead. As of Camel 2.10 you can override this configuration option by setting a header with the key delete to determine if the mail should be deleted or not.
      | disconnect | consumer | false | boolean | Whether the consumer should disconnect after polling. If enabled this forces Camel to connect on each poll.
      | handleFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to handle the caused exception by the consumer's error handler. By enable the bridge error handler on the consumer then the Camel routing error handler can handle the exception instead. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | maxMessagesPerPoll | consumer |  | int | Specifies the maximum number of messages to gather per poll. By default no maximum is set. Can be used to set a limit of e.g. 1000 to avoid downloading thousands of files when the server starts up. Set a value of 0 or negative to disable this option.
      | peek | consumer | true | boolean | Will mark the javax.mail.Message as peeked before processing the mail message. This applies to IMAPMessage messages types only. By using peek the mail will not be eager marked as SEEN on the mail server which allows us to rollback the mail message if there is an error processing in Camel.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | skipFailedMessage | consumer | false | boolean | If the mail consumer cannot retrieve a given mail message then this option allows to skip the message and move on to retrieve the next mail message. The default behavior would be the consumer throws an exception and no mails from the batch would be able to be routed by Camel.
      | unseen | consumer | true | boolean | Whether to limit by unseen mails only.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | fetchSize | consumer (advanced) | -1 | int | Sets the maximum number of messages to consume during a poll. This can be used to avoid overloading a mail server if a mailbox folder contains a lot of messages. Default value of -1 means no fetch size and all messages will be consumed. Setting the value to 0 is a special corner case where Camel will not consume any messages at all.
      | folderName | consumer (advanced) | INBOX | String | The folder to poll.
      | mailUidGenerator | consumer (advanced) |  | MailUidGenerator | A pluggable MailUidGenerator that allows to use custom logic to generate UUID of the mail message.
      | mapMailMessage | consumer (advanced) | true | boolean | Specifies whether Camel should map the received mail message to Camel body/headers. If set to true the body of the mail message is mapped to the body of the Camel IN message and the mail headers are mapped to IN headers. If this option is set to false then the IN message contains a raw javax.mail.Message. You can retrieve this raw message by calling exchange.getIn().getBody(javax.mail.Message.class).
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | postProcessAction | consumer (advanced) |  | MailBoxPostProcessAction | Refers to an MailBoxPostProcessAction for doing post processing tasks on the mailbox once the normal processing ended.
      | bcc | producer |  | String | Sets the BCC email address. Separate multiple email addresses with comma.
      | cc | producer |  | String | Sets the CC email address. Separate multiple email addresses with comma.
      | from | producer | camel@localhost | String | The from email address
      | replyTo | producer |  | String | The Reply-To recipients (the receivers of the response mail). Separate multiple email addresses with a comma.
      | subject | producer |  | String | The Subject of the message being sent. Note: Setting the subject in the header takes precedence over this option.
      | to | producer |  | String | Sets the To email address. Separate multiple email addresses with comma.
      | javaMailSender | producer (advanced) |  | JavaMailSender | To use a custom org.apache.camel.component.mail.JavaMailSender for sending emails.
      | additionalJavaMailProperties | advanced |  | Properties | Sets additional java mail properties that will append/override any default properties that is set based on all the other options. This is useful if you need to add some special options but want to keep the others as is.
      | alternativeBodyHeader | advanced | CamelMailAlternativeBody | String | Specifies the key to an IN message header that contains an alternative email body. For example if you send emails in text/html format and want to provide an alternative mail body for non-HTML email clients set the alternative mail body with this key as a header.
      | attachmentsContentTransferEncodingResolver | advanced |  | AttachmentsContentTransferEncodingResolver | To use a custom AttachmentsContentTransferEncodingResolver to resolve what content-type-encoding to use for attachments.
      | binding | advanced |  | MailBinding | Sets the binding used to convert from a Camel message to and from a Mail message
      | connectionTimeout | advanced | 30000 | int | The connection timeout in milliseconds.
      | contentType | advanced | text/plain | String | The mail message content type. Use text/html for HTML mails.
      | contentTypeResolver | advanced |  | ContentTypeResolver | Resolver to determine Content-Type for file attachments.
      | debugMode | advanced | false | boolean | Enable debug mode on the underlying mail framework. The SUN Mail framework logs the debug messages to System.out by default.
      | headerFilterStrategy | advanced |  | HeaderFilterStrategy | To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter headers.
      | ignoreUnsupportedCharset | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | ignoreUriScheme | advanced | false | boolean | Option to let Camel ignore unsupported charset in the local JVM when sending mails. If the charset is unsupported then charset=XXX (where XXX represents the unsupported charset) is removed from the content-type and it relies on the platform default instead.
      | session | advanced |  | Session | Specifies the mail session that camel should use for all mail interactions. Useful in scenarios where mail sessions are created and managed by some other resource such as a JavaEE container. If this is not specified Camel automatically creates the mail session for you.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useInlineAttachments | advanced | false | boolean | Whether to use disposition inline or attachment.
      | idempotentRepository | filter |  | String> | A pluggable repository org.apache.camel.spi.IdempotentRepository which allows to cluster consuming from the same mailbox and let the repository coordinate whether a mail message is valid for the consumer to process. By default no repository is in use.
      | idempotentRepositoryRemoveOnCommit | filter | true | boolean | When using idempotent repository then when the mail message has been successfully processed and is committed should the message id be removed from the idempotent repository (default) or be kept in the repository. By default its assumed the message id is unique and has no value to be kept in the repository because the mail message will be marked as seen/moved or deleted to prevent it from being consumed again. And therefore having the message id stored in the idempotent repository has little value. However this option allows to store the message id for whatever reason you may have.
      | searchTerm | filter |  | SearchTerm | Refers to a javax.mail.search.SearchTerm which allows to filter mails based on search criteria such as subject body from sent after a certain date etc.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | sortTerm | sort |  | String | Sorting order for messages. Only natively supported for IMAP. Emulated to some degree when using POP3 or when IMAP server does not have the SORT capability.
      | dummyTrustManager | security | false | boolean | To use a dummy security setting for trusting all certificates. Should only be used for development mode and not production.
      | password | security |  | String | The password for login
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters.
      | username | security |  | String | The username for login
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Mail-Sampleendpoints]]
      Sample endpoints
      ++++++++++++++++

      Typically, you specify a URI with login credentials as follows (taking
      SMTP as an example):

      [source,java]
      ------------------------------------------------
      smtp://[username@]host[:port][?password=somepwd]
      ------------------------------------------------

      Alternatively, it is possible to specify both the user name and the
      password as query options:

      [source,java]
      -----------------------------------------------------
      smtp://host[:port]?password=somepwd&username=someuser
      -----------------------------------------------------

      For example:

      [source,java]
      ------------------------------------------------------------
      smtp://mycompany.mailserver:30?password=tiger&username=scott
      ------------------------------------------------------------

      [[Mail-Components]]
      Components
      ^^^^^^^^^^

      - link:imap.html[IMAP]
      - link:imaps.html[IMAPs]
      - link:pop3.html[POP3s]
      - link:pop3s.html[POP3s]
      - link:smtp.html[STMP]
      - link:smtps.html[SMTPs]

      [[Mail-DefaultPortsDefaultports]]
      Default ports
      +++++++++++++

      Default port numbers are supported. If the port number is omitted, Camel
      determines the port number to use based on the protocol.

      [width="100%",cols="10%,90%",options="header",]
      |=======================================================================
      |Protocol |Default Port Number
      |`SMTP` |`25`
      |`SMTPS` |`465`
      |`POP3` |`110`
      |`POP3S` |`995`
      |`IMAP` |`143`
      |`IMAPS` |`993`
      |=======================================================================

      [[Mail-SSLsupport]]
      SSL support
      ^^^^^^^^^^^

      The underlying mail framework is responsible for providing SSL support.
      ??You may either configure SSL/TLS support by completely specifying the
      necessary Java Mail API configuration options, or you may provide a
      configured SSLContextParameters through the component or endpoint
      configuration.

      [[Mail-UsingtheJSSEConfigurationUtility]]
      Using the JSSE Configuration Utility
      ++++++++++++++++++++++++++++++++++++

      As of *Camel 2.10*, the mail component supports SSL/TLS configuration
      through the link:camel-configuration-utilities.html[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 mail component.

      [[Mail-Programmaticconfigurationoftheendpoint]]
      Programmatic configuration of the endpoint

      [source,java]
      ----------------------------------------------------------------------------------------------------------------------------------
      KeyStoreParameters ksp = new KeyStoreParameters();
      ksp.setResource("/users/home/server/truststore.jks");
      ksp.setPassword("keystorePassword");
      TrustManagersParameters tmp = new TrustManagersParameters();
      tmp.setKeyStore(ksp);
      SSLContextParameters scp = new SSLContextParameters();
      scp.setTrustManagers(tmp);
      Registry registry = ...
      registry.bind("sslContextParameters", scp);
      ...
      from(...)
      &nbsp; &nbsp; .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
      ----------------------------------------------------------------------------------------------------------------------------------

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

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      ...
      <camel:sslContextParameters id="sslContextParameters">
        <camel:trustManagers>
          <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/>
        </camel:trustManagers>
      </camel:sslContextParameters>...
      ...
      <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
      ---------------------------------------------------------------------------------------------------------------------------

      [[Mail-ConfiguringJavaMailDirectly]]
      Configuring JavaMail Directly
      +++++++++++++++++++++++++++++

      Camel uses SUN JavaMail, which only trusts certificates issued by well
      known Certificate Authorities (the default JVM trust configuration). If
      you issue your own certificates, you have to import the CA certificates
      into the JVM's Java trust/key store files, override the default JVM
      trust/key store files (see `SSLNOTES.txt` in JavaMail for details).

      [[Mail-MailMessageContent]]
      Mail Message Content
      ^^^^^^^^^^^^^^^^^^^^

      Camel uses the message exchange's IN body as the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      text content. The body is converted to `String.class`.

      Camel copies all of the exchange's IN headers to the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      headers.

      The subject of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      can be configured using a header property on the IN message. The code
      below demonstrates this:

      The same applies for other MimeMessage headers such as recipients, so
      you can use a header property as `To`:

      *Since Camel 2.11* When using the MailProducer the send the mail to
      server, you should be able to get the message id of the
      http://java.sun.com/javaee/5/docs/api/javax/mail/internet/MimeMessage.html[MimeMessage]
      with the key `CamelMailMessageId` from the Camel message header.

      [[Mail-Headerstakeprecedenceoverpre-configuredrecipients]]
      Headers take precedence over pre-configured recipients
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The recipients specified in the message headers always take precedence
      over recipients pre-configured in the endpoint URI. The idea is that if
      you provide any recipients in the message headers, that is what you get.
      The recipients pre-configured in the endpoint URI are treated as a
      fallback.

      In the sample code below, the email message is sent to
      `davsclaus@apache.org`, because it takes precedence over the
      pre-configured recipient, `info@mycompany.com`. Any `CC` and `BCC`
      settings in the endpoint URI are also ignored and those recipients will
      not receive any mail. The choice between headers and pre-configured
      settings is all or nothing: the mail component _either_ takes the
      recipients exclusively from the headers or exclusively from the
      pre-configured settings. It is not possible to mix and match headers and
      pre-configured settings.

      [source,java]
      ------------------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org");

              template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
      ------------------------------------------------------------------------------------------------------------

      [[Mail-Multiplerecipientsforeasierconfiguration]]
      Multiple recipients for easier configuration
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      It is possible to set multiple recipients using a comma-separated or a
      semicolon-separated list. This applies both to header settings and to
      settings in an endpoint URI. For example:

      [source,java]
      ------------------------------------------------------------------------------------------------
              Map<String, Object> headers = new HashMap<String, Object>();
              headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
      ------------------------------------------------------------------------------------------------

      The preceding example uses a semicolon, `;`, as the separator character.

      [[Mail-Settingsendernameandemail]]
      Setting sender name and email
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      You can specify recipients in the format, `name <email>`, to include
      both the name and the email address of the recipient.

      For example, you define the following headers on the a
      link:message.html[Message]:

      [source,java]
      ---------------------------------------------------------
      Map headers = new HashMap();
      map.put("To", "Claus Ibsen <davsclaus@apache.org>");
      map.put("From", "James Strachan <jstrachan@apache.org>");
      map.put("Subject", "Camel is cool");
      ---------------------------------------------------------

      [[Mail-JavaMailAPI(exSUNJavaMail)]]
      JavaMail API (ex SUN JavaMail)
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      https://java.net/projects/javamail/pages/Home[JavaMail API] is used
      under the hood for consuming and producing mails. +
       We encourage end-users to consult these references when using either
      POP3 or IMAP protocol. Note particularly that POP3 has a much more
      limited set of features than IMAP.

      * https://javamail.java.net/nonav/docs/api/com/sun/mail/pop3/package-summary.html[JavaMail
      POP3 API]
      * https://javamail.java.net/nonav/docs/api/com/sun/mail/imap/package-summary.html[JavaMail
      IMAP API]
      * And generally about the
      https://javamail.java.net/nonav/docs/api/javax/mail/Flags.html[MAIL
      Flags]

      [[Mail-Samples]]
      Samples
      ^^^^^^^

      We start with a simple route that sends the messages received from a JMS
      queue as emails. The email account is the `admin` account on
      `mymailserver.com`.

      [source,java]
      -------------------------------------------------------------------------------------
      from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
      -------------------------------------------------------------------------------------

      In the next sample, we poll a mailbox for new emails once every minute.
      Notice that we use the special `consumer` option for setting the poll
      interval, `consumer.delay`, as 60000 milliseconds = 60 seconds.

      [source,java]
      -------------------------------------------------------
      from("imap://admin@mymailserver.com
           password=secret&unseen=true&consumer.delay=60000")
          .to("seda://mails");
      -------------------------------------------------------

      In this sample we want to send a mail to multiple recipients:

      [[Mail-Sendingmailwithattachmentsample]]
      Sending mail with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


      WARNING: *Attachments are not support by all Camel components*
      The _Attachments API_ is based on the Java Activation Framework and is
      generally only used by the Mail API. Since many of the other Camel
      components do not support attachments, the attachments could potentially
      be lost as they propagate along the route. The rule of thumb, therefore,
      is to add attachments just before sending a message to the mail
      endpoint.


      The mail component supports attachments. In the sample below, we send a
      mail message containing a plain text message with a logo file
      attachment.

      [[Mail-SSLsample]]
      SSL sample
      ^^^^^^^^^^

      In this sample, we want to poll our Google mail inbox for mails. To
      download mail onto a local mail client, Google mail requires you to
      enable and configure SSL. This is done by logging into your Google mail
      account and changing your settings to allow IMAP access. Google have
      extensive documentation on how to do this.

      [source,java]
      -------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").to("log:newmail");
      -------------------------------------------------------------------------------------

      The preceding route polls the Google mail inbox for new mails once every
      minute and logs the received messages to the `newmail` logger
      category. +
       Running the sample with `DEBUG` logging enabled, we can monitor the
      progress in the logs:

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------
      2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX
      2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages.
      2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      2008-05-08 06:32:12,187 INFO  newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
      ------------------------------------------------------------------------------------------------------------------------------------------------------------------

      [[Mail-Consumingmailswithattachmentsample]]
      Consuming mails with attachment sample
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this sample we poll a mailbox and store all attachments from the
      mails as files. First, we define a route to poll the mailbox. As this
      sample is based on google mail, it uses the same route as shown in the
      SSL sample:

      [source,java]
      ---------------------------------------------------------------------------------------
      from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD"
          + "&delete=false&unseen=true&consumer.delay=60000").process(new MyMailProcessor());
      ---------------------------------------------------------------------------------------

      Instead of logging the mail we use a processor where we can process the
      mail from java code:

      [source,java]
      ---------------------------------------------------------------------------------
          public void process(Exchange exchange) throws Exception {
              // the API is a bit clunky so we need to loop
              Map<String, DataHandler> attachments = exchange.getIn().getAttachments();
              if (attachments.size() > 0) {
                  for (String name : attachments.keySet()) {
                      DataHandler dh = attachments.get(name);
                      // get the file name
                      String filename = dh.getName();

                      // get the content and convert it to byte[]
                      byte[] data = exchange.getContext().getTypeConverter()
                                        .convertTo(byte[].class, dh.getInputStream());

                      // write the data to a file
                      FileOutputStream out = new FileOutputStream(filename);
                      out.write(data);
                      out.flush();
                      out.close();
                  }
              }
         }
      ---------------------------------------------------------------------------------

      As you can see the API to handle attachments is a bit clunky but it's
      there so you can get the `javax.activation.DataHandler` so you can
      handle the attachments using standard API.

      [[Mail-Howtosplitamailmessagewithattachments]]
      How to split a mail message with attachments
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      In this example we consume mail messages which may have a number of
      attachments. What we want to do is to use the
      link:splitter.html[Splitter] EIP per individual attachment, to process
      the attachments separately. For example if the mail message has 5
      attachments, we want the link:splitter.html[Splitter] to process five
      messages, each having a single attachment. To do this we need to provide
      a custom link:expression.html[Expression] to the
      link:splitter.html[Splitter] where we provide a List<Message> that
      contains the five messages with the single attachment.

      The code is provided out of the box in Camel 2.10 onwards in the
      `camel-mail` component. The code is in the class:
      `org.apache.camel.component.mail.SplitAttachmentsExpression`, which you
      can find the source code
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/SplitAttachmentsExpression.java[here]

      In the Camel route you then need to use this
      link:expression.html[Expression] in the route as shown below:

      If you use XML DSL then you need to declare a method call expression in
      the link:splitter.html[Splitter] as shown below

      [source,xml]
      ---------------------------------------------------------------------------------
      <split>
        <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/>
        <to uri="mock:split"/>
      </split>
      ---------------------------------------------------------------------------------

      ??

      From Camel 2.16 onwards you can also split the attachments as byte[] to
      be stored as the message body. This is done by creating the expression
      with boolean true

      [source,java]
      --------------------------------------------------------------------
      SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
      --------------------------------------------------------------------

      And then use the expression with the splitter eip.

      [[Mail-UsingcustomSearchTerm]]
      Using custom SearchTerm
      ^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can configure a `searchTerm` on the `MailEndpoint` which allows you
      to filter out unwanted mails.

      For example to filter mails to contain Camel in either Subject or Text
      you can do as follows:

      [source,xml]
      -------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------------

      Notice we use the `"searchTerm.subjectOrBody"` as parameter key to
      indicate that we want to search on mail subject or body, to contain the
      word "Camel". +
       The class `org.apache.camel.component.mail.SimpleSearchTerm` has a
      number of options you can configure:

      Or to get the new unseen emails going 24 hours back in time you can do.
      Notice the "now-24h" syntax. See the table below for more details.

      [source,xml]
      --------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      --------------------------------------------------------------------------------------------------

      You can have multiple searchTerm in the endpoint uri configuration. They
      would then be combined together using AND operator, eg so both
      conditions must match. For example to get the last unseen emails going
      back 24 hours which has Camel in the mail subject you can do:

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/>
        <to uri="bean:myBean"/>
      </route>
      ---------------------------------------------------------------------------------------------------------------------------

      The `SimpleSearchTerm` is designed to be easily configurable from a
      POJO, so you can also configure it using a <bean> style in XML

      [source,java]
      ---------------------------------------------------------------------------------
      <bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm">
        <property name="subject" value="Order"/>
        <property name="to" value="acme-order@acme.com"/>
        <property name="fromSentDate" value="now"/>
       </bean>
      ---------------------------------------------------------------------------------

      You can then refer to this bean, using #beanId in your Camel route as
      shown:

      [source,xml]
      -------------------------------------------------------------------------------------------
      <route>
        <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/>
        <to uri="bean:myBean"/>
      </route>
      -------------------------------------------------------------------------------------------

      In Java there is a builder class to build compound
      `SearchTerms` using the `org.apache.camel.component.mail.SearchTermBuilder`
      class. This allows you to build complex terms such as:

      [source,java]
      --------------------------------------------------------------
      // we just want the unseen mails which is not spam
      SearchTermBuilder builder = new SearchTermBuilder();

      builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
        // which was sent from either foo or bar
        .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
        // .. and we could continue building the terms

      SearchTerm term = builder.build();
      --------------------------------------------------------------

      [[Mail-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-snmp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: snmp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: snmp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: snmp
          spec:
            containers:
            - image: fabric8/connector-snmp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: snmp
        syntax: snmp:host:port
        title: SNMP
        description: The snmp component gives you the ability to poll SNMP capable devices or receiving traps.
        label: monitoring
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.snmp.SnmpComponent
        groupId: org.apache.camel
        artifactId: camel-snmp
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname of the SNMP enabled device
        port:
          kind: path
          group: consumer
          required: true
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Port number of the SNMP enabled device
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Sets update rate in seconds
        oids:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Defines which values you are interested in. Please have a look at
            the Wikipedia to get a better understanding. You may provide a single OID or
            a coma separated list of OIDs. Example: oids=1.3.6.1.2.1.1.3.01.3.6.1.2.1.25.3.2.1.5.11.3.6.1.2.1.25.3.5.1.1.11.3.6.1.2.1.43.5.1.1.11.1'
        protocol:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          enum:
          - tcp
          - udp
          deprecated: false
          secret: false
          defaultValue: udp
          description: Here you can select which protocol to use. You can use either udp or tcp.
        retries:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2"
          description: Defines how often a retry is made before canceling the request.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        snmpCommunity:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: public
          description: Sets the community octet string for the snmp request.
        snmpContextEngineId:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the context engine ID field of the scoped PDU.
        snmpContextName:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the context name field of this scoped PDU.
        snmpVersion:
          kind: parameter
          group: consumer
          type: string
          javaType: int
          enum:
          - "0"
          - "1"
          - "3"
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the snmp version for the request. The value 0 means SNMPv1 1 means SNMPv2c and the value 3 means SNMPv3
        timeout:
          kind: parameter
          group: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1500"
          description: Sets the timeout value for the request in millis.
        type:
          kind: parameter
          group: consumer
          type: string
          javaType: org.apache.camel.component.snmp.SnmpActionType
          enum:
          - TRAP
          - POLL
          - GET_NEXT
          deprecated: false
          secret: false
          description: Which operation to perform such as poll trap etc.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        authenticationPassphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The authentication passphrase. If not null authenticationProtocol must also be not null. RFC3414 11.2 requires passphrases to have a minimum length of 8 bytes. If the length of authenticationPassphrase is less than 8 bytes an IllegalArgumentException is thrown.
        authenticationProtocol:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          enum:
          - MD5
          - SHA1
          deprecated: false
          secret: false
          description: 'Authentication protocol to use if security level is set to enable
            authentication The possible values are: MD5 SHA1'
        privacyPassphrase:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The privacy passphrase. If not null privacyProtocol must also be not null. RFC3414 11.2 requires passphrases to have a minimum length of 8 bytes. If the length of authenticationPassphrase is less than 8 bytes an IllegalArgumentException is thrown.
        privacyProtocol:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The privacy protocol ID to be associated with this user. If set to null this user only supports unencrypted messages.
        securityLevel:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: int
          enum:
          - "1"
          - "2"
          - "3"
          deprecated: false
          secret: false
          defaultValue: "3"
          description: 'Sets the security level for this target. The supplied security level
            must be supported by the security model dependent information associated with
            the security name set for this target. The value 1 means: No authentication
            and no encryption. Anyone can create and read messages with this security level
            The value 2 means: Authentication and no encryption. Only the one with the right
            authentication key can create messages with this security level but anyone can
            read the contents of the message. The value 3 means: Authentication and encryption.
            Only the one with the right authentication key can create messages with this
            security level and only the one with the right encryption/decryption key can
            read the contents of the message.'
        securityName:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Sets the security name to be used with this target.
    documentation.adoc: "[[SNMP-SNMPComponent]]\nSNMP Component\n~~~~~~~~~~~~~~\n\n\
      *Available as of Camel 2.1*\n\nThe *snmp:* component gives you the ability to\
      \ poll SNMP capable devices\nor receiving traps\n\nMaven users will need to\
      \ add the following dependency to their `pom.xml`\nfor this component:\n\n[source,xml]\n\
      ------------------------------------------------------------\n<dependency>\n\
      \    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-snmp</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[SNMP-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n--------------------------------\n\
      snmp://hostname[:port][?Options]\n--------------------------------\n\nThe component\
      \ supports polling OID values from an SNMP enabled device\nand receiving traps.\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[SNMP-Producer]]\nSnmp Producer \n^^^^^^^^^^^^^\n\n*Available from 2.18 release*\n\
      \nIt can also be used to request information using GET method.\n\nThe response\
      \ body type is org.apache.camel.component.snmp.SnmpMessage\n\n[[SNMP-Options]]\n\
      Options\n^^^^^^^\n\n\n// component options: START\nThe SNMP component has no\
      \ options.\n// component options: END\n\n\n\n// endpoint options: START\nThe\
      \ SNMP component supports 36 endpoint options which are listed below:\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | consumer |  | String\
      \ | *Required* Hostname of the SNMP enabled device\n| port | consumer |  | Integer\
      \ | *Required* Port number of the SNMP enabled device\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| delay | consumer |\
      \ 60000 | long | Sets update rate in seconds\n| oids | consumer |  | String\
      \ | Defines which values you are interested in. Please have a look at the Wikipedia\
      \ to get a better understanding. You may provide a single OID or a coma separated\
      \ list of OIDs. Example: oids=1.3.6.1.2.1.1.3.01.3.6.1.2.1.25.3.2.1.5.11.3.6.1.2.1.25.3.5.1.1.11.3.6.1.2.1.43.5.1.1.11.1\n\
      | protocol | consumer | udp | String | Here you can select which protocol to\
      \ use. You can use either udp or tcp.\n| retries | consumer | 2 | int | Defines\
      \ how often a retry is made before canceling the request.\n| sendEmptyMessageWhenIdle\
      \ | consumer | false | boolean | If the polling consumer did not poll any files\
      \ you can enable this option to send an empty message (no body) instead.\n|\
      \ snmpCommunity | consumer | public | String | Sets the community octet string\
      \ for the snmp request.\n| snmpContextEngineId | consumer |  | String | Sets\
      \ the context engine ID field of the scoped PDU.\n| snmpContextName | consumer\
      \ |  | String | Sets the context name field of this scoped PDU.\n| snmpVersion\
      \ | consumer | 0 | int | Sets the snmp version for the request. The value 0\
      \ means SNMPv1 1 means SNMPv2c and the value 3 means SNMPv3\n| timeout | consumer\
      \ | 1500 | int | Sets the timeout value for the request in millis.\n| type |\
      \ consumer |  | SnmpActionType | Which operation to perform such as poll trap\
      \ etc.\n| exceptionHandler | consumer (advanced) |  | ExceptionHandler | To\
      \ let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| pollStrategy | consumer (advanced) |\
      \  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n| backoffErrorThreshold |\
      \ scheduler |  | int | The number of subsequent error polls (failed due some\
      \ error) that should happen before the backoffMultipler should kick-in.\n| backoffIdleThreshold\
      \ | scheduler |  | int | The number of subsequent idle polls that should happen\
      \ before the backoffMultipler should kick-in.\n| backoffMultiplier | scheduler\
      \ |  | int | To let the scheduled polling consumer backoff if there has been\
      \ a number of subsequent idles/errors in a row. The multiplier is then the number\
      \ of polls that will be skipped before the next actual attempt is happening\
      \ again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold\
      \ must also be configured.\n| greedy | scheduler | false | boolean | If greedy\
      \ is enabled then the ScheduledPollConsumer will run immediately again if the\
      \ previous run polled 1 or more messages.\n| initialDelay | scheduler | 1000\
      \ | long | Milliseconds before the first poll starts. You can also specify time\
      \ values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds)\
      \ and 1h (1 hour).\n| runLoggingLevel | scheduler | TRACE | LoggingLevel | The\
      \ consumer logs a start/complete log line when it polls. This option allows\
      \ you to configure the logging level for that.\n| scheduledExecutorService |\
      \ scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared\
      \ thread pool to use for the consumer. By default each consumer has its own\
      \ single threaded thread pool.\n| scheduler | scheduler | none | ScheduledPollConsumerScheduler\
      \ | To use a cron scheduler from either camel-spring or camel-quartz2 component\n\
      | schedulerProperties | scheduler |  | Map | To configure additional properties\
      \ when using a custom scheduler or any of the Quartz2 Spring based scheduler.\n\
      | startScheduler | scheduler | true | boolean | Whether the scheduler should\
      \ be auto started.\n| timeUnit | scheduler | MILLISECONDS | TimeUnit | Time\
      \ unit for initialDelay and delay options.\n| useFixedDelay | scheduler | true\
      \ | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService\
      \ in JDK for details.\n| authenticationPassphrase | security |  | String | The\
      \ authentication passphrase. If not null authenticationProtocol must also be\
      \ not null. RFC3414 11.2 requires passphrases to have a minimum length of 8\
      \ bytes. If the length of authenticationPassphrase is less than 8 bytes an IllegalArgumentException\
      \ is thrown.\n| authenticationProtocol | security |  | String | Authentication\
      \ protocol to use if security level is set to enable authentication The possible\
      \ values are: MD5 SHA1\n| privacyPassphrase | security |  | String | The privacy\
      \ passphrase. If not null privacyProtocol must also be not null. RFC3414 11.2\
      \ requires passphrases to have a minimum length of 8 bytes. If the length of\
      \ authenticationPassphrase is less than 8 bytes an IllegalArgumentException\
      \ is thrown.\n| privacyProtocol | security |  | String | The privacy protocol\
      \ ID to be associated with this user. If set to null this user only supports\
      \ unencrypted messages.\n| securityLevel | security | 3 | int | Sets the security\
      \ level for this target. The supplied security level must be supported by the\
      \ security model dependent information associated with the security name set\
      \ for this target. The value 1 means: No authentication and no encryption. Anyone\
      \ can create and read messages with this security level The value 2 means: Authentication\
      \ and no encryption. Only the one with the right authentication key can create\
      \ messages with this security level but anyone can read the contents of the\
      \ message. The value 3 means: Authentication and encryption. Only the one with\
      \ the right authentication key can create messages with this security level\
      \ and only the one with the right encryption/decryption key can read the contents\
      \ of the message.\n| securityName | security |  | String | Sets the security\
      \ name to be used with this target.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n[[SNMP-Theresultofapoll]]\nThe result\
      \ of a poll\n^^^^^^^^^^^^^^^^^^^^\n\nGiven the situation, that I poll for the\
      \ following OIDs:\n\n*OIDs*\n\n[source,java]\n-------------------------\n1.3.6.1.2.1.1.3.0\n\
      1.3.6.1.2.1.25.3.2.1.5.1\n1.3.6.1.2.1.25.3.5.1.1.1\n1.3.6.1.2.1.43.5.1.1.11.1\n\
      -------------------------\n\nThe result will be the following:\n\n*Result of\
      \ toString conversion*\n\n[source,xml]\n-----------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<snmp>\n  <entry>\n    <oid>1.3.6.1.2.1.1.3.0</oid>\n\
      \    <value>6 days, 21:14:28.00</value>\n  </entry>\n  <entry>\n    <oid>1.3.6.1.2.1.25.3.2.1.5.1</oid>\n\
      \    <value>2</value>\n  </entry>\n  <entry>\n    <oid>1.3.6.1.2.1.25.3.5.1.1.1</oid>\n\
      \    <value>3</value>\n  </entry>\n  <entry>\n    <oid>1.3.6.1.2.1.43.5.1.1.11.1</oid>\n\
      \    <value>6</value>\n  </entry>\n  <entry>\n    <oid>1.3.6.1.2.1.1.1.0</oid>\n\
      \    <value>My Very Special Printer Of Brand Unknown</value>\n  </entry>\n</snmp>\n\
      -----------------------------------------------------------\n\nAs you maybe\
      \ recognized there is one more result than\nrequested....1.3.6.1.2.1.1.1.0.\
      \ +\n This one is filled in by the device automatically in this special case.\n\
      So it may absolutely happen, that you receive more than you\nrequested...be\
      \ prepared.\n\n[[SNMP-Examples]]\nExamples\n^^^^^^^^\n\nPolling a remote device:\n\
      \n[source,java]\n---------------------------------------------------------------------\n\
      snmp:192.168.178.23:161?protocol=udp&type=POLL&oids=1.3.6.1.2.1.1.5.0\n---------------------------------------------------------------------\n\
      \nSetting up a trap receiver (*Note that no OID info is needed here!*):\n\n\
      [source,java]\n-----------------------------------------\nsnmp:127.0.0.1:162?protocol=udp&type=TRAP\n\
      -----------------------------------------\n\n*From Camel 2.10.0*, you can get\
      \ the community of SNMP TRAP with message\nheader 'securityName', +\n peer address\
      \ of the SNMP TRAP with message header 'peerAddress'.\n\nRouting example in\
      \ Java: (converts the SNMP PDU to XML String)\n\n[source,java]\n------------------------------------------------------------------------------\n\
      from(\"snmp:192.168.178.23:161?protocol=udp&type=POLL&oids=1.3.6.1.2.1.1.5.0\"\
      ).\nconvertBodyTo(String.class).\nto(\"activemq:snmp.states\");\n------------------------------------------------------------------------------\n\
      \n[[SNMP-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-solr
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: solr
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: solr
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: solr
          spec:
            containers:
            - image: fabric8/connector-solr:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: solr
        alternativeSchemes: solr,solrs,solrCloud
        syntax: solr:url
        title: Solr
        description: The solr component allows you to interface with an Apache Lucene Solr server.
        label: monitoring,search
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.solr.SolrComponent
        groupId: org.apache.camel
        artifactId: camel-solr
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname and port for the solr server
        allowCompression:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Server side must support gzip or deflate for this to have any effect
        connectionTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: connectionTimeout on the underlying HttpConnectionManager
        defaultMaxConnectionsPerHost:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxConnectionsPerHost on the underlying HttpConnectionManager
        followRedirects:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: indicates whether redirects are used to get to the Solr server
        maxRetries:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of retries to attempt in the event of transient errors
        maxTotalConnections:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxTotalConnection on the underlying HttpConnectionManager
        requestHandler:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the request handler to be used
        soTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
        streamingQueueSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Set the queue size for the StreamingUpdateSolrServer
        streamingThreadCount:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2"
          description: Set the number of threads for the StreamingUpdateSolrServer
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        collection:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the collection name which the solrCloud server could use
        zkHost:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
    documentation.adoc: |+
      [[Solr-SolrComponent]]
      Solr Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.9*

      The Solr component allows you to interface with an
      http://lucene.apache.org/solr/[Apache Lucene Solr] server (based on
      SolrJ 3.5.0).

      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-solr</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Solr-URIformat]]
      URI format
      ^^^^^^^^^^

      *NOTE:* solrs and solrCloud are new added since *Camel 2.14*.

      [source,java]
      --------------------------------------
      solr://host[:port]/solr?[options]
      solrs://host[:port]/solr?[options]
      solrCloud://host[:port]/solr?[options]
      --------------------------------------

      [[Solr-Options]]
      Solr Options
      ^^^^^^^^^^^^


      // component options: START
      The Solr component has no options.
      // component options: END



      // endpoint options: START
      The Solr component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | producer |  | String | *Required* Hostname and port for the solr server
      | allowCompression | producer |  | Boolean | Server side must support gzip or deflate for this to have any effect
      | connectionTimeout | producer |  | Integer | connectionTimeout on the underlying HttpConnectionManager
      | defaultMaxConnectionsPerHost | producer |  | Integer | maxConnectionsPerHost on the underlying HttpConnectionManager
      | followRedirects | producer |  | Boolean | indicates whether redirects are used to get to the Solr server
      | maxRetries | producer |  | Integer | Maximum number of retries to attempt in the event of transient errors
      | maxTotalConnections | producer |  | Integer | maxTotalConnection on the underlying HttpConnectionManager
      | requestHandler | producer |  | String | Set the request handler to be used
      | soTimeout | producer |  | Integer | Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
      | streamingQueueSize | producer | 10 | int | Set the queue size for the StreamingUpdateSolrServer
      | streamingThreadCount | producer | 2 | int | Set the number of threads for the StreamingUpdateSolrServer
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | collection | solrCloud |  | String | Set the collection name which the solrCloud server could use
      | zkHost | solrCloud |  | String | Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Solr-MessageOperations]]
      Message Operations
      ^^^^^^^^^^^^^^^^^^

      The following Solr operations are currently supported. Simply set an
      exchange header with a key of "SolrOperation" and a value set to one of
      the following. Some operations also require the message body to be set.

      * the INSERT operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.html[CommonsHttpSolrServer]
      * the INSERT_STREAMING operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.html[StreamingUpdateSolrServer]
      (*Camel 2.9.2*)

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Operation |Message body |Description

      |INSERT/INSERT_STREAMING |n/a |adds an index using message headers (must be prefixed with "SolrField.")

      |INSERT/INSERT_STREAMING |File |adds an index using the given File (using ContentStreamUpdateRequest)

      |INSERT/INSERT_STREAMING |SolrInputDocument |*Camel 2.9.2* updates index based on the given SolrInputDocument

      |INSERT/INSERT_STREAMING |String XML |*Camel 2.9.2* updates index based on the given XML (must follow
      SolrInputDocument format)

      |ADD_BEAN |bean instance |adds an index based on values in an
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |ADD_BEANS |collection<bean> |*Camel 2.15* adds index based on a collection of
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |DELETE_BY_ID |index id to delete |delete a record by ID

      |DELETE_BY_QUERY |query string |delete a record by a query

      |COMMIT |n/a |performs a commit on any pending index changes

      |ROLLBACK |n/a |performs a rollback on any pending index changes

      |OPTIMIZE |n/a |performs a commit on any pending index changes and then runs the
      optimize command
      |=======================================================================

      [[Solr-Example]]
      Example
      ^^^^^^^

      Below is a simple INSERT, DELETE and COMMIT example

      [source,java]
      ---------------------------------------------------------------------------------------
      from("direct:insert")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_INSERT))
          .setHeader(SolrConstants.FIELD + "id", body())
          .to("solr://localhost:8983/solr");

      from("direct:delete")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_DELETE_BY_ID))
          .to("solr://localhost:8983/solr");

      from("direct:commit")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT))
          .to("solr://localhost:8983/solr");
      ---------------------------------------------------------------------------------------

      [source,xml]
      ------------------------------------------
      <route>
          <from uri="direct:insert"/>
          <setHeader headerName="SolrOperation">
              <constant>INSERT</constant>
          </setHeader>
          <setHeader headerName="SolrField.id">
              <simple>${body}</simple>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:delete"/>
          <setHeader headerName="SolrOperation">
              <constant>DELETE_BY_ID</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:commit"/>
          <setHeader headerName="SolrOperation">
              <constant>COMMIT</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      ------------------------------------------

      A client would simply need to pass a body message to the insert or
      delete routes and then call the commit route.

      [source,java]
      -----------------------------------------------
          template.sendBody("direct:insert", "1234");
          template.sendBody("direct:commit", null);
          template.sendBody("direct:delete", "1234");
          template.sendBody("direct:commit", null);
      -----------------------------------------------

      [[Solr-QueryingSolr]]
      Querying Solr
      ^^^^^^^^^^^^^

      Currently, this component doesn't support querying data natively (may be
      added later). For now, you can query Solr using link:http.html[HTTP] as
      follows:

      [source,java]
      --------------------------------------------------------------------------------
      //define the route to perform a basic query
      from("direct:query")
          .recipientList(simple("http://localhost:8983/solr/select/?q=${body}"))
          .convertBodyTo(String.class);
      ...
      //query for an id of '1234' (url encoded)
      String responseXml = (String) template.requestBody("direct:query", "id%3A1234");
      --------------------------------------------------------------------------------

      For more information, see these resources...

      http://lucene.apache.org/solr/tutorial.html#Querying+Data[Solr Query
      Tutorial]

      http://wiki.apache.org/solr/SolrQuerySyntax[Solr Query Syntax]

      [[Solr-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-solrcloud
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: solrcloud
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: solrcloud
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: solrcloud
          spec:
            containers:
            - image: fabric8/connector-solrcloud:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: solrCloud
        alternativeSchemes: solr,solrs,solrCloud
        syntax: solrCloud:url
        title: Solr
        description: The solr component allows you to interface with an Apache Lucene Solr server.
        label: monitoring,search
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.solr.SolrComponent
        groupId: org.apache.camel
        artifactId: camel-solr
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname and port for the solr server
        allowCompression:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Server side must support gzip or deflate for this to have any effect
        connectionTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: connectionTimeout on the underlying HttpConnectionManager
        defaultMaxConnectionsPerHost:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxConnectionsPerHost on the underlying HttpConnectionManager
        followRedirects:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: indicates whether redirects are used to get to the Solr server
        maxRetries:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of retries to attempt in the event of transient errors
        maxTotalConnections:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxTotalConnection on the underlying HttpConnectionManager
        requestHandler:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the request handler to be used
        soTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
        streamingQueueSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Set the queue size for the StreamingUpdateSolrServer
        streamingThreadCount:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2"
          description: Set the number of threads for the StreamingUpdateSolrServer
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        collection:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the collection name which the solrCloud server could use
        zkHost:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
    documentation.adoc: |+
      [[Solr-SolrComponent]]
      Solr Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.9*

      The Solr component allows you to interface with an
      http://lucene.apache.org/solr/[Apache Lucene Solr] server (based on
      SolrJ 3.5.0).

      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-solr</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Solr-URIformat]]
      URI format
      ^^^^^^^^^^

      *NOTE:* solrs and solrCloud are new added since *Camel 2.14*.

      [source,java]
      --------------------------------------
      solr://host[:port]/solr?[options]
      solrs://host[:port]/solr?[options]
      solrCloud://host[:port]/solr?[options]
      --------------------------------------

      [[Solr-Options]]
      Solr Options
      ^^^^^^^^^^^^


      // component options: START
      The Solr component has no options.
      // component options: END



      // endpoint options: START
      The Solr component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | producer |  | String | *Required* Hostname and port for the solr server
      | allowCompression | producer |  | Boolean | Server side must support gzip or deflate for this to have any effect
      | connectionTimeout | producer |  | Integer | connectionTimeout on the underlying HttpConnectionManager
      | defaultMaxConnectionsPerHost | producer |  | Integer | maxConnectionsPerHost on the underlying HttpConnectionManager
      | followRedirects | producer |  | Boolean | indicates whether redirects are used to get to the Solr server
      | maxRetries | producer |  | Integer | Maximum number of retries to attempt in the event of transient errors
      | maxTotalConnections | producer |  | Integer | maxTotalConnection on the underlying HttpConnectionManager
      | requestHandler | producer |  | String | Set the request handler to be used
      | soTimeout | producer |  | Integer | Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
      | streamingQueueSize | producer | 10 | int | Set the queue size for the StreamingUpdateSolrServer
      | streamingThreadCount | producer | 2 | int | Set the number of threads for the StreamingUpdateSolrServer
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | collection | solrCloud |  | String | Set the collection name which the solrCloud server could use
      | zkHost | solrCloud |  | String | Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Solr-MessageOperations]]
      Message Operations
      ^^^^^^^^^^^^^^^^^^

      The following Solr operations are currently supported. Simply set an
      exchange header with a key of "SolrOperation" and a value set to one of
      the following. Some operations also require the message body to be set.

      * the INSERT operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.html[CommonsHttpSolrServer]
      * the INSERT_STREAMING operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.html[StreamingUpdateSolrServer]
      (*Camel 2.9.2*)

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Operation |Message body |Description

      |INSERT/INSERT_STREAMING |n/a |adds an index using message headers (must be prefixed with "SolrField.")

      |INSERT/INSERT_STREAMING |File |adds an index using the given File (using ContentStreamUpdateRequest)

      |INSERT/INSERT_STREAMING |SolrInputDocument |*Camel 2.9.2* updates index based on the given SolrInputDocument

      |INSERT/INSERT_STREAMING |String XML |*Camel 2.9.2* updates index based on the given XML (must follow
      SolrInputDocument format)

      |ADD_BEAN |bean instance |adds an index based on values in an
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |ADD_BEANS |collection<bean> |*Camel 2.15* adds index based on a collection of
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |DELETE_BY_ID |index id to delete |delete a record by ID

      |DELETE_BY_QUERY |query string |delete a record by a query

      |COMMIT |n/a |performs a commit on any pending index changes

      |ROLLBACK |n/a |performs a rollback on any pending index changes

      |OPTIMIZE |n/a |performs a commit on any pending index changes and then runs the
      optimize command
      |=======================================================================

      [[Solr-Example]]
      Example
      ^^^^^^^

      Below is a simple INSERT, DELETE and COMMIT example

      [source,java]
      ---------------------------------------------------------------------------------------
      from("direct:insert")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_INSERT))
          .setHeader(SolrConstants.FIELD + "id", body())
          .to("solr://localhost:8983/solr");

      from("direct:delete")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_DELETE_BY_ID))
          .to("solr://localhost:8983/solr");

      from("direct:commit")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT))
          .to("solr://localhost:8983/solr");
      ---------------------------------------------------------------------------------------

      [source,xml]
      ------------------------------------------
      <route>
          <from uri="direct:insert"/>
          <setHeader headerName="SolrOperation">
              <constant>INSERT</constant>
          </setHeader>
          <setHeader headerName="SolrField.id">
              <simple>${body}</simple>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:delete"/>
          <setHeader headerName="SolrOperation">
              <constant>DELETE_BY_ID</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:commit"/>
          <setHeader headerName="SolrOperation">
              <constant>COMMIT</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      ------------------------------------------

      A client would simply need to pass a body message to the insert or
      delete routes and then call the commit route.

      [source,java]
      -----------------------------------------------
          template.sendBody("direct:insert", "1234");
          template.sendBody("direct:commit", null);
          template.sendBody("direct:delete", "1234");
          template.sendBody("direct:commit", null);
      -----------------------------------------------

      [[Solr-QueryingSolr]]
      Querying Solr
      ^^^^^^^^^^^^^

      Currently, this component doesn't support querying data natively (may be
      added later). For now, you can query Solr using link:http.html[HTTP] as
      follows:

      [source,java]
      --------------------------------------------------------------------------------
      //define the route to perform a basic query
      from("direct:query")
          .recipientList(simple("http://localhost:8983/solr/select/?q=${body}"))
          .convertBodyTo(String.class);
      ...
      //query for an id of '1234' (url encoded)
      String responseXml = (String) template.requestBody("direct:query", "id%3A1234");
      --------------------------------------------------------------------------------

      For more information, see these resources...

      http://lucene.apache.org/solr/tutorial.html#Querying+Data[Solr Query
      Tutorial]

      http://wiki.apache.org/solr/SolrQuerySyntax[Solr Query Syntax]

      [[Solr-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-solrs
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: solrs
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: solrs
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: solrs
          spec:
            containers:
            - image: fabric8/connector-solrs:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: solrs
        alternativeSchemes: solr,solrs,solrCloud
        syntax: solrs:url
        title: Solr
        description: The solr component allows you to interface with an Apache Lucene Solr server.
        label: monitoring,search
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.solr.SolrComponent
        groupId: org.apache.camel
        artifactId: camel-solr
        version: 2.18.1
      componentProperties: {}
      properties:
        url:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname and port for the solr server
        allowCompression:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Server side must support gzip or deflate for this to have any effect
        connectionTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: connectionTimeout on the underlying HttpConnectionManager
        defaultMaxConnectionsPerHost:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxConnectionsPerHost on the underlying HttpConnectionManager
        followRedirects:
          kind: parameter
          group: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: indicates whether redirects are used to get to the Solr server
        maxRetries:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Maximum number of retries to attempt in the event of transient errors
        maxTotalConnections:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: maxTotalConnection on the underlying HttpConnectionManager
        requestHandler:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the request handler to be used
        soTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
        streamingQueueSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: Set the queue size for the StreamingUpdateSolrServer
        streamingThreadCount:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2"
          description: Set the number of threads for the StreamingUpdateSolrServer
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        collection:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the collection name which the solrCloud server could use
        zkHost:
          kind: parameter
          group: solrCloud
          label: solrCloud
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
    documentation.adoc: |+
      [[Solr-SolrComponent]]
      Solr Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.9*

      The Solr component allows you to interface with an
      http://lucene.apache.org/solr/[Apache Lucene Solr] server (based on
      SolrJ 3.5.0).

      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-solr</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Solr-URIformat]]
      URI format
      ^^^^^^^^^^

      *NOTE:* solrs and solrCloud are new added since *Camel 2.14*.

      [source,java]
      --------------------------------------
      solr://host[:port]/solr?[options]
      solrs://host[:port]/solr?[options]
      solrCloud://host[:port]/solr?[options]
      --------------------------------------

      [[Solr-Options]]
      Solr Options
      ^^^^^^^^^^^^


      // component options: START
      The Solr component has no options.
      // component options: END



      // endpoint options: START
      The Solr component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | url | producer |  | String | *Required* Hostname and port for the solr server
      | allowCompression | producer |  | Boolean | Server side must support gzip or deflate for this to have any effect
      | connectionTimeout | producer |  | Integer | connectionTimeout on the underlying HttpConnectionManager
      | defaultMaxConnectionsPerHost | producer |  | Integer | maxConnectionsPerHost on the underlying HttpConnectionManager
      | followRedirects | producer |  | Boolean | indicates whether redirects are used to get to the Solr server
      | maxRetries | producer |  | Integer | Maximum number of retries to attempt in the event of transient errors
      | maxTotalConnections | producer |  | Integer | maxTotalConnection on the underlying HttpConnectionManager
      | requestHandler | producer |  | String | Set the request handler to be used
      | soTimeout | producer |  | Integer | Read timeout on the underlying HttpConnectionManager. This is desirable for queries but probably not for indexing
      | streamingQueueSize | producer | 10 | int | Set the queue size for the StreamingUpdateSolrServer
      | streamingThreadCount | producer | 2 | int | Set the number of threads for the StreamingUpdateSolrServer
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | collection | solrCloud |  | String | Set the collection name which the solrCloud server could use
      | zkHost | solrCloud |  | String | Set the ZooKeeper host information which the solrCloud could use such as zkhost=localhost:8123.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Solr-MessageOperations]]
      Message Operations
      ^^^^^^^^^^^^^^^^^^

      The following Solr operations are currently supported. Simply set an
      exchange header with a key of "SolrOperation" and a value set to one of
      the following. Some operations also require the message body to be set.

      * the INSERT operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.html[CommonsHttpSolrServer]
      * the INSERT_STREAMING operations use the
      http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/impl/StreamingUpdateSolrServer.html[StreamingUpdateSolrServer]
      (*Camel 2.9.2*)

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Operation |Message body |Description

      |INSERT/INSERT_STREAMING |n/a |adds an index using message headers (must be prefixed with "SolrField.")

      |INSERT/INSERT_STREAMING |File |adds an index using the given File (using ContentStreamUpdateRequest)

      |INSERT/INSERT_STREAMING |SolrInputDocument |*Camel 2.9.2* updates index based on the given SolrInputDocument

      |INSERT/INSERT_STREAMING |String XML |*Camel 2.9.2* updates index based on the given XML (must follow
      SolrInputDocument format)

      |ADD_BEAN |bean instance |adds an index based on values in an
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |ADD_BEANS |collection<bean> |*Camel 2.15* adds index based on a collection of
      http://wiki.apache.org/solr/Solrj#Directly_adding_POJOs_to_Solr[annotated
      bean]

      |DELETE_BY_ID |index id to delete |delete a record by ID

      |DELETE_BY_QUERY |query string |delete a record by a query

      |COMMIT |n/a |performs a commit on any pending index changes

      |ROLLBACK |n/a |performs a rollback on any pending index changes

      |OPTIMIZE |n/a |performs a commit on any pending index changes and then runs the
      optimize command
      |=======================================================================

      [[Solr-Example]]
      Example
      ^^^^^^^

      Below is a simple INSERT, DELETE and COMMIT example

      [source,java]
      ---------------------------------------------------------------------------------------
      from("direct:insert")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_INSERT))
          .setHeader(SolrConstants.FIELD + "id", body())
          .to("solr://localhost:8983/solr");

      from("direct:delete")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_DELETE_BY_ID))
          .to("solr://localhost:8983/solr");

      from("direct:commit")
          .setHeader(SolrConstants.OPERATION, constant(SolrConstants.OPERATION_COMMIT))
          .to("solr://localhost:8983/solr");
      ---------------------------------------------------------------------------------------

      [source,xml]
      ------------------------------------------
      <route>
          <from uri="direct:insert"/>
          <setHeader headerName="SolrOperation">
              <constant>INSERT</constant>
          </setHeader>
          <setHeader headerName="SolrField.id">
              <simple>${body}</simple>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:delete"/>
          <setHeader headerName="SolrOperation">
              <constant>DELETE_BY_ID</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      <route>
          <from uri="direct:commit"/>
          <setHeader headerName="SolrOperation">
              <constant>COMMIT</constant>
          </setHeader>
          <to uri="solr://localhost:8983/solr"/>
      </route>
      ------------------------------------------

      A client would simply need to pass a body message to the insert or
      delete routes and then call the commit route.

      [source,java]
      -----------------------------------------------
          template.sendBody("direct:insert", "1234");
          template.sendBody("direct:commit", null);
          template.sendBody("direct:delete", "1234");
          template.sendBody("direct:commit", null);
      -----------------------------------------------

      [[Solr-QueryingSolr]]
      Querying Solr
      ^^^^^^^^^^^^^

      Currently, this component doesn't support querying data natively (may be
      added later). For now, you can query Solr using link:http.html[HTTP] as
      follows:

      [source,java]
      --------------------------------------------------------------------------------
      //define the route to perform a basic query
      from("direct:query")
          .recipientList(simple("http://localhost:8983/solr/select/?q=${body}"))
          .convertBodyTo(String.class);
      ...
      //query for an id of '1234' (url encoded)
      String responseXml = (String) template.requestBody("direct:query", "id%3A1234");
      --------------------------------------------------------------------------------

      For more information, see these resources...

      http://lucene.apache.org/solr/tutorial.html#Querying+Data[Solr Query
      Tutorial]

      http://wiki.apache.org/solr/SolrQuerySyntax[Solr Query Syntax]

      [[Solr-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spark
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spark
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spark
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spark
          spec:
            containers:
            - image: fabric8/connector-spark:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spark
        syntax: spark:endpointType
        title: Apache Spark
        description: The spark component can be used to send RDD or DataFrame jobs to Apache Spark cluster.
        label: bigdata,iot
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.spark.SparkComponent
        groupId: org.apache.camel
        artifactId: camel-spark
        version: 2.18.1
      componentProperties:
        rdd:
          kind: property
          type: object
          javaType: org.apache.spark.api.java.JavaRDDLike
          deprecated: false
          secret: false
          description: RDD to compute against.
        rddCallback:
          kind: property
          type: object
          javaType: org.apache.camel.component.spark.RddCallback
          deprecated: false
          secret: false
          description: Function performing action against an RDD.
      properties:
        endpointType:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.spark.EndpointType
          enum:
          - rdd
          - dataframe
          - hive
          deprecated: false
          secret: false
          description: Type of the endpoint (rdd dataframe hive).
        collect:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Indicates if results should be collected or counted.
        dataFrame:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.spark.sql.DataFrame
          deprecated: false
          secret: false
          description: DataFrame to compute against.
        dataFrameCallback:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.spark.DataFrameCallback
          deprecated: false
          secret: false
          description: Function performing action against an DataFrame.
        rdd:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.spark.api.java.JavaRDDLike
          deprecated: false
          secret: false
          description: RDD to compute against.
        rddCallback:
          kind: parameter
          group: producer
          type: object
          javaType: org.apache.camel.component.spark.RddCallback
          deprecated: false
          secret: false
          description: Function performing action against an RDD.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[ApacheSpark-ApacheSparkcomponent]]
      Apache Spark component
      ~~~~~~~~~~~~~~~~~~~~~~

      INFO: Apache Spark component is available starting from Camel *2.17*.

      This documentation page covers the http://spark.apache.org/[Apache
      Spark] component for the Apache Camel. The main purpose of the Spark
      integration with Camel is to provide a bridge between Camel connectors
      and Spark tasks. In particular Camel connector provides a way to route
      message from various transports, dynamically choose a task to execute,
      use incoming message as input data for that task and finally deliver the
      results of the execution back to the Camel pipeline.

      [[ApacheSpark-Supportedarchitecturalstyles]]
      Supported architectural styles
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Spark component can be used as a driver application deployed into an
      application server (or executed as a fat jar).

      image:apache-spark.data/camel_spark_driver.png[image] +

      Spark component can also be submitted as a job directly into the Spark
      cluster.

      image:apache-spark.data/camel_spark_cluster.png[image] +

      While Spark component is primary designed to work as a _long running
      job_??serving as an bridge between Spark cluster and the other endpoints,
      you can also use it as a _fire-once_ short job. ????

      [[ApacheSpark-RunningSparkinOSGiservers]]
      Running Spark in OSGi servers
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Currently the Spark component doesn't support execution in the OSGi
      container. Spark has been designed to be executed as a fat jar, usually
      submitted as a job to a cluster. For those reasons running Spark in an
      OSGi server is at least challenging and is not support by Camel as well.

      [[ApacheSpark-URIformat]]
      URI format
      ^^^^^^^^^^

      Currently the Spark component supports only producers - it it intended
      to invoke a Spark job and return results. You can call RDD, data frame
      or Hive SQL job.

      *Spark URI format*

      [source,java]
      --------------------------
      spark:{rdd|dataframe|hive}
      --------------------------

      [[ApacheSpark-options]]
      Spark options
      +++++++++++++



      // component options: START
      The Apache Spark component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | rdd | JavaRDDLike | RDD to compute against.
      | rddCallback | RddCallback | Function performing action against an RDD.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Apache Spark component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | endpointType | producer |  | EndpointType | *Required* Type of the endpoint (rdd dataframe hive).
      | collect | producer | true | boolean | Indicates if results should be collected or counted.
      | dataFrame | producer |  | DataFrame | DataFrame to compute against.
      | dataFrameCallback | producer |  | DataFrameCallback | Function performing action against an DataFrame.
      | rdd | producer |  | JavaRDDLike | RDD to compute against.
      | rddCallback | producer |  | RddCallback | Function performing action against an RDD.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END

      ??
      [[ApacheSpark-RDDjobs]]
      RDD jobs??
      ^^^^^^^^^

      To invoke an RDD job, use the following URI:

      *Spark RDD producer*

      [source,java]
      ------------------------------------------------------
      spark:rdd?rdd=#testFileRdd&rddCallback=#transformation
      ------------------------------------------------------

      ??Where `rdd` option refers to the name of an RDD instance (subclass of
      `org.apache.spark.api.java.JavaRDDLike`) from a Camel registry, while
      `rddCallback` refers to the implementation
      of??`org.apache.camel.component.spark.RddCallback` interface (also from a
      registry). RDD callback provides a single method used to apply incoming
      messages against the given RDD. Results of callback computations are
      saved as a body to an exchange.

      *Spark RDD callback*

      [source,java]
      -------------------------------------------------
      public interface RddCallback<T> {
          T onRdd(JavaRDDLike rdd, Object... payloads);
      }
      -------------------------------------------------

      The following snippet demonstrates how to send message as an input to
      the job and return results:

      *Calling spark job*

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------
      String pattern = "job input";
      long linesCount = producerTemplate.requestBody("spark:rdd?rdd=#myRdd&rddCallback=#countLinesContaining", pattern, long.class);
      ------------------------------------------------------------------------------------------------------------------------------

      The RDD callback for the snippet above registered as Spring bean could
      look as follows:

      *Spark RDD callback*

      [source,java]
      ------------------------------------------------------------------------
      @Bean
      RddCallback<Long> countLinesContaining() {
          return new RddCallback<Long>() {
              Long onRdd(JavaRDDLike rdd, Object... payloads) {
                  String pattern = (String) payloads[0];
                  return rdd.filter({line -> line.contains(pattern)}).count();
              }
          }
      }
      ------------------------------------------------------------------------

      The RDD definition in Spring could looks as follows:

      *Spark RDD definition*

      [source,java]
      --------------------------------------------------
      @Bean
      JavaRDDLike myRdd(JavaSparkContext sparkContext) {
        return sparkContext.textFile("testrdd.txt");
      }
      --------------------------------------------------

      [[ApacheSpark-VoidRDDcallbacks]]
      Void RDD callbacks
      ++++++++++++++++++

      If your RDD callback doesn't return any value back to a Camel pipeline,
      you can either return `null` value or use??`VoidRddCallback` base class:

      *Spark RDD definition*

      [source,java]
      ------------------------------------------------------------------
      @Bean
      RddCallback<Void> rddCallback() {
        return new VoidRddCallback() {
              @Override
              public void doOnRdd(JavaRDDLike rdd, Object... payloads) {
                  rdd.saveAsTextFile(output.getAbsolutePath());
              }
          };
      }
      ------------------------------------------------------------------

      [[ApacheSpark-ConvertingRDDcallbacks]]
      Converting RDD callbacks
      ++++++++++++++++++++++++

      If you know what type of the input data will be sent to the RDD
      callback, you can use??`ConvertingRddCallback` and let Camel to
      automatically convert incoming messages before inserting those into the
      callback:

      *Spark RDD definition*

      [source,java]
      ---------------------------------------------------------------------------
      @Bean
      RddCallback<Long> rddCallback(CamelContext context) {
        return new ConvertingRddCallback<Long>(context, int.class, int.class) {
                  @Override
                  public Long doOnRdd(JavaRDDLike rdd, Object... payloads) {
                      return rdd.count() * (int) payloads[0] * (int) payloads[1];
                  }
              };
          };
      }
      ---------------------------------------------------------------------------

      [[ApacheSpark-AnnotatedRDDcallbacks]]
      Annotated RDD callbacks
      +++++++++++++++++++++++

      Probably the easiest way to work with the RDD callbacks is to provide
      class with method marked with??`@RddCallback` annotation:

      *Annotated RDD callback definition*

      [source,java]
      -----------------------------------------------------------------------------------------------------
      import static org.apache.camel.component.spark.annotations.AnnotatedRddCallback.annotatedRddCallback;
      ??
      @Bean
      RddCallback<Long> rddCallback() {
          return annotatedRddCallback(new MyTransformation());
      }
      ??
      ...
      ??
      import org.apache.camel.component.spark.annotation.RddCallback;
      ??
      public class MyTransformation {
      ??
          @RddCallback
          long countLines(JavaRDD<String> textFile, int first, int second) {
              return textFile.count() * first * second;
          }
      ??
      }
      -----------------------------------------------------------------------------------------------------

      If you will pass CamelContext to the annotated RDD callback factory
      method, the created callback will be able to convert incoming payloads
      to match the parameters of the annotated method:

      *Body conversions for annotated RDD callbacks*

      [source,java]
      ------------------------------------------------------------------------------------------------------------------------------
      import static org.apache.camel.component.spark.annotations.AnnotatedRddCallback.annotatedRddCallback;
      ??
      @Bean
      RddCallback<Long> rddCallback(CamelContext camelContext) {
          return annotatedRddCallback(new MyTransformation(), camelContext);
      }
      ??
      ...

      ??
      import org.apache.camel.component.spark.annotation.RddCallback;
      ??
      public class MyTransformation {
      ??
          @RddCallback
          long countLines(JavaRDD<String> textFile, int first, int second) {
              return textFile.count() * first * second;
          }
      ??
      }
      ??
      ...
      ??
      // Convert String "10" to integer
      long result = producerTemplate.requestBody("spark:rdd?rdd=#rdd&rddCallback=#rddCallback" Arrays.asList(10, "10"), long.class);
      ------------------------------------------------------------------------------------------------------------------------------

      ??

      [[ApacheSpark-DataFramejobs]]
      DataFrame jobs
      ^^^^^^^^^^^^^^

      Instead of working with RDDs Spark component can work with DataFrames as
      well.??

      To invoke an DataFrame job, use the following URI:

      *Spark RDD producer*

      [source,java]
      --------------------------------------------------------------------------
      spark:dataframe?dataFrame=#testDataFrame&dataFrameCallback=#transformation
      --------------------------------------------------------------------------

      ??Where??`dataFrame`??option refers to the name of an DataFrame instance
      (`instance of of??org.apache.spark.sql.DataFrame`) from a Camel registry,
      while??`dataFrameCallback`??refers to the implementation
      of??`org.apache.camel.component.spark.DataFrameCallback`??interface (also
      from a registry). DataFrame callback provides a single method used to
      apply incoming messages against the given DataFrame. Results of callback
      computations are saved as a body to an exchange.

      *Spark RDD callback*

      [source,java]
      -----------------------------------------------------------
      public interface DataFrameCallback<T> {
          T onDataFrame(DataFrame dataFrame, Object... payloads);
      }
      -----------------------------------------------------------

      The following snippet demonstrates how to send message as an input to a
      job and return results:

      *Calling spark job*

      [source,java]
      -----------------------------------------------------------------------------------------------------------------------------------------
      String model = "Micra";
      long linesCount = producerTemplate.requestBody("spark:dataFrame?dataFrame=#cars&dataFrameCallback=#findCarWithModel", model, long.class);
      -----------------------------------------------------------------------------------------------------------------------------------------

      The DataFrame callback for the snippet above registered as Spring bean
      could look as follows:

      *Spark RDD callback*

      [source,java]
      -------------------------------------------------------------------------------------
      @Bean
      RddCallback<Long> findCarWithModel() {
          return new DataFrameCallback<Long>() {
              @Override
              public Long onDataFrame(DataFrame dataFrame, Object... payloads) {
                  String model = (String) payloads[0];
                  return dataFrame.where(dataFrame.col("model").eqNullSafe(model)).count();
              }
          };
      }
      -------------------------------------------------------------------------------------

      The DataFrame definition in Spring could looks as follows:

      *Spark RDD definition*

      [source,java]
      ------------------------------------------------------------------------
      @Bean
      DataFrame cars(HiveContext hiveContext) {
          DataFrame jsonCars = hiveContext.read().json("/var/data/cars.json");
          jsonCars.registerTempTable("cars");
          return jsonCars;
      }
      ------------------------------------------------------------------------

      [[ApacheSpark-Hivejobs]]
      Hive jobs
      ^^^^^^^^^

      ??Instead of working with RDDs or DataFrame Spark component can also
      receive Hive SQL queries as payloads.??To send Hive query to Spark
      component, use the following URI:

      *Spark RDD producer*

      [source,java]
      ----------
      spark:hive
      ----------

      The following snippet demonstrates how to send message as an input to a
      job and return results:

      *Calling spark job*

      [source,java]
      ----------------------------------------------------------------------------------------------------
      long carsCount = template.requestBody("spark:hive?collect=false", "SELECT * FROM cars", Long.class);
      List<Row> cars = template.requestBody("spark:hive", "SELECT * FROM cars", List.class);
      ----------------------------------------------------------------------------------------------------

      The table we want to execute query against should be registered in a
      HiveContext before we query it. For example in Spring such registration
      could look as follows:

      *Spark RDD definition*

      [source,java]
      ------------------------------------------------------------------------
      @Bean
      DataFrame cars(HiveContext hiveContext) {
          DataFrame jsonCars = hiveContext.read().json("/var/data/cars.json");
          jsonCars.registerTempTable("cars");
          return jsonCars;
      }
      ------------------------------------------------------------------------

      [[ApacheSpark-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spark-rest
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spark-rest
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spark-rest
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spark-rest
          spec:
            containers:
            - image: fabric8/connector-spark-rest:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spark-rest
        syntax: spark-rest:verb:path
        title: Spark Rest
        description: The spark-rest component is used for hosting REST services which has been defined using Camel rest-dsl.
        label: rest
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.sparkrest.SparkComponent
        groupId: org.apache.camel
        artifactId: camel-spark-rest
        version: 2.18.1
      componentProperties:
        port:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number. Will by default use 4567
        ipAddress:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Set the IP address that Spark should listen on. If not called the default address is '0.0.0.0'.
        minThreads:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Minimum number of threads in Spark thread-pool (shared globally)
        maxThreads:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Maximum number of threads in Spark thread-pool (shared globally)
        timeOutMillis:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Thread idle timeout in millis where threads that has been idle for a longer period will be terminated from the thread pool
        keystoreFile:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Configures connection to be secure to use the keystore file
        keystorePassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Configures connection to be secure to use the keystore password
        truststoreFile:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Configures connection to be secure to use the truststore file
        truststorePassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Configures connection to be secure to use the truststore password
        sparkConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.component.sparkrest.SparkConfiguration
          deprecated: false
          secret: false
          description: To use the shared SparkConfiguration
        sparkBinding:
          kind: property
          type: object
          javaType: org.apache.camel.component.sparkrest.SparkBinding
          deprecated: false
          secret: false
          description: To use a custom SparkBinding to map to/from Camel message.
      properties:
        verb:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - get
          - post
          - put
          - patch
          - delete
          - head
          - trace
          - connect
          - options
          deprecated: false
          secret: false
          description: get post put patch delete head trace connect or options.
        path:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The content path which support Spark syntax.
        accept:
          kind: parameter
          group: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Accept type such as: ''text/xml'' or ''application/json''. By default
            we accept all kinds of types.'
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        disableStreamCache:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Determines whether or not the raw input stream from Spark HttpRequestgetContent() is cached or not (Camel will read the stream into a in light-weight memory based Stream caching) cache. By default Camel will cache the Netty input stream to support reading it multiple times to ensure Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. Mind that if you enable this option then you cannot read the Netty stream multiple times out of the box and you would need manually to reset the reader index on the Spark raw stream.
        mapHeaders:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If this option is enabled then during binding from Spark to Camel Message then the headers will be mapped as well (eg added as header to the Camel Message as well). You can turn off this option to disable this. The headers can still be accessed from the org.apache.camel.component.sparkrest.SparkMessage message with the method getRequest() that returns the Spark HTTP request instance.
        transferException:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
        urlDecodeHeaders:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is enabled then during binding from Spark to Camel Message then the header values will be URL decoded (eg 20 will be a space character.)
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        matchOnUriPrefix:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
        sparkBinding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sparkrest.SparkBinding
          deprecated: false
          secret: false
          description: To use a custom SparkBinding to map to/from Camel message.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Spark-rest-Spark-restComponent]]
      Spark-rest Component
      ~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.14*

      The Spark-rest component allows to define REST endpoints using the
      http://sparkjava.com/[Spark REST Java library] using the
      link:rest-dsl.html[Rest DSL].

      INFO: Spark Java requires Java 8 runtime.

      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-spark-rest</artifactId>
              <version>${camel-version}</version>
          </dependency>
      -------------------------------------------------

      [[Spark-rest-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------
        spark-rest://verb:path?[options]
      ----------------------------------

      [[Spark-rest-URIOptions]]
      URI Options
      ^^^^^^^^^^^



      // component options: START
      The Spark Rest component supports 11 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | port | int | Port number. Will by default use 4567
      | ipAddress | String | Set the IP address that Spark should listen on. If not called the default address is '0.0.0.0'.
      | minThreads | int | Minimum number of threads in Spark thread-pool (shared globally)
      | maxThreads | int | Maximum number of threads in Spark thread-pool (shared globally)
      | timeOutMillis | int | Thread idle timeout in millis where threads that has been idle for a longer period will be terminated from the thread pool
      | keystoreFile | String | Configures connection to be secure to use the keystore file
      | keystorePassword | String | Configures connection to be secure to use the keystore password
      | truststoreFile | String | Configures connection to be secure to use the truststore file
      | truststorePassword | String | Configures connection to be secure to use the truststore password
      | sparkConfiguration | SparkConfiguration | To use the shared SparkConfiguration
      | sparkBinding | SparkBinding | To use a custom SparkBinding to map to/from Camel message.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Spark Rest component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | verb | consumer |  | String | *Required* get post put patch delete head trace connect or options.
      | path | consumer |  | String | *Required* The content path which support Spark syntax.
      | accept | consumer |  | String | Accept type such as: 'text/xml' or 'application/json'. By default we accept all kinds of types.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | disableStreamCache | consumer | false | boolean | Determines whether or not the raw input stream from Spark HttpRequestgetContent() is cached or not (Camel will read the stream into a in light-weight memory based Stream caching) cache. By default Camel will cache the Netty input stream to support reading it multiple times to ensure Camel can retrieve all data from the stream. However you can set this option to true when you for example need to access the raw stream such as streaming it directly to a file or other persistent store. Mind that if you enable this option then you cannot read the Netty stream multiple times out of the box and you would need manually to reset the reader index on the Spark raw stream.
      | mapHeaders | consumer | true | boolean | If this option is enabled then during binding from Spark to Camel Message then the headers will be mapped as well (eg added as header to the Camel Message as well). You can turn off this option to disable this. The headers can still be accessed from the org.apache.camel.component.sparkrest.SparkMessage message with the method getRequest() that returns the Spark HTTP request instance.
      | transferException | consumer | false | boolean | If enabled and an Exchange failed processing on the consumer side and if the caused Exception was send back serialized in the response as a application/x-java-serialized-object content type. This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk.
      | urlDecodeHeaders | consumer | false | boolean | If this option is enabled then during binding from Spark to Camel Message then the header values will be URL decoded (eg 20 will be a space character.)
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | matchOnUriPrefix | advanced | false | boolean | Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
      | sparkBinding | advanced |  | SparkBinding | To use a custom SparkBinding to map to/from Camel message.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Spark-rest-PathusingSparksyntax]]
      Path using Spark syntax
      ^^^^^^^^^^^^^^^^^^^^^^^

      The path option is defined using a Spark REST syntax where you define
      the REST context path using support for parameters and splat. See more
      details at the http://sparkjava.com/readme.html#title1[Spark Java Route]
      documentation.

      The following is a Camel route using a fixed path

      [source,java]
      ---------------------------------------
        from("spark-rest:get:hello")
          .transform().constant("Bye World");
      ---------------------------------------

      And the following route uses a parameter which is mapped to a Camel
      header with the key "me".

      [source,java]
      --------------------------------------------
        from("spark-rest:get:hello/:me")
          .transform().simple("Bye ${header.me}");
      --------------------------------------------

      [[Spark-rest-MappingtoCamelMessage]]
      Mapping to Camel Message
      ^^^^^^^^^^^^^^^^^^^^^^^^

      The Spark Request object is mapped to a Camel Message as
      a??`org.apache.camel.component.sparkrest.SparkMessage` which has access
      to the raw Spark request using the getRequest method. By default the
      Spark body is mapped to Camel message body, and any HTTP headers / Spark
      parameters is mapped to Camel Message headers. There is special support
      for the Spark splat syntax, which is mapped to the Camel message header
      with key splat.

      For example the given route below uses Spark splat (the asterisk
      sign)??in the context path which we can access as a header form the
      Simple language to construct a response message.

      [source,java]
      ------------------------------------------------------------------------------
        from("spark-rest:get:/hello/*/to/*")
          .transform().simple("Bye big ${header.splat[1]} from ${header.splat[0]}");
      ------------------------------------------------------------------------------

      [[Spark-rest-RestDSL]]
      Rest DSL
      ^^^^^^^^

      Apache Camel provides a new Rest DSL that allow to define the REST
      services in a nice REST style. For example we can define a REST hello
      service as shown below:

      [source,java]
      ----------------------------------------------------------------
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                  rest("/hello/{me}").get()
                      .route().transform().simple("Bye ${header.me}");
              }
          };
      ----------------------------------------------------------------

      [source,xml]
      --------------------------------------------------------------
        <camelContext xmlns="http://camel.apache.org/schema/spring">
          <rest uri="/hello/{me}">
            <get>
              <route>
                <transform>
                  <simple>Bye ${header.me}</simple>
                </transform>
              </route>
            </get>
          </rest>
        </camelContext>
      --------------------------------------------------------------

      See more details at the??link:rest-dsl.html[Rest DSL].

      [[Spark-rest-Moreexamples]]
      More examples
      ^^^^^^^^^^^^^

      There is a *camel-example-spark-rest-tomcat* example in the Apache Camel
      distribution, that demonstrates how to use camel-spark-rest in a web
      application that can be deployed on Apache Tomcat, or similar web
      containers.

      [[Spark-rest-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:rest.html[Rest]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-splunk
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: splunk
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: splunk
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: splunk
          spec:
            containers:
            - image: fabric8/connector-splunk:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: splunk
        syntax: splunk:name
        title: Splunk
        description: The splunk component allows to publish or search for events in Splunk.
        label: monitoring
        deprecated: false
        async: false
        javaType: org.apache.camel.component.splunk.SplunkComponent
        groupId: org.apache.camel
        artifactId: camel-splunk
        version: 2.18.1
      componentProperties:
        splunkConfigurationFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.splunk.SplunkConfigurationFactory
          deprecated: false
          secret: false
          description: To use the SplunkConfigurationFactory
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name has no purpose
        app:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Splunk app
        connectionTimeout:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Timeout in MS when connecting to Splunk server
        host:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: localhost
          description: Splunk host.
        owner:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Splunk owner
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for Splunk
        port:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "8089"
          description: Splunk port
        scheme:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: https
          description: Splunk scheme
        sslProtocol:
          kind: parameter
          group: common
          type: string
          javaType: com.splunk.SSLSecurityProtocol
          enum:
          - TLSv1.2
          - TLSv1.1
          - TLSv1
          - SSLv3
          deprecated: false
          secret: false
          defaultValue: TLSv1.2
          description: Set the ssl protocol to use
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for Splunk
        useSunHttpsHandler:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Use sun.net.www.protocol.https.Handler Https handler to establish the Splunk Connection. Can be useful when running in application servers to avoid app. server https handling.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        count:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: A number that indicates the maximum number of entities to return.
        earliestTime:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Earliest time of the search time window.
        initEarliestTime:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Initial start offset of the first search
        latestTime:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Latest time of the search time window.
        savedSearch:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the query saved in Splunk to run
        search:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Splunk query to run
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        streaming:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Sets streaming mode. Streaming mode sends exchanges as they are received rather than in a batch.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        eventHost:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Override the default Splunk event host field
        index:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Splunk index to write to
        raw:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should the payload be inserted raw
        source:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Splunk source argument
        sourceType:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Splunk sourcetype argument
        tcpReceiverPort:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Splunk tcp receiver port
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: "[[Splunk-SplunkComponent]]\nSplunk Component\n~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.13*\n\nThe Splunk component provides access to\n\
      http://docs.splunk.com/Documentation/Splunk/latest[Splunk] using the\nSplunk\
      \ provided https://github.com/splunk/splunk-sdk-java[client] api,\nand it enables\
      \ you to publish and search for events in Splunk.\n\nMaven users will need to\
      \ add the following dependency to their pom.xml\nfor this component:\n\n[source,xml]\n\
      ---------------------------------------------\n <dependency>\n        <groupId>org.apache.camel</groupId>\n\
      \        <artifactId>camel-splunk</artifactId>\n        <version>${camel-version}</version>\n\
      \    </dependency>\n---------------------------------------------\n\n[[Splunk-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------\n \
      \ splunk://[endpoint]?[options]\n-------------------------------\n\n[[Splunk-ProducerEndpoints:]]\n\
      Producer Endpoints:\n^^^^^^^^^^^^^^^^^^^\n\n[width=\"100%\",cols=\"10%,90%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Description\n\n|stream |Streams data to a named index or the default\
      \ if not specified.\nWhen using stream mode be aware of that Splunk has some\
      \ internal buffer\n(about 1MB or so) before events gets to the index. \nIf you\
      \ need realtime, better use submit or tcp mode.\n\n|submit |submit mode. Uses\
      \ Splunk rest api to publish events to a named index or\nthe default if not\
      \ specified.\n\n|tcp |tcp mode. Streams data to a tcp port, and requires a open\
      \ receiver port\nin Splunk.\n|=======================================================================\n\
      \nWhen publishing events the message body should contain a\nSplunkEvent.????See\
      \ comment under message body.\n\n*Example*\n\n[source,java]\n----------------------------------------------------------------------------------------------------------------------\n\
      \      from(\"direct:start\").convertBodyTo(SplunkEvent.class)\n          .to(\"\
      splunk://submit?username=user&password=123&index=myindex&sourceType=someSourceType&source=mySource\"\
      )...\n----------------------------------------------------------------------------------------------------------------------\n\
      \nIn this example a converter is required to convert to a SplunkEvent\nclass.\n\
      \n[[Splunk-ConsumerEndpoints:]]\nConsumer Endpoints:\n^^^^^^^^^^^^^^^^^^^\n\n\
      [width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Endpoint |Description\n\n|normal |Performs normal search and requires a search\
      \ query in the search option.\n\n|savedsearch |Performs search based on a search\
      \ query saved in splunk and requires the\nname of the query in the savedSearch\
      \ option.\n|=======================================================================\n\
      \n*Example*\n\n[source,java]\n---------------------------------------------------------------------------------------------------------------------------------------------\n\
      \      from(\"splunk://normal?delay=5s&username=user&password=123&initEarliestTime=-10s&search=search\
      \ index=myindex sourcetype=someSourcetype\")\n          .to(\"direct:search-result\"\
      );\n---------------------------------------------------------------------------------------------------------------------------------------------\n\
      \ncamel-splunk creates a route exchange per search result with a\nSplunkEvent\
      \ in the body.\n\n[[Splunk-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\n\n//\
      \ component options: START\nThe Splunk component supports 1 options which are\
      \ listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| splunkConfigurationFactory | SplunkConfigurationFactory\
      \ | To use the SplunkConfigurationFactory\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n// endpoint options: START\n\
      The Splunk component supports 43 endpoint options which are listed below:\n\n\
      {% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| name | common |  | String\
      \ | *Required* Name has no purpose\n| app | common |  | String | Splunk app\n\
      | connectionTimeout | common | 5000 | int | Timeout in MS when connecting to\
      \ Splunk server\n| host | common | localhost | String | Splunk host.\n| owner\
      \ | common |  | String | Splunk owner\n| password | common |  | String | Password\
      \ for Splunk\n| port | common | 8089 | int | Splunk port\n| scheme | common\
      \ | https | String | Splunk scheme\n| sslProtocol | common | TLSv1.2 | SSLSecurityProtocol\
      \ | Set the ssl protocol to use\n| username | common |  | String | Username\
      \ for Splunk\n| useSunHttpsHandler | common | false | boolean | Use sun.net.www.protocol.https.Handler\
      \ Https handler to establish the Splunk Connection. Can be useful when running\
      \ in application servers to avoid app. server https handling.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| count | consumer |\
      \  | int | A number that indicates the maximum number of entities to return.\n\
      | earliestTime | consumer |  | String | Earliest time of the search time window.\n\
      | initEarliestTime | consumer |  | String | Initial start offset of the first\
      \ search\n| latestTime | consumer |  | String | Latest time of the search time\
      \ window.\n| savedSearch | consumer |  | String | The name of the query saved\
      \ in Splunk to run\n| search | consumer |  | String | The Splunk query to run\n\
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer\
      \ did not poll any files you can enable this option to send an empty message\
      \ (no body) instead.\n| streaming | consumer |  | Boolean | Sets streaming mode.\
      \ Streaming mode sends exchanges as they are received rather than in a batch.\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| pollStrategy | consumer (advanced) |\
      \  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy\
      \ allowing you to provide your custom implementation to control error handling\
      \ usually occurred during the poll operation before an Exchange have been created\
      \ and being routed in Camel.\n| eventHost | producer |  | String | Override\
      \ the default Splunk event host field\n| index | producer |  | String | Splunk\
      \ index to write to\n| raw | producer | false | boolean | Should the payload\
      \ be inserted raw\n| source | producer |  | String | Splunk source argument\n\
      | sourceType | producer |  | String | Splunk sourcetype argument\n| tcpReceiverPort\
      \ | producer |  | int | Splunk tcp receiver port\n| synchronous | advanced |\
      \ false | boolean | Sets whether synchronous processing should be strictly used\
      \ or Camel is allowed to use asynchronous processing (if supported).\n| backoffErrorThreshold\
      \ | scheduler |  | int | The number of subsequent error polls (failed due some\
      \ error) that should happen before the backoffMultipler should kick-in.\n| backoffIdleThreshold\
      \ | scheduler |  | int | The number of subsequent idle polls that should happen\
      \ before the backoffMultipler should kick-in.\n| backoffMultiplier | scheduler\
      \ |  | int | To let the scheduled polling consumer backoff if there has been\
      \ a number of subsequent idles/errors in a row. The multiplier is then the number\
      \ of polls that will be skipped before the next actual attempt is happening\
      \ again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold\
      \ must also be configured.\n| delay | scheduler | 500 | long | Milliseconds\
      \ before the next poll. You can also specify time values using units such as\
      \ 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| greedy\
      \ | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer\
      \ will run immediately again if the previous run polled 1 or more messages.\n\
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll\
      \ starts. You can also specify time values using units such as 60s (60 seconds)\
      \ 5m30s (5 minutes and 30 seconds) and 1h (1 hour).\n| runLoggingLevel | scheduler\
      \ | TRACE | LoggingLevel | The consumer logs a start/complete log line when\
      \ it polls. This option allows you to configure the logging level for that.\n\
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows\
      \ for configuring a custom/shared thread pool to use for the consumer. By default\
      \ each consumer has its own single threaded thread pool.\n| scheduler | scheduler\
      \ | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either\
      \ camel-spring or camel-quartz2 component\n| schedulerProperties | scheduler\
      \ |  | Map | To configure additional properties when using a custom scheduler\
      \ or any of the Quartz2 Spring based scheduler.\n| startScheduler | scheduler\
      \ | true | boolean | Whether the scheduler should be auto started.\n| timeUnit\
      \ | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay\
      \ options.\n| useFixedDelay | scheduler | true | boolean | Controls if fixed\
      \ delay or fixed rate is used. See ScheduledExecutorService in JDK for details.\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n[[Splunk-Messagebody]]\nMessage body\n\
      ^^^^^^^^^^^^\n\nSplunk operates on data in key/value pairs. The SplunkEvent\
      \ class is a\nplaceholder for such data, and should be in the message body for\
      \ the producer. \nLikewise it will be returned in the body per search\nresult\
      \ for the consumer.\n\nAs of Camel 2.16.0 you can send raw data to Splunk by\
      \ setting the raw\noption on the producer endpoint. This is useful for eg. json/xml\
      \ and\nother payloads where Splunk has build in support.??\n\n[[Splunk-UseCases]]\n\
      Use Cases\n^^^^^^^^^\n\nSearch Twitter for tweets with music and publish events\
      \ to Splunk\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------------------\n\
      \      from(\"twitter://search?type=polling&keywords=music&delay=10&consumerKey=abc&consumerSecret=def&accessToken=hij&accessTokenSecret=xxx\"\
      )\n          .convertBodyTo(SplunkEvent.class)\n          .to(\"splunk://submit?username=foo&password=bar&index=camel-tweets&sourceType=twitter&source=music-tweets\"\
      );\n--------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nTo convert a Tweet to a SplunkEvent you could use a converter like\n\n[source,java]\n\
      ----------------------------------------------------------------------------------\n\
      @Converter\npublic class Tweet2SplunkEvent {\n    @Converter\n    public static\
      \ SplunkEvent convertTweet(Status status) {\n        SplunkEvent data = new\
      \ SplunkEvent(\"twitter-message\", null);\n        //data.addPair(\"source\"\
      , status.getSource());\n        data.addPair(\"from_user\", status.getUser().getScreenName());\n\
      \        data.addPair(\"in_reply_to\", status.getInReplyToScreenName());\n \
      \       data.addPair(SplunkEvent.COMMON_START_TIME, status.getCreatedAt());\n\
      \        data.addPair(SplunkEvent.COMMON_EVENT_ID, status.getId());\n      \
      \  data.addPair(\"text\", status.getText());\n        data.addPair(\"retweet_count\"\
      , status.getRetweetCount());\n        if (status.getPlace() != null) {\n   \
      \         data.addPair(\"place_country\", status.getPlace().getCountry());\n\
      \            data.addPair(\"place_name\", status.getPlace().getName());\n  \
      \          data.addPair(\"place_street\", status.getPlace().getStreetAddress());\n\
      \        }\n        if (status.getGeoLocation() != null) {\n            data.addPair(\"\
      geo_latitude\", status.getGeoLocation().getLatitude());\n            data.addPair(\"\
      geo_longitude\", status.getGeoLocation().getLongitude());\n        }\n     \
      \   return data;\n    }\n}\n----------------------------------------------------------------------------------\n\
      \nSearch Splunk for tweets\n\n[source,java]\n--------------------------------------------------------------------------------------------------------------------------------\n\
      \      from(\"splunk://normal?username=foo&password=bar&initEarliestTime=-2m&search=search\
      \ index=camel-tweets sourcetype=twitter\")\n          .log(\"${body}\");\n--------------------------------------------------------------------------------------------------------------------------------\n\
      \n[[Splunk-Othercomments]]\nOther comments\n^^^^^^^^^^^^^^\n\nSplunk comes with\
      \ a variety of options for leveraging machine generated\ndata with prebuilt\
      \ apps for analyzing and displaying this.  +\n For example the jmx app. could\
      \ be used to publish jmx attributes, eg.\nroute and jvm metrics to Splunk, and\
      \ displaying this on a dashboard.\n\n[[Splunk-SeeAlso]]\nSee Also\n^^^^^^^^\n\
      \n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spring-batch
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spring-batch
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spring-batch
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spring-batch
          spec:
            containers:
            - image: fabric8/connector-spring-batch:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spring-batch
        syntax: spring-batch:jobName
        title: Spring Batch
        description: The spring-batch component allows to send messages to Spring Batch for further processing.
        label: spring,batch,scheduling
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.spring.batch.SpringBatchComponent
        groupId: org.apache.camel
        artifactId: camel-spring-batch
        version: 2.18.1
      componentProperties:
        jobLauncher:
          kind: property
          type: object
          javaType: org.springframework.batch.core.launch.JobLauncher
          deprecated: false
          secret: false
          description: Explicitly specifies a JobLauncher to be used.
        jobRegistry:
          kind: property
          type: object
          javaType: org.springframework.batch.core.configuration.JobRegistry
          deprecated: false
          secret: false
          description: Explicitly specifies a JobRegistry to be used.
      properties:
        jobName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the Spring Batch job located in the registry.
        jobFromHeader:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Explicitly defines if the jobName should be taken from the headers instead of the URI.
        jobLauncher:
          kind: parameter
          group: producer
          type: object
          javaType: org.springframework.batch.core.launch.JobLauncher
          deprecated: false
          secret: false
          description: Explicitly specifies a JobLauncher to be used.
        jobRegistry:
          kind: parameter
          group: producer
          type: object
          javaType: org.springframework.batch.core.configuration.JobRegistry
          deprecated: false
          secret: false
          description: Explicitly specifies a JobRegistry to be used.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[SpringBatch-SpringBatchComponent]]\nSpring Batch Component\n\
      ~~~~~~~~~~~~~~~~~~~~~~\n\nThe *spring-batch:* component and support classes\
      \ provide integration\nbridge between Camel and http://www.springsource.org/spring-batch[Spring\n\
      Batch] infrastructure.\n\nMaven users will need to add the following dependency\
      \ to their `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-spring-batch</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[SpringBatch-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n------------------------------\n\
      spring-batch:jobName[?options]\n------------------------------\n\nWhere *jobName*\
      \ represents the name of the Spring Batch job located in\nthe Camel registry.\
      \ Alternatively if a JobRegistry is provided it will be used \nto locate the\
      \ job instead.\n\nWARNING:This component can only be used to define producer\
      \ endpoints, which\nmeans that you cannot use the Spring Batch component in\
      \ a `from()`\nstatement.\n\n[[SpringBatch-Options]]\nOptions\n^^^^^^^\n\n\n\n\
      \n// component options: START\nThe Spring Batch component supports 2 options\
      \ which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| jobLauncher | JobLauncher | Explicitly specifies\
      \ a JobLauncher to be used.\n| jobRegistry | JobRegistry | Explicitly specifies\
      \ a JobRegistry to be used.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Spring Batch component supports 5 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| jobName | producer | \
      \ | String | *Required* The name of the Spring Batch job located in the registry.\n\
      | jobFromHeader | producer | false | boolean | Explicitly defines if the jobName\
      \ should be taken from the headers instead of the URI.\n| jobLauncher | producer\
      \ |  | JobLauncher | Explicitly specifies a JobLauncher to be used.\n| jobRegistry\
      \ | producer |  | JobRegistry | Explicitly specifies a JobRegistry to be used.\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n\n\n[[SpringBatch-Usage]]\nUsage\n\
      ^^^^^\n\nWhen Spring Batch component receives the message, it triggers the job\n\
      execution. The job will be executed using the\n`org.springframework.batch.core.launch.JobLaucher`\
      \ instance resolved\naccording to the following algorithm:\n\n* if `JobLauncher`\
      \ is manually set on the component, then use it.\n* if `jobLauncherRef` option\
      \ is set on the component, then search Camel\nlink:registry.html[Registry] for\
      \ the `JobLauncher` with the given name.\n*Deprecated and will be removed in\
      \ Camel 3.0!*\n* if there is `JobLauncher` registered in the Camel\nlink:registry.html[Registry]\
      \ under *jobLauncher* name, then use it.\n* if none of the steps above allow\
      \ to resolve the `JobLauncher` and\nthere is exactly one `JobLauncher` instance\
      \ in the Camel\nlink:registry.html[Registry], then use it.\n\nAll headers found\
      \ in the message are passed to the `JobLauncher` as job\nparameters. `String`,\
      \ `Long`, `Double` and `java.util.Date` values are\ncopied to the `org.springframework.batch.core.JobParametersBuilder`\
      \ -\nother data types are converted to Strings.\n\n[[SpringBatch-Examples]]\n\
      Examples\n^^^^^^^^\n\nTriggering the Spring Batch job execution:\n\n[source,java]\n\
      ---------------------------------------------------\nfrom(\"direct:startBatch\"\
      ).to(\"spring-batch:myJob\");\n---------------------------------------------------\n\
      \nTriggering the Spring Batch job execution with the `JobLauncher` set\nexplicitly.\n\
      \n[source,java]\n--------------------------------------------------------------------------------\n\
      from(\"direct:startBatch\").to(\"spring-batch:myJob?jobLauncherRef=myJobLauncher\"\
      );\n--------------------------------------------------------------------------------\n\
      \nStarting from the Camel *2.11.1* `JobExecution` instance returned by the\n\
      `JobLauncher` is forwarded by the `SpringBatchProducer` as the output\nmessage.\
      \ You can use the `JobExecution` instance to perform some\noperations using\
      \ the Spring Batch API directly.\n\n[source,java]\n---------------------------------------------------------------------------------------------------\n\
      from(\"direct:startBatch\").to(\"spring-batch:myJob\").to(\"mock:JobExecutions\"\
      );\n...\nMockEndpoint mockEndpoint = ...;\nJobExecution jobExecution = mockEndpoint.getExchanges().get(0).getIn().getBody(JobExecution.class);\n\
      BatchStatus currentJobStatus = jobExecution.getStatus();\n---------------------------------------------------------------------------------------------------\n\
      \n[[SpringBatch-Supportclasses]]\nSupport classes\n^^^^^^^^^^^^^^^\n\nApart\
      \ from the Component, Camel Spring Batch provides also support\nclasses, which\
      \ can be used to hook into Spring Batch infrastructure.\n\n[[SpringBatch-CamelItemReader]]\n\
      CamelItemReader\n+++++++++++++++\n\n`CamelItemReader` can be used to read batch\
      \ data directly from the Camel\ninfrastructure.\n\nFor example the snippet below\
      \ configures Spring Batch to read data from\nJMS queue.\n\n[source,xml]\n-----------------------------------------------------------------------------------------------\n\
      <bean id=\"camelReader\" class=\"org.apache.camel.component.spring.batch.support.CamelItemReader\"\
      >\n  <constructor-arg ref=\"consumerTemplate\"/>\n  <constructor-arg value=\"\
      jms:dataQueue\"/>\n</bean>\n\n<batch:job id=\"myJob\">\n  <batch:step id=\"\
      step\">\n    <batch:tasklet>\n      <batch:chunk reader=\"camelReader\" writer=\"\
      someWriter\" commit-interval=\"100\"/>\n    </batch:tasklet>\n  </batch:step>\n\
      </batch:job>\n-----------------------------------------------------------------------------------------------\n\
      \n[[SpringBatch-CamelItemWriter]]\nCamelItemWriter\n+++++++++++++++\n\n`CamelItemWriter`\
      \ has similar purpose as `CamelItemReader`, but it is\ndedicated to write chunk\
      \ of the processed data.\n\nFor example the snippet below configures Spring\
      \ Batch to read data from\nJMS queue.\n\n[source,xml]\n-----------------------------------------------------------------------------------------------\n\
      <bean id=\"camelwriter\" class=\"org.apache.camel.component.spring.batch.support.CamelItemWriter\"\
      >\n  <constructor-arg ref=\"producerTemplate\"/>\n  <constructor-arg value=\"\
      jms:dataQueue\"/>\n</bean>\n\n<batch:job id=\"myJob\">\n  <batch:step id=\"\
      step\">\n    <batch:tasklet>\n      <batch:chunk reader=\"someReader\" writer=\"\
      camelwriter\" commit-interval=\"100\"/>\n    </batch:tasklet>\n  </batch:step>\n\
      </batch:job>\n-----------------------------------------------------------------------------------------------\n\
      \n[[SpringBatch-CamelItemProcessor]]\nCamelItemProcessor\n++++++++++++++++++\n\
      \n`CamelItemProcessor` is the implementation of Spring Batch\n`org.springframework.batch.item.ItemProcessor`\
      \ interface. The latter\nimplementation relays on\nhttp://camel.apache.org/request-reply.html[Request\
      \ Reply pattern] to\ndelegate the processing of the batch item to the Camel\
      \ infrastructure.\nThe item to process is sent to the Camel endpoint as the\
      \ body of the\nmessage.\n\nFor example the snippet below performs simple processing\
      \ of the batch\nitem using the http://camel.apache.org/direct.html[Direct endpoint]\
      \ and\nthe http://camel.apache.org/simple.html[Simple expression language].\n\
      \n[source,xml]\n-------------------------------------------------------------------------------------------------------------\n\
      <camel:camelContext>\n  <camel:route>\n    <camel:from uri=\"direct:processor\"\
      />\n    <camel:setExchangePattern pattern=\"InOut\"/>\n    <camel:setBody>\n\
      \      <camel:simple>Processed ${body}</camel:simple>\n    </camel:setBody>\n\
      \  </camel:route>\n</camel:camelContext>\n\n<bean id=\"camelProcessor\" class=\"\
      org.apache.camel.component.spring.batch.support.CamelItemProcessor\">\n  <constructor-arg\
      \ ref=\"producerTemplate\"/>\n  <constructor-arg value=\"direct:processor\"\
      />\n</bean>\n\n<batch:job id=\"myJob\">\n  <batch:step id=\"step\">\n    <batch:tasklet>\n\
      \      <batch:chunk reader=\"someReader\" writer=\"someWriter\" processor=\"\
      camelProcessor\" commit-interval=\"100\"/>\n    </batch:tasklet>\n  </batch:step>\n\
      </batch:job>\n-------------------------------------------------------------------------------------------------------------\n\
      \n[[SpringBatch-CamelJobExecutionListener]]\nCamelJobExecutionListener\n+++++++++++++++++++++++++\n\
      \n`CamelJobExecutionListener` is the implementation of the\n`org.springframework.batch.core.JobExecutionListener`\
      \ interface sending\njob execution events to the Camel endpoint.\n\nThe `org.springframework.batch.core.JobExecution`\
      \ instance produced by\nthe Spring Batch is sent as a body of the message. To\
      \ distinguish\nbetween before- and after-callbacks `SPRING_BATCH_JOB_EVENT_TYPE`\
      \ header\nis set to the `BEFORE` or `AFTER` value.\n\nThe example snippet below\
      \ sends Spring Batch job execution events to the\nJMS queue.\n\n[source,xml]\n\
      -----------------------------------------------------------------------------------------------------------------------\n\
      <bean id=\"camelJobExecutionListener\" class=\"org.apache.camel.component.spring.batch.support.CamelJobExecutionListener\"\
      >\n  <constructor-arg ref=\"producerTemplate\"/>\n  <constructor-arg value=\"\
      jms:batchEventsBus\"/>\n</bean>\n\n<batch:job id=\"myJob\">\n  <batch:step id=\"\
      step\">\n    <batch:tasklet>\n      <batch:chunk reader=\"someReader\" writer=\"\
      someWriter\" commit-interval=\"100\"/>\n    </batch:tasklet>\n  </batch:step>\n\
      \  <batch:listeners>\n    <batch:listener ref=\"camelJobExecutionListener\"\
      />\n  </batch:listeners>\n</batch:job>\n-----------------------------------------------------------------------------------------------------------------------\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spring-event
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spring-event
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spring-event
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spring-event
          spec:
            containers:
            - image: fabric8/connector-spring-event:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spring-event
        syntax: spring-event:name
        title: Spring Event
        description: The spring-event component allows to listen for Spring Application Events.
        label: spring,eventbus
        deprecated: false
        async: false
        javaType: org.apache.camel.component.event.EventComponent
        groupId: org.apache.camel
        artifactId: camel-spring
        version: 2.18.1
      componentProperties:
        applicationContext:
          kind: property
          type: object
          javaType: org.springframework.context.ApplicationContext
          deprecated: false
          secret: false
          description: The Spring ApplicationContext
      properties:
        name:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of endpoint
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[SpringEvent-SpringEventComponent]]
      Spring Event Component
      ~~~~~~~~~~~~~~~~~~~~~~

      The *spring-event:* component provides access to the Spring
      `ApplicationEvent` objects. This allows you to publish
      `ApplicationEvent` objects to a Spring `ApplicationContext` or to
      consume them. You can then use
      link:enterprise-integration-patterns.html[Enterprise Integration
      Patterns] to process them such as link:message-filter.html[Message
      Filter].

      [[SpringEvent-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------
      spring-event://default[?options]
      --------------------------------

      Note, at the moment there are no options for this component. That can
      easily change in future releases, so please check back.

      [[Spring-Event-Options]]
      Spring Event Options
      ^^^^^^^^^^^^^^^^^^^^



      // component options: START
      The Spring Event component supports 1 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | applicationContext | ApplicationContext | The Spring ApplicationContext
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Spring Event component supports 5 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | Name of endpoint
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SpringEvent-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spring-integration
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spring-integration
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spring-integration
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spring-integration
          spec:
            containers:
            - image: fabric8/connector-spring-integration:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spring-integration
        syntax: spring-integration:defaultChannel
        title: Spring Integration
        description: Bridges Camel with Spring Integration.
        label: spring,eventbus
        deprecated: false
        async: false
        javaType: org.apache.camel.component.spring.integration.SpringIntegrationComponent
        groupId: org.apache.camel
        artifactId: camel-spring-integration
        version: 2.18.1
      componentProperties: {}
      properties:
        defaultChannel:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default channel name which is used by the Spring Integration Spring context. It will equal to the inputChannel name for the Spring Integration consumer and the outputChannel name for the Spring Integration provider.
        inOut:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: The exchange pattern that the Spring integration endpoint should use. If inOut=true then a reply channel is expected either from the Spring Integration Message header or configured on the endpoint.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        inputChannel:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Spring integration input channel name that this endpoint wants to consume from Spring integration.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        outputChannel:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The Spring integration output channel name that is used to send messages to Spring integration.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[SpringIntegration-SpringIntegrationComponent]]
      Spring Integration Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      The *spring-integration:* component provides a bridge for Camel
      components to talk to
      http://www.springsource.org/spring-integration[spring integration
      endpoints].

      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-spring-integration</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[SpringIntegration-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------------------------
      spring-integration:defaultChannelName[?options]
      -----------------------------------------------

      Where *defaultChannelName* represents the default channel name which is
      used by the Spring Integration Spring context. It will equal to the
      `inputChannel` name for the Spring Integration consumer and the
      `outputChannel` name for the Spring Integration provider.

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

      [[SpringIntegration-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Spring Integration component has no options.
      // component options: END



      // endpoint options: START
      The Spring Integration component supports 8 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | defaultChannel | common |  | String | *Required* The default channel name which is used by the Spring Integration Spring context. It will equal to the inputChannel name for the Spring Integration consumer and the outputChannel name for the Spring Integration provider.
      | inOut | common | false | boolean | The exchange pattern that the Spring integration endpoint should use. If inOut=true then a reply channel is expected either from the Spring Integration Message header or configured on the endpoint.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | inputChannel | consumer |  | String | The Spring integration input channel name that this endpoint wants to consume from Spring integration.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | outputChannel | producer |  | String | The Spring integration output channel name that is used to send messages to Spring integration.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SpringIntegration-Usage]]
      Usage
      ^^^^^

      The Spring integration component is a bridge that connects Camel
      endpoints with Spring integration endpoints through the Spring
      integration's input channels and output channels. Using this component,
      we can send Camel messages to Spring Integration endpoints or receive
      messages from Spring integration endpoints in a Camel routing context.

      [[SpringIntegration-Examples]]
      Examples
      ^^^^^^^^

      [[SpringIntegration-UsingtheSpringintegrationendpoint]]
      Using the Spring integration endpoint
      +++++++++++++++++++++++++++++++++++++

      You can set up a Spring integration endpoint using a URI, as follows:

      Or directly using a Spring integration channel name:

      [[SpringIntegration-TheSourceandTargetadapter]]
      The Source and Target adapter
      +++++++++++++++++++++++++++++

      Spring integration also provides the Spring integration's source and
      target adapters, which can route messages from a Spring integration
      channel to a Camel endpoint or from a Camel endpoint to a Spring
      integration channel.

      This example uses the following namespaces:

      You can bind your source or target to a Camel endpoint as follows:

      [[SpringIntegration-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spring-ldap
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spring-ldap
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spring-ldap
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spring-ldap
          spec:
            containers:
            - image: fabric8/connector-spring-ldap:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spring-ldap
        syntax: spring-ldap:templateName
        title: Spring LDAP
        description: The spring-ldap component allows you to perform searches in LDAP servers using filters as the message payload.
        label: spring,ldap
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.springldap.SpringLdapComponent
        groupId: org.apache.camel
        artifactId: camel-spring-ldap
        version: 2.18.1
      componentProperties: {}
      properties:
        templateName:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the Spring LDAP Template bean
        operation:
          kind: parameter
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.springldap.LdapOperation
          enum:
          - SEARCH
          - BIND
          - UNBIND
          deprecated: false
          secret: false
          description: The LDAP operation to be performed.
        scope:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          enum:
          - object
          - onelevel
          - subtree
          deprecated: false
          secret: false
          defaultValue: subtree
          description: The scope of the search operation.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[SpringLDAP-SpringLDAPComponent]]
      Spring LDAP Component
      ~~~~~~~~~~~~~~~~~~~~~

      *Available since Camel 2.11*

      The *spring-ldap:* component provides a Camel wrapper for
      http://www.springsource.org/ldap[Spring LDAP].

      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-spring-ldap</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[SpringLDAP-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------------
      spring-ldap:springLdapTemplate[?options]
      ----------------------------------------

      Where *springLdapTemplate* is the name of the
      http://static.springsource.org/spring-ldap/site/apidocs/org/springframework/ldap/core/LdapTemplate.html[Spring
      LDAP Template bean]. In this bean, you configure the URL and the
      credentials for your LDAP access.

      [[SpringLDAP-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Spring LDAP component has no options.
      // component options: END



      // endpoint options: START
      The Spring LDAP component supports 4 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | templateName | producer |  | String | *Required* Name of the Spring LDAP Template bean
      | operation | producer |  | LdapOperation | *Required* The LDAP operation to be performed.
      | scope | producer | subtree | String | The scope of the search operation.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SpringLDAP-Usage]]
      Usage
      ^^^^^

      The component supports producer endpoint only. An attempt to create a
      consumer endpoint will result in an `UnsupportedOperationException`. +
       The body of the message must be a map (an instance of `java.util.Map`).
      This map must contain at least an entry with the key *`dn`* that
      specifies the root node for the LDAP operation to be performed. Other
      entries of the map are operation-specific (see below).

      The body of the message remains unchanged for the `bind` and `unbind`
      operations. For the `search` operation, the body is set to the result of
      the search, see
      http://static.springsource.org/spring-ldap/site/apidocs/org/springframework/ldap/core/LdapTemplate.html#search%28java.lang.String,%20java.lang.String,%20int,%20org.springframework.ldap.core.AttributesMapper%29[http://static.springsource.org/spring-ldap/site/apidocs/org/springframework/ldap/core/LdapTemplate.html#search%28java.lang.String,%20java.lang.String,%20int,%20org.springframework.ldap.core.AttributesMapper%29].

      [[SpringLDAP-Search]]
      Search
      ++++++

      The message body must have an entry with the key *`filter`*. The value
      must be a String representing a valid LDAP filter, see
      http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol#Search_and_Compare[http://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol#Search_and_Compare].

      [[SpringLDAP-Bind]]
      Bind
      ++++

      The message body must have an entry with the key *`attributes`*. The
      value must be an instance of
      http://docs.oracle.com/javase/6/docs/api/javax/naming/directory/Attributes.html[javax.naming.directory.Attributes]
      This entry specifies the LDAP node to be created.

      [[SpringLDAP-Unbind]]
      Unbind
      ++++++

      No further entries necessary, the node with the specified *`dn`* is
      deleted.

      *Key definitions*

      In order to avoid spelling errors, the following constants are defined
      in `org.apache.camel.springldap.SpringLdapProducer`:

      * public static final String DN = "dn"
      * public static final String FILTER = "filter"
      * public static final String ATTRIBUTES = "attributes"

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spring-redis
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spring-redis
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spring-redis
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spring-redis
          spec:
            containers:
            - image: fabric8/connector-spring-redis:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spring-redis
        syntax: spring-redis:host:port
        title: Spring Redis
        description: The spring-redis component allows sending and receiving messages from Redis.
        label: spring,nosql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.redis.RedisComponent
        groupId: org.apache.camel
        artifactId: camel-spring-redis
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The host where Redis server is running.
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Redis server port number
        channels:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: List of topic names or name patterns to subscribe to. Multiple names can be separated by comma.
        command:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.redis.Command
          enum:
          - PING
          - SET
          - GET
          - QUIT
          - EXISTS
          - DEL
          - TYPE
          - FLUSHDB
          - KEYS
          - RANDOMKEY
          - RENAME
          - RENAMENX
          - RENAMEX
          - DBSIZE
          - EXPIRE
          - EXPIREAT
          - TTL
          - SELECT
          - MOVE
          - FLUSHALL
          - GETSET
          - MGET
          - SETNX
          - SETEX
          - MSET
          - MSETNX
          - DECRBY
          - DECR
          - INCRBY
          - INCR
          - APPEND
          - SUBSTR
          - HSET
          - HGET
          - HSETNX
          - HMSET
          - HMGET
          - HINCRBY
          - HEXISTS
          - HDEL
          - HLEN
          - HKEYS
          - HVALS
          - HGETALL
          - RPUSH
          - LPUSH
          - LLEN
          - LRANGE
          - LTRIM
          - LINDEX
          - LSET
          - LREM
          - LPOP
          - RPOP
          - RPOPLPUSH
          - SADD
          - SMEMBERS
          - SREM
          - SPOP
          - SMOVE
          - SCARD
          - SISMEMBER
          - SINTER
          - SINTERSTORE
          - SUNION
          - SUNIONSTORE
          - SDIFF
          - SDIFFSTORE
          - SRANDMEMBER
          - ZADD
          - ZRANGE
          - ZREM
          - ZINCRBY
          - ZRANK
          - ZREVRANK
          - ZREVRANGE
          - ZCARD
          - ZSCORE
          - MULTI
          - DISCARD
          - EXEC
          - WATCH
          - UNWATCH
          - SORT
          - BLPOP
          - BRPOP
          - AUTH
          - SUBSCRIBE
          - PUBLISH
          - UNSUBSCRIBE
          - PSUBSCRIBE
          - PUNSUBSCRIBE
          - ZCOUNT
          - ZRANGEBYSCORE
          - ZREVRANGEBYSCORE
          - ZREMRANGEBYRANK
          - ZREMRANGEBYSCORE
          - ZUNIONSTORE
          - ZINTERSTORE
          - SAVE
          - BGSAVE
          - BGREWRITEAOF
          - LASTSAVE
          - SHUTDOWN
          - INFO
          - MONITOR
          - SLAVEOF
          - CONFIG
          - STRLEN
          - SYNC
          - LPUSHX
          - PERSIST
          - RPUSHX
          - ECHO
          - LINSERT
          - DEBUG
          - BRPOPLPUSH
          - SETBIT
          - GETBIT
          - SETRANGE
          - GETRANGE
          - PEXPIRE
          - PEXPIREAT
          deprecated: false
          secret: false
          defaultValue: SET
          description: 'Default command which can be overridden by message header. Notice
            the consumer only supports the following commands: PSUBSCRIBE and SUBSCRIBE'
        connectionFactory:
          kind: parameter
          group: common
          type: object
          javaType: org.springframework.data.redis.connection.RedisConnectionFactory
          deprecated: false
          secret: false
          description: Reference to a pre-configured RedisConnectionFactory instance to use.
        listenerContainer:
          kind: parameter
          group: common
          type: object
          javaType: org.springframework.data.redis.listener.RedisMessageListenerContainer
          deprecated: false
          secret: false
          description: Reference to a pre-configured RedisMessageListenerContainer instance to use.
        redisTemplate:
          kind: parameter
          group: common
          type: object
          javaType: org.springframework.data.redis.core.RedisTemplate
          deprecated: false
          secret: false
          description: Reference to a pre-configured RedisTemplate instance to use.
        serializer:
          kind: parameter
          group: common
          type: object
          javaType: org.springframework.data.redis.serializer.RedisSerializer
          deprecated: false
          secret: false
          description: Reference to a pre-configured RedisSerializer instance to use.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[SpringRedis-SpringRedisComponent]]\nSpring Redis Component\n\
      ~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of Camel 2.11*\n\nThis component allows\
      \ sending and receiving messages from\nhttp://http//redis.io/[Redis]. Redis\
      \ is advanced key-value store where\nkeys can contain strings, hashes, lists,\
      \ sets and sorted sets. In\naddition it provides pub/sub functionality for inter-app\n\
      communications. +\n Camel provides a producer for executing commands, consumer\
      \ for\nsubscribing to pub/sub messages an idempotent repository for filtering\n\
      out duplicate messages.\n\nINFO:*Prerequisites*\nIn order to use this component,\
      \ you must have a Redis server running.\n\n\n[[SpringRedis-URIFormat]]\nURI\
      \ Format\n^^^^^^^^^^\n\n[source,java]\n----------------------------------\n\
      spring-redis://host:port[?options]\n----------------------------------\n\nYou\
      \ can append query options to the URI in the following format,\n`?options=value&option2=value&...`\n\
      \n[[SpringRedis-URIOptions]]\nURI Options\n^^^^^^^^^^^\n\n\n// component options:\
      \ START\nThe Spring Redis component has no options.\n// component options: END\n\
      \n\n\n// endpoint options: START\nThe Spring Redis component supports 12 endpoint\
      \ options which are listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | common |  | String\
      \ | *Required* The host where Redis server is running.\n| port | common |  |\
      \ Integer | *Required* Redis server port number\n| channels | common |  | String\
      \ | List of topic names or name patterns to subscribe to. Multiple names can\
      \ be separated by comma.\n| command | common | SET | Command | Default command\
      \ which can be overridden by message header. Notice the consumer only supports\
      \ the following commands: PSUBSCRIBE and SUBSCRIBE\n| connectionFactory | common\
      \ |  | RedisConnectionFactory | Reference to a pre-configured RedisConnectionFactory\
      \ instance to use.\n| listenerContainer | common |  | RedisMessageListenerContainer\
      \ | Reference to a pre-configured RedisMessageListenerContainer instance to\
      \ use.\n| redisTemplate | common |  | RedisTemplate | Reference to a pre-configured\
      \ RedisTemplate instance to use.\n| serializer | common |  | RedisSerializer\
      \ | Reference to a pre-configured RedisSerializer instance to use.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| exceptionHandler |\
      \ consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom\
      \ ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then\
      \ this options is not in use. By default the consumer will deal with exceptions\
      \ that will be logged at WARN/ERROR level and ignored.\n| exchangePattern |\
      \ consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| synchronous | advanced | false | boolean\
      \ | Sets whether synchronous processing should be strictly used or Camel is\
      \ allowed to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[SpringRedis-Usage]]\nUsage\n^^^^^\n\
      \nSee also the unit tests available\nat??https://github.com/apache/camel/tree/master/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis[https://github.com/apache/camel/tree/master/components/camel-spring-redis/src/test/java/org/apache/camel/component/redis].\n\
      \n[[SpringRedis-MessageheadersevaluatedbytheRedisproducer]]\nMessage headers\
      \ evaluated by the Redis producer\n+++++++++++++++++++++++++++++++++++++++++++++++\n\
      \nThe producer issues commands to the server and each command has\ndifferent\
      \ set of parameters with specific types. The result from the\ncommand execution\
      \ is returned in the message body.\n\n[width=\"100%\",cols=\"20%,20%,20%,60%\"\
      ,options=\"header\",]\n|=======================================================================\n\
      |Hash Commands |Description |Parameters |Result\n\n|`HSET` |Set the string value\
      \ of a hash field |CamelRedis.Key (String), CamelRedis.Field (String), CamelRedis.Value\n\
      (Object) |void\n\n|`HGET` |Get the value of a hash field |CamelRedis.Key (String),\
      \ CamelRedis.Field (String) |String\n\n|`HSETNX` |Set the value of a hash field,\
      \ only if the field does not exist |CamelRedis.Key (String), CamelRedis.Field\
      \ (String), CamelRedis.Value\n(Object) |void\n\n|`HMSET` |Set multiple hash\
      \ fields to multiple values |CamelRedis.Key (String), CamelRedis.Values(Map<String,\
      \ Object>) |void\n\n|`HMGET` |Get the values of all the given hash fields |CamelRedis.Key\
      \ (String), CamelRedis.Fields (Collection<String>) |Collection<Object>\n\n|`HINCRBY`\
      \ |Increment the integer value of a hash field by the given number |CamelRedis.Key\
      \ (String), CamelRedis.Field (String), CamelRedis.Value\n(Long) |Long\n\n|`HEXISTS`\
      \ |Determine if a hash field exists |CamelRedis.Key (String), CamelRedis.Field\
      \ (String) |Boolean\n\n|`HDEL` |Delete one or more hash fields |CamelRedis.Key\
      \ (String), CamelRedis.Field (String) |void \n\n|`HLEN` |Get the number of fields\
      \ in a hash |CamelRedis.Key (String) |Long\n\n|`HKEYS` |Get all the fields in\
      \ a hash |CamelRedis.Key (String) |Set<String>\n\n|`HVALS` |Get all the values\
      \ in a hash |CamelRedis.Key (String) |Collection<Object>\n\n|`HGETALL` |Get\
      \ all the fields and values in a hash |CamelRedis.Key (String) |Map<String,\
      \ Object>\n|=======================================================================\n\
      \n[width=\"100%\",cols=\"20%,20%,20%,60%\",options=\"header\",]\n|=======================================================================\n\
      |List Commands |Description |Parameters |Result\n\n|`RPUSH` |Append one or multiple\
      \ values to a list |CamelRedis.Key (String), CamelRedis.Value (Object) |Long\n\
      \n|`RPUSHX` |Append a value to a list, only if the list exists |CamelRedis.Key\
      \ (String), CamelRedis.Value (Object) |Long\n\n|`LPUSH` |Prepend one or multiple\
      \ values to a list |CamelRedis.Key (String), CamelRedis.Value (Object) |Long\n\
      \n|`LLEN` |Get the length of a list |CamelRedis.Key (String) |Long\n\n|`LRANGE`\
      \ |Get a range of elements from a list |CamelRedis.Key (String), CamelRedis.Start\
      \ (Long), CamelRedis.End (Long) |List<Object>\n\n|`LTRIM` |Trim a list to the\
      \ specified range |CamelRedis.Key (String), CamelRedis.Start (Long), CamelRedis.End\
      \ (Long) |void\n\n|`LINDEX` |Get an element from a list by its index |CamelRedis.Key\
      \ (String), CamelRedis.Index (Long) |String\n\n|`LINSERT` |Insert an element\
      \ before or after another element in a list |CamelRedis.Key (String), CamelRedis.Value\
      \ (Object), CamelRedis.Pivot\n(String), CamelRedis.Position (String) |Long\n\
      \n|`LSET` |Set the value of an element in a list by its index |CamelRedis.Key\
      \ (String), CamelRedis.Value (Object), CamelRedis.Index\n(Long) |void\n\n|`LREM`\
      \ |Remove elements from a list |CamelRedis.Key (String), CamelRedis.Value (Object),\
      \ CamelRedis.Count\n(Long) |Long\n\n|`LPOP` |Remove and get the first element\
      \ in a list |CamelRedis.Key (String) |Object\n\n|`RPOP` |Remove and get the\
      \ last element in a list |CamelRedis.Key (String) |String\n\n|`RPOPLPUSH` |Remove\
      \ the last element in a list, append it to another list and return\nit |CamelRedis.Key\
      \ (String), CamelRedis.Destination (String) |Object\n\n|`BRPOPLPUSH` |Pop a\
      \ value from a list, push it to another list and return it; or block\nuntil\
      \ one is available |CamelRedis.Key (String), CamelRedis.Destination (String),\n\
      CamelRedis.Timeout (Long) |Object\n\n|`BLPOP` |Remove and get the first element\
      \ in a list, or block until one is\navailable |CamelRedis.Key (String), CamelRedis.Timeout\
      \ (Long) |Object\n\n|`BRPOP` |Remove and get the last element in a list, or\
      \ block until one is\navailable |CamelRedis.Key (String), CamelRedis.Timeout\
      \ (Long) |String\n|=======================================================================\n\
      \n[width=\"100%\",cols=\"20%,20%,20%,60%\",options=\"header\",]\n|=======================================================================\n\
      |Set Commands |Description |Parameters |Result\n\n|`SADD` |Add one or more members\
      \ to a set |CamelRedis.Key (String), CamelRedis.Value (Object) |Boolean\n\n\
      |`SMEMBERS` |Get all the members in a set |CamelRedis.Key (String) |Set<Object>\n\
      \n|`SREM` |Remove one or more members from a set |CamelRedis.Key (String), CamelRedis.Value\
      \ (Object) |Boolean\n\n|`SPOP` |Remove and return a random member from a set\
      \ |CamelRedis.Key (String) |String\n\n|`SMOVE` |Move a member from one set to\
      \ another |CamelRedis.Key (String), CamelRedis.Value (Object),\nCamelRedis.Destination\
      \ (String) |Boolean\n\n|`SCARD` |Get the number of members in a set |CamelRedis.Key\
      \ (String) |Long\n\n|`SISMEMBER` |Determine if a given value is a member of\
      \ a set |CamelRedis.Key (String), CamelRedis.Value (Object) |Boolean\n\n|`SINTER`\
      \ |Intersect multiple sets |CamelRedis.Key (String), CamelRedis.Keys (String)\
      \ |Set<Object>\n\n|`SINTERSTORE` |Intersect multiple sets and store the resulting\
      \ set in a key |CamelRedis.Key (String), CamelRedis.Keys (String),\nCamelRedis.Destination\
      \ (String) |void\n\n|`SUNION` |Add multiple sets |CamelRedis.Key (String), CamelRedis.Keys\
      \ (String) |Set<Object>\n\n|`SUNIONSTORE` |Add multiple sets and store the resulting\
      \ set in a key |CamelRedis.Key (String), CamelRedis.Keys (String),\nCamelRedis.Destination\
      \ (String) |void\n\n|`SDIFF` |Subtract multiple sets |CamelRedis.Key (String),\
      \ CamelRedis.Keys (String) |Set<Object>\n\n|`SDIFFSTORE` |Subtract multiple\
      \ sets and store the resulting set in a key |CamelRedis.Key (String), CamelRedis.Keys\
      \ (String),\nCamelRedis.Destination (String) |void\n\n|`SRANDMEMBER` |Get one\
      \ or multiple random members from a set |CamelRedis.Key (String) |String\n|=======================================================================\n\
      \n[width=\"100%\",cols=\"20%,20%,20%,60%\",options=\"header\",]\n|=======================================================================\n\
      |Ordered set Commands |Description |Parameters |Result\n\n|`ZADD` |Add one or\
      \ more members to a sorted set, or update its score if it\nalready exists |CamelRedis.Key\
      \ (String), CamelRedis.Value (Object), CamelRedis.Score\n(Double) |Boolean\n\
      \n|`ZRANGE` |Return a range of members in a sorted set, by index |CamelRedis.Key\
      \ (String), CamelRedis.Start (Long), CamelRedis.End (Long),\nCamelRedis.WithScore\
      \ (Boolean) |Object\n\n|`ZREM` |Remove one or more members from a sorted set\
      \ |CamelRedis.Key (String), CamelRedis.Value (Object) |Boolean\n\n|`ZINCRBY`\
      \ |Increment the score of a member in a sorted set |CamelRedis.Key (String),\
      \ CamelRedis.Value (Object), CamelRedis.Increment\n(Double) |Double\n\n|`ZRANK`\
      \ |Determine the index of a member in a sorted set |CamelRedis.Key (String),\
      \ CamelRedis.Value (Object) |Long\n\n|`ZREVRANK` |Determine the index of a member\
      \ in a sorted set, with scores ordered\nfrom high to low |CamelRedis.Key (String),\
      \ CamelRedis.Value (Object) |Long\n\n|`ZREVRANGE` |Return a range of members\
      \ in a sorted set, by index, with scores ordered\nfrom high to low |CamelRedis.Key\
      \ (String), CamelRedis.Start (Long), CamelRedis.End (Long),\nCamelRedis.WithScore\
      \ (Boolean) |Object\n\n|`ZCARD` |Get the number of members in a sorted set |CamelRedis.Key\
      \ (String) |Long\n\n|`ZCOUNT` |Count the members in a sorted set with scores\
      \ within the given values |CamelRedis.Key (String), CamelRedis.Min (Double),\
      \ CamelRedis.Max\n(Double) |Long\n\n|`ZRANGEBYSCORE` |Return a range of members\
      \ in a sorted set, by score |CamelRedis.Key (String), CamelRedis.Min (Double),\
      \ CamelRedis.Max\n(Double) |Set<Object>\n\n|`ZREVRANGEBYSCORE` |Return a range\
      \ of members in a sorted set, by score, with scores ordered\nfrom high to low\
      \ |CamelRedis.Key (String), CamelRedis.Min (Double), CamelRedis.Max\n(Double)\
      \ |Set<Object>\n\n|`ZREMRANGEBYRANK` |Remove all members in a sorted set within\
      \ the given indexes |CamelRedis.Key (String), CamelRedis.Start (Long), CamelRedis.End\
      \ (Long) |void\n\n|`ZREMRANGEBYSCORE` |Remove all members in a sorted set within\
      \ the given scores |CamelRedis.Key (String), CamelRedis.Start (Long), CamelRedis.End\
      \ (Long) |void\n\n|`ZUNIONSTORE` |Add multiple sorted sets and store the resulting\
      \ sorted set in a new key |CamelRedis.Key (String), CamelRedis.Keys (String),\n\
      CamelRedis.Destination (String) |void\n\n|`ZINTERSTORE` |Intersect multiple\
      \ sorted sets and store the resulting sorted set in a\nnew key |CamelRedis.Key\
      \ (String), CamelRedis.Keys (String),\nCamelRedis.Destination (String) |void\n\
      |=======================================================================\n\n\
      [width=\"100%\",cols=\"20%,20%,20%,60%\",options=\"header\",]\n|=======================================================================\n\
      |String Commands |Description |Parameters |Result\n\n|`SET` |Set the string\
      \ value of a key |CamelRedis.Key (String), CamelRedis.Value (Object) |void\n\
      \n|`GET` |Get the value of a key |CamelRedis.Key (String) |Object\n\n|`STRLEN`\
      \ |Get the length of the value stored in a key |CamelRedis.Key (String) |Long\n\
      \n|`APPEND` |Append a value to a key |CamelRedis.Key (String), CamelRedis.Value\
      \ (String) |Integer\n\n|`SETBIT` |Sets or clears the bit at offset in the string\
      \ value stored at key |CamelRedis.Key (String), CamelRedis.Offset (Long), CamelRedis.Value\n\
      (Boolean) |void\n\n|`GETBIT` |Returns the bit value at offset in the string\
      \ value stored at key |CamelRedis.Key (String), CamelRedis.Offset (Long) |Boolean\n\
      \n|`SETRANGE` |Overwrite part of a string at key starting at the specified offset\
      \ |CamelRedis.Key (String), CamelRedis.Value (Object), CamelRedis.Offset\n(Long)\
      \ |void\n\n|`GETRANGE` |Get a substring of the string stored at a key |CamelRedis.Key\
      \ (String), CamelRedis.Start (Long), CamelRedis.End (Long) |String\n\n|`SETNX`\
      \ |Set the value of a key, only if the key does not exist |CamelRedis.Key (String),\
      \ CamelRedis.Value (Object) |Boolean\n\n|`SETEX` |Set the value and expiration\
      \ of a key |CamelRedis.Key (String), CamelRedis.Value (Object), CamelRedis.Timeout\n\
      (Long), SECONDS |void\n\n|`DECRBY` |Decrement the integer value of a key by\
      \ the given number |CamelRedis.Key (String), CamelRedis.Value (Long) |Long\n\
      \n|`DECR` |Decrement the integer value of a key by one |CamelRedis.Key (String),\
      \ |Long\n\n|`INCRBY` |Increment the integer value of a key by the given amount\
      \ |CamelRedis.Key (String), CamelRedis.Value (Long) |Long\n\n|`INCR` |Increment\
      \ the integer value of a key by one |CamelRedis.Key (String) |Long\n\n|`MGET`\
      \ |Get the values of all the given keys |CamelRedis.Fields (Collection<String>)\
      \ |List<Object>\n\n|`MSET` |Set multiple keys to multiple values |CamelRedis.Values(Map<String,\
      \ Object>) |void\n\n|`MSETNX` |Set multiple keys to multiple values, only if\
      \ none of the keys exist |CamelRedis.Key (String), CamelRedis.Value (Object)\
      \ |void\n\n|`GETSET` |Set the string value of a key and return its old value\
      \ |CamelRedis.Key (String), CamelRedis.Value (Object) |Object\n|=======================================================================\n\
      \n[width=\"100%\",cols=\"20%,20%,20%,60%\",options=\"header\",]\n|=======================================================================\n\
      |Key Commands |Description |Parameters |Result\n\n|`EXISTS` |Determine if a\
      \ key exists |CamelRedis.Key (String) |Boolean\n\n|`DEL` |Delete a key |CamelRedis.Keys\
      \ (String) |void\n\n|`TYPE` |Determine the type stored at key |CamelRedis.Key\
      \ (String) |DataType\n\n|`KEYS` |Find all keys matching the given pattern |CamelRedis.Pattern\
      \ (String) |Collection<String>\n\n|`RANDOMKEY` |Return a random key from the\
      \ keyspace |CamelRedis.Pattern (String), CamelRedis.Value (String) |String\n\
      \n|`RENAME` |Rename a key |CamelRedis.Key (String) |void\n\n|`RENAMENX` |Rename\
      \ a key, only if the new key does not exist |CamelRedis.Key (String), CamelRedis.Value\
      \ (String) |Boolean\n\n|`EXPIRE` |Set a key's time to live in seconds |CamelRedis.Key\
      \ (String), CamelRedis.Timeout (Long) |Boolean\n\n|`SORT` |Sort the elements\
      \ in a list, set or sorted set |CamelRedis.Key (String) |List<Object>\n\n|`PERSIST`\
      \ |Remove the expiration from a key |CamelRedis.Key (String) |Boolean\n\n|`EXPIREAT`\
      \ |Set the expiration for a key as a UNIX timestamp |CamelRedis.Key (String),\
      \ CamelRedis.Timestamp (Long) |Boolean\n\n|`PEXPIRE` |Set a key's time to live\
      \ in milliseconds |CamelRedis.Key (String), CamelRedis.Timeout (Long) |Boolean\n\
      \n|`PEXPIREAT` |Set the expiration for a key as a UNIX timestamp specified in\n\
      milliseconds |CamelRedis.Key (String), CamelRedis.Timestamp (Long) |Boolean\n\
      \n|`TTL` |Get the time to live for a key |CamelRedis.Key (String) |Long\n\n\
      |`MOVE` |Move a key to another database |CamelRedis.Key (String), CamelRedis.Db\
      \ (Integer) |Boolean\n|=======================================================================\n\
      \n[width=\"100%\",cols=\"20%,20%,20%,60%\",options=\"header\",]\n|=======================================================================\n\
      |Other Command |Description |Parameters |Result\n\n|`MULTI` |Mark the start\
      \ of a transaction block |none |void\n\n|`DISCARD` |Discard all commands issued\
      \ after MULTI |none |void\n\n|`EXEC` |Execute all commands issued after MULTI\
      \ |none |void\n\n|`WATCH` |Watch the given keys to determine execution of the\
      \ MULTI/EXEC block |CamelRedis.Keys (String) |void\n\n|`UNWATCH` |Forget about\
      \ all watched keys |none |void\n\n|`ECHO` |Echo the given string |CamelRedis.Value\
      \ (String) |String\n\n|`PING` |Ping the server |none |String\n\n|`QUIT` |Close\
      \ the connection |none |void\n\n|`PUBLISH` |Post a message to a channel |CamelRedis.Channel\
      \ (String), CamelRedis.Message (Object) |void\n|=======================================================================\n\
      \n[[SpringRedis-Dependencies]]\nDependencies\n^^^^^^^^^^^^\n\nMaven users will\
      \ need to add the following dependency to their pom.xml.\n\n*pom.xml*\n\n[source,xml]\n\
      -----------------------------------------------\n<dependency>\n    <groupId>org.apache.camel</groupId>\n\
      \    <artifactId>camel-spring-redis</artifactId>\n    <version>${camel-version}</version>\n\
      </dependency>\n-----------------------------------------------\n\nwhere `${camel-version`}\
      \ must be replaced by the actual version of Camel\n(2.11 or higher).\n\n[[SpringRedis-SeeAlso]]\n\
      See Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring Camel]\n* link:component.html[Component]\n\
      * link:endpoint.html[Endpoint]\n* link:getting-started.html[Getting Started]\n\
      \n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-spring-ws
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: spring-ws
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: spring-ws
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: spring-ws
          spec:
            containers:
            - image: fabric8/connector-spring-ws:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: spring-ws
        syntax: spring-ws:type:lookupKey:webServiceEndpointUri
        title: Spring WebService
        description: The spring-ws component is used for SOAP WebServices using Spring WebServices.
        label: soap,webservice
        deprecated: false
        async: false
        javaType: org.apache.camel.component.spring.ws.SpringWebserviceComponent
        groupId: org.apache.camel
        artifactId: camel-spring-ws
        version: 2.18.1
      componentProperties: {}
      properties:
        type:
          kind: path
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.spring.ws.type.EndpointMappingType
          enum:
          - ROOT_QNAME
          - ACTION
          - TO
          - SOAP_ACTION
          - XPATHRESULT
          - URI
          - URI_PATH
          - BEANNAME
          deprecated: false
          secret: false
          description: Endpoint mapping type if endpoint mapping is used. rootqname - Offers the option to map web service requests based on the qualified name of the root element contained in the message. soapaction - Used to map web service requests based on the SOAP action specified in the header of the message. uri - In order to map web service requests that target a specific URI. xpathresult - Used to map web service requests based on the evaluation of an XPath expression against the incoming message. The result of the evaluation should match the XPath result specified in the endpoint URI. beanname - Allows you to reference an org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher object in order to integrate with existing (legacy) endpoint mappings like PayloadRootQNameEndpointMapping SoapActionEndpointMapping etc
        lookupKey:
          kind: path
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Endpoint mapping key if endpoint mapping is used
        webServiceEndpointUri:
          kind: path
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default Web Service endpoint uri to use for the producer.
        messageFilter:
          kind: parameter
          group: common
          type: object
          javaType: org.apache.camel.component.spring.ws.filter.MessageFilter
          deprecated: false
          secret: false
          description: Option to provide a custom MessageFilter. For example when you want to process your headers or attachments by your own.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        endpointDispatcher:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher
          deprecated: false
          secret: false
          description: Spring org.springframework.ws.server.endpoint.MessageEndpoint for dispatching messages received by Spring-WS to a Camel endpoint to integrate with existing (legacy) endpoint mappings like PayloadRootQNameEndpointMapping SoapActionEndpointMapping etc.
        endpointMapping:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.spring.ws.bean.CamelSpringWSEndpointMapping
          deprecated: false
          secret: false
          description: Reference to an instance of org.apache.camel.component.spring.ws.bean.CamelEndpointMapping in the Registry/ApplicationContext. Only one bean is required in the registry to serve all Camel/Spring-WS endpoints. This bean is auto-discovered by the MessageDispatcher and used to map requests to Camel endpoints based on characteristics specified on the endpoint (like root QName SOAP action etc)
        expression:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The XPath expression to use when option type=xpathresult. Then this option is required to be configured.
        sslContextParameters:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        allowResponseHeaderOverride:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to override soap response header in in/out exchange with header info from the actual service layer. If the invoked service appends or rewrites the soap header this option when set to true allows the modified soap header to be overwritten in in/out message headers
        faultAction:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: Signifies the value for the faultAction response WS-Addressing Fault Action header that is provided by the method.
        faultTo:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: Signifies the value for the faultAction response WS-Addressing FaultTo header that is provided by the method.
        messageFactory:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.springframework.ws.WebServiceMessageFactory
          deprecated: false
          secret: false
          description: Option to provide a custom WebServiceMessageFactory. For example when you want Apache Axiom to handle web service messages instead of SAAJ.
        messageIdStrategy:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.springframework.ws.soap.addressing.messageid.MessageIdStrategy
          deprecated: false
          secret: false
          description: Option to provide a custom MessageIdStrategy to control generation of unique message ids.
        messageSender:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.springframework.ws.transport.WebServiceMessageSender
          deprecated: false
          secret: false
          description: Option to provide a custom WebServiceMessageSender. For example to perform authentication or use alternative transports
        outputAction:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: Signifies the value for the response WS-Addressing Action header that is provided by the method.
        replyTo:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: Signifies the value for the replyTo response WS-Addressing ReplyTo header that is provided by the method.
        soapAction:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: SOAP action to include inside a SOAP request when accessing remote web services
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 'Sets the socket read timeout (in milliseconds) while invoking a
            webservice using the producer see URLConnection.setReadTimeout() and CommonsHttpMessageSender.setReadTimeout().
            This option works when using the built-in message sender implementations: CommonsHttpMessageSender
            and HttpUrlConnectionMessageSender. One of these implementations will be used
            by default for HTTP based services unless you customize the Spring WS configuration
            options supplied to the component. If you are using a non-standard sender it
            is assumed that you will handle your own timeout configuration. The built-in
            message sender HttpComponentsMessageSender is considered instead of CommonsHttpMessageSender
            which has been deprecated see HttpComponentsMessageSender.setReadTimeout().'
        webServiceTemplate:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: org.springframework.ws.client.core.WebServiceTemplate
          deprecated: false
          secret: false
          description: Option to provide a custom WebServiceTemplate. This allows for full control over client-side web services handling; like adding a custom interceptor or specifying a fault resolver message sender or message factory.
        wsAddressingAction:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: WS-Addressing 1.0 action header to include when accessing web services. The To header is set to the address of the web service as specified in the endpoint URI (default Spring-WS behavior).
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[SpringWebServices-SpringWebServicesComponent]]\nSpring\
      \ Web Services Component\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n*Available as of\
      \ Camel 2.6*\n\nThe *spring-ws:* component allows you to integrate with\nhttp://static.springsource.org/spring-ws/sites/1.5/[Spring\
      \ Web\nServices]. It offers both _client_-side support, for accessing web\n\
      services, and _server_-side support for creating your own contract-first\nweb\
      \ services.\n\nMaven users will need to add the following dependency to their\
      \ `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-spring-ws</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \nINFO:*Dependencies*\nAs of Camel 2.8 this component ships with Spring-WS 2.0.x\
      \ which (like\nthe rest of Camel) requires Spring 3.0.x.\nEarlier Camel versions\
      \ shipped Spring-WS 1.5.9 which is compatible with\nSpring 2.5.x and 3.0.x.\
      \ In order to run earlier versions of\n`camel-spring-ws` on Spring 2.5.x you\
      \ need to add the `spring-webmvc`\nmodule from Spring 2.5.x. In order to run\
      \ Spring-WS 1.5.9 on Spring\n3.0.x you need to exclude the OXM module from Spring\
      \ 3.0.x as this\nmodule is also included in Spring-WS 1.5.9 (see\nhttp://stackoverflow.com/questions/3313314/can-spring-ws-1-5-be-used-with-spring-3[this\n\
      post])\n\n[[SpringWebServices-URIformat]]\nURI format\n^^^^^^^^^^\n\nThe URI\
      \ scheme for this component is as follows\n\n[source,java]\n------------------------------------------\n\
      spring-ws:[mapping-type:]address[?options]\n------------------------------------------\n\
      \nTo expose a web service *mapping-type* needs to be set to any of the\nfollowing:\n\
      \n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      |Mapping type |Description\n\n|`rootqname` |Offers the option to map web service\
      \ requests based on the qualified\nname of the root element contained in the\
      \ message.\n\n|`soapaction` |Used to map web service requests based on the SOAP\
      \ action specified in\nthe header of the message.\n\n|`uri` |In order to map\
      \ web service requests that target a specific URI.\n\n|`xpathresult` |Used to\
      \ map web service requests based on the evaluation of an XPath\n`expression`\
      \ against the incoming message. The result of the evaluation\nshould match the\
      \ XPath result specified in the endpoint URI.\n\n|`beanname` |Allows you to\
      \ reference an\n`org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher`\n\
      object in order to integrate with existing (legacy)\nhttp://static.springsource.org/spring-ws/sites/1.5/reference/html/server.html#server-endpoint-mapping[endpoint\n\
      mappings] like `PayloadRootQNameEndpointMapping`,\n`SoapActionEndpointMapping`,\
      \ etc\n|=======================================================================\n\
      \nAs a consumer the *address* should contain a value relevant to the\nspecified\
      \ mapping-type (e.g. a SOAP action, XPath expression). As a\nproducer the address\
      \ should be set to the URI of the web service your\ncalling upon.\n\nYou can\
      \ append query *options* to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[SpringWebServices-Options]]\nOptions\n^^^^^^^\n\n\n// component options:\
      \ START\nThe Spring WebService component has no options.\n// component options:\
      \ END\n\n\n\n// endpoint options: START\nThe Spring WebService component supports\
      \ 24 endpoint options which are listed below:\n\n{% raw %}\n[width=\"100%\"\
      ,cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| type | consumer |  | EndpointMappingType\
      \ | Endpoint mapping type if endpoint mapping is used. rootqname - Offers the\
      \ option to map web service requests based on the qualified name of the root\
      \ element contained in the message. soapaction - Used to map web service requests\
      \ based on the SOAP action specified in the header of the message. uri - In\
      \ order to map web service requests that target a specific URI. xpathresult\
      \ - Used to map web service requests based on the evaluation of an XPath expression\
      \ against the incoming message. The result of the evaluation should match the\
      \ XPath result specified in the endpoint URI. beanname - Allows you to reference\
      \ an org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher object\
      \ in order to integrate with existing (legacy) endpoint mappings like PayloadRootQNameEndpointMapping\
      \ SoapActionEndpointMapping etc\n| lookupKey | consumer |  | String | Endpoint\
      \ mapping key if endpoint mapping is used\n| webServiceEndpointUri | producer\
      \ |  | String | The default Web Service endpoint uri to use for the producer.\n\
      | messageFilter | common |  | MessageFilter | Option to provide a custom MessageFilter.\
      \ For example when you want to process your headers or attachments by your own.\n\
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.\n\
      | endpointDispatcher | consumer |  | CamelEndpointDispatcher | Spring org.springframework.ws.server.endpoint.MessageEndpoint\
      \ for dispatching messages received by Spring-WS to a Camel endpoint to integrate\
      \ with existing (legacy) endpoint mappings like PayloadRootQNameEndpointMapping\
      \ SoapActionEndpointMapping etc.\n| endpointMapping | consumer |  | CamelSpringWSEndpointMapping\
      \ | Reference to an instance of org.apache.camel.component.spring.ws.bean.CamelEndpointMapping\
      \ in the Registry/ApplicationContext. Only one bean is required in the registry\
      \ to serve all Camel/Spring-WS endpoints. This bean is auto-discovered by the\
      \ MessageDispatcher and used to map requests to Camel endpoints based on characteristics\
      \ specified on the endpoint (like root QName SOAP action etc)\n| expression\
      \ | consumer |  | String | The XPath expression to use when option type=xpathresult.\
      \ Then this option is required to be configured.\n| sslContextParameters | consumer\
      \ |  | SSLContextParameters | To configure security using SSLContextParameters\n\
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the\
      \ consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler\
      \ is enabled then this options is not in use. By default the consumer will deal\
      \ with exceptions that will be logged at WARN/ERROR level and ignored.\n| exchangePattern\
      \ | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when\
      \ the consumer creates an exchange.\n| allowResponseHeaderOverride | producer\
      \ | false | boolean | Option to override soap response header in in/out exchange\
      \ with header info from the actual service layer. If the invoked service appends\
      \ or rewrites the soap header this option when set to true allows the modified\
      \ soap header to be overwritten in in/out message headers\n| faultAction | producer\
      \ |  | URI | Signifies the value for the faultAction response WS-Addressing\
      \ Fault Action header that is provided by the method.\n| faultTo | producer\
      \ |  | URI | Signifies the value for the faultAction response WS-Addressing\
      \ FaultTo header that is provided by the method.\n| messageFactory | producer\
      \ |  | WebServiceMessageFactory | Option to provide a custom WebServiceMessageFactory.\
      \ For example when you want Apache Axiom to handle web service messages instead\
      \ of SAAJ.\n| messageIdStrategy | producer |  | MessageIdStrategy | Option to\
      \ provide a custom MessageIdStrategy to control generation of unique message\
      \ ids.\n| messageSender | producer |  | WebServiceMessageSender | Option to\
      \ provide a custom WebServiceMessageSender. For example to perform authentication\
      \ or use alternative transports\n| outputAction | producer |  | URI | Signifies\
      \ the value for the response WS-Addressing Action header that is provided by\
      \ the method.\n| replyTo | producer |  | URI | Signifies the value for the replyTo\
      \ response WS-Addressing ReplyTo header that is provided by the method.\n| soapAction\
      \ | producer |  | String | SOAP action to include inside a SOAP request when\
      \ accessing remote web services\n| timeout | producer |  | int | Sets the socket\
      \ read timeout (in milliseconds) while invoking a webservice using the producer\
      \ see URLConnection.setReadTimeout() and CommonsHttpMessageSender.setReadTimeout().\
      \ This option works when using the built-in message sender implementations:\
      \ CommonsHttpMessageSender and HttpUrlConnectionMessageSender. One of these\
      \ implementations will be used by default for HTTP based services unless you\
      \ customize the Spring WS configuration options supplied to the component. If\
      \ you are using a non-standard sender it is assumed that you will handle your\
      \ own timeout configuration. The built-in message sender HttpComponentsMessageSender\
      \ is considered instead of CommonsHttpMessageSender which has been deprecated\
      \ see HttpComponentsMessageSender.setReadTimeout().\n| webServiceTemplate |\
      \ producer |  | WebServiceTemplate | Option to provide a custom WebServiceTemplate.\
      \ This allows for full control over client-side web services handling; like\
      \ adding a custom interceptor or specifying a fault resolver message sender\
      \ or message factory.\n| wsAddressingAction | producer |  | URI | WS-Addressing\
      \ 1.0 action header to include when accessing web services. The To header is\
      \ set to the address of the web service as specified in the endpoint URI (default\
      \ Spring-WS behavior).\n| synchronous | advanced | false | boolean | Sets whether\
      \ synchronous processing should be strictly used or Camel is allowed to use\
      \ asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[SpringWebServices-Messageheaders]]\n\
      Message headers\n+++++++++++++++\n\n[width=\"100%\",cols=\"10%,10%,80%\",options=\"\
      header\",]\n|=======================================================================\n\
      |Name |Type |Description\n\n|`CamelSpringWebserviceEndpointUri` |String |URI\
      \ of the web service your accessing as a client, overrides _address_\npart of\
      \ the endpoint URI\n\n|`CamelSpringWebserviceSoapAction` |String |Header to\
      \ specify the SOAP action of the message, overrides `soapAction`\noption if\
      \ present\n\n|CamelSpringWebserviceSoapHeader |Source |*Camel 2.11.1:* Use this\
      \ header to specify/access the SOAP headers of\nthe message.\n\n|`CamelSpringWebserviceAddressingAction`\
      \ |URI |Use this header to specify the WS-Addressing action of the message,\n\
      overrides `wsAddressingAction` option if present\n\n|CamelSpringWebserviceAddressingFaultTo\
      \ |URI |Use this header to specify the ??WS-Addressing FaultTo , overrides\n\
      faultTo option if present\n\n|CamelSpringWebserviceAddressingReplyTo |URI |Use\
      \ this header to specify the ??WS-Addressing ReplyTo , overrides\nreplyTo option\
      \ if present\n\n|CamelSpringWebserviceAddressingOutputAction |URI |Use this\
      \ header to specify the WS-Addressing Action , overrides\noutputAction option\
      \ if present\n\n|CamelSpringWebserviceAddressingFaultAction |URI |Use this header\
      \ to specify the WS-Addressing Fault Action , overrides\nfaultAction option\
      \ if present\n|=======================================================================\n\
      \n[[SpringWebServices-Accessingwebservices]]\nAccessing web services\n~~~~~~~~~~~~~~~~~~~~~~\n\
      \nTo call a web service at `http://foo.com/bar` simply define a route:\n\n[source,java]\n\
      ---------------------------------------------------------\nfrom(\"direct:example\"\
      ).to(\"spring-ws:http://foo.com/bar\")\n---------------------------------------------------------\n\
      \nAnd sent a message:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------\n\
      template.requestBody(\"direct:example\", \"<foobar xmlns=\\\"http://foo.com\\\
      \"><msg>test message</msg></foobar>\");\n------------------------------------------------------------------------------------------------------------\n\
      \nRemember if it's a SOAP service you're calling you don't have to include\n\
      SOAP tags. Spring-WS will perform the XML-to-SOAP marshaling.\n\n[[SpringWebServices-SendingSOAPandWS-Addressingactionheaders]]\n\
      Sending SOAP and WS-Addressing action headers\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nWhen a remote web service requires a SOAP action or use of the\nWS-Addressing\
      \ standard you define your route as:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      from(\"direct:example\")\n.to(\"spring-ws:http://foo.com/bar?soapAction=http://foo.com&wsAddressingAction=http://bar.com\"\
      )\n-----------------------------------------------------------------------------------------------\n\
      \nOptionally you can override the endpoint options with header values:\n\n[source,java]\n\
      --------------------------------------------------------------------\ntemplate.requestBodyAndHeader(\"\
      direct:example\",\n\"<foobar xmlns=\\\"http://foo.com\\\"><msg>test message</msg></foobar>\"\
      ,\nSpringWebserviceConstants.SPRING_WS_SOAP_ACTION, \"http://baz.com\");\n--------------------------------------------------------------------\n\
      \n[[SpringWebServices-UsingSOAPheaders]]\nUsing SOAP headers\n^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.11.1*\n\nYou can provide the SOAP header(s) as a\
      \ Camel Message header when\nsending a message to a spring-ws endpoint, for\
      \ example given the\nfollowing SOAP header in a String\n\n[source,java]\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      String body = ...\nString soapHeader = \"<h:Header xmlns:h=\\\"http://www.webserviceX.NET/\\\
      \"><h:MessageID>1234567890</h:MessageID><h:Nested><h:NestedID>1111</h:NestedID></h:Nested></h:Header>\"\
      ;\n---------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \nWe can set the body and header on the Camel Message as follows:\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------\n\
      exchange.getIn().setBody(body);\nexchange.getIn().setHeader(SpringWebserviceConstants.SPRING_WS_SOAP_HEADER,\
      \ soapHeader);\n----------------------------------------------------------------------------------------\n\
      \nAnd then send the Exchange to a `spring-ws` endpoint to call the Web\nService.\n\
      \nLikewise the spring-ws consumer will also enrich the Camel Message with\n\
      the SOAP header.\n\nFor an example see this\nhttps://svn.apache.org/repos/asf/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/SoapHeaderTest.java[unit\n\
      test].\n\n[[SpringWebServices-Theheaderandattachmentpropagation]]\nThe header\
      \ and attachment propagation\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSpring\
      \ WS Camel supports propagation of the headers and attachments into\nSpring-WS\
      \ WebServiceMessage response since version *2.10.3*.??The\nendpoint will use\
      \ so called \"hook\" the MessageFilter (default\nimplementation is provided\
      \ by BasicMessageFilter) to propagate the\nexchange headers and attachments\
      \ into WebServiceMessage response.??Now\nyou can use\n\n[source,java]\n--------------------------------------------------------------------\n\
      exchange.getOut().getHeaders().put(\"myCustom\",\"myHeaderValue\")\nexchange.getIn().addAttachment(\"\
      myAttachment\", new DataHandler(...))\n--------------------------------------------------------------------\n\
      \nNote: If the exchange header in the pipeline contains text, it generates\n\
      Qname(key)=value attribute in the soap header. Recommended is to create\na QName\
      \ class directly and put into any key into header.\n\n[[SpringWebServices-HowtouseMTOMattachments]]\n\
      How to use MTOM attachments\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nThe BasicMessageFilter\
      \ provides all required information for Apache\nAxiom in order to produce MTOM\
      \ message. If you want to use Apache Camel\nSpring WS within Apache Axiom, here\
      \ is an example: \n- Simply define the messageFactory as is bellow and Spring-WS\
      \ will use\nMTOM strategy to populate your SOAP message with optimized attachments.\n\
      \n[source,java]\n------------------------------------------------------------------\n\
      <bean id=\"axiomMessageFactory\"\nclass=\"org.springframework.ws.soap.axiom.AxiomSoapMessageFactory\"\
      >\n<property name=\"payloadCaching\" value=\"false\" />\n<property name=\"attachmentCaching\"\
      \ value=\"true\" />\n<property name=\"attachmentCacheThreshold\" value=\"1024\"\
      \ />\n</bean>\n------------------------------------------------------------------\n\
      \n- Add into your pom.xml the following dependencies\n\n[source,java]\n----------------------------------------------\n\
      <dependency>\n<groupId>org.apache.ws.commons.axiom</groupId>\n<artifactId>axiom-api</artifactId>\n\
      <version>1.2.13</version>\n</dependency>\n<dependency>\n<groupId>org.apache.ws.commons.axiom</groupId>\n\
      <artifactId>axiom-impl</artifactId>\n<version>1.2.13</version>\n<scope>runtime</scope>\n\
      </dependency>\n----------------------------------------------\n\n- Add your\
      \ attachment into the pipeline, for example using a Processor\nimplementation.\n\
      \n[source,java]\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      private class Attachement implements Processor {\npublic void process(Exchange\
      \ exchange) throws Exception\n{ exchange.getOut().copyFrom(exchange.getIn());\
      \ File file = new File(\"testAttachment.txt\"); exchange.getOut().addAttachment(\"\
      test\", new DataHandler(new FileDataSource(file)));  }\n}\n----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n\
      \n- Define endpoint (producer) as ussual, for example like this:\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------------------------\n\
      from(\"direct:send\")\n.process(new Attachement())\n.to(\"spring-ws:http://localhost:8089/mySoapService?soapAction=mySoap&messageFactory=axiomMessageFactory\"\
      );\n----------------------------------------------------------------------------------------------------------\n\
      \n- Now, your producer will generate MTOM message with otpmized\nattachments.\n\
      \n[[SpringWebServices-Thecustomheaderandattachmentfiltering]]\nThe custom header\
      \ and attachment filtering\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf\
      \ you need to provide your custom processing of either headers or\nattachments,\
      \ extend existing BasicMessageFilter and override the\nappropriate methods or\
      \ write a brand new implementation of the\nMessageFilter interface. +\n To use\
      \ your custom filter, add this into your spring context:\n\nYou can specify\
      \ either a global a or a local message filter as\nfollows: \n a) the global\
      \ custom filter that provides the global configuration for\nall Spring-WS endpoints\n\
      \n[source,java]\n--------------------------------------------------------------------------------\n\
      \ \n<bean id=\"messageFilter\" class=\"your.domain.myMessageFiler\" scope=\"\
      singleton\" />\n--------------------------------------------------------------------------------\n\
      \nor\n b) the local messageFilter directly on the endpoint as follows:\n\n[source,java]\n\
      -------------------------------------------------------------------------------------\n\
      to(\"spring-ws:http://yourdomain.com?messageFilter=#myEndpointSpecificMessageFilter\"\
      );\n-------------------------------------------------------------------------------------\n\
      \nFor more information see\nhttps://issues.apache.org/jira/browse/CAMEL-5724[CAMEL-5724]\n\
      \nIf you want to create your own MessageFilter, consider overriding the\nfollowing\
      \ methods in the default implementation of MessageFilter in\nclass BasicMessageFilter:\n\
      \n[source,java]\n-------------------------------------------------------------------------------\n\
      protected void doProcessSoapHeader(Message inOrOut, SoapMessage soapMessage)\n\
      {your code /*no need to call super*/ }\n\nprotected void doProcessSoapAttachements(Message\
      \ inOrOut, SoapMessage response)\n{ your code /*no need to call super*/ }\n\
      -------------------------------------------------------------------------------\n\
      \n[[SpringWebServices-UsingacustomMessageSenderandMessageFactory]]\nUsing a\
      \ custom MessageSender and MessageFactory\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nA custom message sender or factory in the registry can be referenced\nlike\
      \ this:\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      from(\"direct:example\")\n.to(\"spring-ws:http://foo.com/bar?messageFactory=#messageFactory&messageSender=#messageSender\"\
      )\n-----------------------------------------------------------------------------------------------\n\
      \nSpring configuration:\n\n[source,xml]\n---------------------------------------------------------------------------------------------------------------------\n\
      <!-- authenticate using HTTP Basic Authentication -->\n<bean id=\"messageSender\"\
      \ class=\"org.springframework.ws.transport.http.HttpComponentsMessageSender\"\
      >\n    <property name=\"credentials\">\n        <bean class=\"org.apache.commons.httpclient.UsernamePasswordCredentials\"\
      >\n            <constructor-arg index=\"0\" value=\"admin\"/>\n            <constructor-arg\
      \ index=\"1\" value=\"secret\"/>\n        </bean>\n    </property>\n</bean>\n\
      \n<!-- force use of Sun SAAJ implementation, http://static.springsource.org/spring-ws/sites/1.5/faq.html#saaj-jboss\
      \ -->\n<bean id=\"messageFactory\" class=\"org.springframework.ws.soap.saaj.SaajSoapMessageFactory\"\
      >\n    <property name=\"messageFactory\">\n        <bean class=\"com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl\"\
      ></bean>\n    </property>\n</bean>\n---------------------------------------------------------------------------------------------------------------------\n\
      \n[[SpringWebServices-Exposingwebservices]]\nExposing web services\n~~~~~~~~~~~~~~~~~~~~~\n\
      \nIn order to expose a web service using this component you first need to\n\
      set-up a\nhttp://static.springsource.org/spring-ws/sites/1.5/reference/html/server.html[MessageDispatcher]\n\
      to look for endpoint mappings in a Spring XML file. If you plan on\nrunning\
      \ inside a servlet container you probably want to use a\n`MessageDispatcherServlet`\
      \ configured in `web.xml`.\n\nBy default the `MessageDispatcherServlet` will\
      \ look for a Spring XML\nnamed `/WEB-INF/spring-ws-servlet.xml`. To use Camel\
      \ with Spring-WS the\nonly mandatory bean in that XML file is `CamelEndpointMapping`.\
      \ This\nbean allows the `MessageDispatcher` to dispatch web service requests\
      \ to\nyour routes.\n\n_web.xml_\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------\n\
      <web-app>\n    <servlet>\n        <servlet-name>spring-ws</servlet-name>\n \
      \       <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>\n\
      \        <load-on-startup>1</load-on-startup>\n    </servlet>\n    <servlet-mapping>\n\
      \        <servlet-name>spring-ws</servlet-name>\n        <url-pattern>/*</url-pattern>\n\
      \    </servlet-mapping>\n</web-app>\n-----------------------------------------------------------------------------------------------------\n\
      \n_spring-ws-servlet.xml_\n\n[source,xml]\n----------------------------------------------------------------------------------------------------\n\
      <bean id=\"endpointMapping\" class=\"org.apache.camel.component.spring.ws.bean.CamelEndpointMapping\"\
      \ />\n\n<bean id=\"wsdl\" class=\"org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition\"\
      >\n    <property name=\"schema\">\n        <bean class=\"org.springframework.xml.xsd.SimpleXsdSchema\"\
      >\n            <property name=\"xsd\" value=\"/WEB-INF/foobar.xsd\"/>\n    \
      \    </bean>\n    </property>\n    <property name=\"portTypeName\" value=\"\
      FooBar\"/>\n    <property name=\"locationUri\" value=\"/\"/>\n    <property\
      \ name=\"targetNamespace\" value=\"http://example.com/\"/>\n</bean>\n----------------------------------------------------------------------------------------------------\n\
      \nMore information on setting up Spring-WS can be found in\nhttp://static.springsource.org/spring-ws/sites/1.5/reference/html/tutorial.html[Writing\n\
      Contract-First Web Services]. Basically paragraph 3.6 \"Implementing the\nEndpoint\"\
      \ is handled by this component (specifically paragraph 3.6.2\n\"Routing the\
      \ Message to the Endpoint\" is where `CamelEndpointMapping`\ncomes in). Also\
      \ don't forget to check out the\nlink:spring-ws-example.html[Spring Web Services\
      \ Example] included in the\nCamel distribution.\n\n[[SpringWebServices-Endpointmappinginroutes]]\n\
      Endpoint mapping in routes\n^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWith the XML configuration\
      \ in-place you can now use Camel's DSL to\ndefine what web service requests\
      \ are handled by your endpoint:\n\nThe following route will receive all web\
      \ service requests that have a\nroot element named \"GetFoo\" within the `http://example.com/`\
      \ namespace.\n\n[source,java]\n----------------------------------------------------------------------------------------\n\
      from(\"spring-ws:rootqname:{http://example.com/}GetFoo?endpointMapping=#endpointMapping\"\
      )\n.convertBodyTo(String.class).to(mock:example)\n----------------------------------------------------------------------------------------\n\
      \nThe following route will receive web service requests containing the\n`http://example.com/GetFoo`\
      \ SOAP action.\n\n[source,java]\n---------------------------------------------------------------------------------------\n\
      from(\"spring-ws:soapaction:http://example.com/GetFoo?endpointMapping=#endpointMapping\"\
      )\n.convertBodyTo(String.class).to(mock:example)\n---------------------------------------------------------------------------------------\n\
      \nThe following route will receive all requests sent to\n`http://example.com/foobar`.\n\
      \n[source,java]\n--------------------------------------------------------------------------------\n\
      from(\"spring-ws:uri:http://example.com/foobar?endpointMapping=#endpointMapping\"\
      )\n.convertBodyTo(String.class).to(mock:example)\n--------------------------------------------------------------------------------\n\
      \nThe route below will receive requests that contain the element\n`<foobar>abc</foobar>`\
      \ anywhere inside the message (and the default\nnamespace).\n\n[source,java]\n\
      --------------------------------------------------------------------------------------\n\
      from(\"spring-ws:xpathresult:abc?expression=//foobar&endpointMapping=#endpointMapping\"\
      )\n.convertBodyTo(String.class).to(mock:example)\n--------------------------------------------------------------------------------------\n\
      \n[[SpringWebServices-Alternativeconfiguration,usingexistingendpointmappings]]\n\
      Alternative configuration, using existing endpoint mappings\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nFor every endpoint with mapping-type `beanname` one bean of type\n`CamelEndpointDispatcher`\
      \ with a corresponding name is required in the\nRegistry/ApplicationContext.\
      \ This bean acts as a bridge between the\nCamel endpoint and an existing\nhttp://static.springsource.org/spring-ws/sites/1.5/reference/html/server.html#server-endpoint-mapping[endpoint\n\
      mapping] like `PayloadRootQNameEndpointMapping`.\n\nNOTE:The use of the `beanname`\
      \ mapping-type is primarily meant for (legacy)\nsituations where you're already\
      \ using Spring-WS and have endpoint\nmappings defined in a Spring XML file.\
      \ The `beanname` mapping-type\nallows you to wire your Camel route into an existing\
      \ endpoint mapping.\nWhen you're starting from scratch it's recommended to define\
      \ your\nendpoint mappings as Camel URI's (as illustrated above with\n`endpointMapping`)\
      \ since it requires less configuration and is more\nexpressive. Alternatively\
      \ you could use vanilla Spring-WS with the help\nof annotations.\n\nAn example\
      \ of a route using `beanname`:\n\n[source,java]\n------------------------------------------------------------------------------------------------------------------------\n\
      <camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n    <route>\n\
      \        <from uri=\"spring-ws:beanname:QuoteEndpointDispatcher\" />\n     \
      \   <to uri=\"mock:example\" />\n    </route>\n</camelContext>\n\n<bean id=\"\
      legacyEndpointMapping\" class=\"org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping\"\
      >\n    <property name=\"mappings\">\n        <props>\n            <prop key=\"\
      {http://example.com/}GetFuture\">FutureEndpointDispatcher</prop>\n         \
      \   <prop key=\"{http://example.com/}GetQuote\">QuoteEndpointDispatcher</prop>\n\
      \        </props>\n    </property>\n</bean>\n\n<bean id=\"QuoteEndpointDispatcher\"\
      \ class=\"org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher\"\
      \ />\n<bean id=\"FutureEndpointDispatcher\" class=\"org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher\"\
      \ />\n------------------------------------------------------------------------------------------------------------------------\n\
      \n[[SpringWebServices-POJO-unmarshalling]]\nPOJO (un)marshalling\n~~~~~~~~~~~~~~~~~~~~\n\
      \nCamel's link:data-format.html[pluggable data formats] offer support for\n\
      pojo/xml marshalling using libraries such as JAXB, XStream, JibX, Castor\nand\
      \ XMLBeans. You can use these data formats in your route to sent and\nreceive\
      \ pojo's, to and from web services.\n\nWhen _accessing_ web services you can\
      \ marshal the request and unmarshal\nthe response message:\n\n[source,java]\n\
      ----------------------------------------------------------------------------------------\n\
      JaxbDataFormat jaxb = new JaxbDataFormat(false);\njaxb.setContextPath(\"com.example.model\"\
      );\n\nfrom(\"direct:example\").marshal(jaxb).to(\"spring-ws:http://foo.com/bar\"\
      ).unmarshal(jaxb);\n----------------------------------------------------------------------------------------\n\
      \nSimilarly when _providing_ web services, you can unmarshal XML requests\n\
      to POJO's and marshal the response message back to XML:\n\n[source,java]\n--------------------------------------------------------------------------------------------------------\n\
      from(\"spring-ws:rootqname:{http://example.com/}GetFoo?endpointMapping=#endpointMapping\"\
      ).unmarshal(jaxb)\n.to(\"mock:example\").marshal(jaxb);\n--------------------------------------------------------------------------------------------------------\n\
      \n[[SpringWebServices-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sql
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sql
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sql
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sql
          spec:
            containers:
            - image: fabric8/connector-sql:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sql
        syntax: sql:query
        title: SQL
        description: The sql component allows you to work with databases using JDBC SQL queries.
        label: database,sql
        deprecated: false
        async: false
        javaType: org.apache.camel.component.sql.SqlComponent
        groupId: org.apache.camel
        artifactId: camel-sql
        version: 2.18.1
      componentProperties:
        dataSource:
          kind: property
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: Sets the DataSource to use to communicate with the database.
        usePlaceholder:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries. This option is default true
      properties:
        query:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Sets the SQL query to perform. You can externalize the query by
            using file: or classpath: as prefix and specify the location of the file.'
        allowNamedParameters:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow using named parameters in the queries.
        dataSource:
          kind: parameter
          group: common
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: Sets the DataSource to use to communicate with the database.
        dataSourceRef:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: Sets the reference to a DataSource to lookup from the registry to use for communicating with the database.
        outputClass:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Specify the full package and class name to use as conversion when outputType=SelectOne.
        outputHeader:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Store the query result in a header instead of the message body. By default outputHeader == null and the query result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the query result and the original message body is preserved.
        outputType:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.sql.SqlOutputType
          enum:
          - SelectOne
          - SelectList
          - StreamList
          deprecated: false
          secret: false
          defaultValue: SelectList
          description: 'Make the output of consumer or producer to SelectList as List of
            Map or SelectOne as single Java object in the following way: a) If the query
            has only single column then that JDBC Column object is returned. (such as SELECT
            COUNT( ) FROM PROJECT will return a Long object. b) If the query has more than
            one column then it will return a Map of that result. c) If the outputClass is
            set then it will convert the query result into an Java bean object by calling
            all the setters that match the column names. It will assume your class has a
            default constructor to create instance with. d) If the query resulted in more
            than one rows it throws an non-unique result exception.'
        separator:
          kind: parameter
          group: common
          type: string
          javaType: char
          deprecated: false
          secret: false
          defaultValue: ','
          description: The separator to use when parameter values is taken from message body (if the body is a String type) to be inserted at placeholders. Notice if you use named parameters then a Map type is used instead. The default value is comma.
        breakBatchOnConsumeFail:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to break batch if onConsume failed.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        expectedUpdateCount:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Sets an expected update count to validate when using onConsume.
        maxMessagesPerPoll:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the maximum number of messages to poll
        onConsume:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing each row then this query can be executed if the Exchange was processed successfully for example to mark the row as processed. The query can have parameter.
        onConsumeBatchComplete:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing the entire batch this query can be executed to bulk update rows etc. The query cannot have parameters.
        onConsumeFailed:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: After processing each row then this query can be executed if the Exchange failed for example to mark the row as failed. The query can have parameter.
        routeEmptyResultSet:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether empty resultset should be allowed to be sent to the next hop. Defaults to false. So the empty resultset will be filtered out.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        transacted:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables or disables transaction. If enabled then if processing an exchange failed then the consumer break out processing any further exchanges to cause a rollback eager
        useIterator:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets how resultset should be delivered to route. Indicates delivery as either a list or individual object. defaults to true.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        processingStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.component.sql.SqlProcessingStrategy
          deprecated: false
          secret: false
          description: Allows to plugin to use a custom org.apache.camel.component.sql.SqlProcessingStrategy to execute queries when the consumer has processed the rows/batch.
        batch:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables or disables batch mode
        noop:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set will ignore the results of the SQL query and use the existing IN message as the OUT message for the continuation of processing
        useMessageBodyForSql:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use the message body as the SQL and then headers for parameters. If this option is enabled then the SQL in the uri is not used.
        alwaysPopulateStatement:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If enabled then the populateStatement method from org.apache.camel.component.sql.SqlPrepareStatementStrategy is always invoked also if there is no expected parameters to be prepared. When this is false then the populateStatement is only invoked if there is 1 or more expected parameters to be set; for example this avoids reading the message body/headers for SQL queries with no parameters.
        parametersCount:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: If set greater than zero then Camel will use this count value of parameters to replace instead of querying via JDBC metadata API. This is useful if the JDBC vendor could not return correct parameters count then user may override instead.
        placeholder:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: '#'
          description: Specifies a character that will be replaced to in SQL query. Notice that it is simple String.replaceAll() operation and no SQL parsing is involved (quoted strings will also change).
        prepareStatementStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.sql.SqlPrepareStatementStrategy
          deprecated: false
          secret: false
          description: Allows to plugin to use a custom org.apache.camel.component.sql.SqlPrepareStatementStrategy to control preparation of the query and prepared statement.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        templateOptions:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: template.
          multiValue: true
          deprecated: false
          secret: false
          description: Configures the Spring JdbcTemplate with the key/values from the Map
        usePlaceholder:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries. This option is default true
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[SQLComponent-SQLComponent]]
      SQL Component
      ~~~~~~~~~~~~~

      The *sql:* component allows you to work with databases using JDBC
      queries. The difference between this component and link:jdbc.html[JDBC]
      component is that in case of SQL the query is a property of the endpoint
      and it uses message payload as parameters passed to the query.

      This component uses `spring-jdbc` behind the scenes for the actual SQL
      handling.

      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-sql</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      The SQL component also supports:

      * a JDBC based repository for the
      link:idempotent-consumer.html[Idempotent Consumer] EIP pattern. See
      further below.
      * a JDBC based repository for the link:aggregator2.html[Aggregator] EIP
      pattern. See further below.

      [[SQLComponent-URIformat]]
      URI format
      ^^^^^^^^^^

      WARNING:From Camel 2.11 onwards this component can create both consumer (e.g.
      `from()`) and producer endpoints (e.g. `to()`).
      In previous versions, it could only act as a producer.

      INFO:This component can be used as a
      http://camel.apache.org/transactional-client.html[Transactional Client].

      The SQL component uses the following endpoint URI notation:

      [source,java]
      ----------------------------------------------------------
      sql:select * from table where id=# order by name[?options]
      ----------------------------------------------------------

      From Camel 2.11 onwards you can use named parameters by using
      :`#name_of_the_parameter` style as shown:

      [source,java]
      ---------------------------------------------------------------
      sql:select * from table where id=:#myId order by name[?options]
      ---------------------------------------------------------------

      When using named parameters, Camel will lookup the names from, in the
      given precedence: +
       1. from message body if its a `java.util.Map` +
       2. from message headers

      If a named parameter cannot be resolved, then an exception is thrown.

      From *Camel 2.14* onward you can use Simple expressions as parameters as
      shown:

      [source,java]
      ---------------------------------------------------------------------------
      sql:select * from table where id=:#${property.myId} order by name[?options]
      ---------------------------------------------------------------------------

      Notice that the standard `?` symbol that denotes the parameters to an
      SQL query is substituted with the `#` symbol, because the `?` symbol is
      used to specify options for the endpoint. The `?` symbol replacement can
      be configured on endpoint basis.

      From *Camel 2.17* onwards you can externalize your SQL queries to files
      in the classpath or file system as shown:

      [source,java]
      ---------------------------------------
      sql:classpath:sql/myquery.sql[?options]
      ---------------------------------------

      And the myquery.sql file is in the classpath and is just a plain text

      [source,java]
      -------------------------
      -- this is a comment
      select *
      from table
      where
        id = :#${property.myId}
      order by
        name
      -------------------------

      In the file you can use multilines and format the SQL as you wish. And
      also use comments such as the????? dash line.

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

      [[SQLComponent-Options]]
      Options
      ^^^^^^^



      // component options: START
      The SQL component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | dataSource | DataSource | Sets the DataSource to use to communicate with the database.
      | usePlaceholder | boolean | Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries. This option is default true
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The SQL component supports 46 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | query | common |  | String | *Required* Sets the SQL query to perform. You can externalize the query by using file: or classpath: as prefix and specify the location of the file.
      | allowNamedParameters | common | true | boolean | Whether to allow using named parameters in the queries.
      | dataSource | common |  | DataSource | Sets the DataSource to use to communicate with the database.
      | dataSourceRef | common |  | String | Sets the reference to a DataSource to lookup from the registry to use for communicating with the database.
      | outputClass | common |  | String | Specify the full package and class name to use as conversion when outputType=SelectOne.
      | outputHeader | common |  | String | Store the query result in a header instead of the message body. By default outputHeader == null and the query result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the query result and the original message body is preserved.
      | outputType | common | SelectList | SqlOutputType | Make the output of consumer or producer to SelectList as List of Map or SelectOne as single Java object in the following way: a) If the query has only single column then that JDBC Column object is returned. (such as SELECT COUNT( ) FROM PROJECT will return a Long object. b) If the query has more than one column then it will return a Map of that result. c) If the outputClass is set then it will convert the query result into an Java bean object by calling all the setters that match the column names. It will assume your class has a default constructor to create instance with. d) If the query resulted in more than one rows it throws an non-unique result exception.
      | separator | common | , | char | The separator to use when parameter values is taken from message body (if the body is a String type) to be inserted at placeholders. Notice if you use named parameters then a Map type is used instead. The default value is comma.
      | breakBatchOnConsumeFail | consumer | false | boolean | Sets whether to break batch if onConsume failed.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | expectedUpdateCount | consumer | -1 | int | Sets an expected update count to validate when using onConsume.
      | maxMessagesPerPoll | consumer |  | int | Sets the maximum number of messages to poll
      | onConsume | consumer |  | String | After processing each row then this query can be executed if the Exchange was processed successfully for example to mark the row as processed. The query can have parameter.
      | onConsumeBatchComplete | consumer |  | String | After processing the entire batch this query can be executed to bulk update rows etc. The query cannot have parameters.
      | onConsumeFailed | consumer |  | String | After processing each row then this query can be executed if the Exchange failed for example to mark the row as failed. The query can have parameter.
      | routeEmptyResultSet | consumer | false | boolean | Sets whether empty resultset should be allowed to be sent to the next hop. Defaults to false. So the empty resultset will be filtered out.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | transacted | consumer | false | boolean | Enables or disables transaction. If enabled then if processing an exchange failed then the consumer break out processing any further exchanges to cause a rollback eager
      | useIterator | consumer | true | boolean | Sets how resultset should be delivered to route. Indicates delivery as either a list or individual object. defaults to true.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | processingStrategy | consumer (advanced) |  | SqlProcessingStrategy | Allows to plugin to use a custom org.apache.camel.component.sql.SqlProcessingStrategy to execute queries when the consumer has processed the rows/batch.
      | batch | producer | false | boolean | Enables or disables batch mode
      | noop | producer | false | boolean | If set will ignore the results of the SQL query and use the existing IN message as the OUT message for the continuation of processing
      | useMessageBodyForSql | producer | false | boolean | Whether to use the message body as the SQL and then headers for parameters. If this option is enabled then the SQL in the uri is not used.
      | alwaysPopulateStatement | producer (advanced) | false | boolean | If enabled then the populateStatement method from org.apache.camel.component.sql.SqlPrepareStatementStrategy is always invoked also if there is no expected parameters to be prepared. When this is false then the populateStatement is only invoked if there is 1 or more expected parameters to be set; for example this avoids reading the message body/headers for SQL queries with no parameters.
      | parametersCount | producer (advanced) |  | int | If set greater than zero then Camel will use this count value of parameters to replace instead of querying via JDBC metadata API. This is useful if the JDBC vendor could not return correct parameters count then user may override instead.
      | placeholder | advanced | # | String | Specifies a character that will be replaced to in SQL query. Notice that it is simple String.replaceAll() operation and no SQL parsing is involved (quoted strings will also change).
      | prepareStatementStrategy | advanced |  | SqlPrepareStatementStrategy | Allows to plugin to use a custom org.apache.camel.component.sql.SqlPrepareStatementStrategy to control preparation of the query and prepared statement.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | templateOptions | advanced |  | Map | Configures the Spring JdbcTemplate with the key/values from the Map
      | usePlaceholder | advanced | true | boolean | Sets whether to use placeholder and replace all placeholder characters with sign in the SQL queries. This option is default true
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SQLComponent-Treatmentofthemessagebody]]
      Treatment of the message body
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The SQL component tries to convert the message body to an object of
      `java.util.Iterator` type and then uses this iterator to fill the query
      parameters (where each query parameter is represented by a `#` symbol
      (or configured placeholder) in the endpoint URI). If the message body is
      not an array or collection, the conversion results in an iterator that
      iterates over only one object, which is the body itself.

      For example, if the message body is an instance of `java.util.List`, the
      first item in the list is substituted into the first occurrence of `#`
      in the SQL query, the second item in the list is substituted into the
      second occurrence of `#`, and so on.

      If `batch` is set to `true`, then the interpretation of the inbound
      message body changes slightly ??? instead of an iterator of parameters,
      the component expects an iterator that contains the parameter iterators;
      the size of the outer iterator determines the batch size.

      From Camel 2.16 onwards you can use the option??useMessageBodyForSql that
      allows to use the message body as the SQL statement, and then the SQL
      parameters must be provided in a header with the
      key??SqlConstants.SQL_PARAMETERS. This allows the SQL component to work
      more dynamic as the SQL query is from the message body.

      [[SQLComponent-Resultofthequery]]
      Result of the query
      ^^^^^^^^^^^^^^^^^^^

      For `select` operations, the result is an instance of
      `List<Map<String, Object>>` type, as returned by the
      http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/JdbcTemplate.html#queryForList(java.lang.String,%20java.lang.Object%91%93)[JdbcTemplate.queryForList()]
      method. For `update` operations, the result is the number of updated
      rows, returned as an `Integer`.

      By default, the result is placed in the message body.?? If the
      outputHeader parameter is set, the result is placed in the header.?? This
      is an alternative to using a full message enrichment pattern to add
      headers, it provides a concise syntax for querying a sequence or some
      other small value into a header.?? It is convenient to use outputHeader
      and outputType together:

      [source,java]
      -------------------------------------------------------------------------------------------
      from("jms:order.inbox")
          .to("sql:select order_seq.nextval from dual?outputHeader=OrderId&outputType=SelectOne")
          .to("jms:order.booking");
      -------------------------------------------------------------------------------------------

      [[SQLComponent-UsingStreamList]]
      Using StreamList
      ^^^^^^^^^^^^^^^^

      From*Camel 2.18* onwards the producer supports outputType=StreamList
      that uses an iterator to stream the output of the query. This allows to
      process the data in a streaming fashion which for example can be used by
      the??link:splitter.html[Splitter] EIP to process each row one at a time,
      and load data from the database as needed.

      [source,java]
      -----------------------------------------------------------------------------------------------------------------------------------
      from("direct:withSplitModel")
              .to("sql:select * from projects order by id?outputType=StreamList&outputClass=org.apache.camel.component.sql.ProjectModel")
              .to("log:stream")
              .split(body()).streaming()
                  .to("log:row")
                  .to("mock:result")
              .end();
      -----------------------------------------------------------------------------------------------------------------------------------

      ??

      [[SQLComponent-Headervalues]]
      Header values
      ^^^^^^^^^^^^^

      When performing `update` operations, the SQL Component stores the update
      count in the following message headers:

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

      |`CamelSqlUpdateCount` |The number of rows updated for `update` operations, returned as an
      `Integer` object. This header??is not provided when using
      outputType=StreamList.

      |`CamelSqlRowCount` |The number of rows returned for `select` operations, returned as an
      `Integer` object. This header??is not provided when using
      outputType=StreamList.

      |`CamelSqlQuery` |*Camel 2.8:* Query to execute. This query takes precedence over the
      query specified in the endpoint URI. Note that query parameters in the
      header _are_ represented by a `?` instead of a `#` symbol
      |=======================================================================

      When performing??`insert` operations, the SQL Component stores the rows
      with the generated keys and number of these rown in the following
      message headers (*Available as of Camel 2.12.4, 2.13.1*):

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

      |CamelSqlGeneratedKeysRowCount |The number of rows in the header that contains generated keys.

      |CamelSqlGeneratedKeyRows |Rows that contains the generated keys (a list of maps of keys).
      |=======================================================================

      [[SQLComponent-Generatedkeys]]
      Generated keys
      ^^^^^^^^^^^^^^

      *Available as of Camel 2.12.4, 2.13.1 and 2.14 *

      If you insert data using SQL INSERT, then the RDBMS may support auto
      generated keys. You can instruct the SQL producer to return the
      generated keys in headers. +
       To do that set the header `CamelSqlRetrieveGeneratedKeys=true`. Then
      the generated keys will be provided as headers with the keys listed in
      the table above.

      You can see more details in this
      https://git-wip-us.apache.org/repos/asf?p=camel.git;a=blob_plain;f=components/camel-sql/src/test/java/org/apache/camel/component/sql/SqlGeneratedKeysTest.java;hb=3962b23f94bb4bc23011b931add08c3f6833c82e[unit
      test].

      [[SQLComponent-Configuration]]
      Configuration
      ^^^^^^^^^^^^^

      You can now set a reference to a `DataSource` in the URI directly:

      [source,java]
      ----------------------------------------------------------------
      sql:select * from table where id=# order by name?dataSource=myDS
      ----------------------------------------------------------------

      [[SQLComponent-Sample]]
      Sample
      ^^^^^^

      In the sample below we execute a query and retrieve the result as a
      `List` of rows, where each row is a `Map<String, Object` and the key is
      the column name.

      First, we set up a table to use for our sample. As this is based on an
      unit test, we do it in java:

      The SQL script `createAndPopulateDatabase.sql` we execute looks like as
      described below:

      Then we configure our route and our `sql` component. Notice that we use
      a `direct` endpoint in front of the `sql` endpoint. This allows us to
      send an exchange to the `direct` endpoint with the URI, `direct:simple`,
      which is much easier for the client to use than the long `sql:` URI.
      Note that the `DataSource` is looked up up in the registry, so we can
      use standard Spring XML to configure our `DataSource`.

      And then we fire the message into the `direct` endpoint that will route
      it to our `sql` component that queries the database.

      We could configure the `DataSource` in Spring XML as follows:

      [source,xml]
      -----------------------------------------------------------
       <jee:jndi-lookup id="myDS" jndi-name="jdbc/myDataSource"/>
      -----------------------------------------------------------

      [[SQLComponent-Usingnamedparameters]]
      Using named parameters
      ++++++++++++++++++++++

      *Available as of Camel 2.11*

      In the given route below, we want to get all the projects from the
      projects table. Notice the SQL query has 2 named parameters, :#lic and
      :#min. +
       Camel will then lookup for these parameters from the message body or
      message headers. Notice in the example above we set two headers with
      constant value +
       for the named parameters:

      [source,java]
      ---------------------------------------------------------------------------------------
         from("direct:projects")
           .setHeader("lic", constant("ASF"))
           .setHeader("min", constant(123))
           .to("sql:select * from projects where license = :#lic and id > :#min order by id")
      ---------------------------------------------------------------------------------------

      Though if the message body is a `java.util.Map` then the named
      parameters will be taken from the body.

      [source,java]
      ---------------------------------------------------------------------------------------
         from("direct:projects")
           .to("sql:select * from projects where license = :#lic and id > :#min order by id")
      ---------------------------------------------------------------------------------------

      [[SQLComponent-Usingexpressionparameters]]
      Using expression parameters
      +++++++++++++++++++++++++++

      *Available as of Camel 2.14*

      In the given route below, we want to get all the project from the
      database. It uses the body of the exchange for defining the license and
      uses the value of a property as the second parameter.

      [source,java]
      ----------------------------------------------------------------------------------------------------
      from("direct:projects")
        .setBody(constant("ASF"))
        .setProperty("min", constant(123))
        .to("sql:select * from projects where license = :#${body} and id > :#${property.min} order by id")
      ----------------------------------------------------------------------------------------------------

      [[SQLComponent-UsingINquerieswithdynamicvalues]]
      Using IN queries with dynamic values
      ++++++++++++++++++++++++++++++++++++

      *Available as of Camel 2.17*

      From Camel 2.17 onwards the SQL producer allows to use SQL queries with
      IN statements where the IN values is dynamic computed. For example from
      the message body or a header etc.

      To use IN you need to:

      * prefix the parameter name with??`in:`
      * add `( )`??around the parameter

      An example explains this better. The following query is used:

      [source,java]
      -----------------------------
      -- this is a comment
      select *
      from projects
      where project in (:#in:names)
      order by id
      -----------------------------

      In the following route:

      [source,java]
      -------------------------------------------------
      from("direct:query")
          .to("sql:classpath:sql/selectProjectsIn.sql")
          .to("log:query")
          .to("mock:query");
      -------------------------------------------------

      Then the IN query can use a header with the key names with the dynamic
      values such as:

      [source,java]
      --------------------------------------------------------------------------------------------------
      // use an array
      template.requestBodyAndHeader("direct:query", "Hi there!", "names", new String[]{"Camel", "AMQ"});


      // use a list
      List<String> names = new ArrayList<String>();
      names.add("Camel");
      names.add("AMQ");

      template.requestBodyAndHeader("direct:query", "Hi there!", "names", names);


      // use a string separated values with comma
      template.requestBodyAndHeader("direct:query", "Hi there!", "names", "Camel,AMQ");
      --------------------------------------------------------------------------------------------------

      The query can also be specified in the endpoint instead of being
      externalized (notice that externalizing makes maintaining the SQL
      queries easier)

      [source,java]
      -------------------------------------------------------------------------------
      from("direct:query")
          .to("sql:select * from projects where project in (:#in:names) order by id")
          .to("log:query")
          .to("mock:query");
      -------------------------------------------------------------------------------

      ??

      [[SQLComponent-UsingtheJDBCbasedidempotentrepository]]
      Using the JDBC based idempotent repository
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.7*: In this section we will use the JDBC based
      idempotent repository.


      TIP:*Abstract class*
      From Camel 2.9 onwards there is an abstract class
      `org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository`
      you can extend to build custom JDBC idempotent repository.

      ??

      First we have to create the database table which will be used by the
      idempotent repository. For *Camel 2.7*, we use the following schema:

      [source,sql]
      -------------------------------------------------------------------------------
      CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
      messageId VARCHAR(100) )
      -------------------------------------------------------------------------------
      ??

      In *Camel 2.8*, we added the createdAt column:

      [source,sql]
      -------------------------------------------------------------------------------
      CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
      messageId VARCHAR(100), createdAt TIMESTAMP )
      -------------------------------------------------------------------------------

      WARNING:The SQL Server??*TIMESTAMP* type is a fixed-length binary-string type. It
      does not map to any of the JDBC time types: *DATE*, *TIME*, or
      *TIMESTAMP*.

      Customize the JdbcMessageIdRepository

      Starting with *Camel 2.9.1* you have a few options to tune the
      `org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository` for
      your needs:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Parameter |Default Value |Description

      |createTableIfNotExists |true |Defines whether or not Camel should try to create the table if it
      doesn't exist.

      |tableExistsString |SELECT 1 FROM CAMEL_MESSAGEPROCESSED WHERE 1 = 0 |This query is used to figure out whether the table already exists or
      not. It must throw an exception to indicate the table doesn't exist.

      |createString |CREATE TABLE CAMEL_MESSAGEPROCESSED (processorName VARCHAR(255),
      messageId VARCHAR(100), createdAt TIMESTAMP) |The statement which is used to create the table.

      |queryString |SELECT COUNT(*) FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ? AND
      messageId = ? |The query which is used to figure out whether the message already exists
      in the repository (the result is not equals to '0'). It takes two
      parameters. This first one is the processor name (`String`) and the
      second one is the message id (`String`).

      |insertString |INSERT INTO CAMEL_MESSAGEPROCESSED (processorName, messageId, createdAt)
      VALUES (?, ?, ?) |The statement which is used to add the entry into the table. It takes
      three parameter. The first one is the processor name (`String`), the
      second one is the message id (`String`) and the third one is the
      timestamp (`java.sql.Timestamp`) when this entry was added to the
      repository.

      |deleteString |DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ? AND messageId
      = ? |The statement which is used to delete the entry from the database. It
      takes two parameter. This first one is the processor name (`String`) and
      the second one is the message id (`String`).
      |=======================================================================

      Using the JDBC based aggregation repository

      *Available as of Camel 2.6*

      INFO: *Using JdbcAggregationRepository in Camel 2.6*

      In Camel 2.6, the JdbcAggregationRepository is provided in the
      `camel-jdbc-aggregator` component. From Camel 2.7 onwards, the
      `JdbcAggregationRepository` is provided in the `camel-sql` component.

      `JdbcAggregationRepository` is an `AggregationRepository` which on the
      fly persists the aggregated messages. This ensures that you will not
      loose messages, as the default aggregator will use an in memory only
      `AggregationRepository`. The `JdbcAggregationRepository` allows together with Camel to provide
      persistent support for the link:aggregator2.html[Aggregator].

      Only when an link:exchange.html[Exchange] has been successfully
      processed it will be marked as complete which happens when the `confirm`
      method is invoked on the `AggregationRepository`. This means if the same
      link:exchange.html[Exchange] fails again it will be kept retried until
      it success.

      You can use option `maximumRedeliveries` to limit the maximum number of
      redelivery attempts for a given recovered link:exchange.html[Exchange].
      You must also set the `deadLetterUri` option so Camel knows where to
      send the link:exchange.html[Exchange] when the `maximumRedeliveries` was
      hit.

      You can see some examples in the unit tests of camel-sql, for example
      https://svn.apache.org/repos/asf/camel/trunk/components/camel-sql/src/test/java/org/apache/camel/processor/aggregate/jdbc/JdbcAggregateRecoverDeadLetterChannelTest.java[this
      test].

      Database

      To be operational, each aggregator uses two table: the aggregation and
      completed one. By convention the completed has the same name as the
      aggregation one suffixed with `"_COMPLETED"`. The name must be
      configured in the Spring bean with the `RepositoryName` property. In the
      following example aggregation will be used.

      The table structure definition of both table are identical: in both case
      a String value is used as key (*id*) whereas a Blob contains the
      exchange serialized in byte array. +
       However one difference should be remembered: the *id* field does not
      have the same content depending on the table. +
       In the aggregation table *id* holds the correlation Id used by the
      component to aggregate the messages. In the completed table, *id* holds
      the id of the exchange stored in corresponding the blob field.

      Here is the SQL query used to create the tables, just replace
      `"aggregation"` with your aggregator repository name.

      [source,sql]
      -------------------------------------------------------------------------------
      CREATE TABLE aggregation ( id varchar(255) NOT NULL, exchange blob NOT
      NULL, constraint aggregation_pk PRIMARY KEY (id) ); CREATE TABLE
      aggregation_completed ( id varchar(255) NOT NULL, exchange blob NOT
      NULL, constraint aggregation_completed_pk PRIMARY KEY (id) );
      -------------------------------------------------------------------------------


      Storing body and headers as text

      *Available as of Camel 2.11*

      You can configure the `JdbcAggregationRepository` to store message body
      and select(ed) headers as String in separate columns. For example to
      store the body, and the following two headers `companyName` and
      `accountName` use the following SQL:

      [source,sql]
      -------------------------------------------------------------------------------
      CREATE TABLE aggregationRepo3 ( id varchar(255) NOT NULL, exchange blob
      NOT NULL, body varchar(1000), companyName varchar(1000), accountName
      varchar(1000), constraint aggregationRepo3_pk PRIMARY KEY (id) ); CREATE
      TABLE aggregationRepo3_completed ( id varchar(255) NOT NULL, exchange
      blob NOT NULL, body varchar(1000), companyName varchar(1000),
      accountName varchar(1000), constraint aggregationRepo3_completed_pk
      PRIMARY KEY (id) );
      -------------------------------------------------------------------------------
      ??

      And then configure the repository to enable this behavior as shown
      below:

      [source,xml]
      -------------------------------------------------------------------------------
      <bean id="repo3"
      class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
      <property name="repositoryName" value="aggregationRepo3"/> <property
      name="transactionManager" ref="txManager3"/> <property name="dataSource"
      ref="dataSource3"/> <!-- configure to store the message body and
      following headers as text in the repo --> <property
      name="storeBodyAsText" value="true"/> <property
      name="headersToStoreAsText"> <list> <value>companyName</value>
      <value>accountName</value> </list> </property> </bean>
      -------------------------------------------------------------------------------

      Codec (Serialization)

      Since they can contain any type of payload, Exchanges are not
      serializable by design. It is converted into a byte array to be stored
      in a database BLOB field. All those conversions are handled by the
      `JdbcCodec` class. One detail of the code requires your attention: the
      `ClassLoadingAwareObjectInputStream`.

      The `ClassLoadingAwareObjectInputStream` has been reused from the
      http://activemq.apache.org/[Apache ActiveMQ] project. It wraps an
      `ObjectInputStream` and use it with the `ContextClassLoader` rather than
      the `currentThread` one. The benefit is to be able to load classes
      exposed by other bundles. This allows the exchange body and headers to
      have custom types object references.

      Transaction

      A Spring `PlatformTransactionManager` is required to orchestrate
      transaction.

      Service (Start/Stop)

      The `start` method verify the connection of the database and the
      presence of the required tables. If anything is wrong it will fail
      during starting.

      Aggregator configuration

      Depending on the targeted environment, the aggregator might need some
      configuration. As you already know, each aggregator should have its own
      repository (with the corresponding pair of table created in the
      database) and a data source. If the default lobHandler is not adapted to
      your database system, it can be injected with the `lobHandler` property.

      Here is the declaration for Oracle:

      [source,xml]
      -------------------------------------------------------------------------------
      <bean id="lobHandler"
      class="org.springframework.jdbc.support.lob.OracleLobHandler"> <property
      name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/> </bean> <bean
      id="nativeJdbcExtractor"
      class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>
      <bean id="repo"
      class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
      <property name="transactionManager" ref="transactionManager"/> <property
      name="repositoryName" value="aggregation"/> <property name="dataSource"
      ref="dataSource"/> <!-- Only with Oracle, else use default --> <property
      name="lobHandler" ref="lobHandler"/> </bean>
      -------------------------------------------------------------------------------
      ??
      Optimistic locking

      From *Camel 2.12* onwards you can turn on `optimisticLocking` and use
      this JDBC based aggregation repository in a clustered environment where
      multiple Camel applications shared the same database for the aggregation
      repository. If there is a race condition there JDBC driver will throw a
      vendor specific exception which the `JdbcAggregationRepository` can
      react upon. To know which caused exceptions from the JDBC driver is
      regarded as an optimistick locking error we need a mapper to do this.
      Therefore there is a
      `org.apache.camel.processor.aggregate.jdbc.JdbcOptimisticLockingExceptionMapper`
      allows you to implement your custom logic if needed. There is a default
      implementation
      `org.apache.camel.processor.aggregate.jdbc.DefaultJdbcOptimisticLockingExceptionMapper`
      which works as follows:

      The following check is done:

      If the caused exception is an `SQLException` then the SQLState is
      checked if starts with 23.

      If the caused exception is a `DataIntegrityViolationException`

      If the caused exception class name has "ConstraintViolation" in its
      name.

      optional checking for FQN class name matches if any class names has been
      configured

      You can in addition add FQN classnames, and if any of the caused
      exception (or any nested) equals any of the FQN class names, then its an
      optimistick locking error.

      Here is an example, where we define 2 extra FQN class names from the
      JDBC vendor.

      [source,xml]
      -------------------------------------------------------------------------------
      <bean id="repo"
      class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
      <property name="transactionManager" ref="transactionManager"/> <property
      name="repositoryName" value="aggregation"/> <property name="dataSource"
      ref="dataSource"/> <property name"jdbcOptimisticLockingExceptionMapper"
      ref="myExceptionMapper"/> </bean> <!-- use the default mapper with extra
      FQN class names from our JDBC driver --> <bean id="myExceptionMapper"
      class="org.apache.camel.processor.aggregate.jdbc.DefaultJdbcOptimisticLockingExceptionMapper">
      <property name="classNames"> <util:set>
      <value>com.foo.sql.MyViolationExceptoion</value>
      <value>com.foo.sql.MyOtherViolationExceptoion</value> </util:set>
      </property> </bean>
      -------------------------------------------------------------------------------
      ??

      [[SQLComponent-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      link:sql-stored-procedure.html[SQL Stored Procedure]

      link:jdbc.html[JDBC]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-sql-stored
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: sql-stored
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: sql-stored
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: sql-stored
          spec:
            containers:
            - image: fabric8/connector-sql-stored:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: sql-stored
        syntax: sql-stored:template
        title: SQL StoredProcedure
        description: The sql component allows you to work with databases using JDBC Stored Procedure queries.
        label: database,sql
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.sql.stored.SqlStoredComponent
        groupId: org.apache.camel
        artifactId: camel-sql
        version: 2.18.1
      componentProperties:
        dataSource:
          kind: property
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: Sets the DataSource to use to communicate with the database.
      properties:
        template:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the StoredProcedure template to perform
        batch:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Enables or disables batch mode
        dataSource:
          kind: parameter
          group: producer
          type: object
          javaType: javax.sql.DataSource
          deprecated: false
          secret: false
          description: Sets the DataSource to use to communicate with the database.
        noop:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If set will ignore the results of the template and use the existing IN message as the OUT message for the continuation of processing
        outputHeader:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Store the template result in a header instead of the message body. By default outputHeader == null and the template result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the template result and the original message body is preserved.
        useMessageBodyForTemplate:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use the message body as the template and then headers for parameters. If this option is enabled then the template in the uri is not used.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[SQLStoredProcedure-SQLStoredProcedureComponent]]
      SQL Stored Procedure Component
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.17*

      The *sql-stored:* component allows you to work with databases using JDBC
      Stored Procedure queries. This component is an extension to
      the??link:sql-component.html[SQL Component] but specialized for calling
      stored procedures.

      This component uses `spring-jdbc` behind the scenes for the actual SQL
      handling.

      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-sql</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[SQLStoredProcedure-URIformat]]
      URI format
      ^^^^^^^^^^

      The SQL component uses the following endpoint URI notation:

      [source,java]
      -----------------------------
      sql-stored:template[?options]
      -----------------------------

      Where template is the stored procedure template, where you declare the
      name of the stored procedure and the IN and OUT arguments.??

      You can also refer to the template in a external file on the file system
      or classpath such as:

      [source,java]
      --------------------------------------------------
      sql-stored:classpath:sql/myprocedure.sql[?options]
      --------------------------------------------------

      Where sql/myprocedure.sql is a plain text file in the classpath with the
      template, as show:

      [source,java]
      --------------------------
      SUBNUMBERS(
        INTEGER ${headers.num1},
        INTEGER ${headers.num2},
        OUT INTEGER resultofsub
      )
      --------------------------

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

      [[SQLStoredProcedure-Options]]
      Options
      ^^^^^^^



      // component options: START
      The SQL StoredProcedure component supports 1 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | dataSource | DataSource | Sets the DataSource to use to communicate with the database.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The SQL StoredProcedure component supports 7 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | template | producer |  | String | *Required* Sets the StoredProcedure template to perform
      | batch | producer | false | boolean | Enables or disables batch mode
      | dataSource | producer |  | DataSource | Sets the DataSource to use to communicate with the database.
      | noop | producer | false | boolean | If set will ignore the results of the template and use the existing IN message as the OUT message for the continuation of processing
      | outputHeader | producer |  | String | Store the template result in a header instead of the message body. By default outputHeader == null and the template result is stored in the message body any existing content in the message body is discarded. If outputHeader is set the value is used as the name of the header to store the template result and the original message body is preserved.
      | useMessageBodyForTemplate | producer | false | boolean | Whether to use the message body as the template and then headers for parameters. If this option is enabled then the template in the uri is not used.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SQLStoredProcedure-Declaringthestoredproceduretemplate]]
      Declaring the stored procedure template
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The template is declared using a syntax that would be similar to a Java
      method signature. The name of the stored procedure, and then the
      arguments enclosed in parenthesis. An example explains this well:

      [source,java]
      ----------------------------------------------------------------------------------------------------------
      <to uri="sql-stored:SUBNUMBERS(INTEGER ${headers.num1},INTEGER ${headers.num2},OUT INTEGER resultofsub)"/>
      ----------------------------------------------------------------------------------------------------------

      The arguments is declared by a type and then the mapping to the Camel
      message using simple expression. So in this example the first two
      parameters are IN values that are INTEGER type, that maps to the message
      headers. The last parameter is the OUT value, also an INTEGER type.

      In SQL term the stored procedure could be declared as:

      [source,java]
      ------------------------------------------------------------------------------
      CREATE PROCEDURE SUBNUMBERS(VALUE1 INTEGER, VALUE2 INTEGER,OUT RESULT INTEGER)
      ------------------------------------------------------------------------------

      [[SQLStoredProcedure-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:sql-component.html[SQL Component]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-ssh
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: ssh
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: ssh
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: ssh
          spec:
            containers:
            - image: fabric8/connector-ssh:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: ssh
        syntax: ssh:host:port
        alternativeSyntax: ssh:username:password@host:port
        title: SSH
        description: The ssh component enables access to SSH servers such that you can send an SSH command and process the response.
        label: file
        deprecated: false
        async: false
        javaType: org.apache.camel.component.ssh.SshComponent
        groupId: org.apache.camel
        artifactId: camel-ssh
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.ssh.SshConfiguration
          deprecated: false
          secret: false
          description: To use the shared SSH configuration
        host:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the hostname of the remote SSH server.
        port:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the port number for the remote SSH server.
        username:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the username to use in logging into the remote SSH server.
        password:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null.
        pollCommand:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer i.e. from(ssh://...). You may need to end your command with a newline and that must be URL encoded 0A
        keyPairProvider:
          kind: property
          type: object
          javaType: org.apache.sshd.common.KeyPairProvider
          deprecated: false
          secret: false
          description: Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server.
        keyType:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. Defaults to ssh-rsa.
        timeout:
          kind: property
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds.
        certFilename:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: true
          secret: false
          description: Sets the resource path of the certificate to use for Authentication.
        certResource:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate and depends on keyType setting.
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the hostname of the remote SSH server.
        port:
          kind: path
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "22"
          description: Sets the port number for the remote SSH server.
        certResource:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate and depends on keyType setting.
        keyType:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: ssh-rsa
          description: Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. Defaults to ssh-rsa.
        password:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null.
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds.
        username:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the username to use in logging into the remote SSH server.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        pollCommand:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer i.e. from(ssh://...) You may need to end your command with a newline and that must be URL encoded 0A
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |+
      [[SSH-SSH]]
      SSH
      ~~~

      *Available as of Camel 2.10*

      The SSH component enables access to SSH servers such that you can send
      an SSH command, and process the response.

      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-ssh</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[SSH-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------------------------
      ssh:[username[:password]@]host[:port][?options]
      -----------------------------------------------

      [[SSH-Options]]
      Options
      ^^^^^^^



      // component options: START
      The SSH component supports 11 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | SshConfiguration | To use the shared SSH configuration
      | host | String | Sets the hostname of the remote SSH server.
      | port | int | Sets the port number for the remote SSH server.
      | username | String | Sets the username to use in logging into the remote SSH server.
      | password | String | Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null.
      | pollCommand | String | Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer i.e. from(ssh://...). You may need to end your command with a newline and that must be URL encoded 0A
      | keyPairProvider | KeyPairProvider | Sets the KeyPairProvider reference to use when connecting using Certificates to the remote SSH Server.
      | keyType | String | Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. Defaults to ssh-rsa.
      | timeout | long | Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds.
      | certFilename | String | Sets the resource path of the certificate to use for Authentication.
      | certResource | String | Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate and depends on keyType setting.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The SSH component supports 27 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | host | common |  | String | *Required* Sets the hostname of the remote SSH server.
      | port | common | 22 | int | Sets the port number for the remote SSH server.
      | certResource | common |  | String | Sets the resource path of the certificate to use for Authentication. Will use ResourceHelperKeyPairProvider to resolve file based certificate and depends on keyType setting.
      | keyType | common | ssh-rsa | String | Sets the key type to pass to the KeyPairProvider as part of authentication. KeyPairProvider.loadKey(...) will be passed this value. Defaults to ssh-rsa.
      | password | common |  | String | Sets the password to use in connecting to remote SSH server. Requires keyPairProvider to be set to null.
      | timeout | common | 30000 | long | Sets the timeout in milliseconds to wait in establishing the remote SSH server connection. Defaults to 30000 milliseconds.
      | username | common |  | String | Sets the username to use in logging into the remote SSH server.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | pollCommand | consumer |  | String | Sets the command string to send to the remote SSH server during every poll cycle. Only works with camel-ssh component being used as a consumer i.e. from(ssh://...) You may need to end your command with a newline and that must be URL encoded 0A
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[SSH-UsageasaProducerendpoint]]
      Usage as a Producer endpoint
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      When the SSH Component is used as a Producer (`.to("ssh://...")`), it
      will send the message body as the command to execute on the remote SSH
      server.

      Here is an example of this within the XML DSL. Note that the command has
      an XML encoded newline (`&#10;`).

      [source,xml]
      ----------------------------------------------
      <route id="camel-example-ssh-producer">
        <from uri="direct:exampleSshProducer"/>
        <setBody>
          <constant>features:list&#10;</constant>
        </setBody>
        <to uri="ssh://karaf:karaf@localhost:8101"/>
        <log message="${body}"/>
      </route>
      ----------------------------------------------

      [[SSH-Authentication]]
      Authentication
      ^^^^^^^^^^^^^^

      The SSH Component can authenticate against the remote SSH server using
      one of two mechanisms: Public Key certificate or username/password.
      Configuring how the SSH Component does authentication is based on how
      and which options are set.

      1.  First, it will look to see if the `certResource` option has been
      set, and if so, use it to locate the referenced Public Key certificate
      and use that for authentication.
      2.  If `certResource` is not set, it will look to see if a
      `keyPairProvider` has been set, and if so, it will use that to for
      certificate based authentication.
      3.  If neither `certResource` nor `keyPairProvider` are set, it will use
      the `username` and `password` options for authentication.

      The following route fragment shows an SSH polling consumer using a
      certificate from the classpath.

      In the XML DSL,

      [source,xml]
      -------------------------------------------------------------------------------------------------------------------------------------------------
      <route>
        <from uri="ssh://scott@localhost:8101?certResource=classpath:test_rsa&amp;useFixedDelay=true&amp;delay=5000&amp;pollCommand=features:list%0A"/>
        <log message="${body}"/>
      </route>
      -------------------------------------------------------------------------------------------------------------------------------------------------

      In the Java DSL,

      [source,java]
      -----------------------------------------------------------------------------------------------------------------------------
      from("ssh://scott@localhost:8101?certResource=classpath:test_rsa&useFixedDelay=true&delay=5000&pollCommand=features:list%0A")
          .log("${body}");
      -----------------------------------------------------------------------------------------------------------------------------

      An example of using Public Key authentication is provided in
      `examples/camel-example-ssh-security`.

      [[SSH-CertificateDependencies]]
      Certificate Dependencies

      You will need to add some additional runtime dependencies if you use
      certificate based authentication. The dependency versions shown are as
      of Camel 2.11, you may need to use later versions depending what version
      of Camel you are using.

      [source,xml]
      -----------------------------------------
      <dependency>
        <groupId>org.apache.sshd</groupId>
        <artifactId>sshd-core</artifactId>
        <version>0.8.0</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpg-jdk15on</artifactId>
        <version>1.47</version>
      </dependency>
      <dependency>
        <groupId>org.bouncycastle</groupId>
        <artifactId>bcpkix-jdk15on</artifactId>
        <version>1.47</version>
      </dependency>
      -----------------------------------------

      [[SSH-Example]]
      Example
      ^^^^^^^

      See the `examples/camel-example-ssh` and
      `examples/camel-example-ssh-security` in the Camel distribution.

      [[SSH-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-stax
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: stax
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: stax
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: stax
          spec:
            containers:
            - image: fabric8/connector-stax:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: stax
        syntax: stax:contentHandlerClass
        title: StAX
        description: The stax component allows messages to be process through a SAX ContentHandler.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.stax.StAXComponent
        groupId: org.apache.camel
        artifactId: camel-stax
        version: 2.18.1
      componentProperties: {}
      properties:
        contentHandlerClass:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The FQN class name for the ContentHandler implementation to use.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: "[[StAX-StAXComponent]]\nStAX Component\n~~~~~~~~~~~~~~\n\n\
      *Available as of Camel 2.9*\n\nThe StAX component allows messages to be process\
      \ through a SAX\nhttp://download.oracle.com/javase/6/docs/api/org/xml/sax/ContentHandler.html[ContentHandler].\
      \ +\nAnother feature of this component is to allow to iterate over JAXB\nrecords\
      \ using StAX, for example using the link:splitter.html[Splitter]\nEIP.\n\nMaven\
      \ users will need to add the following dependency to their `pom.xml`\nfor this\
      \ component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-stax</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[StAX-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n--------------------------\n\
      stax:content-handler-class\n--------------------------\n\nexample:\n\n[source,java]\n\
      -----------------------------------\nstax:org.superbiz.FooContentHandler\n-----------------------------------\n\
      \nFrom *Camel 2.11.1* onwards you can lookup a\n`org.xml.sax.ContentHandler`\
      \ bean from the link:registry.html[Registry]\nusing the # syntax as shown:\n\
      \n[source,java]\n---------------\nstax:#myHandler\n---------------\n\n[[Stax-Options]]\n\
      Options\n~~~~~~~\n\n\n// component options: START\nThe StAX component has no\
      \ options.\n// component options: END\n\n\n\n// endpoint options: START\nThe\
      \ StAX component supports 2 endpoint options which are listed below:\n\n{% raw\
      \ %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| contentHandlerClass |\
      \ producer |  | String | *Required* The FQN class name for the ContentHandler\
      \ implementation to use.\n| synchronous | advanced | false | boolean | Sets\
      \ whether synchronous processing should be strictly used or Camel is allowed\
      \ to use asynchronous processing (if supported).\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[StAX-UsageofacontenthandlerasStAXparser]]\n\
      Usage of a content handler as StAX parser\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nThe message body after the handling is the handler itself.\n\nHere an example:\n\
      \n[source,java]\n--------------------------------------------------------------------------------------------------------\n\
      from(\"file:target/in\")\n  .to(\"stax:org.superbiz.handler.CountingHandler\"\
      ) \n  // CountingHandler implements org.xml.sax.ContentHandler or extends org.xml.sax.helpers.DefaultHandler\n\
      \  .process(new Processor() {\n    @Override\n    public void process(Exchange\
      \ exchange) throws Exception {\n        CountingHandler handler = exchange.getIn().getBody(CountingHandler.class);\n\
      \        // do some great work with the handler\n    }\n  });\n--------------------------------------------------------------------------------------------------------\n\
      \n[[StAX-IterateoveracollectionusingJAXBandStAX]]\nIterate over a collection\
      \ using JAXB and StAX\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nFirst\
      \ we suppose you have JAXB objects.\n\nFor instance a list of records in a wrapper\
      \ object:\n\n[source,java]\n-------------------------------------------------\n\
      import java.util.ArrayList;\nimport java.util.List;\nimport javax.xml.bind.annotation.XmlAccessType;\n\
      import javax.xml.bind.annotation.XmlAccessorType;\nimport javax.xml.bind.annotation.XmlElement;\n\
      import javax.xml.bind.annotation.XmlRootElement;\n\n@XmlAccessorType(XmlAccessType.FIELD)\n\
      @XmlRootElement(name = \"records\")\npublic class Records {\n    @XmlElement(required\
      \ = true)\n    protected List<Record> record;\n\n    public List<Record> getRecord()\
      \ {\n        if (record == null) {\n            record = new ArrayList<Record>();\n\
      \        }\n        return record;\n    }\n}\n-------------------------------------------------\n\
      \nand\n\n[source,java]\n---------------------------------------------------------\n\
      import javax.xml.bind.annotation.XmlAccessType;\nimport javax.xml.bind.annotation.XmlAccessorType;\n\
      import javax.xml.bind.annotation.XmlAttribute;\nimport javax.xml.bind.annotation.XmlType;\n\
      \n@XmlAccessorType(XmlAccessType.FIELD)\n@XmlType(name = \"record\", propOrder\
      \ = { \"key\", \"value\" })\npublic class Record {\n    @XmlAttribute(required\
      \ = true)\n    protected String key;\n\n    @XmlAttribute(required = true)\n\
      \    protected String value;\n\n    public String getKey() {\n        return\
      \ key;\n    }\n\n    public void setKey(String key) {\n        this.key = key;\n\
      \    }\n\n    public String getValue() {\n        return value;\n    }\n\n \
      \   public void setValue(String value) {\n        this.value = value;\n    }\n\
      }\n---------------------------------------------------------\n\nThen you get\
      \ a XML file to process:\n\n[source,xml]\n-------------------------------------------------------\n\
      <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<records>\n \
      \ <record value=\"v0\" key=\"0\"/>\n  <record value=\"v1\" key=\"1\"/>\n  <record\
      \ value=\"v2\" key=\"2\"/>\n  <record value=\"v3\" key=\"3\"/>\n  <record value=\"\
      v4\" key=\"4\"/>\n  <record value=\"v5\" key=\"5\"/>\n</record>\n-------------------------------------------------------\n\
      \nThe StAX component provides an `StAXBuilder` which can be used when\niterating\
      \ XML elements with the Camel link:splitter.html[Splitter]\n\n[source,java]\n\
      ------------------------------------------\nfrom(\"file:target/in\")\n    .split(stax(Record.class)).streaming()\n\
      \        .to(\"mock:records\");\n------------------------------------------\n\
      \nWhere `stax` is a static method on\n`org.apache.camel.component.stax.StAXBuilder`\
      \ which you can static\nimport in the Java code. The stax builder is by default\
      \ namespace aware\non the XMLReader it uses. From *Camel 2.11.1* onwards you\
      \ can turn this\noff by setting the boolean parameter to false, as shown below:\n\
      \n[source,java]\n-------------------------------------------------\nfrom(\"\
      file:target/in\")\n    .split(stax(Record.class, false)).streaming()\n     \
      \   .to(\"mock:records\");\n-------------------------------------------------\n\
      \n[[StAX-ThepreviousexamplewithXMLDSL]]\nThe previous example with XML DSL\n\
      +++++++++++++++++++++++++++++++++\n\nThe example above could be implemented\
      \ as follows in XML DSL\n\n[[StAX-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-stomp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: stomp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: stomp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: stomp
          spec:
            containers:
            - image: fabric8/connector-stomp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: stomp
        syntax: stomp:destination
        title: Stomp
        description: The stomp component is used for communicating with Stomp compliant message brokers.
        label: messaging
        deprecated: false
        async: true
        javaType: org.apache.camel.component.stomp.StompComponent
        groupId: org.apache.camel
        artifactId: camel-stomp
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.stomp.StompConfiguration
          deprecated: false
          secret: false
          description: To use the shared stomp configuration
        brokerURL:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URI of the Stomp broker to connect to
        login:
          kind: property
          label: security
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username
        passcode:
          kind: property
          label: security
          required: false
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password
        host:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The virtual host
      properties:
        destination:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the queue
        brokerURL:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: tcp://localhost:61613
          description: The URI of the Stomp broker to connect to
        host:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The virtual host name
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        login:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The username
        passcode:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
    documentation.adoc: |+
      [[Stomp-StompComponent]]
      Stomp Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *stomp:* component is used for communicating with
      http://stomp.github.io/[Stomp] compliant message brokers, like
      http://activemq.apache.org[Apache ActiveMQ] or
      http://activemq.apache.org/apollo/[ActiveMQ Apollo]

      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-stomp</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Stomp-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------
      stomp:queue:destination[?options]
      ---------------------------------

      Where *destination* is the name of the queue.

      [[Stomp-Options]]
      Options
      ^^^^^^^



      // component options: START
      The Stomp component supports 5 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | StompConfiguration | To use the shared stomp configuration
      | brokerURL | String | The URI of the Stomp broker to connect to
      | login | String | The username
      | passcode | String | The password
      | host | String | The virtual host
      |=======================================================================
      {% endraw %}
      // component options: END





      // endpoint options: START
      The Stomp component supports 10 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | destination | common |  | String | *Required* Name of the queue
      | brokerURL | common | tcp://localhost:61613 | String | *Required* The URI of the Stomp broker to connect to
      | host | common |  | String | The virtual host name
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | login | security |  | String | The username
      | passcode | security |  | String | The password
      | sslContextParameters | security |  | SSLContextParameters | To configure security using SSLContextParameters
      |=======================================================================
      {% endraw %}
      // endpoint options: END



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

      [[Stomp-Samples]]
      Samples
      ^^^^^^^

      Sending messages:

      [source,java]
      ------------------------------------------
      from("direct:foo").to("stomp:queue:test");
      ------------------------------------------

      Consuming messages:

      [source,java]
      ------------------------------------------------------------------------------
      from("stomp:queue:test").transform(body().convertToString()).to("mock:result")
      ------------------------------------------------------------------------------

      [[Stomp-Endpoints]]
      Endpoints
      ~~~~~~~~~

      Camel supports the link:message-endpoint.html[Message Endpoint] pattern
      using the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html[Endpoint]
      interface. Endpoints are usually created by a
      link:component.html[Component] and Endpoints are usually referred to in
      the link:dsl.html[DSL] via their link:uris.html[URIs].

      From an Endpoint you can use the following methods

      *
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createProducer()[createProducer()]
      will create a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Producer.html[Producer]
      for sending message exchanges to the endpoint
      *
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createConsumer(org.apache.camel.Processor)[createConsumer()]
      implements the link:event-driven-consumer.html[Event Driven Consumer]
      pattern for consuming message exchanges from the endpoint via a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Processor.html[Processor]
      when creating a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Consumer.html[Consumer]
      *
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Endpoint.html#createPollingConsumer()[createPollingConsumer()]
      implements the link:polling-consumer.html[Polling Consumer] pattern for
      consuming message exchanges from the endpoint via a
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/PollingConsumer.html[PollingConsumer]

      [[Stomp-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:message-endpoint.html[Message Endpoint] pattern
      * link:uris.html[URIs]
      * link:writing-components.html[Writing Components]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-stream
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: stream
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: stream
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: stream
          spec:
            containers:
            - image: fabric8/connector-stream:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: stream
        syntax: stream:kind
        title: Stream
        description: 'The stream: component provides access to the system-in system-out
          and system-err streams as well as allowing streaming of file and URL.'
        label: file,system
        deprecated: false
        async: false
        javaType: org.apache.camel.component.stream.StreamComponent
        groupId: org.apache.camel
        artifactId: camel-stream
        version: 2.18.1
      componentProperties: {}
      properties:
        kind:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - in
          - out
          - err
          - header
          - file
          - url
          deprecated: false
          secret: false
          description: Kind of stream to use such as System.in or System.out.
        encoding:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 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.
        fileName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: When using the stream:file URI format this option specifies the filename to stream to/from.
        url:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 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.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        groupLines:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 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.
        groupStrategy:
          kind: parameter
          group: consumer
          label: consumer
          type: object
          javaType: org.apache.camel.component.stream.GroupStrategy
          deprecated: false
          secret: false
          description: Allows to use a custom GroupStrategy to control how to group lines.
        initialPromptDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "2000"
          description: 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.
        promptDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Optional delay in milliseconds before showing the message prompt.
        promptMessage:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Message prompt to use when reading from stream:in; for example you
            could set this to Enter a command:'
        retry:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Will retry opening the file if it's overwritten somewhat like tail --retry
        scanStream:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: To be used for continuously reading a stream such as the unix tail command.
        scanStreamDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Delay in milliseconds between read attempts when using scanStream.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        autoCloseCount:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: 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.
        closeOnDone:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: 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.
        delay:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          description: Initial delay in milliseconds before producing the stream.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Stream-StreamComponent]]
      Stream Component
      ~~~~~~~~~~~~~~~~

      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>
      ------------------------------------------------------------

      [[Stream-URIformat]]
      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&...`

      [[Stream-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Stream component has no options.
      // component options: END



      // endpoint options: START
      The Stream component supports 19 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | kind | common |  | String | *Required* Kind of stream to use such as System.in or System.out.
      | encoding | common |  | String | 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.
      | fileName | common |  | String | When using the stream:file URI format this option specifies the filename to stream to/from.
      | url | common |  | String | 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.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | groupLines | consumer |  | int | 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.
      | groupStrategy | consumer |  | GroupStrategy | Allows to use a custom GroupStrategy to control how to group lines.
      | initialPromptDelay | consumer | 2000 | long | 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.
      | promptDelay | consumer |  | long | Optional delay in milliseconds before showing the message prompt.
      | promptMessage | consumer |  | String | Message prompt to use when reading from stream:in; for example you could set this to Enter a command:
      | retry | consumer | false | boolean | Will retry opening the file if it's overwritten somewhat like tail --retry
      | scanStream | consumer | false | boolean | To be used for continuously reading a stream such as the unix tail command.
      | scanStreamDelay | consumer |  | long | Delay in milliseconds between read attempts when using scanStream.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | autoCloseCount | producer |  | int | 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.
      | closeOnDone | producer | false | boolean | 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.
      | delay | producer |  | long | Initial delay in milliseconds before producing the stream.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Stream-Messagecontent]]
      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.

      [[Stream-Samples]]
      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");
      ------------------------------------------------------------------------------------------------------------------------------------

      One gotcha with scanStream (pre Camel 2.7) or scanStream + retry is the
      file will be re-opened and scanned with each iteration of
      scanStreamDelay. Until NIO2 is available we cannot reliably detect when
      a file is deleted/recreated.

      [[Stream-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-string-template
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: string-template
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: string-template
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: string-template
          spec:
            containers:
            - image: fabric8/connector-string-template:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: string-template
        syntax: string-template:resourceUri
        title: String Template
        description: Transforms the message using a String template.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.stringtemplate.StringTemplateComponent
        groupId: org.apache.camel
        artifactId: camel-stringtemplate
        version: 2.18.1
      componentProperties: {}
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        delimiterStart:
          kind: parameter
          group: producer
          type: string
          javaType: char
          deprecated: false
          secret: false
          defaultValue: <
          description: The variable start delimiter
        delimiterStop:
          kind: parameter
          group: producer
          type: string
          javaType: char
          deprecated: false
          secret: false
          defaultValue: '>'
          description: The variable end delimiter
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[StringTemplate-StringTemplate]]
      String Template
      ~~~~~~~~~~~~~~~

      The *string-template:* component allows you to process a message using a
      http://www.stringtemplate.org/[String Template]. This can be ideal when
      using link:templating.html[Templating] to generate responses for
      requests.

      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-stringtemplate</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[StringTemplate-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------------
      string-template:templateName[?options]
      --------------------------------------

      Where *templateName* is the classpath-local URI of the template to
      invoke; or the complete URL of the remote template.

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

      [[StringTemplate-Options]]
      Options
      ^^^^^^^


      // component options: START
      The String Template component has no options.
      // component options: END



      // endpoint options: START
      The String Template component supports 5 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
      | delimiterStart | producer | < | char | The variable start delimiter
      | delimiterStop | producer | > | char | The variable end delimiter
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[StringTemplate-Headers]]
      Headers
      ^^^^^^^

      Camel will store a reference to the resource in the message header with
      key, `org.apache.camel.stringtemplate.resource`. The Resource is an
      `org.springframework.core.io.Resource` object.

      [[StringTemplate-Hotreloading]]
      Hot reloading
      ^^^^^^^^^^^^^

      The string template resource is by default hot-reloadable for both file
      and classpath resources (expanded jar). If you set `contentCache=true`,
      Camel loads the resource only once and hot-reloading is not possible.
      This scenario can be used in production when the resource never changes.

      [[StringTemplate-StringTemplateAttributes]]
      StringTemplate Attributes
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      Since Camel 2.14, you can define the custom context map by setting the
      message header "*CamelStringTemplateVariableMap*" just like the below
      code.

      [source,java]
      --------------------------------------------------------------------------
      Map<String, Object> variableMap = new HashMap<String, Object>();
      Map<String, Object> headersMap = new HashMap<String, Object>();
      headersMap.put("name", "Willem");
      variableMap.put("headers", headersMap);
      variableMap.put("body", "Monday");
      variableMap.put("exchange", exchange);
      exchange.getIn().setHeader("CamelStringTemplateVariableMap", variableMap);
      --------------------------------------------------------------------------

      [[StringTemplate-Samples]]
      Samples
      ^^^^^^^

      For example you could use a string template as follows in order to
      formulate a response to a message:

      [source,java]
      -----------------------------------------------
      from("activemq:My.Queue").
        to("string-template:com/acme/MyResponse.tm");
      -----------------------------------------------

      [[StringTemplate-TheEmailSample]]
      The Email Sample
      ^^^^^^^^^^^^^^^^

      In this sample we want to use a string template to send an order
      confirmation email. The email template is laid out in `StringTemplate`
      as: This example works for *camel 2.11.0*. If your camel version is less
      than 2.11.0, the variables should be started and ended with $.

      [source,java]
      --------------------------------------------
      Dear <headers.lastName>, <headers.firstName>

      Thanks for the order of <headers.item>.

      Regards Camel Riders Bookstore
      <body>
      --------------------------------------------

      And the java code is as follows:

      [[StringTemplate-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-stub
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: stub
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: stub
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: stub
          spec:
            containers:
            - image: fabric8/connector-stub:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: stub
        syntax: stub:name
        title: Stub
        description: The stub component provides a simple way to stub out any physical endpoints while in development or testing.
        label: core,testing
        deprecated: false
        async: true
        javaType: org.apache.camel.component.stub.StubComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        queueSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the default maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
        concurrentConsumers:
          kind: property
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Sets the default number of concurrent threads processing exchanges.
        defaultQueueFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.seda.BlockingQueueFactory<org.apache.camel.Exchange>
          deprecated: false
          secret: false
          description: Sets the default queue factory.
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of queue
        size:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent threads processing exchanges.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        limitConcurrentConsumers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit the number of concurrentConsumers to the maximum of 500. By default an exception will be thrown if an endpoint is configured with a greater number. You can disable that check by turning this option off.
        multipleConsumers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether multiple consumers are allowed. If enabled you can use SEDA for Publish-Subscribe messaging. That is you can send a message to the SEDA queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
        pollTimeout:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout used when polling. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
        purgeWhenStopping:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to purge the task queue when stopping the consumer/route. This allows to stop faster as any pending messages on the queue is discarded.
        blockWhenFull:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a thread that sends messages to a full SEDA queue will block until the queue's capacity is no longer exhausted. By default an exception will be thrown stating that the queue is full. By enabling this option the calling thread will instead block and wait until the message can be accepted.
        discardIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should discard the message (do not add the message to the queue) when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
        failIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should fail by throwing an exception when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout (in milliseconds) before a SEDA producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
        waitForTaskToComplete:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.WaitForTaskToComplete
          enum:
          - Never
          - IfReplyExpected
          - Always
          deprecated: false
          secret: false
          defaultValue: IfReplyExpected
          description: 'Option to specify whether the caller should wait for the async task
            to complete or not before continuing. The following three options are supported:
            Always Never or IfReplyExpected. The first two values are self-explanatory.
            The last value IfReplyExpected will only wait if the message is Request Reply
            based. The default option is IfReplyExpected.'
        queue:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.concurrent.BlockingQueue
          deprecated: false
          secret: false
          description: Define the queue instance which will be used by the endpoint. This option is only for rare use-cases where you want to use a custom queue instance.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Stub-StubComponent]]
      Stub Component
      ~~~~~~~~~~~~~~

      *Available as of Camel 2.10*

      The *stub:* component provides a simple way to stub out any physical
      endpoints while in development or testing, allowing you for example to
      run a route without needing to actually connect to a specific
      link:mail.html[SMTP] or link:http.html[Http] endpoint. Just add *stub:*
      in front of any endpoint URI to stub out the endpoint.

      Internally the Stub component creates link:vm.html[VM] endpoints. The
      main difference between link:stub.html[Stub] and link:vm.html[VM] is
      that link:vm.html[VM] will validate the URI and parameters you give it,
      so putting vm: in front of a typical URI with query arguments will
      usually fail. Stub won't though, as it basically ignores all query
      parameters to let you quickly stub out one or more endpoints in your
      route temporarily.

      [[Stub-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ------------
      stub:someUri
      ------------

      Where *`someUri`* can be any URI with any query parameters.

      [[Stub-Options]]
      Options
      ^^^^^^^

      // component options: START
      The Stub component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | queueSize | int | Sets the default maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
      | concurrentConsumers | int | Sets the default number of concurrent threads processing exchanges.
      | defaultQueueFactory | Exchange> | Sets the default queue factory.
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The Stub component supports 17 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Name of queue
      | size | common | 2147483647 | int | The maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent threads processing exchanges.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | limitConcurrentConsumers | consumer (advanced) | true | boolean | Whether to limit the number of concurrentConsumers to the maximum of 500. By default an exception will be thrown if an endpoint is configured with a greater number. You can disable that check by turning this option off.
      | multipleConsumers | consumer (advanced) | false | boolean | Specifies whether multiple consumers are allowed. If enabled you can use SEDA for Publish-Subscribe messaging. That is you can send a message to the SEDA queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
      | pollTimeout | consumer (advanced) | 1000 | int | The timeout used when polling. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
      | purgeWhenStopping | consumer (advanced) | false | boolean | Whether to purge the task queue when stopping the consumer/route. This allows to stop faster as any pending messages on the queue is discarded.
      | blockWhenFull | producer | false | boolean | Whether a thread that sends messages to a full SEDA queue will block until the queue's capacity is no longer exhausted. By default an exception will be thrown stating that the queue is full. By enabling this option the calling thread will instead block and wait until the message can be accepted.
      | discardIfNoConsumers | producer | false | boolean | Whether the producer should discard the message (do not add the message to the queue) when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
      | failIfNoConsumers | producer | false | boolean | Whether the producer should fail by throwing an exception when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
      | timeout | producer | 30000 | long | Timeout (in milliseconds) before a SEDA producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
      | waitForTaskToComplete | producer | IfReplyExpected | WaitForTaskToComplete | Option to specify whether the caller should wait for the async task to complete or not before continuing. The following three options are supported: Always Never or IfReplyExpected. The first two values are self-explanatory. The last value IfReplyExpected will only wait if the message is Request Reply based. The default option is IfReplyExpected.
      | queue | advanced |  | BlockingQueue | Define the queue instance which will be used by the endpoint. This option is only for rare use-cases where you want to use a custom queue instance.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Stub-Examples]]
      Examples
      ^^^^^^^^

      Here are a few samples:

      * stub:smtp://somehost.foo.com?user=whatnot&something=else
      *
      stub:http://somehost.bar.com/something[http://somehost.bar.com/something]

      [[Stub-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-telegram
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: telegram
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: telegram
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: telegram
          spec:
            containers:
            - image: fabric8/connector-telegram:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: telegram
        syntax: telegram:type/authorizationToken
        title: Telegram
        description: The telegram component provides access to the Telegram Bot API.
        label: chat
        deprecated: false
        async: false
        javaType: org.apache.camel.component.telegram.TelegramComponent
        groupId: org.apache.camel
        artifactId: camel-telegram
        version: 2.18.1
      componentProperties:
        authorizationToken:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The default Telegram authorization token to be used when the information is not provided in the endpoints.
      properties:
        type:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - bots
          deprecated: false
          secret: false
          description: The endpoint type. Currently only the 'bots' type is supported.
        authorizationToken:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The authorization token for using the bot (ask the BotFather) eg. 654321531:HGF_dTra456323dHuOedsE343211fqr3t-H.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        limit:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "100"
          description: Limit on the number of updates that can be received in a single polling request.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        timeout:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: java.lang.Integer
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "30"
          description: Timeout in seconds for long polling. Put 0 for short polling or a bigger number for long polling. Long polling produces shorter response time.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        chatId:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The identifier of the chat that will receive the produced messages. Chat ids can be first obtained from incoming messages (eg. when a telegram user starts a conversation with a bot its client sends automatically a '/start' message containing the chat id). It is an optional parameter as the chat id can be set dynamically for each outgoing message (using body or headers).
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[Telegram-TelegramComponent]]
      Telegram Component
      ~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.18*

      The *Telegram* component provides access to the https://core.telegram.org/bots/api[Telegram Bot API].
      It allows a Camel-based application to send and receive messages by acting as a Bot, participating in
      direct conversations with normal users, private and public groups or channels.

      A Telegram Bot must be created before using this component, following the instructions at the
      link:https://core.telegram.org/bots#3-how-do-i-create-a-bot[Telegram Bot developers home].
      When a new Bot is created, the link:https://telegram.me/botfather[BotFather] provides an
      **authorization token** corresponding to the Bot. The authorization token is a mandatory parameter
      for the camel-telegram endpoint.

      NOTE: In order to allow the Bot to receive all messages exchanged within a group or channel (not just
      the ones starting with a '/' character), ask the BotFather to *disable the privacy mode*, using the
      */setprivacy* command.


      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-telegram</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Telegram-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------------------------------
      telegram:type/authorizationToken[?options]
      ----------------------------------------------------

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

      [[Telegram-Options]]
      Options
      ^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | authorizationToken | String | The default Telegram authorization token to be used when the information is not provided in the endpoints.
      |=======================================================================
      {% endraw %}
      // component options: END



      // endpoint options: START
      The Telegram component supports 24 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | type | common |  | String | *Required* The endpoint type. Currently only the 'bots' type is supported.
      | authorizationToken | common |  | String | *Required* The authorization token for using the bot (ask the BotFather) eg. 654321531:HGF_dTra456323dHuOedsE343211fqr3t-H.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | limit | consumer | 100 | Integer | Limit on the number of updates that can be received in a single polling request.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | timeout | consumer | 30 | Integer | Timeout in seconds for long polling. Put 0 for short polling or a bigger number for long polling. Long polling produces shorter response time.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | chatId | producer |  | String | The identifier of the chat that will receive the produced messages. Chat ids can be first obtained from incoming messages (eg. when a telegram user starts a conversation with a bot its client sends automatically a '/start' message containing the chat id). It is an optional parameter as the chat id can be set dynamically for each outgoing message (using body or headers).
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Telegram-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |Name |Description
      |`CamelTelegramChatId` |This header is used by the producer endpoint in order to
      resolve the chat id that will receive the message. The recipient chat id can be
      placed (in order of priority) in message body, in the `CamelTelegramChatId` header
      or in the endpoint configuration (`chatId` option).
      This header is also present in all incoming messages.

      |`CamelTelegramMediaType` |This header is used to identify the media type when
      the outgoing message is composed of pure binary data. Possible values are strings or enum values
      belonging to the `org.apache.camel.component.telegram.TelegramMediaType` enumeration.

      |`CamelTelegramMediaTitleCaption` |This header is used to provide a caption or title
      for outgoing binary messages.

      |=======================================================================

      [[Telegram-Usage]]
      Usage
      ^^^^^

      The Telegram component supports both consumer and producer endpoints.
      It can also be used in *reactive chat-bot mode* (to consume, then produce messages).

      [[Telegram-ProducerExample]]
      Producer Example
      ^^^^^^^^^^^^^^^^

      The following is a basic example of how to send a message to a Telegram chat through the
      Telegram Bot API.

      in Java DSL

      [source,java]
      ---------------------------------------------------------
      from("direct:start").to("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L");
      ---------------------------------------------------------

      or in Spring XML

      [source,xml]
      ---------------------------------------------
      <route>
          <from uri="direct:start"/>
          <to uri="telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L"/>
      <route>
      ---------------------------------------------

      The code `123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L` is the *authorization token* corresponding to the Bot.

      When using the producer endpoint without specifying the *chat id* option, the target chat will be identified using information contained in the body or headers of the message.
      The following message bodies are allowed for a producer endpoint (messages of type `OutgoingXXXMessage` belong to the package `org.apache.camel.component.telegram.model`)

      [width="100%",cols="40%,60%",options="header",]
      |===================================================
      | Java Type | Description

      | `OutgoingTextMessage` | To send a text message to a chat
      | `OutgoingPhotoMessage` | To send a photo (JPG, PNG) to a chat
      | `OutgoingAudioMessage` | To send a mp3 audio to a chat
      | `OutgoingVideoMessage` | To send a mp4 video to a chat
      | `byte[]` | To send any media type supported. It requires the `CamelTelegramMediaType` header to be set to the appropriate media type
      | `String` | To send a text message to a chat. It gets converted automatically into a `OutgoingTextMessage`

      |===================================================


      [[Telegram-ConsumerExample]]
      Consumer Example
      ^^^^^^^^^^^^^^^^

      The following is a basic example of how to receive all messages that telegram users are sending to the configured Bot.
      In Java DSL

      [source,java]
      ---------------------------------------------------------
      from("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L")
      .bean(ProcessorBean.class)
      ---------------------------------------------------------

      or in Spring XML

      [source,xml]
      ---------------------------------------------
      <route>
          <from uri="telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L"/>
          <bean ref="myBean" />
      <route>

      <bean id="myBean" class="com.example.MyBean"/>
      ---------------------------------------------

      The `MyBean` is a simple bean that will receive the messages

      [source,java]
      ---------------------------------------------------------
      public class MyBean {

          public void process(String message) {
              // or Exchange, or org.apache.camel.component.telegram.model.IncomingMessage (or both)

              // do process
          }

      }
      ---------------------------------------------------------


      Supported types for incoming messages are

      [width="100%",cols="40%,60%",options="header",]
      |===================================================
      | Java Type | Description

      | `IncomingMessage` | The full object representation of an incoming message
      | `String` | The content of the message, for text messages only

      |===================================================




      [[Telegram-ReactiveChatBot]]
      Reactive Chat-Bot Example
      ^^^^^^^^^^^^^^^^^^^^^^^^^

      The reactive chat-bot mode is a simple way of using the Camel component to build a simple
      chat bot that replies directly to chat messages received from the Telegram users.

      The following is a basic configuration of the chat-bot in Java DSL

      [source,java]
      ---------------------------------------------------------
      from("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L")
      .bean(ChatBotLogic.class)
      .to("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L");
      ---------------------------------------------------------

      or in Spring XML

      [source,xml]
      ---------------------------------------------
      <route>
          <from uri="telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L"/>
          <bean ref="chatBotLogic" />
          <to uri="telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L"/>
      <route>

      <bean id="chatBotLogic" class="com.example.ChatBotLogic"/>
      ---------------------------------------------


      The `ChatBotLogic` is a simple bean that implements a generic String-to-String method.

      [source,java]
      ---------------------------------------------------------
      public class ChatBotLogic {

          public String chatBotProcess(String message) {
              if( "do-not-reply".equals(message) ) {
                  return null; // no response in the chat
              }

              return "echo from the bot: " + message; // echoes the message
          }

      }
      ---------------------------------------------------------


      Every non-null string returned by the `chatBotProcess` method is automatically routed to the
      chat that originated the request (as the `CamelTelegramChatId` header is used to route the message).

      [[Telegram-GettingTheChatId]]
      Getting the Chat ID
      ^^^^^^^^^^^^^^^^^^^

      If you want to push messages to a specific Telegram chat when an event occurs, you need to
      retrieve the corresponding chat ID. The chat ID is not currently shown in the telegram client,
      but you can obtain it using a simple route.

      First, add the bot to the chat where you want to push messages, then run a route like the following one.

      [source,java]
      ---------------------------------------------------------
      from("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L")
      .to("log:INFO?showHeaders=true");
      ---------------------------------------------------------

      Any message received by the bot will be dumped to your log together with information about the chat (`CamelTelegramChatId`
      header).

      Once you get the chat ID, you can use the following sample route to push message to it.

      [source,java]
      ---------------------------------------------------------
      from("timer:tick")
      .setBody().constant("Hello")
      to("telegram:bots/123456789:AAE_dLq5C19xwGjw3yiC2NvEUrZcejK21-Q987654321:AAE_dLq5C19xwOmg5yiC2NvSrkT3wj5Q1-L?chatId=123456")
      ---------------------------------------------------------

      Note that the corresponding URI parameter is simply `chatId`.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-test
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: test
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: test
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: test
          spec:
            containers:
            - image: fabric8/connector-test:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: test
        syntax: test:name
        title: Test
        description: The test component extends the mock component by on startup to pull messages from another endpoint to set the expected message bodies.
        label: core,testing
        deprecated: false
        async: false
        producerOnly: true
        lenientProperties: true
        javaType: org.apache.camel.component.test.TestComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of endpoint to lookup in the registry to use for polling messages used for testing
        anyOrder:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the expected messages should arrive in the same order or can be in any order.
        assertPeriod:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets a grace period after which the mock endpoint will re-assert to ensure the preliminary assertion is still valid. This is used for example to assert that exactly a number of messages arrives. For example if link expectedMessageCount(int) was set to 5 then the assertion is satisfied when 5 or more message arrives. To ensure that exactly 5 messages arrives then you would need to wait a little period to ensure no further message arrives. This is what you can use this link setAssertPeriod(long) method for. By default this period is disabled.
        delimiter:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The split delimiter to use when split is enabled. By default the delimiter is new line based. The delimiter can be a regular expression.
        expectedCount:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies the expected number of message exchanges that should be
            received by this endpoint. Beware: If you want to expect that 0 messages then
            take extra care as 0 matches when the tests starts so you need to set a assert
            period time to let the test run for a while to make sure there are still no
            messages arrived; for that use link setAssertPeriod(long). An alternative is
            to use NotifyBuilder and use the notifier to know when Camel is done routing
            some messages before you call the link assertIsSatisfied() method on the mocks.
            This allows you to not use a fixed assert period to speedup testing times. If
            you want to assert that exactly n''th message arrives to this mock endpoint
            then see also the link setAssertPeriod(long) method for further details.'
        reportGroup:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: A number that is used to turn on throughput logging based on groups of the size.
        resultMinimumWaitTime:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the minimum expected amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
        resultWaitTime:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Sets the maximum amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
        retainFirst:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies to only retain the first n''th number of received Exchanges.
            This is used when testing with big data to reduce memory consumption by not
            storing copies of every Exchange this mock endpoint receives. Important: When
            using this limitation then the link getReceivedCounter() will still return the
            actual number of received Exchanges. For example if we have received 5000 Exchanges
            and have configured to only retain the first 10 Exchanges then the link getReceivedCounter()
            will still return 5000 but there is only the first 10 Exchanges in the link
            getExchanges() and link getReceivedExchanges() methods. When using this method
            then some of the other expectation methods is not supported for example the
            link expectedBodiesReceived(Object...) sets a expectation on the first number
            of bodies received. You can configure both link setRetainFirst(int) and link
            setRetainLast(int) methods to limit both the first and last received.'
        retainLast:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: 'Specifies to only retain the last n''th number of received Exchanges.
            This is used when testing with big data to reduce memory consumption by not
            storing copies of every Exchange this mock endpoint receives. Important: When
            using this limitation then the link getReceivedCounter() will still return the
            actual number of received Exchanges. For example if we have received 5000 Exchanges
            and have configured to only retain the last 20 Exchanges then the link getReceivedCounter()
            will still return 5000 but there is only the last 20 Exchanges in the link getExchanges()
            and link getReceivedExchanges() methods. When using this method then some of
            the other expectation methods is not supported for example the link expectedBodiesReceived(Object...)
            sets a expectation on the first number of bodies received. You can configure
            both link setRetainFirst(int) and link setRetainLast(int) methods to limit both
            the first and last received.'
        sleepForEmptyTest:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Allows a sleep to be specified to wait to check that this endpoint really is empty when link expectedMessageCount(int) is called with zero
        split:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: "If enabled the the messages loaded from the test endpoint will be\
            \ split using \n\r delimiters (new lines) so each line is an expected message.\
            \ For example to use a file endpoint to load a file where each line is an expected\
            \ message."
        timeout:
          kind: parameter
          group: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "2000"
          description: The timeout to use when polling for message bodies from the URI
        copyOnExchange:
          kind: parameter
          group: producer (advanced)
          label: producer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. Is by default true.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Test-TestComponent]]
      Test Component
      ~~~~~~~~~~~~~~

      link:testing.html[Testing] of distributed and asynchronous processing is
      notoriously difficult. The link:mock.html[Mock], link:test.html[Test]
      and link:dataset.html[DataSet] endpoints work great with the
      link:testing.html[Camel Testing Framework] to simplify your unit and
      integration testing using
      link:enterprise-integration-patterns.html[Enterprise Integration
      Patterns] and Camel's large range of link:components.html[Components]
      together with the powerful link:bean-integration.html[Bean Integration].

      The *test* component extends the link:mock.html[Mock] component to
      support pulling messages from another endpoint on startup to set the
      expected message bodies on the underlying link:mock.html[Mock] endpoint.
      That is, you use the test endpoint in a route and messages arriving on
      it will be implicitly compared to some expected messages extracted from
      some other location.

      So you can use, for example, an expected set of message bodies as files.
      This will then set up a properly configured link:mock.html[Mock]
      endpoint, which is only valid if the received messages match the number
      of expected messages and their message payloads are equal.

      Maven users will need to add the following dependency to their `pom.xml`
      for this component when using *Camel 2.8* or older:

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

      From Camel 2.9 onwards the link:test.html[Test] component is provided
      directly in the camel-core.

      [[Test-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------------------
      test:expectedMessagesEndpointUri
      --------------------------------

      Where *expectedMessagesEndpointUri* refers to some other
      link:component.html[Component] URI that the expected message bodies are
      pulled from before starting the test.

      [[Test-URIOptions]]
      URI Options
      ^^^^^^^^^^^

      // component options: START
      The Test component has no options.
      // component options: END


      // endpoint options: START
      The Test component supports 15 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | producer |  | String | *Required* Name of endpoint to lookup in the registry to use for polling messages used for testing
      | anyOrder | producer | false | boolean | Whether the expected messages should arrive in the same order or can be in any order.
      | assertPeriod | producer | 0 | long | Sets a grace period after which the mock endpoint will re-assert to ensure the preliminary assertion is still valid. This is used for example to assert that exactly a number of messages arrives. For example if link expectedMessageCount(int) was set to 5 then the assertion is satisfied when 5 or more message arrives. To ensure that exactly 5 messages arrives then you would need to wait a little period to ensure no further message arrives. This is what you can use this link setAssertPeriod(long) method for. By default this period is disabled.
      | delimiter | producer |  | String | The split delimiter to use when split is enabled. By default the delimiter is new line based. The delimiter can be a regular expression.
      | expectedCount | producer | -1 | int | Specifies the expected number of message exchanges that should be received by this endpoint. Beware: If you want to expect that 0 messages then take extra care as 0 matches when the tests starts so you need to set a assert period time to let the test run for a while to make sure there are still no messages arrived; for that use link setAssertPeriod(long). An alternative is to use NotifyBuilder and use the notifier to know when Camel is done routing some messages before you call the link assertIsSatisfied() method on the mocks. This allows you to not use a fixed assert period to speedup testing times. If you want to assert that exactly n'th message arrives to this mock endpoint then see also the link setAssertPeriod(long) method for further details.
      | reportGroup | producer |  | int | A number that is used to turn on throughput logging based on groups of the size.
      | resultMinimumWaitTime | producer | 0 | long | Sets the minimum expected amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
      | resultWaitTime | producer | 0 | long | Sets the maximum amount of time (in millis) the link assertIsSatisfied() will wait on a latch until it is satisfied
      | retainFirst | producer | -1 | int | Specifies to only retain the first n'th number of received Exchanges. This is used when testing with big data to reduce memory consumption by not storing copies of every Exchange this mock endpoint receives. Important: When using this limitation then the link getReceivedCounter() will still return the actual number of received Exchanges. For example if we have received 5000 Exchanges and have configured to only retain the first 10 Exchanges then the link getReceivedCounter() will still return 5000 but there is only the first 10 Exchanges in the link getExchanges() and link getReceivedExchanges() methods. When using this method then some of the other expectation methods is not supported for example the link expectedBodiesReceived(Object...) sets a expectation on the first number of bodies received. You can configure both link setRetainFirst(int) and link setRetainLast(int) methods to limit both the first and last received.
      | retainLast | producer | -1 | int | Specifies to only retain the last n'th number of received Exchanges. This is used when testing with big data to reduce memory consumption by not storing copies of every Exchange this mock endpoint receives. Important: When using this limitation then the link getReceivedCounter() will still return the actual number of received Exchanges. For example if we have received 5000 Exchanges and have configured to only retain the last 20 Exchanges then the link getReceivedCounter() will still return 5000 but there is only the last 20 Exchanges in the link getExchanges() and link getReceivedExchanges() methods. When using this method then some of the other expectation methods is not supported for example the link expectedBodiesReceived(Object...) sets a expectation on the first number of bodies received. You can configure both link setRetainFirst(int) and link setRetainLast(int) methods to limit both the first and last received.
      | sleepForEmptyTest | producer | 0 | long | Allows a sleep to be specified to wait to check that this endpoint really is empty when link expectedMessageCount(int) is called with zero
      | split | producer | false | boolean | If enabled the the messages loaded from the test endpoint will be split using \n\r delimiters (new lines) so each line is an expected message. For example to use a file endpoint to load a file where each line is an expected message.
      | timeout | producer | 2000 | long | The timeout to use when polling for message bodies from the URI
      | copyOnExchange | producer (advanced) | true | boolean | Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. Is by default true.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Test-Example]]
      Example
      ^^^^^^^

      For example, you could write a test case as follows:

      [source,java]
      --------------------------------------------------
      from("seda:someEndpoint").
        to("test:file://data/expectedOutput?noop=true");
      --------------------------------------------------

      If your test then invokes the
      http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/component/mock/MockEndpoint.html#assertIsSatisfied(org.apache.camel.CamelContext)[MockEndpoint.assertIsSatisfied(camelContext)
      method], your test case will perform the necessary assertions.

      To see how you can set other expectations on the test endpoint, see the
      link:mock.html[Mock] component.

      [[Test-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:spring-testing.html[Spring Testing]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-timer
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: timer
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: timer
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: timer
          spec:
            containers:
            - image: fabric8/connector-timer:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: timer
        syntax: timer:timerName
        title: Timer
        description: The timer component is used for generating message exchanges when a timer fires.
        label: core,scheduling
        deprecated: false
        async: false
        consumerOnly: true
        javaType: org.apache.camel.component.timer.TimerComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties: {}
      properties:
        timerName:
          kind: path
          group: consumer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the timer
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The number of milliseconds to wait before the first event is generated. Should not be used in conjunction with the time option. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        fixedRate:
          kind: parameter
          group: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Events take place at approximately regular intervals separated by the specified period.
        period:
          kind: parameter
          group: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: If greater than 0 generate periodic events every period milliseconds. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        repeatCount:
          kind: parameter
          group: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "0"
          description: Specifies a maximum limit of number of fires. So if you set it to 1 the timer will only fire once. If you set it to 5 it will only fire five times. A value of zero or negative means fire forever.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        daemon:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether or not the thread associated with the timer endpoint runs as a daemon. The default value is true.
        pattern:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Allows you to specify a custom Date pattern to use for setting the time option using URI syntax.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        time:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.util.Date
          deprecated: false
          secret: false
          description: 'A java.util.Date the first event should be generated. If using the
            URI the pattern expected is: yyyy-MM-dd HH:mm:ss or yyyy-MM-dd''T''HH:mm:ss.'
        timer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.Timer
          deprecated: false
          secret: false
          description: To use a custom Timer
    documentation.adoc: |+
      [[Timer-TimerComponent]]
      Timer Component
      ~~~~~~~~~~~~~~~

      The *timer:* component is used to generate message exchanges when a
      timer fires You can only consume events from this endpoint.

      [[Timer-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      --------------------
      timer:name[?options]
      --------------------

      Where `name` is the name of the `Timer` object, which is created and
      shared across endpoints. So if you use the same name for all your timer
      endpoints, only one `Timer` object and thread will be used.

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

      *Note:* The IN body of the generated exchange is `null`. So
      `exchange.getIn().getBody()` returns `null`.

      TIP:*Advanced Scheduler*
      See also the link:quartz.html[Quartz] component that supports much more
      advanced scheduling.

      TIP:*Specify time in human friendly format*
      In *Camel 2.3* onwards you can specify the time in
      link:how-do-i-specify-time-period-in-a-human-friendly-syntax.html[human
      friendly syntax].


      [[Timer-Options]]
      Options
      ^^^^^^^

      // component options: START
      The Timer component has no options.
      // component options: END


      // endpoint options: START
      The Timer component supports 13 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | timerName | consumer |  | String | *Required* The name of the timer
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delay | consumer | 1000 | long | The number of milliseconds to wait before the first event is generated. Should not be used in conjunction with the time option. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | fixedRate | consumer | false | boolean | Events take place at approximately regular intervals separated by the specified period.
      | period | consumer | 1000 | long | If greater than 0 generate periodic events every period milliseconds. The default value is 1000. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | repeatCount | consumer | 0 | long | Specifies a maximum limit of number of fires. So if you set it to 1 the timer will only fire once. If you set it to 5 it will only fire five times. A value of zero or negative means fire forever.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | daemon | advanced | true | boolean | Specifies whether or not the thread associated with the timer endpoint runs as a daemon. The default value is true.
      | pattern | advanced |  | String | Allows you to specify a custom Date pattern to use for setting the time option using URI syntax.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | time | advanced |  | Date | A java.util.Date the first event should be generated. If using the URI the pattern expected is: yyyy-MM-dd HH:mm:ss or yyyy-MM-dd'T'HH:mm:ss.
      | timer | advanced |  | Timer | To use a custom Timer
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Timer-ExchangeProperties]]
      Exchange Properties
      ^^^^^^^^^^^^^^^^^^^

      When the timer is fired, it adds the following information as properties
      to the `Exchange`:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Name |Type |Description

      |`Exchange.TIMER_NAME` |`String` |The value of the `name` option.

      |`Exchange.TIMER_TIME` |`Date` |The value of the `time` option.

      |`Exchange.TIMER_PERIOD` |`long` |The value of the `period` option.

      |`Exchange.TIMER_FIRED_TIME` |`Date` |The time when the consumer fired.

      |`Exchange.TIMER_COUNTER` |`Long` |*Camel 2.8:* The current fire counter. Starts from 1.
      |=======================================================================

      [[Timer-Sample]]
      Sample
      ^^^^^^

      To set up a route that generates an event every 60 seconds:

      [source,java]
      -------------------------------------------------------------------------------------------
         from("timer://foo?fixedRate=true&period=60000").to("bean:myBean?method=someMethodName");
      -------------------------------------------------------------------------------------------

      TIP:Instead of 60000 you can use period=60s which is more friendly to read.

      The above route will generate an event and then invoke the
      `someMethodName` method on the bean called `myBean` in the
      link:registry.html[Registry] such as JNDI or link:spring.html[Spring].

      And the route in Spring DSL:

      [source,xml]
      -------------------------------------------------------------
        <route>
          <from uri="timer://foo?fixedRate=true&amp;period=60000"/>
          <to uri="bean:myBean?method=someMethodName"/>
        </route>
      -------------------------------------------------------------

      [[Timer-Firingassoonaspossible]]
      Firing as soon as possible
      ++++++++++++++++++++++++++

      [[Timer-AvailableasofCamel2.17]]
      Available as of Camel 2.17
      ++++++++++++++++++++++++++

      You may want to fire messages in a Camel route as soon as possible you
      can use a negative delay:

      [source,xml]
      -------------------------------------------------
        <route>
          <from uri="timer://foo?delay=-1"/>
          <to uri="bean:myBean?method=someMethodName"/>
        </route>
      -------------------------------------------------

      In this way the timer will fire messages immediately.

      You can also specify a repeatCount parameter in conjunction with a
      negative delay to stop firing messages after a fixed number has been
      reached.

      If you don't specify a repeatCount then the timer will continue firing
      messages until the route will be stopped.??

      [[Timer-Firingonlyonce]]
      Firing only once
      ++++++++++++++++

      *Available as of Camel 2.8*

      You may want to fire a message in a Camel route only once, such as when
      starting the route. To do that you use the repeatCount option as shown:

      [source,xml]
      -------------------------------------------------
        <route>
          <from uri="timer://foo?repeatCount=1"/>
          <to uri="bean:myBean?method=someMethodName"/>
        </route>
      -------------------------------------------------

      [[Timer-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:quartz.html[Quartz]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-twitter
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: twitter
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: twitter
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: twitter
          spec:
            containers:
            - image: fabric8/connector-twitter:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: twitter
        syntax: twitter:kind
        title: Twitter
        description: This component integrates with Twitter to send tweets or search for tweets and more.
        label: api,social
        deprecated: false
        async: false
        javaType: org.apache.camel.component.twitter.TwitterComponent
        groupId: org.apache.camel
        artifactId: camel-twitter
        version: 2.18.1
      componentProperties:
        accessToken:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access token
        accessTokenSecret:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access token secret
        consumerKey:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer key
        consumerSecret:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer secret
        httpProxyHost:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http proxy host which can be used for the camel-twitter.
        httpProxyUser:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http proxy user which can be used for the camel-twitter.
        httpProxyPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http proxy password which can be used for the camel-twitter.
        httpProxyPort:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: The http proxy port which can be used for the camel-twitter.
      properties:
        kind:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          enum:
          - directmessage
          - search
          - streaming/filter
          - streaming/sample
          - streaming/user
          - timeline/home
          - timeline/mentions
          - timeline/retweetsofme
          - timeline/user
          deprecated: false
          secret: false
          description: What polling mode to use direct polling or event based. The event mode is only supported when the endpoint kind is event based.
        accessToken:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access token. Can also be configured on the TwitterComponent level instead.
        accessTokenSecret:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access secret. Can also be configured on the TwitterComponent level instead.
        consumerKey:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer key. Can also be configured on the TwitterComponent level instead.
        consumerSecret:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer secret. Can also be configured on the TwitterComponent level instead.
        user:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username used for user timeline consumption direct message production etc.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        type:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: org.apache.camel.component.twitter.data.EndpointType
          enum:
          - polling
          - direct
          - event
          deprecated: false
          secret: false
          defaultValue: direct
          description: Endpoint type to use. Only streaming supports event type.
        distanceMetric:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          enum:
          - km
          - mi
          deprecated: false
          secret: false
          defaultValue: km
          description: 'Used by the non-stream geography search to search by radius using
            the configured metrics. The unit can either be mi for miles or km for kilometers.
            You need to configure all the following options: longitude latitude radius and
            distanceMetric.'
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        latitude:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          description: 'Used by the non-stream geography search to search by latitude. You
            need to configure all the following options: longitude latitude radius and distanceMetric.'
        locations:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Bounding boxes created by pairs of lat/lons. Can be used for streaming/filter. A pair is defined as latlon. And multiple paris can be separated by semi colon.
        longitude:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          description: 'Used by the non-stream geography search to search by longitude.
            You need to configure all the following options: longitude latitude radius and
            distanceMetric.'
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        radius:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: number
          javaType: java.lang.Double
          deprecated: false
          secret: false
          description: 'Used by the non-stream geography search to search by radius. You
            need to configure all the following options: longitude latitude radius and distanceMetric.'
        twitterStream:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: twitter4j.TwitterStream
          deprecated: false
          secret: false
          description: To use a custom instance of TwitterStream
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        count:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Limiting number of results per page.
        filterOld:
          kind: parameter
          group: filter
          label: consumer,filter
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Filter out old tweets that has previously been polled. This state is stored in memory only and based on last tweet id.
        keywords:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Can be used for search and streaming/filter. Multiple values can be separated with comma.
        lang:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The lang string ISO_639-1 which will be used for searching
        numberOfPages:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "1"
          description: The number of pages result which you want camel-twitter to consume.
        sinceId:
          kind: parameter
          group: filter
          label: consumer,filter
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "1"
          description: The last tweet id which will be used for pulling the tweets. It is useful when the camel route is restarted after a long running.
        userIds:
          kind: parameter
          group: filter
          label: consumer,filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To filter by user ids for streaming/filter. Multiple values can be separated by comma.
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "60000"
          description: Milliseconds before the next poll.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        httpProxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http proxy host which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
        httpProxyPassword:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http proxy password which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
        httpProxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The http proxy port which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
        httpProxyUser:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http proxy user which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
    documentation.adoc: |
      ifdef::env-github[]
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      [[ConfluenceContent]]
      [[Twitter-Twitter]]
      Twitter
      ~~~~~~~

      *Available as of Camel 2.10*

      The Twitter component enables the most useful features of the Twitter
      API by encapsulating http://twitter4j.org/[Twitter4J]. It allows direct,
      polling, or event-driven consumption of timelines, users, trends, and
      direct messages. Also, it supports producing messages as status updates
      or direct messages.

      Twitter now requires the use of OAuth for all client application
      authentication. In order to use camel-twitter with your account, you'll
      need to create a new application within Twitter at
      https://dev.twitter.com/apps/new and grant the application access to
      your account. Finally, generate your access token and secret.

      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-twitter</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ----

      [[Twitter-URIformat]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      twitter://endpoint[?options]
      ----

      [[Twitter-TwitterComponent]]
      Twitter component
      ^^^^^^^^^^^^^^^^^

      The twitter component can be configured with the Twitter account
      settings which is mandatory to configure before using.





      // component options: START
      The Twitter component supports 8 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | accessToken | String | The access token
      | accessTokenSecret | String | The access token secret
      | consumerKey | String | The consumer key
      | consumerSecret | String | The consumer secret
      | httpProxyHost | String | The http proxy host which can be used for the camel-twitter.
      | httpProxyUser | String | The http proxy user which can be used for the camel-twitter.
      | httpProxyPassword | String | The http proxy password which can be used for the camel-twitter.
      | httpProxyPort | int | The http proxy port which can be used for the camel-twitter.
      |=======================================================================
      {% endraw %}
      // component options: END





      You can also configure these options directly in the endpoint.

      [[Twitter-ConsumerEndpoints]]
      Consumer endpoints
      ^^^^^^^^^^^^^^^^^^

      Rather than the endpoints returning a List through one single route
      exchange, camel-twitter creates one route exchange per returned object.
      As an example, if "timeline/home" results in five statuses, the route
      will be executed five times (one for each Status).

      [width="100%",cols="10%,10%,10%,70%",options="header",]
      |=======================================================================
      |Endpoint |Context |Body Type |Notice
      |directmessage |direct, polling |twitter4j.DirectMessage |??

      |search |direct, polling |twitter4j.Status |??

      |streaming/filter |event, polling |twitter4j.Status |??

      |streaming/sample |event, polling |twitter4j.Status |??

      |streaming/user |event, polling |twitter4j.Status |**Camel 2.16**: To
      receive tweets from protected users and accounts.

      |timeline/home |direct, polling |twitter4j.Status |??

      |timeline/mentions |direct, polling |twitter4j.Status |??

      |[line-through]*timeline/public* |[line-through]*direct, polling*
      |[line-through]*twitter4j.Status* |[line-through]*@deprecated. Use
      timeline/home or direct/home instead. Removed from *Camel 2.11*
      onwards.*

      |timeline/retweetsofme |direct, polling |twitter4j.Status |??

      |timeline/user |direct, polling |twitter4j.Status |??

      |[line-through]*trends/daily* |[line-through]**Camel 2.10.1:* direct,
      polling* |[line-through]*twitter4j.Status* |[line-through]*@deprecated.
      Removed from Camel 2.11 onwards.*

      |[line-through]*trends/weekly* |[line-through]**Camel 2.10.1:* direct,
      polling* |[line-through]*twitter4j.Status* |[line-through]*@deprecated.
      Removed from Camel 2.11 onwards.*
      |=======================================================================

      [[Twitter-ProducerEndpoints]]
      Producer endpoints
      ^^^^^^^^^^^^^^^^^^

      [width="100%",cols="20%,80%",options="header",]
      |==============================
      |Endpoint |Body Type
      |directmessage |String
      |search |List<twitter4j.Status>
      |timeline/user |String
      |==============================

      [[Twitter-URIOptions]]
      URI options
      ^^^^^^^^^^^







      // endpoint options: START
      The Twitter component supports 43 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | kind | common |  | String | *Required* What polling mode to use direct polling or event based. The event mode is only supported when the endpoint kind is event based.
      | accessToken | common |  | String | The access token. Can also be configured on the TwitterComponent level instead.
      | accessTokenSecret | common |  | String | The access secret. Can also be configured on the TwitterComponent level instead.
      | consumerKey | common |  | String | The consumer key. Can also be configured on the TwitterComponent level instead.
      | consumerSecret | common |  | String | The consumer secret. Can also be configured on the TwitterComponent level instead.
      | user | common |  | String | Username used for user timeline consumption direct message production etc.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | type | consumer | direct | EndpointType | Endpoint type to use. Only streaming supports event type.
      | distanceMetric | consumer (advanced) | km | String | Used by the non-stream geography search to search by radius using the configured metrics. The unit can either be mi for miles or km for kilometers. You need to configure all the following options: longitude latitude radius and distanceMetric.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | latitude | consumer (advanced) |  | Double | Used by the non-stream geography search to search by latitude. You need to configure all the following options: longitude latitude radius and distanceMetric.
      | locations | consumer (advanced) |  | String | Bounding boxes created by pairs of lat/lons. Can be used for streaming/filter. A pair is defined as latlon. And multiple paris can be separated by semi colon.
      | longitude | consumer (advanced) |  | Double | Used by the non-stream geography search to search by longitude. You need to configure all the following options: longitude latitude radius and distanceMetric.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | radius | consumer (advanced) |  | Double | Used by the non-stream geography search to search by radius. You need to configure all the following options: longitude latitude radius and distanceMetric.
      | twitterStream | consumer (advanced) |  | TwitterStream | To use a custom instance of TwitterStream
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | count | filter |  | Integer | Limiting number of results per page.
      | filterOld | filter | true | boolean | Filter out old tweets that has previously been polled. This state is stored in memory only and based on last tweet id.
      | keywords | filter |  | String | Can be used for search and streaming/filter. Multiple values can be separated with comma.
      | lang | filter |  | String | The lang string ISO_639-1 which will be used for searching
      | numberOfPages | filter | 1 | Integer | The number of pages result which you want camel-twitter to consume.
      | sinceId | filter | 1 | long | The last tweet id which will be used for pulling the tweets. It is useful when the camel route is restarted after a long running.
      | userIds | filter |  | String | To filter by user ids for streaming/filter. Multiple values can be separated by comma.
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 60000 | long | Milliseconds before the next poll.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | httpProxyHost | proxy |  | String | The http proxy host which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
      | httpProxyPassword | proxy |  | String | The http proxy password which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
      | httpProxyPort | proxy |  | Integer | The http proxy port which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
      | httpProxyUser | proxy |  | String | The http proxy user which can be used for the camel-twitter. Can also be configured on the TwitterComponent level instead.
      |=======================================================================
      {% endraw %}
      // endpoint options: END







      [[Twitter-Messageheaders]]
      Message headers
      ^^^^^^^^^^^^^^^

      [width="100%",cols="20%,80%",options="header",]
      |=======================================================================
      |Name |Description
      |`CamelTwitterKeywords` |This header is used by the search producer to
      change the search key words dynamically.

      |`CamelTwitterSearchLanguage` |*Camel 2.11.0:* This header can override
      the option of `lang` which set the search language for the search
      endpoint dynamically

      |`CamelTwitterCount` |*Camel 2.11.0* This header can override the option
      of `count` which sets the max twitters that will be returned.

      |`CamelTwitterNumberOfPages` |*Camel 2.11.0* This header can override
      the option of `numberOfPages` which sets how many pages we want to
      twitter returns.
      |=======================================================================

      [[Twitter-Messagebody]]
      Message body
      ^^^^^^^^^^^^

      All message bodies utilize objects provided by the Twitter4J API.

      [[Twitter-Usecases]]
      Use cases
      ^^^^^^^^^

      NOTE: *API Rate Limits:* Twitter REST APIs encapsulated by http://twitter4j.org/[Twitter4J] are
      subjected to https://dev.twitter.com/rest/public/rate-limiting[API Rate
      Limiting]. You can find the per method limits in the
      https://dev.twitter.com/rest/public/rate-limits[API Rate Limits]
      documentation. Note that endpoints/resources not listed in that page are
      default to 15 requests per allotted user per window.

      [[Twitter-TocreateastatusupdatewithinyourTwitterprofile,sendthisproduceraStringbody]]
      To create a status update within your Twitter profile, send this producer a String body:
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ----
      from("direct:foo")
        .to("twitter://timeline/user?consumerKey=[s]&consumerSecret=[s]&accessToken=[s]&accessTokenSecret=[s]);
      ----

      [[Twitter-Topoll,every60sec.,allstatusesonyourhometimeline]]
      To poll, every 60 sec., all statuses on your home timeline:
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ----
      from("twitter://timeline/home?type=polling&delay=60&consumerKey=[s]&consumerSecret=[s]&accessToken=[s]&accessTokenSecret=[s]")
        .to("bean:blah");
      ----

      [[Twitter-TosearchforallstatuseswiththekeywordCamel]]
      To search for all statuses with the keyword 'camel':
      ++++++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ----
      from("twitter://search?type=direct&keywords=camel&consumerKey=[s]&consumerSecret=[s]&accessToken=[s]&accessTokenSecret=[s]")
        .to("bean:blah");
      ----

      [[Twitter-Searchingusingaproducerwithstatickeywords]]
      Searching using a producer with static keywords:
      ++++++++++++++++++++++++++++++++++++++++++++++++

      [source,java]
      ----
      from("direct:foo")
        .to("twitter://search?keywords=camel&consumerKey=[s]&consumerSecret=[s]&accessToken=[s]&accessTokenSecret=[s]");
      ----

      [[Twitter-Searchingusingaproducerwithdynamickeywordsfromheader]]
      Searching using a producer with dynamic keywords from header:
      +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      In the `bar` header we have the keywords we want to search, so we can
      assign this value to the `CamelTwitterKeywords` header:

      [source,java]
      ----
      from("direct:foo")
        .setHeader("CamelTwitterKeywords", header("bar"))
        .to("twitter://search?consumerKey=[s]&consumerSecret=[s]&accessToken=[s]&accessTokenSecret=[s]");
      ----

      [[Twitter-Example]]
      Example
      ^^^^^^^

      See also the link:twitter-websocket-example.html[Twitter Websocket
      Example].

      [[Twitter-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

      * link:twitter-websocket-example.html[Twitter Websocket Example]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-undertow
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: undertow
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: undertow
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: undertow
          spec:
            containers:
            - image: fabric8/connector-undertow:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: undertow
        syntax: undertow:httpURI
        title: Undertow
        description: The undertow component provides HTTP-based endpoints for consuming and producing HTTP requests.
        label: http
        deprecated: false
        async: true
        lenientProperties: true
        javaType: org.apache.camel.component.undertow.UndertowComponent
        groupId: org.apache.camel
        artifactId: camel-undertow
        version: 2.18.1
      componentProperties:
        undertowHttpBinding:
          kind: property
          type: object
          javaType: org.apache.camel.component.undertow.UndertowHttpBinding
          deprecated: false
          secret: false
          description: To use a custom HttpBinding to control the mapping between Camel message and HttpClient.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
      properties:
        httpURI:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.net.URI
          deprecated: false
          secret: false
          description: The url of the HTTP endpoint to use.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        httpMethodRestrict:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Used to only allow consuming if the HttpMethod matches such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.
        matchOnUriPrefix:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not the consumer should try to find a target consumer by matching the URI prefix if no exact match is found.
        optionsEnabled:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS is turned off.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        keepAlive:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to ensure socket is not closed due to inactivity
        options:
          kind: parameter
          group: producer
          label: producer
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: option.
          multiValue: true
          deprecated: false
          secret: false
          description: Sets additional channel options. The options that can be used are defined in org.xnio.Options. To configure from endpoint uri then prefix each option with option. such as option.close-abort=true&option.send-buffer=8192
        reuseAddresses:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to facilitate socket multiplexing
        tcpNoDelay:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Setting to improve TCP protocol performance
        throwExceptionOnFailure:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: If the option is true HttpProducer will ignore the Exchange.HTTP_URI header and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure to be false to let the producer send all the fault response back.
        transferException:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Option to disable throwing the HttpOperationFailedException in case of failed responses from the remote server. This allows you to get all responses regardless of the HTTP status code.
        headerFilterStrategy:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        undertowHttpBinding:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.undertow.UndertowHttpBinding
          deprecated: false
          secret: false
          description: To use a custom UndertowHttpBinding to control the mapping between Camel message and undertow.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
    documentation.adoc: "[[Undertow-UndertowComponent]]\nUndertow Component\n~~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.16*\n\nThe *undertow* component provides HTTP-based\n\
      link:endpoint.html[endpoints] for consuming and producing HTTP requests.\nThat\
      \ is, the Undertow component behaves as a simple Web server. +\n Undertow can\
      \ also be used as a http client which mean you can also use\nit with Camel as\
      \ a producer.\n\nMaven users will need to add the following dependency to their\
      \ `pom.xml`\nfor this component:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-undertow</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[Undertow-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,java]\n-------------------------------------------------------\n\
      undertow:http://hostname[:port][/resourceUri][?options]\n-------------------------------------------------------\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[Undertow-Options]]\nOptions\n^^^^^^^\n\n\n\n\n\n// component options: START\n\
      The Undertow component supports 2 options which are listed below.\n\n\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| undertowHttpBinding | UndertowHttpBinding\
      \ | To use a custom HttpBinding to control the mapping between Camel message\
      \ and HttpClient.\n| sslContextParameters | SSLContextParameters | To configure\
      \ security using SSLContextParameters\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Undertow component supports 17 endpoint options which are listed\
      \ below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"\
      ]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| httpURI | common |  |\
      \ URI | *Required* The url of the HTTP endpoint to use.\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| httpMethodRestrict\
      \ | consumer |  | String | Used to only allow consuming if the HttpMethod matches\
      \ such as GET/POST/PUT etc. Multiple methods can be specified separated by comma.\n\
      | matchOnUriPrefix | consumer | true | Boolean | Whether or not the consumer\
      \ should try to find a target consumer by matching the URI prefix if no exact\
      \ match is found.\n| optionsEnabled | consumer | false | boolean | Specifies\
      \ whether to enable HTTP OPTIONS for this Servlet consumer. By default OPTIONS\
      \ is turned off.\n| exceptionHandler | consumer (advanced) |  | ExceptionHandler\
      \ | To let the consumer use a custom ExceptionHandler. Notice if the option\
      \ bridgeErrorHandler is enabled then this options is not in use. By default\
      \ the consumer will deal with exceptions that will be logged at WARN/ERROR level\
      \ and ignored.\n| exchangePattern | consumer (advanced) |  | ExchangePattern\
      \ | Sets the exchange pattern when the consumer creates an exchange.\n| keepAlive\
      \ | producer | true | Boolean | Setting to ensure socket is not closed due to\
      \ inactivity\n| options | producer |  | Map | Sets additional channel options.\
      \ The options that can be used are defined in org.xnio.Options. To configure\
      \ from endpoint uri then prefix each option with option. such as option.close-abort=true&option.send-buffer=8192\n\
      | reuseAddresses | producer | true | Boolean | Setting to facilitate socket\
      \ multiplexing\n| tcpNoDelay | producer | true | Boolean | Setting to improve\
      \ TCP protocol performance\n| throwExceptionOnFailure | producer | true | Boolean\
      \ | If the option is true HttpProducer will ignore the Exchange.HTTP_URI header\
      \ and use the endpoint's URI for request. You may also set the option throwExceptionOnFailure\
      \ to be false to let the producer send all the fault response back.\n| transferException\
      \ | producer | false | Boolean | Option to disable throwing the HttpOperationFailedException\
      \ in case of failed responses from the remote server. This allows you to get\
      \ all responses regardless of the HTTP status code.\n| headerFilterStrategy\
      \ | advanced |  | HeaderFilterStrategy | To use a custom HeaderFilterStrategy\
      \ to filter header to and from Camel message.\n| synchronous | advanced | false\
      \ | boolean | Sets whether synchronous processing should be strictly used or\
      \ Camel is allowed to use asynchronous processing (if supported).\n| undertowHttpBinding\
      \ | advanced |  | UndertowHttpBinding | To use a custom UndertowHttpBinding\
      \ to control the mapping between Camel message and undertow.\n| sslContextParameters\
      \ | security |  | SSLContextParameters | To configure security using SSLContextParameters\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n\n[[Undertow-MessageHeaders]]\nMessage\
      \ Headers\n^^^^^^^^^^^^^^^\n\nCamel uses the same message headers as the link:http.html[HTTP]\n\
      component. \n From Camel 2.2, it also uses\n`Exchange.HTTP_CHUNKED,CamelHttpChunked`??header\
      \ to turn on or turn off\nthe chuched encoding on the camel-undertow consumer.\n\
      \nCamel also populates *all* request.parameter and request.headers. For\nexample,\
      \ given a client request with the URL,\n`http://myserver/myserver?orderid=123`,\
      \ the exchange will contain a\nheader named `orderid` with the value 123.\n\n\
      [[Undertow-ProducerExample]]\nProducer Example\n^^^^^^^^^^^^^^^^\n\nThe following\
      \ is a basic example of how to send an HTTP request to an\nexisting HTTP endpoint.\n\
      \nin Java DSL\n\n[source,java]\n----------------------------------------------------------\n\
      from(\"direct:start\").to(\"undertow:http://www.google.com\");\n----------------------------------------------------------\n\
      \nor in Spring XML\n\n[source,xml]\n----------------------------------------------\n\
      <route>\n    <from uri=\"direct:start\"/>\n    <to uri=\"undertow:http://www.google.com\"\
      />\n<route>\n----------------------------------------------\n\n[[Undertow-ConsumerExample]]\n\
      Consumer Example\n^^^^^^^^^^^^^^^^\n\nIn this sample we define a route that\
      \ exposes a HTTP service at\n`http://localhost:8080/myapp/myservice`:\n\n[source,xml]\n\
      --------------------------------------------------------------\n<route>\n  <from\
      \ uri=\"undertow:http://localhost:8080/myapp/myservice\"/>\n  <to uri=\"bean:myBean\"\
      />\n</route>\n--------------------------------------------------------------\n\
      \nNOTE:*Usage of localhost*\nWhen you specify `localhost` in a URL, Camel exposes\
      \ the endpoint only\non the local TCP/IP network interface, so it cannot be\
      \ accessed from\noutside the machine it operates on.\n\nIf you need to expose\
      \ a Jetty endpoint on a specific network interface,\nthe numerical IP address\
      \ of this interface should be used as the host.\nIf you need to expose a Jetty\
      \ endpoint on all network interfaces, the\n`0.0.0.0` address should be used.\n\
      \nTIP:To listen across an entire URI prefix, see\nlink:how-do-i-let-jetty-match-wildcards.html[How\
      \ do I let Jetty match\nwildcards].\n\n\nTIP:If you actually want to expose\
      \ routes by HTTP and already have a\nServlet, you should instead refer to the\n\
      https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=46339[Servlet\n\
      Transport].\n\n[[Undertow-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:jetty.html[Jetty]\n*\
      \ link:http.html[HTTP]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-validator
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: validator
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: validator
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: validator
          spec:
            containers:
            - image: fabric8/connector-validator:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: validator
        syntax: validator:resourceUri
        title: Validator
        description: Validates the payload of a message using XML Schema and JAXP Validation.
        label: core,validation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.validator.ValidatorComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        resourceResolverFactory:
          kind: property
          label: advanced
          required: false
          type: object
          javaType: org.apache.camel.component.validator.ValidatorResourceResolverFactory
          deprecated: false
          secret: false
          description: To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: URL to a local resource on the classpathor a reference to lookup a bean in the Registry or a full URL to a remote resource or resource on the file system which contains the XSD to validate against.
        failOnNullBody:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to fail if no body exists.
        failOnNullHeader:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to fail if no header exists when validating against a header.
        headerName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To validate against a header instead of the message body.
        errorHandler:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.processor.validation.ValidatorErrorHandler
          deprecated: false
          secret: false
          description: To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception.
        resourceResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.w3c.dom.ls.LSResourceResolver
          deprecated: false
          secret: false
          description: To use a custom LSResourceResolver. See also link setResourceResolverFactory(ValidatorResourceResolverFactory)
        resourceResolverFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.validator.ValidatorResourceResolverFactory
          deprecated: false
          secret: false
          description: For creating a resource resolver which depends on the endpoint resource URI. Must not be used in combination with method link setResourceResolver(LSResourceResolver). If not set then DefaultValidatorResourceResolverFactory is used
        schemaFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.validation.SchemaFactory
          deprecated: false
          secret: false
          description: To use a custom javax.xml.validation.SchemaFactory
        schemaLanguage:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: http://www.w3.org/2001/XMLSchema
          description: Configures the W3C XML Schema Namespace URI.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        useDom:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether DOMSource/DOMResult or SaxSource/SaxResult should be used by the validator.
        useSharedSchema:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the Schema instance should be shared or not. This option is introduced to work around a JDK 1.6.x bug. Xerces should not have this issue.
    documentation.adoc: |+
      [[Validation-ValidationComponent]]
      Validation Component
      ~~~~~~~~~~~~~~~~~~~~

      The Validation component performs XML validation of the message body
      using the JAXP Validation API and based on any of the supported XML
      schema languages, which defaults to http://www.w3.org/XML/Schema[XML
      Schema]

      Note that the link:jing.html[Jing] component also supports the following
      useful schema languages:

      * http://relaxng.org/compact-tutorial-20030326.html[RelaxNG Compact
      Syntax]
      * http://relaxng.org/[RelaxNG XML Syntax]

      The link:msv.html[MSV] component also supports
      http://relaxng.org/[RelaxNG XML Syntax].

      [[Validation-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -----------------------------------
      validator:someLocalOrRemoteResource
      -----------------------------------

      Where *someLocalOrRemoteResource* is some URL to a local resource on the
      classpath or a full URL to a remote resource or resource on the file
      system which contains the XSD to validate against. For example:

      * `msv:org/foo/bar.xsd`
      * `msv:file:../foo/bar.xsd`
      * `msv:http://acme.com/cheese.xsd`
      * `validator:com/mypackage/myschema.xsd`

      Maven users will need to add the following dependency to their `pom.xml`
      for this component when using *Camel 2.8* or older:

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

      From Camel 2.9 onwards the link:validation.html[Validation] component is
      provided directly in the camel-core.

      [[Validation-Options]]
      Options
      ^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | resourceResolverFactory | ValidatorResourceResolverFactory | To use a custom LSResourceResolver which depends on a dynamic endpoint resource URI
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The Validator component supports 12 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* URL to a local resource on the classpathor a reference to lookup a bean in the Registry or a full URL to a remote resource or resource on the file system which contains the XSD to validate against.
      | failOnNullBody | producer | true | boolean | Whether to fail if no body exists.
      | failOnNullHeader | producer | true | boolean | Whether to fail if no header exists when validating against a header.
      | headerName | producer |  | String | To validate against a header instead of the message body.
      | errorHandler | advanced |  | ValidatorErrorHandler | To use a custom org.apache.camel.processor.validation.ValidatorErrorHandler. The default error handler captures the errors and throws an exception.
      | resourceResolver | advanced |  | LSResourceResolver | To use a custom LSResourceResolver. See also link setResourceResolverFactory(ValidatorResourceResolverFactory)
      | resourceResolverFactory | advanced |  | ValidatorResourceResolverFactory | For creating a resource resolver which depends on the endpoint resource URI. Must not be used in combination with method link setResourceResolver(LSResourceResolver). If not set then DefaultValidatorResourceResolverFactory is used
      | schemaFactory | advanced |  | SchemaFactory | To use a custom javax.xml.validation.SchemaFactory
      | schemaLanguage | advanced | http://www.w3.org/2001/XMLSchema | String | Configures the W3C XML Schema Namespace URI.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | useDom | advanced | false | boolean | Whether DOMSource/DOMResult or SaxSource/SaxResult should be used by the validator.
      | useSharedSchema | advanced | true | boolean | Whether the Schema instance should be shared or not. This option is introduced to work around a JDK 1.6.x bug. Xerces should not have this issue.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Validation-Example]]
      Example
      ^^^^^^^

      The following
      http://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/component/validator/camelContext.xml[example]
      shows how to configure a route from endpoint *direct:start* which then
      goes to one of two endpoints, either *mock:valid* or *mock:invalid*
      based on whether or not the XML matches the given schema (which is
      supplied on the classpath).

      [[Validation-Advanced:JMXmethodclearCachedSchema]]
      Advanced: JMX method clearCachedSchema
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Since *Camel 2.17*, you can force that the cached schema in the
      validator endpoint is cleared and reread with the next process call with
      the JMX operation??`clearCachedSchema. `You can also use this method to
      programmatically clear the cache. This method is available on the
      `ValidatorEndpoint `class`.`

      [[Validation-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-velocity
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: velocity
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: velocity
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: velocity
          spec:
            containers:
            - image: fabric8/connector-velocity:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: velocity
        syntax: velocity:resourceUri
        title: Velocity
        description: Transforms the message using a Velocity template.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.velocity.VelocityComponent
        groupId: org.apache.camel
        artifactId: camel-velocity
        version: 2.18.1
      componentProperties:
        velocityEngine:
          kind: property
          type: object
          javaType: org.apache.velocity.app.VelocityEngine
          deprecated: false
          secret: false
          description: To use the VelocityEngine otherwise a new engine is created
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Path to the resource or a reference to lookup a bean in the Registry to use as the resource
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether to use resource content cache or not
        encoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Character encoding of the resource content.
        loaderCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enables / disables the velocity resource loader cache which is enabled by default
        propertiesFile:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The URI of the properties file which is used for VelocityEngine initialization.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Velocity-Velocity]]
      Velocity
      ~~~~~~~~

      The *velocity:* component allows you to process a message using an
      http://velocity.apache.org/[Apache Velocity] template. This can be ideal
      when using link:templating.html[Templating] to generate responses for
      requests.

      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-velocity</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Velocity-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      -------------------------------
      velocity:templateName[?options]
      -------------------------------

      Where *templateName* is the classpath-local URI of the template to
      invoke; or the complete URL of the remote template (eg:
      file://folder/myfile.vm[file://folder/myfile.vm]).

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

      [[Velocity-Options]]
      Options
      ^^^^^^^



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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | velocityEngine | VelocityEngine | To use the VelocityEngine otherwise a new engine is created
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Velocity component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | producer |  | String | *Required* Path to the resource or a reference to lookup a bean in the Registry to use as the resource
      | contentCache | producer | false | boolean | Sets whether to use resource content cache or not
      | encoding | producer |  | String | Character encoding of the resource content.
      | loaderCache | producer | true | boolean | Enables / disables the velocity resource loader cache which is enabled by default
      | propertiesFile | producer |  | String | The URI of the properties file which is used for VelocityEngine initialization.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Velocity-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      The velocity component sets a couple headers on the message (you can't
      set these yourself and from Camel 2.1 velocity component will not set
      these headers which will cause some side effect on the dynamic template
      support):

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

      |`CamelVelocityResourceUri` |The *templateName* as a `String` object.

      |`CamelVelocitySupplementalContext` |*Camel 2.16:* To add additional information to the used VelocityContext.
      The value of this header should be a `Map` with key/values that will
      added (override any existing key with the same name). +
      This can be used to pre setup some common key/values you want to reuse
      in your velocity endpoints.
      |=======================================================================

      Headers set during the Velocity evaluation are returned to the message
      and added as headers. Then its kinda possible to return values from
      Velocity to the Message.

      For example, to set the header value of `fruit` in the Velocity template
      `.tm`:

      [source,java]
      -------------------------------
      $in.setHeader("fruit", "Apple")
      -------------------------------

      The `fruit` header is now accessible from the `message.out.headers`.

      [[Velocity-VelocityContext]]
      Velocity Context
      ^^^^^^^^^^^^^^^^

      Camel will provide exchange information in the Velocity context (just a
      `Map`). The `Exchange` is transfered as:

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

      |`exchange` |The `Exchange` itself.

      |`exchange.properties` |The `Exchange` properties.

      |`headers` |The headers of the In message.

      |`camelContext` |The Camel Context instance.

      |`request` |The In message.

      |`in` |The In message.

      |`body` |The In message body.

      |`out` |The Out message (only for InOut message exchange pattern).

      |`response` |The Out message (only for InOut message exchange pattern).
      |=======================================================================

      Since Camel-2.14, you can setup a custom Velocity Context yourself by
      setting the message header *CamelVelocityContext??*just like this

      [source,java]
      -----------------------------------------------------------------------
         VelocityContext velocityContext = new VelocityContext(variableMap);
         exchange.getIn().setHeader("CamelVelocityContext", velocityContext);
      -----------------------------------------------------------------------

      ??

      [[Velocity-Hotreloading]]
      Hot reloading
      ^^^^^^^^^^^^^

      The Velocity template resource is, by default, hot reloadable for both
      file and classpath resources (expanded jar). If you set
      `contentCache=true`, Camel will only load the resource once, and thus
      hot reloading is not possible. This scenario can be used in production,
      when the resource never changes.

      [[Velocity-Dynamictemplates]]
      Dynamic templates
      ^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.1* +
       Camel provides two headers by which you can define a different resource
      location for a template or the template content itself. If any of these
      headers is set then Camel uses this over the endpoint configured
      resource. This allows you to provide a dynamic template at runtime.

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Header |Type |Description

      |CamelVelocityResourceUri |String |*Camel 2.1:* A URI for the template resource to use instead of the
      endpoint configured.

      |CamelVelocityTemplate |String |*Camel 2.1:* The template to use instead of the endpoint configured.
      |=======================================================================

      [[Velocity-Samples]]
      Samples
      ^^^^^^^

      For example you could use something like

      [source,java]
      ----------------------------------------
      from("activemq:My.Queue").
        to("velocity:com/acme/MyResponse.vm");
      ----------------------------------------

      To use a Velocity template to formulate a response to a message for
      InOut message exchanges (where there is a `JMSReplyTo` header).

      If you want to use InOnly and consume the message and send it to another
      destination, you could use the following route:

      [source,java]
      ----------------------------------------
      from("activemq:My.Queue").
        to("velocity:com/acme/MyResponse.vm").
        to("activemq:Another.Queue");
      ----------------------------------------

      And to use the content cache, e.g. for use in production, where the
      `.vm` template never changes:

      [source,java]
      ----------------------------------------------------------
      from("activemq:My.Queue").
        to("velocity:com/acme/MyResponse.vm?contentCache=true").
        to("activemq:Another.Queue");
      ----------------------------------------------------------

      And a file based resource:

      [source,java]
      -----------------------------------------------------------------
      from("activemq:My.Queue").
        to("velocity:file://myfolder/MyResponse.vm?contentCache=true").
        to("activemq:Another.Queue");
      -----------------------------------------------------------------

      In *Camel 2.1* it's possible to specify what template the component
      should use dynamically via a header, so for example:

      [source,java]
      ---------------------------------------------------------------------------
      from("direct:in").
        setHeader("CamelVelocityResourceUri").constant("path/to/my/template.vm").
        to("velocity:dummy");
      ---------------------------------------------------------------------------

      In *Camel 2.1* it's possible to specify a template directly as a header
      the component should use dynamically via a header, so for example:

      [source,java]
      ---------------------------------------------------------------------------------------------------------------
      from("direct:in").
        setHeader("CamelVelocityTemplate").constant("Hi this is a velocity template that can do templating ${body}").
        to("velocity:dummy");
      ---------------------------------------------------------------------------------------------------------------

      [[Velocity-TheEmailSample]]
      The Email Sample
      ^^^^^^^^^^^^^^^^

      In this sample we want to use Velocity templating for an order
      confirmation email. The email template is laid out in Velocity as:

      [source,java]
      ----------------------------------------------
      Dear ${headers.lastName}, ${headers.firstName}

      Thanks for the order of ${headers.item}.

      Regards Camel Riders Bookstore
      ${body}
      ----------------------------------------------

      And the java code:

      [[Velocity-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-vertx
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: vertx
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: vertx
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: vertx
          spec:
            containers:
            - image: fabric8/connector-vertx:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: vertx
        syntax: vertx:address
        title: Vert.x
        description: The vertx component is used for sending and receive messages from a vertx event bus.
        label: eventbus
        deprecated: false
        async: true
        javaType: org.apache.camel.component.vertx.VertxComponent
        groupId: org.apache.camel
        artifactId: camel-vertx
        version: 2.18.1
      componentProperties:
        vertxFactory:
          kind: property
          type: object
          javaType: io.vertx.core.spi.VertxFactory
          deprecated: false
          secret: false
          description: To use a custom VertxFactory implementation
        host:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname for creating an embedded clustered EventBus
        port:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port for creating an embedded clustered EventBus
        vertxOptions:
          kind: property
          type: object
          javaType: io.vertx.core.VertxOptions
          deprecated: false
          secret: false
          description: Options to use for creating vertx
        vertx:
          kind: property
          type: object
          javaType: io.vertx.core.Vertx
          deprecated: false
          secret: false
          description: To use the given vertx EventBus instead of creating a new embedded EventBus
        timeout:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Timeout in seconds to wait for clustered Vertx EventBus to be ready. The default value is 60.
      properties:
        address:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the event bus address used to communicate
        pubSub:
          kind: parameter
          group: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: Whether to use publish/subscribe instead of point to point when sending to a vertx endpoint.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[Vertx-VertxComponent]]
      Vertx Component
      ~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *vertx* component is for working with the http://vertx.io/[Vertx]
      http://vertx.io/core_manual_js.html#the-event-bus[EventBus].

      The vertx http://vertx.io/core_manual_js.html#the-event-bus[EventBus]
      sends and receives JSON events.

      INFO:From *Camel 2.16* onwards vertx 3 is in use which requires Java 1.8 at
      runtime.

      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-vertx</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Vertx-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------
      vertx:channelName[?options]
      ---------------------------

      [[Vertx-Options]]
      Options
      ^^^^^^^



      // component options: START
      The Vert.x component supports 6 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | vertxFactory | VertxFactory | To use a custom VertxFactory implementation
      | host | String | Hostname for creating an embedded clustered EventBus
      | port | int | Port for creating an embedded clustered EventBus
      | vertxOptions | VertxOptions | Options to use for creating vertx
      | vertx | Vertx | To use the given vertx EventBus instead of creating a new embedded EventBus
      | timeout | int | Timeout in seconds to wait for clustered Vertx EventBus to be ready. The default value is 60.
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The Vert.x component supports 6 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | address | common |  | String | *Required* Sets the event bus address used to communicate
      | pubSub | common |  | Boolean | Whether to use publish/subscribe instead of point to point when sending to a vertx endpoint.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      *Camel 2.12.3:* Whether to use publish/subscribe instead of point to
      point when sending to a vertx endpoint.

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

      [[Vertx-ConnectingtotheexistingVert.xinstance]]
      Connecting to the existing Vert.x instance
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      If you would like to connect to the Vert.x instance already existing in
      your JVM, you can set the instance on the component level:

      [source,java]
      -----------------------------------------------------
      Vertx vertx = ...;
      VertxComponent vertxComponent = new VertxComponent();
      vertxComponent.setVertx(vertx);
      camelContext.addComponent("vertx", vertxComponent);
      -----------------------------------------------------

      [[Vertx-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-vm
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: vm
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: vm
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: vm
          spec:
            containers:
            - image: fabric8/connector-vm:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: vm
        syntax: vm:name
        title: VM
        description: The vm component provides asynchronous call to another endpoint from the same CamelContext.
        label: core,endpoint
        deprecated: false
        async: true
        javaType: org.apache.camel.component.vm.VmComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        queueSize:
          kind: property
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Sets the default maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
        concurrentConsumers:
          kind: property
          required: false
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Sets the default number of concurrent threads processing exchanges.
        defaultQueueFactory:
          kind: property
          type: object
          javaType: org.apache.camel.component.seda.BlockingQueueFactory<org.apache.camel.Exchange>
          deprecated: false
          secret: false
          description: Sets the default queue factory.
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of queue
        size:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "2147483647"
          description: The maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        concurrentConsumers:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1"
          description: Number of concurrent threads processing exchanges.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the default exchange pattern when creating an exchange.
        limitConcurrentConsumers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to limit the number of concurrentConsumers to the maximum of 500. By default an exception will be thrown if an endpoint is configured with a greater number. You can disable that check by turning this option off.
        multipleConsumers:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Specifies whether multiple consumers are allowed. If enabled you can use SEDA for Publish-Subscribe messaging. That is you can send a message to the SEDA queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
        pollTimeout:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: The timeout used when polling. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
        purgeWhenStopping:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to purge the task queue when stopping the consumer/route. This allows to stop faster as any pending messages on the queue is discarded.
        blockWhenFull:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a thread that sends messages to a full SEDA queue will block until the queue's capacity is no longer exhausted. By default an exception will be thrown stating that the queue is full. By enabling this option the calling thread will instead block and wait until the message can be accepted.
        discardIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should discard the message (do not add the message to the queue) when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
        failIfNoConsumers:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the producer should fail by throwing an exception when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
        timeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout (in milliseconds) before a SEDA producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
        waitForTaskToComplete:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: org.apache.camel.WaitForTaskToComplete
          enum:
          - Never
          - IfReplyExpected
          - Always
          deprecated: false
          secret: false
          defaultValue: IfReplyExpected
          description: 'Option to specify whether the caller should wait for the async task
            to complete or not before continuing. The following three options are supported:
            Always Never or IfReplyExpected. The first two values are self-explanatory.
            The last value IfReplyExpected will only wait if the message is Request Reply
            based. The default option is IfReplyExpected.'
        queue:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.concurrent.BlockingQueue
          deprecated: false
          secret: false
          description: Define the queue instance which will be used by the endpoint. This option is only for rare use-cases where you want to use a custom queue instance.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |+
      [[VM-VMComponent]]
      VM Component
      ~~~~~~~~~~~~

      The *vm:* component provides asynchronous
      http://www.eecs.harvard.edu/~mdw/proj/seda/[SEDA] behavior, exchanging
      messages on a
      http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/BlockingQueue.html[BlockingQueue]
      and invoking consumers in a separate thread pool.

      This component differs from the link:seda.html[Seda] component in that
      VM supports communication across CamelContext instances - so you can use
      this mechanism to communicate across web applications (provided that
      `camel-core.jar` is on the `system/boot` classpath).

      VM is an extension to the link:seda.html[Seda] component.

      [[VM-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------
      vm:queueName[?options]
      ----------------------

      Where *`queueName`* can be any string to uniquely identify the endpoint
      within the JVM (or at least within the classloader that loaded
      camel-core.jar)

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

      *Before Camel 2.3 - Same URI must be used for both producer and
      consumer*

      An exactly identical link:vm.html[VM] endpoint URI *must* be used for
      both the producer and the consumer endpoint. Otherwise, Camel will
      create a second link:vm.html[VM] endpoint despite that the `queueName`
      portion of the URI is identical. For example:

      [source,java]
      ---------------------------------------------------------
      from("direct:foo").to("vm:bar?concurrentConsumers=5");

      from("vm:bar?concurrentConsumers=5").to("file://output");
      ---------------------------------------------------------

      Notice that we have to use the full URI, including options in both the
      producer and consumer.

      In Camel 2.4 this has been fixed so that only the queue name must match.
      Using the queue name `bar`, we could rewrite the previous exmple as
      follows:

      [source,java]
      ---------------------------------------------------------
      from("direct:foo").to("vm:bar");

      from("vm:bar?concurrentConsumers=5").to("file://output");
      ---------------------------------------------------------

      [[VM-Options]]
      Options
      ^^^^^^^

      // component options: START
      The VM component supports 3 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | queueSize | int | Sets the default maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
      | concurrentConsumers | int | Sets the default number of concurrent threads processing exchanges.
      | defaultQueueFactory | Exchange> | Sets the default queue factory.
      |=======================================================================
      {% endraw %}
      // component options: END


      // endpoint options: START
      The VM component supports 17 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* Name of queue
      | size | common | 2147483647 | int | The maximum capacity of the SEDA queue (i.e. the number of messages it can hold).
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | concurrentConsumers | consumer | 1 | int | Number of concurrent threads processing exchanges.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the default exchange pattern when creating an exchange.
      | limitConcurrentConsumers | consumer (advanced) | true | boolean | Whether to limit the number of concurrentConsumers to the maximum of 500. By default an exception will be thrown if an endpoint is configured with a greater number. You can disable that check by turning this option off.
      | multipleConsumers | consumer (advanced) | false | boolean | Specifies whether multiple consumers are allowed. If enabled you can use SEDA for Publish-Subscribe messaging. That is you can send a message to the SEDA queue and have each consumer receive a copy of the message. When enabled this option should be specified on every consumer endpoint.
      | pollTimeout | consumer (advanced) | 1000 | int | The timeout used when polling. When a timeout occurs the consumer can check whether it is allowed to continue running. Setting a lower value allows the consumer to react more quickly upon shutdown.
      | purgeWhenStopping | consumer (advanced) | false | boolean | Whether to purge the task queue when stopping the consumer/route. This allows to stop faster as any pending messages on the queue is discarded.
      | blockWhenFull | producer | false | boolean | Whether a thread that sends messages to a full SEDA queue will block until the queue's capacity is no longer exhausted. By default an exception will be thrown stating that the queue is full. By enabling this option the calling thread will instead block and wait until the message can be accepted.
      | discardIfNoConsumers | producer | false | boolean | Whether the producer should discard the message (do not add the message to the queue) when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
      | failIfNoConsumers | producer | false | boolean | Whether the producer should fail by throwing an exception when sending to a queue with no active consumers. Only one of the options discardIfNoConsumers and failIfNoConsumers can be enabled at the same time.
      | timeout | producer | 30000 | long | Timeout (in milliseconds) before a SEDA producer will stop waiting for an asynchronous task to complete. You can disable timeout by using 0 or a negative value.
      | waitForTaskToComplete | producer | IfReplyExpected | WaitForTaskToComplete | Option to specify whether the caller should wait for the async task to complete or not before continuing. The following three options are supported: Always Never or IfReplyExpected. The first two values are self-explanatory. The last value IfReplyExpected will only wait if the message is Request Reply based. The default option is IfReplyExpected.
      | queue | advanced |  | BlockingQueue | Define the queue instance which will be used by the endpoint. This option is only for rare use-cases where you want to use a custom queue instance.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      See the link:seda.html[Seda] component for options and other important
      usage details as the same rules apply to the link:vm.html[Vm] component.

      [[VM-Samples]]
      Samples
      ^^^^^^^

      In the route below we send exchanges across CamelContext instances to a
      VM queue named `order.email`:

      [source,java]
      ---------------------------------------------------------------
      from("direct:in").bean(MyOrderBean.class).to("vm:order.email");
      ---------------------------------------------------------------

      And then we receive exchanges in some other Camel context (such as
      deployed in another `.war` application):

      [source,java]
      ------------------------------------------------------
      from("vm:order.email").bean(MyOrderEmailSender.class);
      ------------------------------------------------------

      [[VM-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
      * link:seda.html[Seda]

- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-weather
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: weather
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: weather
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: weather
          spec:
            containers:
            - image: fabric8/connector-weather:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: weather
        syntax: weather:name
        title: Weather
        description: Polls the weather information from Open Weather Map.
        label: api
        deprecated: false
        async: false
        javaType: org.apache.camel.component.weather.WeatherComponent
        groupId: org.apache.camel
        artifactId: camel-weather
        version: 2.18.1
      componentProperties: {}
      properties:
        name:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name value is not used.
        appid:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: APPID ID used to authenticate the user connected to the API Server
        headerName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To store the weather result in this header instead of the message body. This is useable if you want to keep current message body as-is.
        language:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.weather.WeatherLanguage
          enum:
          - en
          - ru
          - it
          - es
          - sp
          - uk
          - ua
          - de
          - pt
          - ro
          - pl
          - fi
          - nl
          - fr
          - bg
          - sv
          - se
          - zh_tw
          - zh
          - zh_cn
          - tr
          - hr
          - ca
          deprecated: false
          secret: false
          defaultValue: en
          description: Language of the response.
        mode:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.weather.WeatherMode
          enum:
          - HTML
          - JSON
          - XML
          deprecated: false
          secret: false
          defaultValue: JSON
          description: The output format of the weather data.
        period:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If null the current weather will be returned else use values of 5 7 14 days. Only the numeric value for the forecast period is actually parsed so spelling capitalisation of the time period is up to you (its ignored)
        units:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.weather.WeatherUnits
          enum:
          - IMPERIAL
          - METRIC
          deprecated: false
          secret: false
          description: The units for temperature measurement.
        weatherApi:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.weather.WeatherApi
          enum:
          - Current
          - Station
          - Hourly
          - Daily
          deprecated: false
          secret: false
          description: The API to be use (current forecast/3 hour forecast daily station)
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        httpConnectionManager:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.commons.httpclient.HttpConnectionManager
          deprecated: false
          secret: false
          description: To use a custom HttpConnectionManager to manage connections
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
        cnt:
          kind: parameter
          group: filter
          label: filter
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Number of results to be found
        ids:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: List of id's of city/stations. You can separate multiple ids by comma.
        lat:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Latitude of location. You can use lat and lon options instead of location. For boxed queries this is the bottom latitude.
        location:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If null Camel will try and determine your current location using the geolocation of your ip address else specify the citycountry. For well known city names Open Weather Map will determine the best fit but multiple results may be returned. Hence specifying and country as well will return more accurate data. If you specify current as the location then the component will try to get the current latitude and longitude and use that to get the weather details. You can use lat and lon options instead of location.
        lon:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Longitude of location. You can use lat and lon options instead of location. For boxed queries this is the left longtitude.
        rightLon:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: For boxed queries this is the right longtitude. Needs to be used in combination with topLat and zoom.
        topLat:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: For boxed queries this is the top latitude. Needs to be used in combination with rightLon and zoom.
        zip:
          kind: parameter
          group: filter
          label: filter
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Zip-code e.g. 94040us
        zoom:
          kind: parameter
          group: filter
          label: filter
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: For boxed queries this is the zoom. Needs to be used in combination with rightLon and topLat.
        proxyAuthDomain:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Domain for proxy NTLM authentication
        proxyAuthHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Optional host for proxy NTLM authentication
        proxyAuthMethod:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Authentication method for proxy either as Basic Digest or NTLM.
        proxyAuthPassword:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Password for proxy authentication
        proxyAuthUsername:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Username for proxy authentication
        proxyHost:
          kind: parameter
          group: proxy
          label: proxy
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The proxy host name
        proxyPort:
          kind: parameter
          group: proxy
          label: proxy
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The proxy port number
    documentation.adoc: |
      [[Weather-WeatherComponent]]
      Weather Component
      ~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12*

      The *weather:* component is used for polling weather information from
      http://openweathermap.org[Open Weather Map] - a site that provides free
      global weather and forecast information. The information is returned as
      a json String object.

      Camel will poll for updates to the current weather and forecasts once
      per hour by default. It can also be used to query the weather api based
      on the parameters defined on the endpoint which is used as producer.

      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-weather</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[Weather-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ---------------------------------
      weather://<unused name>[?options]
      ---------------------------------

      [[Weather-REMARK]]
      REMARK
      ^^^^^^

      Since the 9th of October, an Api Key is required to access the
      openweather service. This key is passed as parameter to the URI
      definition of the weather endpoint using the appid param??!

      [[Weather-Options]]
      Options
      ^^^^^^^


      // component options: START
      The Weather component has no options.
      // component options: END



      // endpoint options: START
      The Weather component supports 44 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | name | common |  | String | *Required* The name value is not used.
      | appid | common |  | String | *Required* APPID ID used to authenticate the user connected to the API Server
      | headerName | common |  | String | To store the weather result in this header instead of the message body. This is useable if you want to keep current message body as-is.
      | language | common | en | WeatherLanguage | Language of the response.
      | mode | common | JSON | WeatherMode | The output format of the weather data.
      | period | common |  | String | If null the current weather will be returned else use values of 5 7 14 days. Only the numeric value for the forecast period is actually parsed so spelling capitalisation of the time period is up to you (its ignored)
      | units | common |  | WeatherUnits | The units for temperature measurement.
      | weatherApi | common |  | WeatherApi | The API to be use (current forecast/3 hour forecast daily station)
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | httpConnectionManager | advanced |  | HttpConnectionManager | To use a custom HttpConnectionManager to manage connections
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      | cnt | filter |  | Integer | Number of results to be found
      | ids | filter |  | String | List of id's of city/stations. You can separate multiple ids by comma.
      | lat | filter |  | String | Latitude of location. You can use lat and lon options instead of location. For boxed queries this is the bottom latitude.
      | location | filter |  | String | If null Camel will try and determine your current location using the geolocation of your ip address else specify the citycountry. For well known city names Open Weather Map will determine the best fit but multiple results may be returned. Hence specifying and country as well will return more accurate data. If you specify current as the location then the component will try to get the current latitude and longitude and use that to get the weather details. You can use lat and lon options instead of location.
      | lon | filter |  | String | Longitude of location. You can use lat and lon options instead of location. For boxed queries this is the left longtitude.
      | rightLon | filter |  | String | For boxed queries this is the right longtitude. Needs to be used in combination with topLat and zoom.
      | topLat | filter |  | String | For boxed queries this is the top latitude. Needs to be used in combination with rightLon and zoom.
      | zip | filter |  | String | Zip-code e.g. 94040us
      | zoom | filter |  | Integer | For boxed queries this is the zoom. Needs to be used in combination with rightLon and topLat.
      | proxyAuthDomain | proxy |  | String | Domain for proxy NTLM authentication
      | proxyAuthHost | proxy |  | String | Optional host for proxy NTLM authentication
      | proxyAuthMethod | proxy |  | String | Authentication method for proxy either as Basic Digest or NTLM.
      | proxyAuthPassword | proxy |  | String | Password for proxy authentication
      | proxyAuthUsername | proxy |  | String | Username for proxy authentication
      | proxyHost | proxy |  | String | The proxy host name
      | proxyPort | proxy |  | Integer | The proxy port number
      |=======================================================================
      {% endraw %}
      // endpoint options: END


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

      [[Weather-Exchangedataformat]]
      Exchange data format
      ^^^^^^^^^^^^^^^^^^^^

      Camel will deliver the body as a json formatted java.lang.String (see
      the `mode` option above).

      [[Weather-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

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

      |`CamelWeatherQuery` |The original query URL sent to the Open Weather Map site

      |`CamelWeatherLocation` |Used by the producer to override the endpoint location and use the
      location from this header instead.
      |=======================================================================

      [[Weather-Samples]]
      Samples
      ^^^^^^^

      In this sample we find the 7 day weather forecast for Madrid, Spain:

      [source,java]
      ---------------------------------------------------------------------------------------------
      from("weather:foo?location=Madrid,Spain&period=7 days&appid=APIKEY").to("jms:queue:weather");
      ---------------------------------------------------------------------------------------------

      To just find the current weather for your current location you can use
      this:

      [source,java]
      ---------------------------------------------------------
      from("weather:foo?appid=APIKEY").to("jms:queue:weather");
      ---------------------------------------------------------

      And to find the weather using the producer we do:

      [source,java]
      --------------------------------------------------------
      from("direct:start")
        .to("weather:foo?location=Madrid,Spain&appid=APIKEY");
      --------------------------------------------------------

      And we can send in a message with a header to get the weather for any
      location as shown:

      [source,java]
      -------------------------------------------------------------------------------------------------------------------------------------
        String json = template.requestBodyAndHeader("direct:start", "", "CamelWeatherLocation", "Paris,France&appid=APIKEY", String.class);
      -------------------------------------------------------------------------------------------------------------------------------------

      And to get the weather at the current location, then:

      [source,java]
      --------------------------------------------------------------------------------------------------------------------------------
        String json = template.requestBodyAndHeader("direct:start", "", "CamelWeatherLocation", "current&appid=APIKEY", String.class);
      --------------------------------------------------------------------------------------------------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-websocket
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: websocket
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: websocket
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: websocket
          spec:
            containers:
            - image: fabric8/connector-websocket:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: websocket
        syntax: websocket:host:port/resourceUri
        title: Jetty Websocket
        description: The websocket component provides websocket endpoints for communicating with clients using websocket.
        label: websocket
        deprecated: false
        async: false
        javaType: org.apache.camel.component.websocket.WebsocketComponent
        groupId: org.apache.camel
        artifactId: camel-websocket
        version: 2.18.1
      componentProperties:
        staticResources:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: '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.'
        host:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The hostname. The default value is 0.0.0.0
        port:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: The port number. The default value is 9292
        sslKeyPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password for the keystore when using SSL.
        sslPassword:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The password when using SSL.
        sslKeystore:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The path to the keystore.
        enableJmx:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: If this option is true Jetty JMX support will be enabled for this endpoint. See Jetty JMX support for more details.
        minThreads:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: 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.
        maxThreads:
          kind: property
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: 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.
        threadPool:
          kind: property
          type: object
          javaType: org.eclipse.jetty.util.thread.ThreadPool
          deprecated: false
          secret: false
          description: To use a custom thread pool for the server. MaxThreads/minThreads or threadPool fields are required due to switch to Jetty9.
        sslContextParameters:
          kind: property
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
        socketFactory:
          kind: property
          type: object
          javaType: java.util.Map<java.lang.String,org.apache.camel.component.websocket.WebSocketFactory>
          deprecated: false
          secret: false
          description: 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.
      properties:
        host:
          kind: path
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: 0.0.0.0
          description: The hostname. The default value is 0.0.0.0. Setting this option on the component will use the component configured value as default.
        port:
          kind: path
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "9292"
          description: The port number. The default value is 9292. Setting this option on the component will use the component configured value as default.
        resourceUri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Name of the websocket channel to use
        maxBinaryMessageSize:
          kind: parameter
          group: common
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: -1
          description: 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)
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sessionSupport:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to enable session support which enables HttpSession for each http request.
        staticResources:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: '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.'
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        sendTimeout:
          kind: parameter
          group: producer
          label: producer
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "30000"
          description: Timeout in millis when sending to a websocket channel. The default timeout is 30000 (30 seconds).
        sendToAll:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          description: 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.
        bufferSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "8192"
          description: Set the buffer size of the websocketServlet which is also the max frame byte size (default 8192)
        maxIdleTime:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "300000"
          description: Set the time in ms that the websocket created by the websocketServlet may be idle before closing. (default is 300000)
        maxTextMessageSize:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          description: Can be used to set the size in characters that the websocket created by the websocketServlet may be accept before closing.
        minVersion:
          kind: parameter
          group: advanced
          label: advanced
          type: integer
          javaType: java.lang.Integer
          deprecated: false
          secret: false
          defaultValue: "13"
          description: Can be used to set the minimum protocol version accepted for the websocketServlet. (Default 13 - the RFC6455 version)
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        allowedOrigins:
          kind: parameter
          group: cors
          label: cors
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The CORS allowed origins. Use to allow all.
        crossOriginFilterOn:
          kind: parameter
          group: cors
          label: cors
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to enable CORS
        filterPath:
          kind: parameter
          group: cors
          label: cors
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Context path for filtering CORS
        enableJmx:
          kind: parameter
          group: monitoring
          label: monitoring
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If this option is true Jetty JMX support will be enabled for this endpoint. See Jetty JMX support for more details.
        sslContextParameters:
          kind: parameter
          group: security
          label: security
          type: object
          javaType: org.apache.camel.util.jsse.SSLContextParameters
          deprecated: false
          secret: false
          description: To configure security using SSLContextParameters
    documentation.adoc: "[[Websocket-WebsocketComponent]]\nWebsocket Component\n~~~~~~~~~~~~~~~~~~~\n\
      \n*Available as of Camel 2.10*\n\nThe *websocket* component provides websocket\n\
      link:endpoint.html[endpoints] for communicating with clients using\nwebsocket.\
      \ The component uses Eclipse Jetty Server which implements the\nhttp://tools.ietf.org/html/rfc6455[IETF]\
      \ specification (drafts and RFC\n6455). It supports the protocols ws:// and\
      \ wss://. To use wss://\nprotocol, the SSLContextParameters must be defined.\n\
      \n\n*Version currently supported*\n\nCamel 2.18 uses Jetty 9\n\n[[Websocket-URIformat]]\n\
      URI format\n^^^^^^^^^^\n\n[source,java]\n---------------------------------------------------\n\
      websocket://hostname[:port][/resourceUri][?options]\n---------------------------------------------------\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[Websocket-Options]]\nWebsocket Options\n^^^^^^^^^^^^^^^^^\n\n\n\n\n\n\n\
      // component options: START\nThe Jetty Websocket component supports 12 options\
      \ which are listed below.\n\n\n\n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\"\
      ,options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| staticResources | String | 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.\n| host | String | The hostname.\
      \ The default value is 0.0.0.0\n| port | Integer | The port number. The default\
      \ value is 9292\n| sslKeyPassword | String | The password for the keystore when\
      \ using SSL.\n| sslPassword | String | The password when using SSL.\n| sslKeystore\
      \ | String | The path to the keystore.\n| enableJmx | boolean | If this option\
      \ is true Jetty JMX support will be enabled for this endpoint. See Jetty JMX\
      \ support for more details.\n| minThreads | Integer | 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.\n| maxThreads | Integer | 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.\n\
      | threadPool | ThreadPool | To use a custom thread pool for the server. MaxThreads/minThreads\
      \ or threadPool fields are required due to switch to Jetty9.\n| sslContextParameters\
      \ | SSLContextParameters | To configure security using SSLContextParameters\n\
      | socketFactory | Map | 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.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n\n\n\n\n\n\n\n\n// endpoint options:\
      \ START\nThe Jetty Websocket component supports 21 endpoint options which are\
      \ listed below:\n\n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"\
      header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | common | 0.0.0.0\
      \ | String | The hostname. The default value is 0.0.0.0. Setting this option\
      \ on the component will use the component configured value as default.\n| port\
      \ | common | 9292 | Integer | The port number. The default value is 9292. Setting\
      \ this option on the component will use the component configured value as default.\n\
      | resourceUri | common |  | String | *Required* Name of the websocket channel\
      \ to use\n| maxBinaryMessageSize | common | -1 | Integer | 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)\n| bridgeErrorHandler\
      \ | consumer | false | boolean | 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/ERROR level and ignored.\n| sessionSupport | consumer\
      \ | false | boolean | Whether to enable session support which enables HttpSession\
      \ for each http request.\n| staticResources | consumer |  | String | 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.\n| exceptionHandler | consumer (advanced)\
      \ |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler.\
      \ Notice if the option bridgeErrorHandler is enabled then this options is not\
      \ in use. By default the consumer will deal with exceptions that will be logged\
      \ at WARN/ERROR level and ignored.\n| exchangePattern | consumer (advanced)\
      \ |  | ExchangePattern | Sets the exchange pattern when the consumer creates\
      \ an exchange.\n| sendTimeout | producer | 30000 | Integer | Timeout in millis\
      \ when sending to a websocket channel. The default timeout is 30000 (30 seconds).\n\
      | sendToAll | producer |  | Boolean | 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.\n| bufferSize | advanced | 8192 | Integer | Set the\
      \ buffer size of the websocketServlet which is also the max frame byte size\
      \ (default 8192)\n| maxIdleTime | advanced | 300000 | Integer | Set the time\
      \ in ms that the websocket created by the websocketServlet may be idle before\
      \ closing. (default is 300000)\n| maxTextMessageSize | advanced |  | Integer\
      \ | Can be used to set the size in characters that the websocket created by\
      \ the websocketServlet may be accept before closing.\n| minVersion | advanced\
      \ | 13 | Integer | Can be used to set the minimum protocol version accepted\
      \ for the websocketServlet. (Default 13 - the RFC6455 version)\n| synchronous\
      \ | advanced | false | boolean | Sets whether synchronous processing should\
      \ be strictly used or Camel is allowed to use asynchronous processing (if supported).\n\
      | allowedOrigins | cors |  | String | The CORS allowed origins. Use to allow\
      \ all.\n| crossOriginFilterOn | cors | false | boolean | Whether to enable CORS\n\
      | filterPath | cors |  | String | Context path for filtering CORS\n| enableJmx\
      \ | monitoring | false | boolean | If this option is true Jetty JMX support\
      \ will be enabled for this endpoint. See Jetty JMX support for more details.\n\
      | sslContextParameters | security |  | SSLContextParameters | To configure security\
      \ using SSLContextParameters\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n\n??\n\n[[Websocket-MessageHeaders]]\n\
      Message Headers\n^^^^^^^^^^^^^^^\n\nThe websocket component uses 2 headers to\
      \ indicate to either send\nmessages back to a single/current client, or to all\
      \ clients.\n\n[width=\"100%\",cols=\"10%,90%\",options=\"header\",]\n|=======================================================================\n\
      \n|`WebsocketConstants.SEND_TO_ALL` |Sends the message to all clients which\
      \ are currently connected. You can\nuse the `sendToAll` option on the endpoint\
      \ instead of using this header.\n\n|`WebsocketConstants.CONNECTION_KEY` |Sends\
      \ the message to the client with the given connection key.\n|=======================================================================\n\
      \n[[Websocket-Usage]]\nUsage\n^^^^^\n\nIn this example we let Camel exposes\
      \ a websocket server which clients\ncan communicate with. The websocket server\
      \ uses the default host and\nport, which would be `0.0.0.0:9292`. +\n The example\
      \ will send back an echo of the input. To send back a\nmessage, we need to send\
      \ the transformed message to the same endpoint\n`\"websocket://echo\"`. This\
      \ is needed +\n because by default the messaging is InOnly.\n\nThis example\
      \ is part of an unit test, which you can find\nhttps://svn.apache.org/repos/asf/camel/trunk/components/camel-websocket/src/test/java/org/apache/camel/component/websocket/WebsocketRouteExampleTest.java[here].\n\
      As a client we use the link:ahc.html[AHC] library which offers support\nfor\
      \ web socket as well.\n\nHere is another example where webapp resources location\
      \ have been\ndefined to allow the Jetty Application Server to not only register\
      \ the\nWebSocket servlet but also to expose web resources for the browser.\n\
      Resources should be defined under the webapp directory.\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      from(\"activemq:topic:newsTopic\")\n   .routeId(\"fromJMStoWebSocket\")\n  \
      \ .to(\"websocket://localhost:8443/newsTopic?sendToAll=true&staticResources=classpath:webapp\"\
      );\n-----------------------------------------------------------------------------------------------\n\
      \n[[Websocket-SettingupSSLforWebSocketComponent]]\nSetting up SSL for WebSocket\
      \ Component\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n[[Websocket-UsingtheJSSEConfigurationUtility]]\n\
      Using the JSSE Configuration Utility\n++++++++++++++++++++++++++++++++++++\n\
      \nAs of Camel 2.10, the WebSocket component supports SSL/TLS configuration\n\
      through the link:camel-configuration-utilities.html[Camel JSSE\nConfiguration\
      \ Utility].?? This utility greatly decreases the amount of\ncomponent specific\
      \ code you need to write and is configurable at the\nendpoint and component\
      \ levels.?? The following examples demonstrate how\nto use the utility with\
      \ the Cometd component.\n\n[[Websocket-Programmaticconfigurationofthecomponent]]\n\
      Programmatic configuration of the component\n\n[source,java]\n-----------------------------------------------------------------------------------------------\n\
      KeyStoreParameters ksp = new KeyStoreParameters();\nksp.setResource(\"/users/home/server/keystore.jks\"\
      );\nksp.setPassword(\"keystorePassword\");\n\nKeyManagersParameters kmp = new\
      \ KeyManagersParameters();\nkmp.setKeyStore(ksp);\nkmp.setKeyPassword(\"keyPassword\"\
      );\n\nTrustManagersParameters tmp = new TrustManagersParameters();\ntmp.setKeyStore(ksp);\n\
      \nSSLContextParameters scp = new SSLContextParameters();\nscp.setKeyManagers(kmp);\n\
      scp.setTrustManagers(tmp);\n\nCometdComponent commetdComponent = getContext().getComponent(\"\
      cometds\", CometdComponent.class);\ncommetdComponent.setSslContextParameters(scp);\n\
      -----------------------------------------------------------------------------------------------\n\
      \n[[Websocket-SpringDSLbasedconfigurationofendpoint]]\nSpring DSL based configuration\
      \ of endpoint\n\n[source,xml]\n-------------------------------------------------------------------------------------------\n\
      ...\n  <camel:sslContextParameters\n      id=\"sslContextParameters\">\n   \
      \ <camel:keyManagers\n        keyPassword=\"keyPassword\">\n      <camel:keyStore\n\
      \          resource=\"/users/home/server/keystore.jks\"\n          password=\"\
      keystorePassword\"/>\n    </camel:keyManagers>\n    <camel:trustManagers>\n\
      \      <camel:keyStore\n          resource=\"/users/home/server/keystore.jks\"\
      \n          password=\"keystorePassword\"/>\n    </camel:trustManagers>\n  </camel:sslContextParameters>...\n\
      ...\n  <to uri=\"websocket://127.0.0.1:8443/test?sslContextParameters=#sslContextParameters\"\
      />...\n-------------------------------------------------------------------------------------------\n\
      \n[[Websocket-JavaDSLbasedconfigurationofendpoint]]\nJava DSL based configuration\
      \ of endpoint\n\n[source,java]\n----------------------------------------------------------------------------------------------------------\n\
      ...\n    protected RouteBuilder createRouteBuilder() throws Exception {\n  \
      \      return new RouteBuilder() {\n            public void configure() {\n\
      \                \n                String uri = \"websocket://127.0.0.1:8443/test?sslContextParameters=#sslContextParameters\"\
      ;\n                \n                from(uri)\n                     .log(\"\
      >>> Message received from WebSocket Client : ${body}\")\n                  \
      \   .to(\"mock:client\")\n                     .loop(10)\n                 \
      \        .setBody().constant(\">> Welcome on board!\")\n                   \
      \      .to(uri);\n...\n----------------------------------------------------------------------------------------------------------\n\
      \n[[Websocket-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n* link:ahc.html[AHC]\n* link:jetty.html[Jetty]\n\
      * link:twitter-websocket-example.html[Twitter Websocket Example]\ndemonstrates\
      \ how to poll a constant feed of twitter searches and publish\nresults in real\
      \ time using web socket to a web page.\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-xmlrpc
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: xmlrpc
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: xmlrpc
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: xmlrpc
          spec:
            containers:
            - image: fabric8/connector-xmlrpc:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: xmlrpc
        syntax: xmlrpc:address
        title: XML RPC
        description: The xmlrpc component is used for sending messages to a XML RPC service.
        label: transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.xmlrpc.XmlRpcComponent
        groupId: org.apache.camel
        artifactId: camel-xmlrpc
        version: 2.18.1
      componentProperties: {}
      properties:
        address:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The server url
        basicEncoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the encoding for basic authentication null means UTF-8 is chosen.
        connectionTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Set the connection timeout in milliseconds 0 is to disable it
        contentLengthOptional:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether a Content-Length header may be omitted. The XML-RPC specification demands that such a header be present.
        defaultMethodName:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The method name which would be used for the xmlrpc requests by default if the Message header CamelXmlRpcMethodName is not set.
        enabledForExceptions:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the response should contain a faultCause element in case of errors. The faultCause is an exception which the server has trapped and written into a byte stream as a serializable object.
        enabledForExtensions:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether extensions are enabled. By default the client or server is strictly compliant to the XML-RPC specification and extensions are disabled.
        encoding:
          kind: parameter
          group: producer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the requests encoding null means UTF-8 is chosen.
        gzipCompressing:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether gzip compression is being used for transmitting the request.
        gzipRequesting:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether gzip compression is being used for transmitting the request.
        replyTimeout:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Set the reply timeout in milliseconds 0 is to disable it.
        clientConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.xmlrpc.client.XmlRpcClientConfigImpl
          deprecated: false
          secret: false
          description: To use the given XmlRpcClientConfigImpl as configuration for the client.
        clientConfigurer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.component.xmlrpc.XmlRpcClientConfigurer
          deprecated: false
          secret: false
          description: To use a custom XmlRpcClientConfigurer to configure the client
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        timeZone:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: java.util.TimeZone
          deprecated: false
          secret: false
          description: The timezone which is used to interpret date/time. Defaults to link TimeZonegetDefault().
        userAgent:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The http user agent header to set when doing xmlrpc requests
        xmlRpcServer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.xmlrpc.common.XmlRpcRequestProcessor
          deprecated: false
          secret: false
          description: To use a custom XmlRpcRequestProcessor as server.
        basicPassword:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The password for basic authentication.
        basicUserName:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: The user name for basic authentication.
    documentation.adoc: |
      [[XmlRpc-XmlRpcComponent]]
      XmlRpc Component
      ~~~~~~~~~~~~~~~~

      *Available as of Camel 2.11*

      This component provides a dataformat for xml, which allows serialization
      and deserialization of request messages and response message using
      Apache XmlRpc's binary dataformat. You can also invoke the XMLRPC
      Service through the camel-xmlrpc producer.

      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-xmlrpc</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ------------------------------------------------------------

      [[XmlRpc-XmlRpcOverview]]
      XmlRpc Overview
      ^^^^^^^^^^^^^^^

      It's a http://xmlrpc.scripting.com/spec[spec] and a set of
      implementations that allow software running on disparate operating
      systems, running in different environments to make procedure calls over
      the Internet.

      It's remote procedure calling using HTTP as the transport and XML as the
      encoding. XML-RPC is designed to be as simple as possible, while
      allowing complex data structures to be transmitted, processed and
      returned.

      An example of a typical XML-RPC request would be:

      [source,java]
      ------------------------------------------------
      <?xml version="1.0"?>
      <methodCall>
        <methodName>examples.getStateName</methodName>
        <params>
          <param>
              <value><i4>40</i4></value>
          </param>
        </params>
      </methodCall>
      ------------------------------------------------

      An example of a typical XML-RPC response would be:

      [source,java]
      ----------------------------------------------------
      <?xml version="1.0"?>
      <methodResponse>
        <params>
          <param>
              <value><string>South Dakota</string></value>
          </param>
        </params>
      </methodResponse>
      ----------------------------------------------------

      A typical XML-RPC fault would be:

      [source,java]
      --------------------------------------------------------------
      <?xml version="1.0"?>
      <methodResponse>
        <fault>
          <value>
            <struct>
              <member>
                <name>faultCode</name>
                <value><int>4</int></value>
              </member>
              <member>
                <name>faultString</name>
                <value><string>Too many parameters.</string></value>
              </member>
            </struct>
          </value>
        </fault>
      </methodResponse>
      --------------------------------------------------------------

      [[XmlRpc-URIformat]]
      URI format
      ^^^^^^^^^^

      [source,java]
      ----------------------------
      xmlrpc://serverUri[?options]
      ----------------------------

      [[XmlRpc-Options]]
      Options
      ^^^^^^^


      // component options: START
      The XML RPC component has no options.
      // component options: END



      // endpoint options: START
      The XML RPC component supports 19 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | address | producer |  | String | *Required* The server url
      | basicEncoding | producer |  | String | Sets the encoding for basic authentication null means UTF-8 is chosen.
      | connectionTimeout | producer |  | int | Set the connection timeout in milliseconds 0 is to disable it
      | contentLengthOptional | producer | false | boolean | Whether a Content-Length header may be omitted. The XML-RPC specification demands that such a header be present.
      | defaultMethodName | producer |  | String | The method name which would be used for the xmlrpc requests by default if the Message header CamelXmlRpcMethodName is not set.
      | enabledForExceptions | producer | false | boolean | Whether the response should contain a faultCause element in case of errors. The faultCause is an exception which the server has trapped and written into a byte stream as a serializable object.
      | enabledForExtensions | producer | false | boolean | Whether extensions are enabled. By default the client or server is strictly compliant to the XML-RPC specification and extensions are disabled.
      | encoding | producer |  | String | Sets the requests encoding null means UTF-8 is chosen.
      | gzipCompressing | producer | false | boolean | Whether gzip compression is being used for transmitting the request.
      | gzipRequesting | producer | false | boolean | Whether gzip compression is being used for transmitting the request.
      | replyTimeout | producer |  | int | Set the reply timeout in milliseconds 0 is to disable it.
      | clientConfig | advanced |  | XmlRpcClientConfigImpl | To use the given XmlRpcClientConfigImpl as configuration for the client.
      | clientConfigurer | advanced |  | XmlRpcClientConfigurer | To use a custom XmlRpcClientConfigurer to configure the client
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | timeZone | advanced |  | TimeZone | The timezone which is used to interpret date/time. Defaults to link TimeZonegetDefault().
      | userAgent | advanced |  | String | The http user agent header to set when doing xmlrpc requests
      | xmlRpcServer | advanced |  | XmlRpcRequestProcessor | To use a custom XmlRpcRequestProcessor as server.
      | basicPassword | security |  | String | The password for basic authentication.
      | basicUserName | security |  | String | The user name for basic authentication.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[XmlRpc-MessageHeaders]]
      Message Headers
      ^^^^^^^^^^^^^^^

      Camel XmlRpc uses these headers.

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

      |`CamelXmlRpcMethodName` |The XmlRpc method name which will be use for invoking the XmlRpc server.
      |=======================================================================

      [[XmlRpc-UsingtheXmlRpcdataformat]]
      Using the XmlRpc data format
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      As the XmlRpc message could be request or response, when you use the
      XmlRpcDataFormat, you need to specify the dataformat is for request or
      not.

      [[XmlRpc-InvokeXmlRpcServicefromClient]]
      Invoke XmlRpc Service from Client
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      To invoke the XmlRpc service, you need to specify the methodName on the
      message header and put the parameters into the message body like below
      code, then you can get the result message as you want. If the fault
      message is return, you should get an exception which cause if
      XmlRpcException.

      [source,java]
      -------------------------------------------------------------------------------------------------------------------------------------------------
         String response = template.requestBodyAndHeader(xmlRpcServiceAddress, new Object[]{"me"}, XmlRpcConstants.METHOD_NAME, "hello", String.class);
      -------------------------------------------------------------------------------------------------------------------------------------------------

      [[XmlRpc-HowtoconfiguretheXmlRpcClientwithJavacode]]
      How to configure the XmlRpcClient with Java code
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      camel-xmlrpc provides a pluggable strategy for configuring the
      XmlRpcClient used by the component, user just to implement the
      *XmlRpcClientConfigurer* interface and can configure the XmlRpcClient as
      he wants. The clientConfigure instance reference can be set through the
      uri option clientConfigure.
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-xmlsecurity
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: xmlsecurity
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: xmlsecurity
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: xmlsecurity
          spec:
            containers:
            - image: fabric8/connector-xmlsecurity:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: xmlsecurity
        syntax: xmlsecurity:command:name
        title: XML Security
        description: Used to sign and verify exchanges using the XML signature specification.
        label: security,transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.xmlsecurity.XmlSignatureComponent
        groupId: org.apache.camel
        artifactId: camel-xmlsecurity
        version: 2.18.1
      componentProperties:
        signerConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.component.xmlsecurity.processor.XmlSignerConfiguration
          deprecated: false
          secret: false
          description: To use a shared XmlSignerConfiguration configuration to use as base for configuring endpoints.
        verifierConfiguration:
          kind: property
          type: object
          javaType: org.apache.camel.component.xmlsecurity.processor.XmlVerifierConfiguration
          deprecated: false
          secret: false
          description: To use a shared XmlVerifierConfiguration configuration to use as base for configuring endpoints.
      properties:
        command:
          kind: path
          group: producer
          required: true
          type: string
          javaType: org.apache.camel.component.xmlsecurity.XmlCommand
          enum:
          - sign
          - verify
          deprecated: false
          secret: false
          description: Whether to sign or verify.
        name:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name part in the URI can be chosen by the user to distinguish between different signer/verifier endpoints within the camel context.
        baseUri:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: You can set a base URI which is used in the URI dereferencing. Relative URIs are then concatenated with the base URI.
        clearHeaders:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Determines if the XML signature specific headers be cleared after signing and verification. Defaults to true.
        cryptoContextProperties:
          kind: parameter
          group: common
          label: common
          type: object
          javaType: java.util.Map<java.lang.String,?>
          deprecated: false
          secret: false
          description: Sets the crypto context properties. See link XMLCryptoContextsetProperty(String Object). Possible properties are defined in XMLSignContext an XMLValidateContext (see Supported Properties). The following properties are set by default to the value link BooleanTRUE for the XML validation. If you want to switch these features off you must set the property value to link BooleanFALSE. org.jcp.xml.dsig.validateManifests javax.xml.crypto.dsig.cacheReference
        disallowDoctypeDecl:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Disallows that the incoming XML document contains DTD DOCTYPE declaration. The default value is link BooleanTRUE.
        omitXmlDeclaration:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Indicator whether the XML declaration in the outgoing message body should be omitted. Default value is false. Can be overwritten by the header link XmlSignatureConstantsHEADER_OMIT_XML_DECLARATION.
        outputXmlEncoding:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The character encoding of the resulting signed XML document. If null then the encoding of the original XML document is used.
        schemaResourceUri:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Classpath to the XML Schema. Must be specified in the detached XML Signature case for determining the ID attributes might be set in the enveloped and enveloping case. If set then the XML document is validated with the specified XML schema. The schema resource URI can be overwritten by the header link XmlSignatureConstantsHEADER_SCHEMA_RESOURCE_URI.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        uriDereferencer:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.crypto.URIDereferencer
          deprecated: false
          secret: false
          description: 'If you want to restrict the remote access via reference URIs you
            can set an own dereferencer. Optional parameter. If not set the provider default
            dereferencer is used which can resolve URI fragments HTTP file and XPpointer
            URIs. Attention: The implementation is provider dependent!'
        addKeyInfoReference:
          kind: parameter
          group: sign
          label: sign
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: In order to protect the KeyInfo element from tampering you can add a reference to the signed info element so that it is protected via the signature value. The default value is true. Only relevant when a KeyInfo is returned by KeyAccessor. and link KeyInfogetId() is not null.
        canonicalizationMethod:
          kind: parameter
          group: sign
          label: sign
          type: object
          javaType: javax.xml.crypto.AlgorithmMethod
          deprecated: false
          secret: false
          defaultValue: http://www.w3.org/TR/2001/REC-xml-c14n-20010315
          description: Canonicalization method used to canonicalize the SignedInfo element before the digest is calculated. You can use the helper methods XmlSignatureHelper.getCanonicalizationMethod(String algorithm) or getCanonicalizationMethod(String algorithm List inclusiveNamespacePrefixes) to create a canonicalization method.
        contentObjectId:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the content object Id attribute value. By default a UUID is generated. If you set the null value then a new UUID will be generated. Only used in the enveloping case.
        contentReferenceType:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Type of the content reference. The default value is null. This value can be overwritten by the header link XmlSignatureConstantsHEADER_CONTENT_REFERENCE_TYPE.
        contentReferenceUri:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Reference URI for the content to be signed. Only used in the enveloped case. If the reference URI contains an ID attribute value then the resource schema URI ( link setSchemaResourceUri(String)) must also be set because the schema validator will then find out which attributes are ID attributes. Will be ignored in the enveloping or detached case.
        digestAlgorithm:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: 'Digest algorithm URI. Optional parameter. This digest algorithm
            is used for calculating the digest of the input message. If this digest algorithm
            is not specified then the digest algorithm is calculated from the signature
            algorithm. Example: http://www.w3.org/2001/04/xmlencsha256'
        keyAccessor:
          kind: parameter
          group: sign
          label: sign
          type: object
          javaType: org.apache.camel.component.xmlsecurity.api.KeyAccessor
          deprecated: false
          secret: false
          description: For the signing process a private key is necessary. You specify a key accessor bean which provides this private key. The key accessor bean must implement the KeyAccessor interface. The package org.apache.camel.component.xmlsecurity.api contains the default implementation class DefaultKeyAccessor which reads the private key from a Java keystore.
        parentLocalName:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Local name of the parent element to which the XML signature element will be added. Only relevant for enveloped XML signature. Alternatively you can also use link setParentXpath(XPathFilterParameterSpec). Default value is null. The value must be null for enveloping and detached XML signature. This parameter or the parameter link setParentXpath(XPathFilterParameterSpec) for enveloped signature and the parameter link setXpathsToIdAttributes(List) for detached signature must not be set in the same configuration. If the parameters parentXpath and parentLocalName are specified in the same configuration then an exception is thrown.
        parentNamespace:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Namespace of the parent element to which the XML signature element will be added.
        parentXpath:
          kind: parameter
          group: sign
          label: sign
          type: object
          javaType: javax.xml.crypto.dsig.spec.XPathFilterParameterSpec
          deprecated: false
          secret: false
          description: Sets the XPath to find the parent node in the enveloped case. Either you specify the parent node via this method or the local name and namespace of the parent with the methods link setParentLocalName(String) and link setParentNamespace(String). Default value is null. The value must be null for enveloping and detached XML signature. If the parameters parentXpath and parentLocalName are specified in the same configuration then an exception is thrown.
        plainText:
          kind: parameter
          group: sign
          label: sign
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Indicator whether the message body contains plain text. The default value is false indicating that the message body contains XML. The value can be overwritten by the header link XmlSignatureConstantsHEADER_MESSAGE_IS_PLAIN_TEXT.
        plainTextEncoding:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: UTF-8
          description: Encoding of the plain text. Only relevant if the message body is plain text (see parameter link plainText. Default value is UTF-8.
        prefixForXmlSignatureNamespace:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: ds
          description: Namespace prefix for the XML signature namespace http://www.w3.org/2000/09/xmldsig. Default value is ds. If null or an empty value is set then no prefix is used for the XML signature namespace. See best practice http://www.w3.org/TR/xmldsig-bestpractices/signing-xml- without-namespaces
        properties:
          kind: parameter
          group: sign
          label: sign
          type: object
          javaType: org.apache.camel.component.xmlsecurity.api.XmlSignatureProperties
          deprecated: false
          secret: false
          description: For adding additional References and Objects to the XML signature which contain additional properties you can provide a bean which implements the XmlSignatureProperties interface.
        signatureAlgorithm:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: http://www.w3.org/2000/09/xmldsig#rsa-sha1
          description: Signature algorithm. Default value is http://www.w3.org/2000/09/xmldsigrsa-sha1.
        signatureId:
          kind: parameter
          group: sign
          label: sign
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the signature Id. If this parameter is not set (null value) then a unique ID is generated for the signature ID (default). If this parameter is set to (empty string) then no Id attribute is created in the signature element.
        transformMethods:
          kind: parameter
          group: sign
          label: sign
          type: array
          javaType: java.util.List<javax.xml.crypto.AlgorithmMethod>
          deprecated: false
          secret: false
          description: Transforms which are executed on the message body before the digest is calculated. By default C14n is added and in the case of enveloped signature (see option parentLocalName) also http://www.w3.org/2000/09/xmldsigenveloped-signature is added at position 0 of the list. Use methods in XmlSignatureHelper to create the transform methods.
        xpathsToIdAttributes:
          kind: parameter
          group: sign
          label: sign
          type: array
          javaType: java.util.List<javax.xml.crypto.dsig.spec.XPathFilterParameterSpec>
          deprecated: false
          secret: false
          description: Define the elements which are signed in the detached case via XPATH expressions to ID attributes (attributes of type ID). For each element found via the XPATH expression a detached signature is created whose reference URI contains the corresponding attribute value (preceded by ''). The signature becomes the last sibling of the signed element. Elements with deeper hierarchy level are signed first. You can also set the XPATH list dynamically via the header link XmlSignatureConstantsHEADER_XPATHS_TO_ID_ATTRIBUTES. The parameter link setParentLocalName(String) or link setParentXpath(XPathFilterParameterSpec) for enveloped signature and this parameter for detached signature must not be set in the same configuration.
        keySelector:
          kind: parameter
          group: verify
          label: verify
          type: object
          javaType: javax.xml.crypto.KeySelector
          deprecated: false
          secret: false
          description: Provides the key for validating the XML signature.
        outputNodeSearch:
          kind: parameter
          group: verify
          label: verify
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Sets the output node search value for determining the node from the XML signature document which shall be set to the output message body. The class of the value depends on the type of the output node search. The output node search is forwarded to XmlSignature2Message.
        outputNodeSearchType:
          kind: parameter
          group: verify
          label: verify
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: Default
          description: Determines the search type for determining the output node which is serialized into the output message bodyF. See link setOutputNodeSearch(Object). The supported default search types you can find in DefaultXmlSignature2Message.
        removeSignatureElements:
          kind: parameter
          group: verify
          label: verify
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Indicator whether the XML signature elements (elements with local name Signature and namesapce http://www.w3.org/2000/09/xmldsig) shall be removed from the document set to the output message. Normally this is only necessary if the XML signature is enveloped. The default value is link BooleanFALSE. This parameter is forwarded to XmlSignature2Message. This indicator has no effect if the output node search is of type link DefaultXmlSignature2MessageOUTPUT_NODE_SEARCH_TYPE_DEFAULT.F
        secureValidation:
          kind: parameter
          group: verify
          label: verify
          type: boolean
          javaType: java.lang.Boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Enables secure validation. If true then secure validation is enabled.
        validationFailedHandler:
          kind: parameter
          group: verify
          label: verify
          type: object
          javaType: org.apache.camel.component.xmlsecurity.api.ValidationFailedHandler
          deprecated: false
          secret: false
          description: Handles the different validation failed situations. The default implementation throws specific exceptions for the different situations (All exceptions have the package name org.apache.camel.component.xmlsecurity.api and are a sub-class of XmlSignatureInvalidException. If the signature value validation fails a XmlSignatureInvalidValueException is thrown. If a reference validation fails a XmlSignatureInvalidContentHashException is thrown. For more detailed information see the JavaDoc.
        xmlSignature2Message:
          kind: parameter
          group: verify
          label: verify
          type: object
          javaType: org.apache.camel.component.xmlsecurity.api.XmlSignature2Message
          deprecated: false
          secret: false
          description: 'Bean which maps the XML signature to the output-message after the
            validation. How this mapping should be done can be configured by the options
            outputNodeSearchType outputNodeSearch and removeSignatureElements. The default
            implementation offers three possibilities which are related to the three output
            node search types Default ElementName and XPath. The default implementation
            determines a node which is then serialized and set to the body of the output
            message If the search type is ElementName then the output node (which must be
            in this case an element) is determined by the local name and namespace defined
            in the search value (see option outputNodeSearch). If the search type is XPath
            then the output node is determined by the XPath specified in the search value
            (in this case the output node can be of type Element TextNode or Document).
            If the output node search type is Default then the following rules apply: In
            the enveloped XML signature case (there is a reference with URI= and transform
            http://www.w3.org/2000/09/xmldsigenveloped-signature) the incoming XML document
            without the Signature element is set to the output message body. In the non-enveloped
            XML signature case the message body is determined from a referenced Object;
            this is explained in more detail in chapter Output Node Determination in Enveloping
            XML Signature Case.'
        xmlSignatureChecker:
          kind: parameter
          group: verify
          label: verify
          type: object
          javaType: org.apache.camel.component.xmlsecurity.api.XmlSignatureChecker
          deprecated: false
          secret: false
          description: This interface allows the application to check the XML signature before the validation is executed. This step is recommended in http://www.w3.org/TR/xmldsig-bestpractices/check-what-is-signed
    documentation.adoc: |
      [[XMLSecuritycomponent-XMLSecuritycomponent]]
      XML Security component
      ~~~~~~~~~~~~~~~~~~~~~~

      *Available as of Camel 2.12.0*

      With this Apache Camel component, you can generate and validate XML
      signatures as described in the W3C standard
      http://www.w3.org/TR/xmldsig-core/[XML Signature Syntax and Processing]
      or as described in the successor
      http://www.w3.org/TR/xmldsig-core1/[version 1.1]. For XML Encryption
      support, please refer to the XML Security link:data-format.html[Data
      Format].

      You can find an introduction to XML signature
      http://www.oracle.com/technetwork/articles/javase/dig-signatures-141823.html[here].
      The implementation of the component is based on
      http://docs.oracle.com/javase/6/docs/technotes/guides/security/xmldsig/overview.html[JSR
      105], the Java API corresponding to the W3C standard and supports the
      Apache Santuario and the JDK provider for JSR 105. The implementation
      will first try to use the Apache Santuario provider; if it does not find
      the Santuario provider, it will use the JDK provider. Further, the
      implementation is DOM based.

      Since Camel 2.15.0 we also provide support for *XAdES-BES/EPES* for the
      signer endpoint; see subsection "XAdES-BES/EPES for the Signer
      Endpoint".

      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-xmlsecurity</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ----

      [[XMLSecuritycomponent-XMLSignatureWrappingModes]]
      XML Signature Wrapping Modes
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      XML Signature differs between enveloped, enveloping, and detached XML
      signature. In the
      http://www.w3.org/TR/xmldsig-core1/#def-SignatureEnveloped[enveloped]
      XML signature case, the XML Signature is wrapped by the signed XML
      Document; which means that the XML signature element is a child element
      of a parent element, which belongs to the signed XML Document. In the
      http://www.w3.org/TR/xmldsig-core1/#def-SignatureEnveloping[enveloping]
      XML signature case, the XML Signature contains the signed content. All
      other cases are called
      http://www.w3.org/TR/xmldsig-core1/#def-SignatureDetached[detached] XML
      signatures. A certain form of detached XML signature is supported since
      **2.14.0**.

      In the *enveloped XML signature* case, the supported generated XML
      signature has the following structure (Variables are surrounded by `[]`).

      [source,xml]
      ----
      <[parent element]>
         ... <!-- Signature element is added as last child of the parent element-->
         <Signature Id="generated_unique_signature_id">
             <SignedInfo>
                   <Reference URI="">
                         <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
                         (<Transform>)* <!-- By default "http://www.w3.org/2006/12/xml-c14n11" is added to the transforms -->
                         <DigestMethod>
                         <DigestValue>
                   </Reference>
                   (<Reference URI="#[keyinfo_Id]">
                         <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                         <DigestMethod>
                         <DigestValue>
                   </Reference>)?
                   <!-- further references possible, see option 'properties' below -->
            </SignedInfo>
            <SignatureValue>
            (<KeyInfo Id="[keyinfo_id]">)?
            <!-- Object elements possible, see option 'properties' below -->
        </Signature>
      </[parent element]>
      ----

      In the *enveloping XML signature* case, the supported generated XML
      signature has the structure:

      [source,xml]
      ----
      <Signature Id="generated_unique_signature_id">
        <SignedInfo>
               <Reference URI="#generated_unique_object_id" type="[optional_type_value]">
                     (<Transform>)* <!-- By default "http://www.w3.org/2006/12/xml-c14n11" is added to the transforms -->
                     <DigestMethod>
                     <DigestValue>
               </Reference>
               (<Reference URI="#[keyinfo_id]">
                     <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                     <DigestMethod>
                     <DigestValue>
               </Reference>)?
                <!-- further references possible, see option 'properties' below  -->
        </SignedInfo>
        <SignatureValue>
        (<KeyInfo Id="[keyinfo_id]">)?
        <Object Id="generated_unique_object_id"/> <!-- The Object element contains the in-message body; the object ID can either be generated or set by the option parameter "contentObjectId" -->
        <!-- Further Object elements possible, see option 'properties' below -->
      </Signature>
      ----

      As of 2.14.0 *detached XML signatures* with the following structure
      are supported (see also sub-chapter XML Signatures as Siblings of Signed
      Elements):

      [source,xml]
      ----
      (<[signed element] Id="[id_value]">
      <!-- signed element must have an attribute of type ID -->
            ...

      </[signed element]>
      <other sibling/>*??
      <!-- between the signed element and the corresponding signature element, there can be other siblings.
       Signature element is added as last sibling. -->
      <Signature Id="generated_unique_ID">
         <SignedInfo>
            <CanonicalizationMethod>
            <SignatureMethod>
            <Reference URI="#[id_value]" type="[optional_type_value]">
            <!-- reference URI contains the ID attribute value of the signed element -->
                  (<Transform>)* <!-- By default "http://www.w3.org/2006/12/xml-c14n11" is added to the transforms -->
                  <DigestMethod>
                  <DigestValue>
            </Reference>
            (<Reference URI="#[generated_keyinfo_Id]">
                  <Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
                  <DigestMethod>
                  <DigestValue>
            </Reference>)?
         </SignedInfo>
         <SignatureValue>
         (<KeyInfo Id="[generated_keyinfo_id]">)?
      </Signature>)+
      ----

      ??

      [[XMLSecuritycomponent-URIFormat]]
      URI Format
      ^^^^^^^^^^

      The camel component consists of two endpoints which have the following
      URI format:

      [source]
      ----
      xmlsecurity:sign:name[?options]
      xmlsecurity:verify:name[?options]
      ----

      * With the signer endpoint, you can generate a XML signature for the
      body of the in-message which can be either a XML document or a plain
      text. The enveloped, enveloping, or detached (as of 12.14) ??XML
      signature(s) will be set to the body of the out-message.
      * With the verifier endpoint, you can validate an enveloped or
      enveloping XML signature or even several detached (as of 2.14.0) XML
      signatures contained in the body of the in-message; if the validation is
      successful, then the original content is extracted from the XML
      signature and set to the body of the out-message.
      * The `name` part in the URI can be chosen by the user to distinguish
      between different signer/verifier endpoints within the camel context.

      [[XMLSecuritycomponent-BasicExample]]
      Basic Example
      ^^^^^^^^^^^^^

      The following example shows the basic usage of the component.

      [source,java]
      ----
      from("direct:enveloping").to("xmlsecurity:sign://enveloping?keyAccessor=#accessor",
                                   "xmlsecurity:verify://enveloping?keySelector=#selector",
                                   "mock:result")
      ----

      In Spring XML:

      [source,xml]
      ----
      <from uri="direct:enveloping" />
          <to uri="xmlsecurity:sign://enveloping?keyAccessor=#accessor" />
          <to uri="xmlsecurity:verify://enveloping?keySelector=#selector" />
      <to uri="mock:result" />
      ----

      For the signing process, a private key is necessary. You specify a key
      accessor bean which provides this private key. For the validation, the
      corresponding public key is necessary; you specify a key selector bean
      which provides this public key.

      The key accessor bean must implement the
      https://github.com/apache/camel/blob/master/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/KeyAccessor.java[`KeyAccessor`]
      interface. The package `org.apache.camel.component.xmlsecurity.api`
      contains the default implementation class
      https://github.com/apache/camel/blob/master/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultKeyAccessor.java[`DefaultKeyAccessor`]
      which reads the private key from a Java keystore.

      The key selector bean must implement the
      http://docs.oracle.com/javase/6/docs/api/javax/xml/crypto/KeySelector.html[`javax.xml.crypto.KeySelector`]
      interface. The package `org.apache.camel.component.xmlsecurity.api`
      contains the default implementation class
      https://github.com/apache/camel/blob/master/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultKeySelector.java[`DefaultKeySelector`]
      which reads the public key from a keystore.

      In the example, the default signature algorithm
      `http://www.w3.org/2000/09/xmldsig#rsa-sha1` is used. You can set the
      signature algorithm of your choice by the option `signatureAlgorithm`
      (see below). The signer endpoint creates an _enveloping_ XML signature.
      If you want to create an _enveloped_ XML signature then you must specify
      the parent element of the Signature element; see option
      `parentLocalName` for more details.

      For creating _detached_ XML signatures, see sub-chapter "Detached XML
      Signatures as Siblings of the Signed Elements".

      [[XMLSecuritycomponent-ComponentOptions]]
      Component Options
      ^^^^^^^^^^^^^^^^





      // component options: START
      The XML Security component supports 2 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | signerConfiguration | XmlSignerConfiguration | To use a shared XmlSignerConfiguration configuration to use as base for configuring endpoints.
      | verifierConfiguration | XmlVerifierConfiguration | To use a shared XmlVerifierConfiguration configuration to use as base for configuring endpoints.
      |=======================================================================
      {% endraw %}
      // component options: END






      [[XMLSecuritycomponent-EndpointOptions]]
      Endpoint Options
      ^^^^^^^^^^^^^^^^


      // endpoint options: START
      The XML Security component supports 37 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | command | producer |  | XmlCommand | *Required* Whether to sign or verify.
      | name | producer |  | String | *Required* The name part in the URI can be chosen by the user to distinguish between different signer/verifier endpoints within the camel context.
      | baseUri | common |  | String | You can set a base URI which is used in the URI dereferencing. Relative URIs are then concatenated with the base URI.
      | clearHeaders | common | true | Boolean | Determines if the XML signature specific headers be cleared after signing and verification. Defaults to true.
      | cryptoContextProperties | common |  | Map | Sets the crypto context properties. See link XMLCryptoContextsetProperty(String Object). Possible properties are defined in XMLSignContext an XMLValidateContext (see Supported Properties). The following properties are set by default to the value link BooleanTRUE for the XML validation. If you want to switch these features off you must set the property value to link BooleanFALSE. org.jcp.xml.dsig.validateManifests javax.xml.crypto.dsig.cacheReference
      | disallowDoctypeDecl | common | true | Boolean | Disallows that the incoming XML document contains DTD DOCTYPE declaration. The default value is link BooleanTRUE.
      | omitXmlDeclaration | common | false | Boolean | Indicator whether the XML declaration in the outgoing message body should be omitted. Default value is false. Can be overwritten by the header link XmlSignatureConstantsHEADER_OMIT_XML_DECLARATION.
      | outputXmlEncoding | common |  | String | The character encoding of the resulting signed XML document. If null then the encoding of the original XML document is used.
      | schemaResourceUri | common |  | String | Classpath to the XML Schema. Must be specified in the detached XML Signature case for determining the ID attributes might be set in the enveloped and enveloping case. If set then the XML document is validated with the specified XML schema. The schema resource URI can be overwritten by the header link XmlSignatureConstantsHEADER_SCHEMA_RESOURCE_URI.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | uriDereferencer | advanced |  | URIDereferencer | If you want to restrict the remote access via reference URIs you can set an own dereferencer. Optional parameter. If not set the provider default dereferencer is used which can resolve URI fragments HTTP file and XPpointer URIs. Attention: The implementation is provider dependent!
      | addKeyInfoReference | sign | true | Boolean | In order to protect the KeyInfo element from tampering you can add a reference to the signed info element so that it is protected via the signature value. The default value is true. Only relevant when a KeyInfo is returned by KeyAccessor. and link KeyInfogetId() is not null.
      | canonicalizationMethod | sign | http://www.w3.org/TR/2001/REC-xml-c14n-20010315 | AlgorithmMethod | Canonicalization method used to canonicalize the SignedInfo element before the digest is calculated. You can use the helper methods XmlSignatureHelper.getCanonicalizationMethod(String algorithm) or getCanonicalizationMethod(String algorithm List inclusiveNamespacePrefixes) to create a canonicalization method.
      | contentObjectId | sign |  | String | Sets the content object Id attribute value. By default a UUID is generated. If you set the null value then a new UUID will be generated. Only used in the enveloping case.
      | contentReferenceType | sign |  | String | Type of the content reference. The default value is null. This value can be overwritten by the header link XmlSignatureConstantsHEADER_CONTENT_REFERENCE_TYPE.
      | contentReferenceUri | sign |  | String | Reference URI for the content to be signed. Only used in the enveloped case. If the reference URI contains an ID attribute value then the resource schema URI ( link setSchemaResourceUri(String)) must also be set because the schema validator will then find out which attributes are ID attributes. Will be ignored in the enveloping or detached case.
      | digestAlgorithm | sign |  | String | Digest algorithm URI. Optional parameter. This digest algorithm is used for calculating the digest of the input message. If this digest algorithm is not specified then the digest algorithm is calculated from the signature algorithm. Example: http://www.w3.org/2001/04/xmlencsha256
      | keyAccessor | sign |  | KeyAccessor | For the signing process a private key is necessary. You specify a key accessor bean which provides this private key. The key accessor bean must implement the KeyAccessor interface. The package org.apache.camel.component.xmlsecurity.api contains the default implementation class DefaultKeyAccessor which reads the private key from a Java keystore.
      | parentLocalName | sign |  | String | Local name of the parent element to which the XML signature element will be added. Only relevant for enveloped XML signature. Alternatively you can also use link setParentXpath(XPathFilterParameterSpec). Default value is null. The value must be null for enveloping and detached XML signature. This parameter or the parameter link setParentXpath(XPathFilterParameterSpec) for enveloped signature and the parameter link setXpathsToIdAttributes(List) for detached signature must not be set in the same configuration. If the parameters parentXpath and parentLocalName are specified in the same configuration then an exception is thrown.
      | parentNamespace | sign |  | String | Namespace of the parent element to which the XML signature element will be added.
      | parentXpath | sign |  | XPathFilterParameterSpec | Sets the XPath to find the parent node in the enveloped case. Either you specify the parent node via this method or the local name and namespace of the parent with the methods link setParentLocalName(String) and link setParentNamespace(String). Default value is null. The value must be null for enveloping and detached XML signature. If the parameters parentXpath and parentLocalName are specified in the same configuration then an exception is thrown.
      | plainText | sign | false | Boolean | Indicator whether the message body contains plain text. The default value is false indicating that the message body contains XML. The value can be overwritten by the header link XmlSignatureConstantsHEADER_MESSAGE_IS_PLAIN_TEXT.
      | plainTextEncoding | sign | UTF-8 | String | Encoding of the plain text. Only relevant if the message body is plain text (see parameter link plainText. Default value is UTF-8.
      | prefixForXmlSignatureNamespace | sign | ds | String | Namespace prefix for the XML signature namespace http://www.w3.org/2000/09/xmldsig. Default value is ds. If null or an empty value is set then no prefix is used for the XML signature namespace. See best practice http://www.w3.org/TR/xmldsig-bestpractices/signing-xml- without-namespaces
      | properties | sign |  | XmlSignatureProperties | For adding additional References and Objects to the XML signature which contain additional properties you can provide a bean which implements the XmlSignatureProperties interface.
      | signatureAlgorithm | sign | http://www.w3.org/2000/09/xmldsig#rsa-sha1 | String | Signature algorithm. Default value is http://www.w3.org/2000/09/xmldsigrsa-sha1.
      | signatureId | sign |  | String | Sets the signature Id. If this parameter is not set (null value) then a unique ID is generated for the signature ID (default). If this parameter is set to (empty string) then no Id attribute is created in the signature element.
      | transformMethods | sign |  | List | Transforms which are executed on the message body before the digest is calculated. By default C14n is added and in the case of enveloped signature (see option parentLocalName) also http://www.w3.org/2000/09/xmldsigenveloped-signature is added at position 0 of the list. Use methods in XmlSignatureHelper to create the transform methods.
      | xpathsToIdAttributes | sign |  | List | Define the elements which are signed in the detached case via XPATH expressions to ID attributes (attributes of type ID). For each element found via the XPATH expression a detached signature is created whose reference URI contains the corresponding attribute value (preceded by ''). The signature becomes the last sibling of the signed element. Elements with deeper hierarchy level are signed first. You can also set the XPATH list dynamically via the header link XmlSignatureConstantsHEADER_XPATHS_TO_ID_ATTRIBUTES. The parameter link setParentLocalName(String) or link setParentXpath(XPathFilterParameterSpec) for enveloped signature and this parameter for detached signature must not be set in the same configuration.
      | keySelector | verify |  | KeySelector | Provides the key for validating the XML signature.
      | outputNodeSearch | verify |  | String | Sets the output node search value for determining the node from the XML signature document which shall be set to the output message body. The class of the value depends on the type of the output node search. The output node search is forwarded to XmlSignature2Message.
      | outputNodeSearchType | verify | Default | String | Determines the search type for determining the output node which is serialized into the output message bodyF. See link setOutputNodeSearch(Object). The supported default search types you can find in DefaultXmlSignature2Message.
      | removeSignatureElements | verify | false | Boolean | Indicator whether the XML signature elements (elements with local name Signature and namesapce http://www.w3.org/2000/09/xmldsig) shall be removed from the document set to the output message. Normally this is only necessary if the XML signature is enveloped. The default value is link BooleanFALSE. This parameter is forwarded to XmlSignature2Message. This indicator has no effect if the output node search is of type link DefaultXmlSignature2MessageOUTPUT_NODE_SEARCH_TYPE_DEFAULT.F
      | secureValidation | verify | true | Boolean | Enables secure validation. If true then secure validation is enabled.
      | validationFailedHandler | verify |  | ValidationFailedHandler | Handles the different validation failed situations. The default implementation throws specific exceptions for the different situations (All exceptions have the package name org.apache.camel.component.xmlsecurity.api and are a sub-class of XmlSignatureInvalidException. If the signature value validation fails a XmlSignatureInvalidValueException is thrown. If a reference validation fails a XmlSignatureInvalidContentHashException is thrown. For more detailed information see the JavaDoc.
      | xmlSignature2Message | verify |  | XmlSignature2Message | Bean which maps the XML signature to the output-message after the validation. How this mapping should be done can be configured by the options outputNodeSearchType outputNodeSearch and removeSignatureElements. The default implementation offers three possibilities which are related to the three output node search types Default ElementName and XPath. The default implementation determines a node which is then serialized and set to the body of the output message If the search type is ElementName then the output node (which must be in this case an element) is determined by the local name and namespace defined in the search value (see option outputNodeSearch). If the search type is XPath then the output node is determined by the XPath specified in the search value (in this case the output node can be of type Element TextNode or Document). If the output node search type is Default then the following rules apply: In the enveloped XML signature case (there is a reference with URI= and transform http://www.w3.org/2000/09/xmldsigenveloped-signature) the incoming XML document without the Signature element is set to the output message body. In the non-enveloped XML signature case the message body is determined from a referenced Object; this is explained in more detail in chapter Output Node Determination in Enveloping XML Signature Case.
      | xmlSignatureChecker | verify |  | XmlSignatureChecker | This interface allows the application to check the XML signature before the validation is executed. This step is recommended in http://www.w3.org/TR/xmldsig-bestpractices/check-what-is-signed
      |=======================================================================
      {% endraw %}
      // endpoint options: END



      [[XMLSecuritycomponent-OutputNodeDeterminationinEnvelopingXMLSignatureCase]]
      Output Node Determination in Enveloping XML Signature Case
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

      After the validation the node is extracted from the XML signature
      document which is finally returned to the output-message body. In the
      enveloping XML signature case, the default implementation
      https://github.com/apache/camel/blob/master/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/DefaultXmlSignature2Message.java[`DefaultXmlSignature2Message`]
      of
      https://github.com/apache/camel/blob/master/components/camel-xmlsecurity/src/main/java/org/apache/camel/component/xmlsecurity/api/XmlSignature2Message.java[`XmlSignature2Message`]
      does this for the node search type `Default` in the following way (see
      option `xmlSignature2Message`):

      * First an object reference is determined:

      ** Only same document references are taken into account (URI must start
      with `#`)
      ** Also indirect same document references to an object via manifest are
      taken into account.
      ** The resulting number of object references must be 1.

      * Then, the object is dereferenced and the object must only contain one
      XML element. This element is returned as output node.

      This does mean that the enveloping XML signature must have either the
      structure:

      [source,xml]
      ----
      <Signature>
            <SignedInfo>
               <Reference URI="#object"/>
               <!-- further references possible but they must not point to an Object or Manifest containing an object reference -->
               ...
            </SignedInfo>

            <Object Id="object">
                 <!-- contains one XML element which is extracted to the message body -->
            <Object>
            <!-- further object elements possible which are not referenced-->
            ...
            (<KeyInfo>)?
      </Signature>
      ----

      or the structure:

      [source,xml]
      ----
      <Signature>
            <SignedInfo>
               <Reference URI="#manifest"/>
               <!-- further references  are possible but they must not point to an Object or other manifest containing an object reference -->
               ...
            </SignedInfo>

            <Object >
               <Manifest Id="manifest">
                  <Reference URI=#object/>
               </Manifest>
            </Objet>
            <Object Id="object">
                <!-- contains the DOM node which is extracted to the message body -->
            </Object>
             <!-- further object elements possible which are not referenced -->
            ...
            (<KeyInfo>)?
      </Signature>
      ----

      [[XMLSecuritycomponent-DetachedXMLSignaturesasSiblingsoftheSignedElements]]
      Detached XML Signatures as Siblings of the Signed Elements
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      **Since 2.14.0**

      You can create detached signatures where the signature is a sibling of
      the signed element. The following example contains two detached
      signatures. The first signature is for the element `C` and the second
      signature is for element `A`. The signatures are _nested_; the second
      signature is for the element `A` which also contains the first signature.

      *Example Detached XML Signatures*

      [source,xml]
      ----
      <?xml version="1.0" encoding="UTF-8" ?>
      <root>
          <A ID="IDforA">
              <B>
                  <C ID="IDforC">
                      <D>dvalue</D>
                  </C>
                  <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"
                      Id="_6bf13099-0568-4d76-8649-faf5dcb313c0">
                      <ds:SignedInfo>
                          <ds:CanonicalizationMethod
                              Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                          <ds:SignatureMethod
                              Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
                          <ds:Reference URI="#IDforC">
                              ...
                          </ds:Reference>
                      </ds:SignedInfo>
                      <ds:SignatureValue>aUDFmiG71</ds:SignatureValue>
                  </ds:Signature>
              </B>
          </A>
          <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"Id="_6b02fb8a-30df-42c6-ba25-76eba02c8214">
              <ds:SignedInfo>
                  <ds:CanonicalizationMethod
                      Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
                  <ds:SignatureMethod
                      Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
                  <ds:Reference URI="#IDforA">
                      ...
                  </ds:Reference>
              </ds:SignedInfo>
              <ds:SignatureValue>q3tvRoGgc8cMUqUSzP6C21zb7tt04riPnDuk=</ds:SignatureValue>
          </ds:Signature>
      <root>
      ----

      The example shows that you can sign several elements and that for each
      element a signature is created as sibling. The elements to be signed
      must have an attribute of type ID. The ID type of the attribute must be
      defined in the XML schema (see option??`schemaResourceUri`).??You
      specify a list of XPATH expressions pointing to attributes of type ID
      (see option `xpathsToIdAttributes`). These attributes determine the
      elements to be signed. The elements are signed by the same key given by
      the `keyAccessor` bean. Elements with higher (i.e. deeper) hierarchy level
      are signed first. In the example, the element `C` is signed before the
      element `A`.

      *Java DSL Example*

      [source,java]
      ----
      from("direct:detached")
        .to("xmlsecurity:sign://detached?keyAccessor=#keyAccessorBeant&xpathsToIdAttributes=#xpathsToIdAttributesBean&schemaResourceUri=Test.xsd")
        .to("xmlsecurity:verify://detached?keySelector=#keySelectorBean&schemaResourceUri=org/apache/camel/component/xmlsecurity/Test.xsd")
        .to("mock:result");
      ----

      *Spring Example*

      [source,xml]
      ----
        ??
      <bean id="xpathsToIdAttributesBean" class="java.util.ArrayList">
            <constructor-arg type="java.util.Collection">
                <list>
                    <bean
                        class="org.apache.camel.component.xmlsecurity.api.XmlSignatureHelper"
                        factory-method="getXpathFilter">
                        <constructor-arg type="java.lang.String"
                            value="/ns:root/a/@ID" />
                        <constructor-arg>
                            <map key-type="java.lang.String" value-type="java.lang.String">
                                <entry key="ns" value="http://test" />
                            </map>
                        </constructor-arg>
                    </bean>
                </list>
            </constructor-arg>
        </bean>
      ...
       <from uri="direct:detached" />
            <to
                uri="xmlsecurity:sign://detached?keyAccessor=#keyAccessorBean&amp;xpathsToIdAttributes=#xpathsToIdAttributesBean&amp;schemaResourceUri=Test.xsd" />
            <to
                uri="xmlsecurity:verify://detached?keySelector=#keySelectorBean&amp;schemaResourceUri=Test.xsd" />
            <to uri="mock:result" />
      ----


      [[XMLSecuritycomponent-XAdES-BESEPESfortheSignerEndpoint]]
      XAdES-BES/EPES for the Signer Endpoint
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.15.0*??

      http://www.etsi.org/deliver/etsi_ts/101900_101999/101903/01.04.02_60/ts_101903v010402p.pdf[XML
      Advanced Electronic Signatures (XAdES)] defines extensions to XML
      Signature. This standard was defined by the
      http://www.etsi.org/[European Telecommunication Standards Institute] and
      allows you to create signatures which are compliant to the
      http://eur-lex.europa.eu/LexUriServ/LexUriServ.do?uri=OJ:L:2000:013:0012:0020:EN:PDF[European
      Union Directive (1999/93/EC) on a Community framework for electronic
      signatures]. XAdES defines different sets of signature properties which
      are called signature forms. We support the signature forms *Basic
      Electronic Signature* (XAdES-BES) and *Explicit Policy Based Electronic
      Signature* (XAdES-EPES) for the Signer Endpoint. The forms
      **Electronic??****Signature with Validation Data**??XAdES-T and XAdES-C
      are not supported.


      We support the following properties of the XAdES-EPES form ("?" denotes
      zero or one occurrence):


      *Supported XAdES-EPES Properties*

      [source,xml]
      ----
      <QualifyingProperties Target>
          <SignedProperties>
              <SignedSignatureProperties>
                  (SigningTime)?
                  (SigningCertificate)?
                  (SignaturePolicyIdentifier)
                  (SignatureProductionPlace)?
                  (SignerRole)?
              </SignedSignatureProperties>
              <SignedDataObjectProperties>
                  (DataObjectFormat)?
                  (CommitmentTypeIndication)?
              </SignedDataObjectProperties>
          </SignedProperties>
      </QualifyingProperties>
      ----

      The properties of the XAdES-BES form are the same except that
      the??`SignaturePolicyIdentifier` property is not part of XAdES-BES.??

      You can configure the XAdES-BES/EPES properties via the
      bean??`org.apache.camel.component.xmlsecurity.api.XAdESSignatureProperties`
      or??`org.apache.camel.component.xmlsecurity.api.DefaultXAdESSignatureProperties. XAdESSignatureProperties`??does
      support all properties mentioned above except
      the??`SigningCertificate` property. To get
      the??`SigningCertificate` property, you must overwrite either the
      method??`XAdESSignatureProperties.getSigningCertificate()` or `XAdESSignatureProperties.getSigningCertificateChain()`.??The
      class??`DefaultXAdESSignatureProperties`??overwrites the
      method??`getSigningCertificate()`??and allows you to specify the signing
      certificate via a keystore and alias. The following example shows all
      parameters you can specify. If you do not need certain parameters you
      can just omit them.

      *XAdES-BES/EPES Example in Java DSL*

      [source,java]
      ----
      ??Keystore keystore = ... // load a keystore
      DefaultKeyAccessor accessor = new DefaultKeyAccessor();
      accessor.setKeyStore(keystore);
      accessor.setPassword("password");
      accessor.setAlias("cert_alias"); // signer key alias
      ??
      DefaultXAdESSignatureProperties props = new DefaultXAdESSignatureProperties();
      props.setNamespace("http://uri.etsi.org/01903/v1.3.2#"); // sets the namespace for the XAdES elements; the namspace is related to the XAdES version, default value is "http://uri.etsi.org/01903/v1.3.2#", other possible values are "http://uri.etsi.org/01903/v1.1.1#" and "http://uri.etsi.org/01903/v1.2.2#"
      props.setPrefix("etsi"); // sets the prefix for the XAdES elements, default value is "etsi"
      ??
      // signing certificate
      props.setKeystore(keystore));
      props.setAlias("cert_alias"); // specify the alias of the signing certificate in the keystore = signer key alias
      props.setDigestAlgorithmForSigningCertificate(DigestMethod.SHA256); // possible values for the algorithm are "http://www.w3.org/2000/09/xmldsig#sha1", "http://www.w3.org/2001/04/xmlenc#sha256", "http://www.w3.org/2001/04/xmldsig-more#sha384", "http://www.w3.org/2001/04/xmlenc#sha512", default value is "http://www.w3.org/2001/04/xmlenc#sha256"
      props.setSigningCertificateURIs(Collections.singletonList("http://certuri"));
      ??
      // signing time
      props.setAddSigningTime(true);
      ??
      // policy
      props.setSignaturePolicy(XAdESSignatureProperties.SIG_POLICY_EXPLICIT_ID);
      // also the values XAdESSignatureProperties.SIG_POLICY_NONE ("None"), and XAdESSignatureProperties.SIG_POLICY_IMPLIED ("Implied")are possible, default value is XAdESSignatureProperties.SIG_POLICY_EXPLICIT_ID ("ExplicitId")
      // For "None" and "Implied" you must not specify any further policy parameters
      props.setSigPolicyId("urn:oid:1.2.840.113549.1.9.16.6.1");
      props.setSigPolicyIdQualifier("OIDAsURN"); //allowed values are empty string, "OIDAsURI", "OIDAsURN"; default value is empty string
      props.setSigPolicyIdDescription("invoice version 3.1");
      props.setSignaturePolicyDigestAlgorithm(DigestMethod.SHA256);// possible values for the algorithm are "http://www.w3.org/2000/09/xmldsig#sha1", http://www.w3.org/2001/04/xmlenc#sha256", "http://www.w3.org/2001/04/xmldsig-more#sha384", "http://www.w3.org/2001/04/xmlenc#sha512", default value is http://www.w3.org/2001/04/xmlenc#sha256"
      props.setSignaturePolicyDigestValue("Ohixl6upD6av8N7pEvDABhEL6hM=");
      // you can add  qualifiers for the signature policy either by specifying text or an XML fragment with the root element "SigPolicyQualifier"
      props.setSigPolicyQualifiers(Arrays
          .asList(new String[] {
              "<SigPolicyQualifier xmlns=\"http://uri.etsi.org/01903/v1.3.2#\"><SPURI>http://test.com/sig.policy.pdf</SPURI><SPUserNotice><ExplicitText>display text</ExplicitText>"
                  + "</SPUserNotice></SigPolicyQualifier>", "category B" }));
      props.setSigPolicyIdDocumentationReferences(Arrays.asList(new String[] {"http://test.com/policy.doc.ref1.txt",
          "http://test.com/policy.doc.ref2.txt" }));
      ??
      // production place
      props.setSignatureProductionPlaceCity("Munich");
      props.setSignatureProductionPlaceCountryName("Germany");
      props.setSignatureProductionPlacePostalCode("80331");
      props.setSignatureProductionPlaceStateOrProvince("Bavaria");
      ??
      //role
      // you can add claimed roles either by specifying text or an XML fragment with the root element "ClaimedRole"
      props.setSignerClaimedRoles(Arrays.asList(new String[] {"test",
          "<a:ClaimedRole xmlns:a=\"http://uri.etsi.org/01903/v1.3.2#\"><TestRole>TestRole</TestRole></a:ClaimedRole>" }));
      props.setSignerCertifiedRoles(Collections.singletonList(new XAdESEncapsulatedPKIData("Ahixl6upD6av8N7pEvDABhEL6hM=",
          "http://uri.etsi.org/01903/v1.2.2#DER", "IdCertifiedRole")));
      ??
      // data object format
      props.setDataObjectFormatDescription("invoice");
      props.setDataObjectFormatMimeType("text/xml");
      props.setDataObjectFormatIdentifier("urn:oid:1.2.840.113549.1.9.16.6.2");
      props.setDataObjectFormatIdentifierQualifier("OIDAsURN"); //allowed values are empty string, "OIDAsURI", "OIDAsURN"; default value is empty string
      props.setDataObjectFormatIdentifierDescription("identifier desc");
      props.setDataObjectFormatIdentifierDocumentationReferences(Arrays.asList(new String[] {
          "http://test.com/dataobject.format.doc.ref1.txt", "http://test.com/dataobject.format.doc.ref2.txt" }));
      ??
      //commitment
      props.setCommitmentTypeId("urn:oid:1.2.840.113549.1.9.16.6.4");
      props.setCommitmentTypeIdQualifier("OIDAsURN"); //allowed values are empty string, "OIDAsURI", "OIDAsURN"; default value is empty string
      props.setCommitmentTypeIdDescription("description for commitment type ID");
      props.setCommitmentTypeIdDocumentationReferences(Arrays.asList(new String[] {"http://test.com/commitment.ref1.txt",
          "http://test.com/commitment.ref2.txt" }));
      // you can specify a commitment type qualifier either by simple text or an XML fragment with root element "CommitmentTypeQualifier"
      props.setCommitmentTypeQualifiers(Arrays.asList(new String[] {"commitment qualifier",
          "<c:CommitmentTypeQualifier xmlns:c=\"http://uri.etsi.org/01903/v1.3.2#\"><C>c</C></c:CommitmentTypeQualifier>" }));
      ??
      beanRegistry.bind("xmlSignatureProperties",props);
      beanRegistry.bind("keyAccessorDefault",keyAccessor);
      ??
      // you must reference the properties bean in the "xmlsecurity" URI
      from("direct:xades").to("xmlsecurity:sign://xades?keyAccessor=#keyAccessorDefault&properties=#xmlSignatureProperties")
                   .to("mock:result");
      ----

      *XAdES-BES/EPES Example in Spring XML*

      [source,xml]
      ----
      ...
      <from uri="direct:xades" />
          <to
              uri="xmlsecurity:sign://xades?keyAccessor=#accessorRsa&amp;properties=#xadesProperties" />
          <to uri="mock:result" />
      ...
      <bean id="xadesProperties"
          class="org.apache.camel.component.xmlsecurity.api.XAdESSignatureProperties">
          <!-- For more properties see the the previous Java DSL example.??
               If you want to have a signing certificate then use the bean class DefaultXAdESSignatureProperties (see the previous Java DSL example). -->
          <property name="signaturePolicy" value="ExplicitId" />
          <property name="sigPolicyId" value="http://www.test.com/policy.pdf" />
          <property name="sigPolicyIdDescription" value="factura" />
          <property name="signaturePolicyDigestAlgorithm" value="http://www.w3.org/2000/09/xmldsig#sha1" />
          <property name="signaturePolicyDigestValue" value="Ohixl6upD6av8N7pEvDABhEL1hM=" />
          <property name="signerClaimedRoles" ref="signerClaimedRoles_XMLSigner" />
          <property name="dataObjectFormatDescription" value="Factura electr??nica" />
          <property name="dataObjectFormatMimeType" value="text/xml" />
      </bean>
      <bean class="java.util.ArrayList" id="signerClaimedRoles_XMLSigner">
          <constructor-arg>
              <list>
                  <value>Emisor</value>
                  <value>&lt;ClaimedRole
                      xmlns=&quot;http://uri.etsi.org/01903/v1.3.2#&quot;&gt;&lt;test
                      xmlns=&quot;http://test.com/&quot;&gt;test&lt;/test&gt;&lt;/ClaimedRole&gt;</value>
              </list>
          </constructor-arg>
      </bean>
      ----

      [[XMLSecuritycomponent-Headers]]
      Headers
      +++++++

      [width="100%",cols="1m,1m,4",options="header",]
      |=======================================================================
      |Header |Type |Description
      |CamelXmlSignatureXAdESQualifyingPropertiesId |String |for the 'Id'
      attribute value of `QualifyingProperties` element

      |CamelXmlSignatureXAdESSignedDataObjectPropertiesId |String |for the
      'Id' attribute value of `SignedDataObjectProperties` element

      |CamelXmlSignatureXAdESSignedSignaturePropertiesId |String |for the
      'Id' attribute value of??`SignedSignatureProperties` element

      |CamelXmlSignatureXAdESDataObjectFormatEncoding |String |for the value
      of the Encoding element of the `DataObjectFormat` element

      |CamelXmlSignatureXAdESNamespace |String |??overwrites the XAdES
      namespace parameter value

      |CamelXmlSignatureXAdESPrefix |String |overwrites the XAdES prefix
      parameter value
      |=======================================================================

      [[XMLSecuritycomponent-LimitationswithregardtoXAdESversion1.4.2]]
      Limitations with regard to XAdES version 1.4.2
      ++++++++++++++++++++++++++++++++++++++++++++++

      * No support for signature form XAdES-T and XAdES-C
      * Only signer part implemented. Verifier part currently not available.
      * No support??for the `QualifyingPropertiesReference` element (see
      section 6.3.2 of spec).
      * No support for the `Transforms` element contained in
      the??`SignaturePolicyId` element contained in
      the??`SignaturePolicyIdentifier element`
      * No support of the `CounterSignature` element -> no support for
      the??`UnsignedProperties` element
      * At most one `DataObjectFormat` element. More than one
      `DataObjectFormat` element makes no sense because we have only one data
      object which is signed (this is the incoming message body to the XML
      signer endpoint).
      * At most one `CommitmentTypeIndication` element. More than one
      `CommitmentTypeIndication` element makes no sense ??because we have only
      one data object which is signed (this is the incoming message body to
      the XML signer endpoint).
      * A `CommitmentTypeIndication` element contains always the
      `AllSignedDataObjects` element. The `ObjectReference` element within
      `CommitmentTypeIndication` element is not supported.
      * The `AllDataObjectsTimeStamp` element is not supported
      * The `IndividualDataObjectsTimeStamp` element is not supported

      [[XMLSecuritycomponent-SeeAlso]]
      See Also
      ^^^^^^^^

      * http://www.w3.org/TR/xmldsig-bestpractices/[Best Practices]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-xmpp
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: xmpp
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: xmpp
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: xmpp
          spec:
            containers:
            - image: fabric8/connector-xmpp:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: xmpp
        syntax: xmpp:host:port/participant
        alternativeSyntax: xmpp:user:password@host:port/participant
        title: XMPP
        description: To send and receive messages from a XMPP (chat) server.
        label: chat,messaging
        deprecated: false
        async: false
        javaType: org.apache.camel.component.xmpp.XmppComponent
        groupId: org.apache.camel
        artifactId: camel-xmpp
        version: 2.18.1
      componentProperties: {}
      properties:
        host:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Hostname for the chat server
        port:
          kind: path
          group: common
          required: true
          type: integer
          javaType: int
          deprecated: false
          secret: false
          description: Port number for the chat server
        participant:
          kind: path
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: JID (Jabber ID) of person to receive messages. room parameter has precedence over participant.
        login:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to login the user.
        nickname:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Use nickname when joining room. If room is specified and nickname is not user will be used for the nickname.
        pubsub:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Accept pubsub packets on input default is false
        room:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: If this option is specified the component will connect to MUC (Multi User Chat). Usually the domain name for MUC is different from the login domain. For example if you are supermanjabber.org and want to join the krypton room then the room URL is kryptonconference.jabber.org. Note the conference part. It is not a requirement to provide the full room JID. If the room parameter does not contain the symbol the domain part will be discovered and added by Camel
        serviceName:
          kind: parameter
          group: common
          label: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the service you are connecting to. For Google Talk this would be gmail.com.
        testConnectionOnStartup:
          kind: parameter
          group: common
          label: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Specifies whether to test the connection on startup. This is used to ensure that the XMPP client has a valid connection to the XMPP server when the route starts. Camel throws an exception on startup if a connection cannot be established. When this option is set to false Camel will attempt to establish a lazy connection when needed by a producer and will poll for a consumer connection until the connection is established. Default is true.
        createAccount:
          kind: parameter
          group: common (advanced)
          label: common,advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If true an attempt to create an account will be made. Default is false.
        resource:
          kind: parameter
          group: common (advanced)
          label: common,advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          defaultValue: Camel
          description: XMPP resource. The default is Camel.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        connectionPollDelay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "10"
          description: The amount of time in seconds between polls (in seconds) to verify the health of the XMPP connection or between attempts to establish an initial consumer connection. Camel will try to re-establish a connection if it has become inactive. Default is 10 seconds.
        doc:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set a doc header on the IN message containing a Document form of the incoming packet; default is true if presence or pubsub are true otherwise false
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        connectionConfig:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.jivesoftware.smack.ConnectionConfiguration
          deprecated: false
          secret: false
          description: To use an existing connection configuration
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        headerFilterStrategy:
          kind: parameter
          group: filter
          label: filter
          type: object
          javaType: org.apache.camel.spi.HeaderFilterStrategy
          deprecated: false
          secret: false
          description: To use a custom HeaderFilterStrategy to filter header to and from Camel message.
        password:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: Password for login
        user:
          kind: parameter
          group: security
          label: security
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: true
          description: User name (without server name). If not specified anonymous login will be attempted.
    documentation.adoc: "[[XMPP-XMPPComponent]]\nXMPP Component\n~~~~~~~~~~~~~~\n\n\
      The *xmpp:* component implements an XMPP (Jabber) transport.\n\nMaven users\
      \ will need to add the following dependency to their `pom.xml`\nfor this component:\n\
      \n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-xmpp</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \n[[XMPP-URIformat]]\nURI format\n^^^^^^^^^^\n\n[source,text]\n------------------------------------------------------\n\
      xmpp://[login@]hostname[:port][/participant][?Options]\n------------------------------------------------------\n\
      \nThe component supports both room based and private person-person\nconversations.\
      \ +\n The component supports both producer and consumer (you can get messages\n\
      from XMPP or send messages to XMPP). Consumer mode supports rooms\nstarting.\n\
      \nYou can append query options to the URI in the following format,\n`?option=value&option=value&...`\n\
      \n[[XMPP-Options]]\nOptions\n^^^^^^^\n\n\n// component options: START\nThe XMPP\
      \ component has no options.\n// component options: END\n\n\n\n// endpoint options:\
      \ START\nThe XMPP component supports 21 endpoint options which are listed below:\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| host | common |  | String\
      \ | *Required* Hostname for the chat server\n| port | common |  | int | *Required*\
      \ Port number for the chat server\n| participant | common |  | String | JID\
      \ (Jabber ID) of person to receive messages. room parameter has precedence over\
      \ participant.\n| login | common | true | boolean | Whether to login the user.\n\
      | nickname | common |  | String | Use nickname when joining room. If room is\
      \ specified and nickname is not user will be used for the nickname.\n| pubsub\
      \ | common | false | boolean | Accept pubsub packets on input default is false\n\
      | room | common |  | String | If this option is specified the component will\
      \ connect to MUC (Multi User Chat). Usually the domain name for MUC is different\
      \ from the login domain. For example if you are supermanjabber.org and want\
      \ to join the krypton room then the room URL is kryptonconference.jabber.org.\
      \ Note the conference part. It is not a requirement to provide the full room\
      \ JID. If the room parameter does not contain the symbol the domain part will\
      \ be discovered and added by Camel\n| serviceName | common |  | String | The\
      \ name of the service you are connecting to. For Google Talk this would be gmail.com.\n\
      | testConnectionOnStartup | common | true | boolean | Specifies whether to test\
      \ the connection on startup. This is used to ensure that the XMPP client has\
      \ a valid connection to the XMPP server when the route starts. Camel throws\
      \ an exception on startup if a connection cannot be established. When this option\
      \ is set to false Camel will attempt to establish a lazy connection when needed\
      \ by a producer and will poll for a consumer connection until the connection\
      \ is established. Default is true.\n| createAccount | common (advanced) | false\
      \ | boolean | If true an attempt to create an account will be made. Default\
      \ is false.\n| resource | common (advanced) | Camel | String | XMPP resource.\
      \ The default is Camel.\n| bridgeErrorHandler | consumer | false | boolean |\
      \ 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/ERROR level and ignored.\n\
      | connectionPollDelay | consumer | 10 | int | The amount of time in seconds\
      \ between polls (in seconds) to verify the health of the XMPP connection or\
      \ between attempts to establish an initial consumer connection. Camel will try\
      \ to re-establish a connection if it has become inactive. Default is 10 seconds.\n\
      | doc | consumer | false | boolean | Set a doc header on the IN message containing\
      \ a Document form of the incoming packet; default is true if presence or pubsub\
      \ are true otherwise false\n| exceptionHandler | consumer (advanced) |  | ExceptionHandler\
      \ | To let the consumer use a custom ExceptionHandler. Notice if the option\
      \ bridgeErrorHandler is enabled then this options is not in use. By default\
      \ the consumer will deal with exceptions that will be logged at WARN/ERROR level\
      \ and ignored.\n| exchangePattern | consumer (advanced) |  | ExchangePattern\
      \ | Sets the exchange pattern when the consumer creates an exchange.\n| connectionConfig\
      \ | advanced |  | ConnectionConfiguration | To use an existing connection configuration\n\
      | synchronous | advanced | false | boolean | Sets whether synchronous processing\
      \ should be strictly used or Camel is allowed to use asynchronous processing\
      \ (if supported).\n| headerFilterStrategy | filter |  | HeaderFilterStrategy\
      \ | To use a custom HeaderFilterStrategy to filter header to and from Camel\
      \ message.\n| password | security |  | String | Password for login\n| user |\
      \ security |  | String | User name (without server name). If not specified anonymous\
      \ login will be attempted.\n|=======================================================================\n\
      {% endraw %}\n// endpoint options: END\n\n\n[[XMPP-HeadersandsettingSubjectorLanguage]]\n\
      Headers and setting Subject or Language\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nCamel sets the message IN headers as properties on the XMPP message. You\n\
      can configure a `HeaderFilterStategy` if you need custom filtering of\nheaders.\
      \ \nThe *Subject* and *Language* of the XMPP message are also set if they\n\
      are provided as IN headers.\n\n[[XMPP-Examples]]\nExamples\n^^^^^^^^\n\nUser\
      \ `superman` to join room `krypton` at `jabber` server with password,\n`secret`:\n\
      \n[source,text]\n------------------------------------------------------------------------------\n\
      xmpp://superman@jabber.org/?room=krypton@conference.jabber.org&password=secret\n\
      ------------------------------------------------------------------------------\n\
      \nUser `superman` to send messages to `joker`:\n\n[source,text]\n-----------------------------------------------------------\n\
      xmpp://superman@jabber.org/joker@jabber.org?password=secret\n-----------------------------------------------------------\n\
      \nRouting example in Java:\n\n[source,java]\n------------------------------------------------------------------\n\
      from(\"timer://kickoff?period=10000\").\nsetBody(constant(\"I will win!\\n Your\
      \ Superman.\")).\nto(\"xmpp://superman@jabber.org/joker@jabber.org?password=secret\"\
      );\n------------------------------------------------------------------\n\nConsumer\
      \ configuration, which writes all messages from `joker` into the\nqueue, `evil.talk`.\n\
      \n[source,java]\n--------------------------------------------------------------------\n\
      from(\"xmpp://superman@jabber.org/joker@jabber.org?password=secret\").\nto(\"\
      activemq:evil.talk\");\n--------------------------------------------------------------------\n\
      \nConsumer configuration, which listens to room messages:\n\n[source,java]\n\
      ---------------------------------------------------------------------------------------\n\
      from(\"xmpp://superman@jabber.org/?password=secret&room=krypton@conference.jabber.org\"\
      ).\nto(\"activemq:krypton.talk\");\n---------------------------------------------------------------------------------------\n\
      \nRoom in short notation (no domain part):\n\n[source,java]\n-----------------------------------------------------------------\n\
      from(\"xmpp://superman@jabber.org/?password=secret&room=krypton\").\nto(\"activemq:krypton.talk\"\
      );\n-----------------------------------------------------------------\n\nWhen\
      \ connecting to the Google Chat service, you'll need to specify the\n`serviceName`\
      \ as well as your credentials:\n\n[source,java]\n---------------------------------------------------------------------------------------------------------\n\
      from(\"direct:start\").\n  to(\"xmpp://talk.google.com:5222/touser@gmail.com?serviceName=gmail.com&user=fromuser&password=secret\"\
      ).\n  to(\"mock:result\");\n---------------------------------------------------------------------------------------------------------\n\
      \n??\n\n[[XMPP-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-xquery
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: xquery
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: xquery
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: xquery
          spec:
            containers:
            - image: fabric8/connector-xquery:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: xquery
        syntax: xquery:resourceUri
        title: XQuery
        description: Transforms the message using a XQuery template using Saxon.
        label: transformation
        deprecated: false
        async: false
        javaType: org.apache.camel.component.xquery.XQueryComponent
        groupId: org.apache.camel
        artifactId: camel-saxon
        version: 2.18.1
      componentProperties:
        moduleURIResolver:
          kind: property
          type: object
          javaType: net.sf.saxon.lib.ModuleURIResolver
          deprecated: false
          secret: false
          description: To use the custom ModuleURIResolver
      properties:
        resourceUri:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the template to load from classpath or file system
        allowStAX:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to allow using StAX mode
        configuration:
          kind: parameter
          group: common
          type: object
          javaType: net.sf.saxon.Configuration
          deprecated: false
          secret: false
          description: To use a custom Saxon configuration
        headerName:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use a Camel Message header as the input source instead of Message body.
        moduleURIResolver:
          kind: parameter
          group: common
          type: object
          javaType: net.sf.saxon.lib.ModuleURIResolver
          deprecated: false
          secret: false
          description: To use the custom ModuleURIResolver
        namespacePrefixes:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.String>
          deprecated: false
          secret: false
          description: Allows to control which namespace prefixes to use for a set of namespace mappings
        parameters:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          deprecated: false
          secret: false
          description: Additional parameters
        properties:
          kind: parameter
          group: common
          type: object
          javaType: java.util.Properties
          deprecated: false
          secret: false
          description: Properties to configure the serialization parameters
        resultsFormat:
          kind: parameter
          group: common
          type: string
          javaType: org.apache.camel.component.xquery.ResultFormat
          enum:
          - Bytes
          - BytesSource
          - DOM
          - DOMSource
          - List
          - String
          - StringSource
          deprecated: false
          secret: false
          defaultValue: DOM
          description: What output result to use
        resultType:
          kind: parameter
          group: common
          type: string
          javaType: java.lang.Class<?>
          deprecated: false
          secret: false
          description: What output result to use defined as a class
        staticQueryContext:
          kind: parameter
          group: common
          type: object
          javaType: net.sf.saxon.query.StaticQueryContext
          deprecated: false
          secret: false
          description: To use a custom Saxon StaticQueryContext
        stripsAllWhiteSpace:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to strip all whitespaces
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        delay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "500"
          description: Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[XQuery-XQuery]]
      XQuery
      ~~~~~~

      Camel supports http://www.w3.org/TR/xquery/[XQuery] to allow an
      link:expression.html[Expression] or link:predicate.html[Predicate] to be
      used in the link:dsl.html[DSL] or link:xml-configuration.html[Xml
      Configuration]. For example you could use XQuery to create an
      link:predicate.html[Predicate] in a link:message-filter.html[Message
      Filter] or as an link:expression.html[Expression] for a
      link:recipient-list.html[Recipient List].

      [[XQuery-Options]]
      Options
      ^^^^^^^



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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | moduleURIResolver | ModuleURIResolver | To use the custom ModuleURIResolver
      |=======================================================================
      {% endraw %}
      // component options: END




      // endpoint options: START
      The XQuery component supports 31 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | resourceUri | common |  | String | *Required* The name of the template to load from classpath or file system
      | allowStAX | common | false | boolean | Whether to allow using StAX mode
      | configuration | common |  | Configuration | To use a custom Saxon configuration
      | headerName | common |  | String | To use a Camel Message header as the input source instead of Message body.
      | moduleURIResolver | common |  | ModuleURIResolver | To use the custom ModuleURIResolver
      | namespacePrefixes | common |  | Map | Allows to control which namespace prefixes to use for a set of namespace mappings
      | parameters | common |  | Map | Additional parameters
      | properties | common |  | Properties | Properties to configure the serialization parameters
      | resultsFormat | common | DOM | ResultFormat | What output result to use
      | resultType | common |  | Class<?> | What output result to use defined as a class
      | staticQueryContext | common |  | StaticQueryContext | To use a custom Saxon StaticQueryContext
      | stripsAllWhiteSpace | common | true | boolean | Whether to strip all whitespaces
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | delay | scheduler | 500 | long | Milliseconds before the next poll. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[XQuery-Examples]]
      Examples
      ^^^^^^^^

      [source,java]
      ---------------------------
      from("queue:foo").filter().
        xquery("//foo").
        to("queue:bar")
      ---------------------------

      You can also use functions inside your query, in which case you need an
      explicit type conversion (or you will get a org.w3c.dom.DOMException:
      HIERARCHY_REQUEST_ERR) by passing the Class as a second argument to the
      *xquery()* method.

      [source,java]
      -----------------------------------------------------------------------------
      from("direct:start").
        recipientList().xquery("concat('mock:foo.', /person/@city)", String.class);
      -----------------------------------------------------------------------------

      [[XQuery-Variables]]
      Variables
      ^^^^^^^^^

      The IN message body will be set as the `contextItem`. Besides this these
      Variables is also added as parameters:

      [width="100%",cols="10%,10%,80%",options="header",]
      |=======================================================================
      |Variable |Type |Description

      |exchange |Exchange |The current Exchange

      |in.body |Object |The In message's body

      |out.body |Object |The OUT message's body (if any)

      |in.headers.* |Object |You can access the value of exchange.in.headers with key *foo* by using
      the variable which name is in.headers.foo

      |out.headers.* |Object |You can access the value of exchange.out.headers with key *foo* by using
      the variable which name is out.headers.foo variable

      |*key name* |Object |Any exchange.properties and exchange.in.headers and any additional
      parameters set using `setParameters(Map)`. These parameters is added
      with they own key name, for instance if there is an IN header with the
      key name *foo* then its added as *foo*.
      |=======================================================================

      [[XQuery-UsingXMLconfiguration]]
      Using XML configuration
      ^^^^^^^^^^^^^^^^^^^^^^^

      If you prefer to configure your routes in your link:spring.html[Spring]
      XML file then you can use XPath expressions as follows

      [source,xml]
      ---------------------------------------------------------------------------------------------------------------
      <beans xmlns="http://www.springframework.org/schema/beans"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:foo="http://example.com/person"
             xsi:schemaLocation="
             http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
             http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

        <camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
          <route>
            <from uri="activemq:MyQueue"/>
            <filter>
              <xquery>/foo:person[@name='James']</xquery>
              <to uri="mqseries:SomeOtherQueue"/>
            </filter>
          </route>
        </camelContext>
      </beans>
      ---------------------------------------------------------------------------------------------------------------

      Notice how we can reuse the namespace prefixes, *foo* in this case, in
      the XPath expression for easier namespace based XQuery expressions!

      When you use functions in your XQuery expression you need an explicit
      type conversion which is done in the xml configuration via the *@type*
      attribute:

      [source,xml]
      -------------------------------------------------------------------------------
          <xquery type="java.lang.String">concat('mock:foo.', /person/@city)</xquery>
      -------------------------------------------------------------------------------

      [[XQuery-UsingXQueryastransformation]]
      Using XQuery as transformation
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      We can do a message translation using transform or setBody in the route,
      as shown below:

      [source,java]
      ----------------------------------------
      from("direct:start").
         transform().xquery("/people/person");
      ----------------------------------------

      Notice that xquery will use DOMResult by default, so if we want to grab
      the value of the person node, using text() we need to tell xquery to use
      String as result type, as shown:

      [source,java]
      -------------------------------------------------------------
      from("direct:start").
         transform().xquery("/people/person/text()", String.class);
      -------------------------------------------------------------

      ??

      [[XQuery-UsingXQueryasanendpoint]]
      Using XQuery as an endpoint
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^

      Sometimes an XQuery expression can be quite large; it can essentally be
      used for link:templating.html[Templating]. So you may want to use an
      link:xquery-endpoint.html[XQuery Endpoint] so you can route using XQuery
      templates.

      The following example shows how to take a message of an ActiveMQ queue
      (MyQueue) and transform it using XQuery and send it to MQSeries.

      [source,java]
      -------------------------------------------------------------------------
        <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
          <route>
            <from uri="activemq:MyQueue"/>
            <to uri="xquery:com/acme/someTransform.xquery"/>
            <to uri="mqseries:SomeOtherQueue"/>
          </route>
        </camelContext>
      -------------------------------------------------------------------------

      [[XQuery-Examples.1]]
      Examples
      ^^^^^^^^

      Here is a simple
      http://svn.apache.org/repos/asf/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryFilterTest.java[example]
      using an XQuery expression as a predicate in a
      link:message-filter.html[Message Filter]

      This
      http://svn.apache.org/repos/asf/camel/trunk/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryWithNamespacesFilterTest.java[example]
      uses XQuery with namespaces as a predicate in a
      link:message-filter.html[Message Filter]

      [[XQuery-LearningXQuery]]
      Learning XQuery
      ^^^^^^^^^^^^^^^

      XQuery is a very powerful language for querying, searching, sorting and
      returning XML. For help learning XQuery try these tutorials

      * Mike Kay's http://www.stylusstudio.com/xquery_primer.html[XQuery
      Primer]
      * the W3Schools http://www.w3schools.com/xquery/default.asp[XQuery
      Tutorial]

      You might also find the http://www.w3.org/TR/xpath-functions/[XQuery
      function reference] useful

      [[XQuery-Loadingscriptfromexternalresource]]
      Loading script from external resource
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      *Available as of Camel 2.11*

      You can externalize the script and have Camel load it from a resource
      such as `"classpath:"`, `"file:"`, or `"http:"`. +
       This is done using the following syntax: `"resource:scheme:location"`,
      eg to refer to a file on the classpath you can do:

      [source,java]
      ------------------------------------------------------------------------------
      .setHeader("myHeader").xquery("resource:classpath:myxquery.txt", String.class)
      ------------------------------------------------------------------------------

      [[XQuery-Dependencies]]
      Dependencies
      ^^^^^^^^^^^^

      To use XQuery in your camel routes you need to add the a dependency on
      *camel-saxon* which implements the XQuery language.

      If you use maven you could just add the following to your pom.xml,
      substituting the version number for the latest & greatest release (see
      link:download.html[the download page for the latest versions]).

      [source,java]
      --------------------------------------
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-saxon</artifactId>
        <version>x.x.x</version>
      </dependency>
      --------------------------------------
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-xslt
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: xslt
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: xslt
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: xslt
          spec:
            containers:
            - image: fabric8/connector-xslt:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: xslt
        syntax: xslt:resourceUri
        title: XSLT
        description: Transforms the message using a XSLT template.
        label: core,transformation
        deprecated: false
        async: false
        producerOnly: true
        javaType: org.apache.camel.component.xslt.XsltComponent
        groupId: org.apache.camel
        artifactId: camel-core
        version: 2.18.1
      componentProperties:
        xmlConverter:
          kind: property
          label: advanced
          required: false
          type: object
          javaType: org.apache.camel.converter.jaxp.XmlConverter
          deprecated: false
          secret: false
          description: To use a custom implementation of org.apache.camel.converter.jaxp.XmlConverter
        uriResolverFactory:
          kind: property
          label: advanced
          required: false
          type: object
          javaType: org.apache.camel.component.xslt.XsltUriResolverFactory
          deprecated: false
          secret: false
          description: To use a custom javax.xml.transform.URIResolver which depends on a dynamic endpoint resource URI or which is a subclass of XsltUriResolver. Do not use in combination with uriResolver. See also link setUriResolver(URIResolver).
        uriResolver:
          kind: property
          label: advanced
          required: false
          type: object
          javaType: javax.xml.transform.URIResolver
          deprecated: false
          secret: false
          description: To use a custom javax.xml.transform.URIResolver. Do not use in combination with uriResolverFactory. See also link setUriResolverFactory(XsltUriResolverFactory).
        contentCache:
          kind: property
          required: false
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Cache for the resource content (the stylesheet file) when it is loaded. If set to false Camel will reload the stylesheet file on each message processing. This is good for development. A cached stylesheet can be forced to reload at runtime via JMX using the clearCachedStylesheet operation.
        saxon:
          kind: property
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          description: Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.
      properties:
        resourceUri:
          kind: path
          group: producer
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The name of the template to load from classpath or file system
        allowStAX:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether to allow using StAX as the javax.xml.transform.Source.
        contentCache:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Cache for the resource content (the stylesheet file) when it is loaded. If set to false Camel will reload the stylesheet file on each message processing. This is good for development. A cached stylesheet can be forced to reload at runtime via JMX using the clearCachedStylesheet operation.
        deleteOutputFile:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: If you have output=file then this option dictates whether or not the output file should be deleted when the Exchange is done processing. For example suppose the output file is a temporary file then it can be a good idea to delete it after use.
        failOnNullBody:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether or not to throw an exception if the input body is null.
        output:
          kind: parameter
          group: producer
          type: string
          javaType: org.apache.camel.component.xslt.XsltOutput
          enum:
          - string
          - bytes
          - DOM
          - file
          deprecated: false
          secret: false
          defaultValue: string
          description: 'Option to specify which output type to use. Possible values are:
            string bytes DOM file. The first three options are all in memory based where
            as file is streamed directly to a java.io.File. For file you must specify the
            filename in the IN header with the key Exchange.XSLT_FILE_NAME which is also
            CamelXsltFileName. Also any paths leading to the filename must be created beforehand
            otherwise an exception is thrown at runtime.'
        saxon:
          kind: parameter
          group: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether to use Saxon as the transformerFactoryClass. If enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.
        transformerCacheSize:
          kind: parameter
          group: producer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "0"
          description: The number of javax.xml.transform.Transformer object that are cached for reuse to avoid calls to Template.newTransformer().
        converter:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.converter.jaxp.XmlConverter
          deprecated: false
          secret: false
          description: To use a custom implementation of org.apache.camel.converter.jaxp.XmlConverter
        entityResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.xml.sax.EntityResolver
          deprecated: false
          secret: false
          description: To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource.
        errorListener:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.transform.ErrorListener
          deprecated: false
          secret: false
          description: Allows to configure to use a custom javax.xml.transform.ErrorListener. Beware when doing this then the default error listener which captures any errors or fatal errors and store information on the Exchange as properties is not in use. So only use this option for special use-cases.
        resultHandlerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: org.apache.camel.builder.xml.ResultHandlerFactory
          deprecated: false
          secret: false
          description: Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory which is capable of using custom org.apache.camel.builder.xml.ResultHandler types.
        saxonExtensionFunctions:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: Allows you to use a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add camel-saxon to the classpath. The function is looked up in the registry where you can comma to separate multiple values to lookup.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        transformerFactory:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.transform.TransformerFactory
          deprecated: false
          secret: false
          description: To use a custom XSLT transformer factory
        transformerFactoryClass:
          kind: parameter
          group: advanced
          label: advanced
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: To use a custom XSLT transformer factory specified as a FQN class name
        uriResolver:
          kind: parameter
          group: advanced
          label: advanced
          type: object
          javaType: javax.xml.transform.URIResolver
          deprecated: false
          secret: false
          description: To use a custom javax.xml.transform.URIResolver
    documentation.adoc: "[[XSLT-XSLT]]\nXSLT\n~~~~\n\nThe *xslt:* component allows\
      \ you to process a message using an\nhttp://www.w3.org/TR/xslt[XSLT] template.\
      \ This can be ideal when using\nlink:templating.html[Templating] to generate\
      \ respopnses for requests.\n\n[[XSLT-URIformat]]\nURI format\n^^^^^^^^^^\n\n\
      [source,java]\n---------------------------\nxslt:templateName[?options]\n---------------------------\n\
      \nWhere *templateName* is the classpath-local URI of the template to\ninvoke;\
      \ or the complete URL of the remote template. Refer to the\nhttp://static.springframework.org/spring/docs/2.5.x/api/org/springframework/core/io/DefaultResourceLoader.html[Spring\n\
      Documentation for more detail of the URI syntax]\n\nYou can append query options\
      \ to the URI in the following format,\n`?option=value&option=value&...`\n\n\
      Here are some example URIs\n\nURI\n\nDescription\n\n[source,java]\n-----------------------------\n\
      xslt:com/acme/mytransform.xsl\n-----------------------------\n\nrefers to the\
      \ file com/acme/mytransform.xsl on the classpath\n\n[source,java]\n------------------------\n\
      xslt:file:///foo/bar.xsl\n------------------------\n\nrefers to the file /foo/bar.xsl\n\
      \n[source,java]\n-----------------------------------\nxslt:http://acme.com/cheese/foo.xsl\n\
      -----------------------------------\n\nrefers to the remote http resource\n\n\
      Maven users will need to add the following dependency to their `pom.xml`\nfor\
      \ this component when using *Camel 2.8* or older:\n\n[source,xml]\n------------------------------------------------------------\n\
      <dependency>\n    <groupId>org.apache.camel</groupId>\n    <artifactId>camel-spring</artifactId>\n\
      \    <version>x.x.x</version>\n    <!-- use the same version as your Camel core\
      \ version -->\n</dependency>\n------------------------------------------------------------\n\
      \nFrom Camel 2.9 onwards the link:xslt.html[XSLT] component is provided\ndirectly\
      \ in the camel-core.\n\n[[XSLT-Options]]\nOptions\n^^^^^^^\n\n// component options:\
      \ START\nThe XSLT component supports 5 options which are listed below.\n\n\n\
      \n{% raw %}\n[width=\"100%\",cols=\"2,1m,7\",options=\"header\"]\n|=======================================================================\n\
      | Name | Java Type | Description\n| xmlConverter | XmlConverter | To use a custom\
      \ implementation of org.apache.camel.converter.jaxp.XmlConverter\n| uriResolverFactory\
      \ | XsltUriResolverFactory | To use a custom javax.xml.transform.URIResolver\
      \ which depends on a dynamic endpoint resource URI or which is a subclass of\
      \ XsltUriResolver. Do not use in combination with uriResolver. See also link\
      \ setUriResolver(URIResolver).\n| uriResolver | URIResolver | To use a custom\
      \ javax.xml.transform.URIResolver. Do not use in combination with uriResolverFactory.\
      \ See also link setUriResolverFactory(XsltUriResolverFactory).\n| contentCache\
      \ | boolean | Cache for the resource content (the stylesheet file) when it is\
      \ loaded. If set to false Camel will reload the stylesheet file on each message\
      \ processing. This is good for development. A cached stylesheet can be forced\
      \ to reload at runtime via JMX using the clearCachedStylesheet operation.\n\
      | saxon | boolean | Whether to use Saxon as the transformerFactoryClass. If\
      \ enabled then the class net.sf.saxon.TransformerFactoryImpl. You would need\
      \ to add Saxon to the classpath.\n|=======================================================================\n\
      {% endraw %}\n// component options: END\n\n\n// endpoint options: START\nThe\
      \ XSLT component supports 17 endpoint options which are listed below:\n\n{%\
      \ raw %}\n[width=\"100%\",cols=\"2,1,1m,1m,5\",options=\"header\"]\n|=======================================================================\n\
      | Name | Group | Default | Java Type | Description\n| resourceUri | producer\
      \ |  | String | *Required* The name of the template to load from classpath or\
      \ file system\n| allowStAX | producer | true | boolean | Whether to allow using\
      \ StAX as the javax.xml.transform.Source.\n| contentCache | producer | true\
      \ | boolean | Cache for the resource content (the stylesheet file) when it is\
      \ loaded. If set to false Camel will reload the stylesheet file on each message\
      \ processing. This is good for development. A cached stylesheet can be forced\
      \ to reload at runtime via JMX using the clearCachedStylesheet operation.\n\
      | deleteOutputFile | producer | false | boolean | If you have output=file then\
      \ this option dictates whether or not the output file should be deleted when\
      \ the Exchange is done processing. For example suppose the output file is a\
      \ temporary file then it can be a good idea to delete it after use.\n| failOnNullBody\
      \ | producer | true | boolean | Whether or not to throw an exception if the\
      \ input body is null.\n| output | producer | string | XsltOutput | Option to\
      \ specify which output type to use. Possible values are: string bytes DOM file.\
      \ The first three options are all in memory based where as file is streamed\
      \ directly to a java.io.File. For file you must specify the filename in the\
      \ IN header with the key Exchange.XSLT_FILE_NAME which is also CamelXsltFileName.\
      \ Also any paths leading to the filename must be created beforehand otherwise\
      \ an exception is thrown at runtime.\n| saxon | producer | false | boolean |\
      \ Whether to use Saxon as the transformerFactoryClass. If enabled then the class\
      \ net.sf.saxon.TransformerFactoryImpl. You would need to add Saxon to the classpath.\n\
      | transformerCacheSize | producer | 0 | int | The number of javax.xml.transform.Transformer\
      \ object that are cached for reuse to avoid calls to Template.newTransformer().\n\
      | converter | advanced |  | XmlConverter | To use a custom implementation of\
      \ org.apache.camel.converter.jaxp.XmlConverter\n| entityResolver | advanced\
      \ |  | EntityResolver | To use a custom org.xml.sax.EntityResolver with javax.xml.transform.sax.SAXSource.\n\
      | errorListener | advanced |  | ErrorListener | Allows to configure to use a\
      \ custom javax.xml.transform.ErrorListener. Beware when doing this then the\
      \ default error listener which captures any errors or fatal errors and store\
      \ information on the Exchange as properties is not in use. So only use this\
      \ option for special use-cases.\n| resultHandlerFactory | advanced |  | ResultHandlerFactory\
      \ | Allows you to use a custom org.apache.camel.builder.xml.ResultHandlerFactory\
      \ which is capable of using custom org.apache.camel.builder.xml.ResultHandler\
      \ types.\n| saxonExtensionFunctions | advanced |  | String | Allows you to use\
      \ a custom net.sf.saxon.lib.ExtensionFunctionDefinition. You would need to add\
      \ camel-saxon to the classpath. The function is looked up in the registry where\
      \ you can comma to separate multiple values to lookup.\n| synchronous | advanced\
      \ | false | boolean | Sets whether synchronous processing should be strictly\
      \ used or Camel is allowed to use asynchronous processing (if supported).\n\
      | transformerFactory | advanced |  | TransformerFactory | To use a custom XSLT\
      \ transformer factory\n| transformerFactoryClass | advanced |  | String | To\
      \ use a custom XSLT transformer factory specified as a FQN class name\n| uriResolver\
      \ | advanced |  | URIResolver | To use a custom javax.xml.transform.URIResolver\n\
      |=======================================================================\n{%\
      \ endraw %}\n// endpoint options: END\n\n\n[[XSLT-UsingXSLTendpoints]]\nUsing\
      \ XSLT endpoints\n^^^^^^^^^^^^^^^^^^^^\n\nFor example you could use something\
      \ like\n\n[source,java]\n--------------------------------------\nfrom(\"activemq:My.Queue\"\
      ).\n  to(\"xslt:com/acme/mytransform.xsl\");\n--------------------------------------\n\
      \nTo use an XSLT template to formulate a response for a message for InOut\n\
      message exchanges (where there is a `JMSReplyTo` header).\n\nIf you want to\
      \ use InOnly and consume the message and send it to another\ndestination you\
      \ could use the following route:\n\n[source,java]\n--------------------------------------\n\
      from(\"activemq:My.Queue\").\n  to(\"xslt:com/acme/mytransform.xsl\").\n  to(\"\
      activemq:Another.Queue\");\n--------------------------------------\n\n[[XSLT-GettingParametersintotheXSLTtoworkwith]]\n\
      Getting Parameters into the XSLT to work with\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \nBy default, all headers are added as parameters which are available in\nthe\
      \ XSLT. +\n To do this you will need to declare the parameter so it is then\n\
      _useable_.\n\n[source,xml]\n-------------------------------------------------------------------\n\
      <setHeader headerName=\"myParam\"><constant>42</constant></setHeader>\n<to uri=\"\
      xslt:MyTransform.xsl\"/>\n-------------------------------------------------------------------\n\
      \nAnd the XSLT just needs to declare it at the top level for it to be\navailable:\n\
      \n[source,xml]\n------------------------------\n<xsl: ...... >\n\n   <xsl:param\
      \ name=\"myParam\"/>\n  \n    <xsl:template ...>\n------------------------------\n\
      \n[[XSLT-SpringXMLversions]]\nSpring XML versions\n^^^^^^^^^^^^^^^^^^^\n\nTo\
      \ use the above examples in Spring XML you would use something like\n\n[source,xml]\n\
      -----------------------------------------------------------------------\n  <camelContext\
      \ xmlns=\"http://activemq.apache.org/camel/schema/spring\">\n    <route>\n \
      \     <from uri=\"activemq:My.Queue\"/>\n      <to uri=\"xslt:org/apache/camel/spring/processor/example.xsl\"\
      />\n      <to uri=\"activemq:Another.Queue\"/>\n    </route>\n  </camelContext>\n\
      -----------------------------------------------------------------------\n\n\
      There is a\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/XsltTest.java[test\n\
      case] along with\nhttp://svn.apache.org/repos/asf/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/XsltTest-context.xml[its\n\
      Spring XML] if you want a concrete example.\n\n[[XSLT-Usingxsl:include]]\nUsing\
      \ xsl:include\n^^^^^^^^^^^^^^^^^\n\n*Camel 2.2 or older* +\n If you use xsl:include\
      \ in your XSL files then in Camel 2.2 or older it\nuses the default `javax.xml.transform.URIResolver`\
      \ which means it can\nonly lookup files from file system, and its does that\
      \ relative from the\nJVM starting folder.\n\nFor example this include:\n\n[source,xml]\n\
      ----------------------------------------\n<xsl:include href=\"staff_template.xsl\"\
      />\n----------------------------------------\n\nWill lookup the `staff_tempkalte.xsl`\
      \ file from the starting folder\nwhere the application was started.\n\n*Camel\
      \ 2.3 or newer*  +\n Now Camel provides its own implementation of `URIResolver`\
      \ which allows\nCamel to load included files from the classpath and more intelligent\n\
      than before.\n\nFor example this include:\n\n[source,xml]\n----------------------------------------\n\
      <xsl:include href=\"staff_template.xsl\"/>\n----------------------------------------\n\
      \nWill now be located relative from the starting endpoint, which for\nexample\
      \ could be:\n\n[source,java]\n----------------------------------------------------------------------\n\
      .to(\"xslt:org/apache/camel/component/xslt/staff_include_relative.xsl\")\n----------------------------------------------------------------------\n\
      \nWhich means Camel will locate the file in the *classpath* as\n`org/apache/camel/component/xslt/staff_template.xsl`.\
      \ +\n This allows you to use xsl include and have xsl files located in the\n\
      same folder such as we do in the example\n`org/apache/camel/component/xslt`.\n\
      \nYou can use the following two prefixes `classpath:` or `file:` to\ninstruct\
      \ Camel to look either in classpath or file system. If you omit\nthe prefix\
      \ then Camel uses the prefix from the endpoint configuration.\nIf that neither\
      \ has one, then classpath is assumed.\n\nYou can also refer back in the paths\
      \ such as\n\n[source,java]\n-----------------------------------------------------\n\
      \    <xsl:include href=\"../staff_other_template.xsl\"/>\n-----------------------------------------------------\n\
      \nWhich then will resolve the xsl file under `org/apache/camel/component`.\n\
      \n[[XSLT-Usingxsl:includeanddefaultprefix]]\nUsing xsl:include and default prefix\n\
      ++++++++++++++++++++++++++++++++++++\n\nWhen using xsl:include such as:\n\n\
      [source,xml]\n----------------------------------------\n<xsl:include href=\"\
      staff_template.xsl\"/>\n----------------------------------------\n\nThen in\
      \ Camel 2.10.3 and older, then Camel will use \"classpath:\" as the\ndefault\
      \ prefix, and load the resource from the classpath. This works for\nmost cases,\
      \ but if you configure the starting resource to load from\nfile,\n\n[source,java]\n\
      ----------------------------------------------------\n.to(\"xslt:file:etc/xslt/staff_include_relative.xsl\"\
      )\n----------------------------------------------------\n\n.. then you would\
      \ have to prefix all your includes with \"file:\" as well.\n\n[source,xml]\n\
      ---------------------------------------------\n<xsl:include href=\"file:staff_template.xsl\"\
      />\n---------------------------------------------\n\nFrom Camel 2.10.4 onwards\
      \ we have made this easier as Camel will use the\nprefix from the endpoint configuration\
      \ as the default prefix. So from\nCamel 2.10.4 onwards you can do:\n\n[source,xml]\n\
      ----------------------------------------\n<xsl:include href=\"staff_template.xsl\"\
      />\n----------------------------------------\n\nWhich will load the staff_template.xsl\
      \ resource from the file system, as\nthe endpoint was configured with \"file:\"\
      \ as prefix. +\n You can still though explicit configure a prefix, and then\
      \ mix and\nmatch. And have both file and classpath loading. But that would be\n\
      unusual, as most people either use file or classpath based resources.\n\n[[XSLT-UsingSaxonextensionfunctions]]\n\
      Using Saxon extension functions\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nSince Saxon\
      \ 9.2, writing extension functions has been supplemented by a\nnew mechanism,\
      \ referred to\nas??http://www.saxonica.com/html/documentation/extensibility/integratedfunctions[integrated\n\
      extension functions]??you can now easily use camel:\n\n??\n\n-??Java example:\n\
      \n[source,java]\n---------------------------------------------------------------------------------------------------------------------------------\n\
      SimpleRegistry registry = new SimpleRegistry();\nregistry.put(\"function1\"\
      , new MyExtensionFunction1());\nregistry.put(\"function2\", new MyExtensionFunction2());\n\
      \nCamelContext context = new DefaultCamelContext(registry);\ncontext.addRoutes(new\
      \ RouteBuilder() {\n    @Override\n    public void configure() throws Exception\
      \ {\n        from(\"direct:start\")\n            .to(\"xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2\"\
      );\n    }\n});\n---------------------------------------------------------------------------------------------------------------------------------\n\
      \n??\n\nSpring example:\n\n[source,xml]\n-----------------------------------------------------------------------------------------------------------------------------\n\
      <camelContext xmlns=\"http://camel.apache.org/schema/spring\">\n  <route>\n\
      \    <from uri=\"direct:extensions\"/>\n    <to uri=\"xslt:org/apache/camel/component/xslt/extensions/extensions.xslt?saxonExtensionFunctions=#function1,#function2\"\
      />\n  </route>\n</camelContext>\n\n\n<bean id=\"function1\" class=\"org.apache.camel.component.xslt.extensions.MyExtensionFunction1\"\
      />\n<bean id=\"function2\" class=\"org.apache.camel.component.xslt.extensions.MyExtensionFunction2\"\
      />\n-----------------------------------------------------------------------------------------------------------------------------\n\
      \n??\n\n??\n\n[[XSLT-Dynamicstylesheets]]\nDynamic stylesheets\n^^^^^^^^^^^^^^^^^^^\n\
      \nTo provide a dynamic stylesheet at runtime you can define a dynamic URI.\n\
      See??link:how-to-use-a-dynamic-uri-in-to.html[How to use a dynamic URI in\n\
      to()] for more information.\n\n*Available as of Camel 2.9 (removed in 2.11.4,\
      \ 2.12.3 and 2.13.0)* +\n Camel provides the `CamelXsltResourceUri` header which\
      \ you can use to\ndefine a stylesheet to use instead of what is configured on\
      \ the endpoint\nURI. This allows you to provide a dynamic stylesheet at runtime.\n\
      \n[[XSLT-Accessingwarnings,errorsandfatalErrorsfromXSLTErrorListener]]\nAccessing\
      \ warnings, errors and fatalErrors from XSLT ErrorListener\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\
      \n*Available as of Camel 2.14*\n\nFrom Camel 2.14 onwards, any warning/error\
      \ or fatalError is stored on\nthe current Exchange as a property with the\n\
      keys??`Exchange.XSLT_ERROR`,??`Exchange.XSLT_FATAL_ERROR`,\nor??`Exchange.XSLT_WARNING`\
      \ which allows end users to get hold of any\nerrors happening during transformation.\n\
      \nFor example in the stylesheet below, we want to terminate if a staff has\n\
      an empty dob field. And to include a custom error message using\nxsl:message.\n\
      \n[source,java]\n---------------------------------------------------------------------------------------\n\
      \  <xsl:template match=\"/\">\n    <html>\n      <body>\n        <xsl:for-each\
      \ select=\"staff/programmer\">\n          <p>Name: <xsl:value-of select=\"name\"\
      /><br />\n            <xsl:if test=\"dob=''\">\n              <xsl:message terminate=\"\
      yes\">Error: DOB is an empty string!</xsl:message>\n            </xsl:if>\n\
      \          </p>\n        </xsl:for-each>\n      </body>\n    </html>\n  </xsl:template>\n\
      ---------------------------------------------------------------------------------------\n\
      \nThis information is not available on the Exchange stored as an Exception\n\
      that contains the message in the `getMessage()` method on the exception.\nThe\
      \ exception is stored on the Exchange as a warning with the\nkey??`Exchange.XSLT_WARNING.`\n\
      \n[[XSLT-NotesonusingXSLTandJavaVersions]]\nNotes on using XSLT and Java Versions\n\
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nHere are some observations from Sameer,\
      \ a Camel user, which he kindly\nshared with us:\n\n________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________\n\
      In case anybody faces issues with the XSLT endpoint please review these\npoints.\n\
      \nI was trying to use an xslt endpoint for a simple transformation from\none\
      \ xml to another using a simple xsl. The output xml kept appearing\n(after the\
      \ xslt processor in the route) with outermost xml tag with no\ncontent within.\n\
      \nNo explanations show up in the DEBUG logs. On the TRACE logs however I\ndid\
      \ find some error/warning indicating that the XMLConverter bean could\nno be\
      \ initialized.\n\nAfter a few hours of cranking my mind, I had to do the following\
      \ to get\nit to work (thanks to some posts on the users forum that gave some\n\
      clue):\n\n\\1. Use the transformerFactory option in the route\n`(\"xslt:my-transformer.xsl?transformerFactory=tFactory\"\
      )` with the\n`tFactory` bean having bean defined in the spring context for\n\
      `class=\"org.apache.xalan.xsltc.trax.TransformerFactoryImpl\"`. +\n 2. Added\
      \ the Xalan jar into my maven pom.\n\nMy guess is that the default xml parsing\
      \ mechanism supplied within the\nJDK (I am using 1.6.0_03) does not work right\
      \ in this context and does\nnot throw up any error either. When I switched to\
      \ Xalan this way it\nworks. This is not a Camel issue, but might need a mention\
      \ on the xslt\ncomponent page.\n\nAnother note, jdk 1.6.0_03 ships with JAXB\
      \ 2.0 while Camel needs 2.1.\nOne workaround is to add the 2.1 jar to the `jre/lib/endorsed`\
      \ directory\nfor the jvm or as specified by the container.\n\nHope this post\
      \ saves newbie Camel riders some time.\n________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________\n\
      \n[[XSLT-SeeAlso]]\nSee Also\n^^^^^^^^\n\n* link:configuring-camel.html[Configuring\
      \ Camel]\n* link:component.html[Component]\n* link:endpoint.html[Endpoint]\n\
      * link:getting-started.html[Getting Started]\n\n"
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-yammer
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: yammer
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: yammer
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: yammer
          spec:
            containers:
            - image: fabric8/connector-yammer:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: yammer
        syntax: yammer:function
        title: Yammer
        description: The yammer component allows you to interact with the Yammer enterprise social network.
        label: social
        deprecated: false
        async: false
        javaType: org.apache.camel.component.yammer.YammerComponent
        groupId: org.apache.camel
        artifactId: camel-yammer
        version: 2.18.1
      componentProperties:
        consumerKey:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer key
        consumerSecret:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer secret
        accessToken:
          kind: property
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access token
        config:
          kind: property
          type: object
          javaType: org.apache.camel.component.yammer.YammerConfiguration
          deprecated: false
          secret: false
          description: To use a shared yammer configuration
      properties:
        function:
          kind: path
          group: common
          required: true
          type: string
          javaType: org.apache.camel.component.yammer.YammerFunctionType
          enum:
          - MESSAGES
          - MY_FEED
          - ALGO
          - FOLLOWING
          - SENT
          - PRIVATE
          - RECEIVED
          - USERS
          - CURRENT
          - RELATIONSHIPS
          deprecated: false
          secret: false
          description: The function to use
        accessToken:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The access token
        consumerKey:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer key
        consumerSecret:
          kind: parameter
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The consumer secret
        useJson:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Set to true if you want to use raw JSON rather than converting to POJOs.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        delay:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: Delay between polling in millis
        limit:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Return only the specified number of messages. Works for threaded=true and threaded=extended.
        newerThan:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Returns messages newer than the message ID specified as a numeric string. This should be used when polling for new messages. If you're looking at messages and the most recent message returned is 3516 you can make a request with the parameter newerThan=3516 to ensure that you do not get duplicate copies of messages already on your page.
        olderThan:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: -1
          description: Returns messages older than the message ID specified as a numeric string. This is useful for paginating messages. For example if you're currently viewing 20 messages and the oldest is number 2912 you could append olderThan=2912 to your request to get the 20 messages prior to those you're seeing.
        sendEmptyMessageWhenIdle:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
        threaded:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          enum:
          - true
          - extended
          deprecated: false
          secret: false
          description: threaded=true will only return the first message in each thread. This parameter is intended for apps which display message threads collapsed. threaded=extended will return the thread starter messages in order of most recently active as well as the two most recent messages as they are viewed in the default view on the Yammer web interface.
        userId:
          kind: parameter
          group: consumer
          label: consumer
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The user id
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        pollStrategy:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.PollingConsumerPollStrategy
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
        backoffErrorThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
        backoffIdleThreshold:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
        backoffMultiplier:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: int
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
        greedy:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
        initialDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: integer
          javaType: long
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: "1000"
          description: Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
        runLoggingLevel:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.LoggingLevel
          enum:
          - TRACE
          - DEBUG
          - INFO
          - WARN
          - ERROR
          - OFF
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: TRACE
          description: The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
        scheduledExecutorService:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.concurrent.ScheduledExecutorService
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
        scheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: org.apache.camel.spi.ScheduledPollConsumerScheduler
          enum:
          - none
          - spring
          - quartz2
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: none
          description: To use a cron scheduler from either camel-spring or camel-quartz2 component
        schedulerProperties:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: object
          javaType: java.util.Map<java.lang.String,java.lang.Object>
          prefix: scheduler.
          multiValue: true
          deprecated: false
          secret: false
          description: To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
        startScheduler:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Whether the scheduler should be auto started.
        timeUnit:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: string
          javaType: java.util.concurrent.TimeUnit
          enum:
          - NANOSECONDS
          - MICROSECONDS
          - MILLISECONDS
          - SECONDS
          - MINUTES
          - HOURS
          - DAYS
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: MILLISECONDS
          description: Time unit for initialDelay and delay options.
        useFixedDelay:
          kind: parameter
          group: scheduler
          label: consumer,scheduler
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: true
          description: Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
    documentation.adoc: |
      [[Yammer-Yammer]]
      Yammer
      ~~~~~~

      *Available as of Camel 2.12*

      The Yammer component allows you to interact with the
      https://www.yammer.com[Yammer] enterprise social network. Consuming
      messages, users, and user relationships is supported as well as creating
      new messages.

      Yammer uses OAuth 2 for all client application authentication. In order
      to use camel-yammer with your account, you'll need to create a new
      application within Yammer and grant the application access to your
      account. Finally, generate your access token. More details are at
      https://developer.yammer.com/authentication/.

      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-yammer</artifactId>
          <version>${camel-version}</version>
      </dependency>
      ----

      [[Yammer-URIformat]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      yammer:[function]?[options]
      ----

      [[Yammer-ComponentOptions]]
      Component options
      ^^^^^^^^^^^^^^^^^

      The Yammer component can be configured with the Yammer account settings
      which are mandatory to configure before using.




      // component options: START
      The Yammer component supports 4 options which are listed below.



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | consumerKey | String | The consumer key
      | consumerSecret | String | The consumer secret
      | accessToken | String | The access token
      | config | YammerConfiguration | To use a shared yammer configuration
      |=======================================================================
      {% endraw %}
      // component options: END




      You can also configure these options directly in the endpoint.

      [[Yammer-EndpointOptions]]
      Endpoint options
      ^^^^^^^^^^^^^^^^^



      // endpoint options: START
      The Yammer component supports 29 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | function | common |  | YammerFunctionType | *Required* The function to use
      | accessToken | common |  | String | *Required* The access token
      | consumerKey | common |  | String | *Required* The consumer key
      | consumerSecret | common |  | String | *Required* The consumer secret
      | useJson | common | false | boolean | Set to true if you want to use raw JSON rather than converting to POJOs.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | delay | consumer | 5000 | long | Delay between polling in millis
      | limit | consumer | -1 | int | Return only the specified number of messages. Works for threaded=true and threaded=extended.
      | newerThan | consumer | -1 | int | Returns messages newer than the message ID specified as a numeric string. This should be used when polling for new messages. If you're looking at messages and the most recent message returned is 3516 you can make a request with the parameter newerThan=3516 to ensure that you do not get duplicate copies of messages already on your page.
      | olderThan | consumer | -1 | int | Returns messages older than the message ID specified as a numeric string. This is useful for paginating messages. For example if you're currently viewing 20 messages and the oldest is number 2912 you could append olderThan=2912 to your request to get the 20 messages prior to those you're seeing.
      | sendEmptyMessageWhenIdle | consumer | false | boolean | If the polling consumer did not poll any files you can enable this option to send an empty message (no body) instead.
      | threaded | consumer |  | String | threaded=true will only return the first message in each thread. This parameter is intended for apps which display message threads collapsed. threaded=extended will return the thread starter messages in order of most recently active as well as the two most recent messages as they are viewed in the default view on the Yammer web interface.
      | userId | consumer |  | String | The user id
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | pollStrategy | consumer (advanced) |  | PollingConsumerPollStrategy | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      | backoffErrorThreshold | scheduler |  | int | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.
      | backoffIdleThreshold | scheduler |  | int | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.
      | backoffMultiplier | scheduler |  | int | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.
      | greedy | scheduler | false | boolean | If greedy is enabled then the ScheduledPollConsumer will run immediately again if the previous run polled 1 or more messages.
      | initialDelay | scheduler | 1000 | long | Milliseconds before the first poll starts. You can also specify time values using units such as 60s (60 seconds) 5m30s (5 minutes and 30 seconds) and 1h (1 hour).
      | runLoggingLevel | scheduler | TRACE | LoggingLevel | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.
      | scheduledExecutorService | scheduler |  | ScheduledExecutorService | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.
      | scheduler | scheduler | none | ScheduledPollConsumerScheduler | To use a cron scheduler from either camel-spring or camel-quartz2 component
      | schedulerProperties | scheduler |  | Map | To configure additional properties when using a custom scheduler or any of the Quartz2 Spring based scheduler.
      | startScheduler | scheduler | true | boolean | Whether the scheduler should be auto started.
      | timeUnit | scheduler | MILLISECONDS | TimeUnit | Time unit for initialDelay and delay options.
      | useFixedDelay | scheduler | true | boolean | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.
      |=======================================================================
      {% endraw %}
      // endpoint options: END




      [[Yammer-Consumingmessages]]
      Consuming messages
      ^^^^^^^^^^^^^^^^^^

      The Yammer component provides several endpoints for consuming
      messages:

      [width="100%",cols="2l,3",options="header",]
      |=======================================================================
      |URI |Description
      | yammer:messages?[options]
      |All public messages in the user's (whose access token is being used to
      make the API call) Yammer network. Corresponds to "All" conversations in
      the Yammer web interface.
      | yammer:my_feed?[options]
      |The user's feed, based on the selection they have made between
      "Following" and "Top" conversations.
      |yammer:algo?[options]
      |The algorithmic feed for the user that corresponds to "Top"
      conversations, which is what the vast majority of users will see in the
      Yammer web interface.
      |yammer:following?[options]
      |The "Following" feed which is conversations involving people, groups
      and topics that the user is following.
      |yammer:sent?[options]
      |All messages sent by the user.
      |yammer:private?[options]
      |Private messages received by the user.
      |yammer:received?[options]
      |*Camel 2.12.1:* All messages received by the user
      |=======================================================================


      [[Yammer-Messageformat]]
      Message format
      ++++++++++++++

      All messages by default are converted to a POJO model provided in the
      `org.apache.camel.component.yammer.model` package. The original message
      coming from yammer is in JSON. For all message consuming and producing
      endpoints, a `Messages` object is returned. Take for example a route like:

      [source,java]
      ----
      from("yammer:messages?consumerKey=aConsumerKey&consumerSecret=aConsumerSecretKey&accessToken=aAccessToken")
          .to("mock:result");
      ----

      and lets say the yammer server returns:

      [source,json]
      ----
      {
          "messages":[
              {
                  "replied_to_id":null,
                  "network_id":7654,
                  "url":"https://www.yammer.com/api/v1/messages/305298242",
                  "thread_id":305298242,
                  "id":305298242,
                  "message_type":"update",
                  "chat_client_sequence":null,
                  "body":{
                      "parsed":"Testing yammer API...",
                      "plain":"Testing yammer API...",
                      "rich":"Testing yammer API..."
                  },
                  "client_url":"https://www.yammer.com/",
                  "content_excerpt":"Testing yammer API...",
                  "created_at":"2013/06/25 18:14:45 +0000",
                  "client_type":"Web",
                  "privacy":"public",
                  "sender_type":"user",
                  "liked_by":{
                      "count":1,
                      "names":[
                          {
                              "permalink":"janstey",
                              "full_name":"Jonathan Anstey",
                              "user_id":1499642294
                          }

                      ]

                  },
                  "sender_id":1499642294,
                  "language":null,
                  "system_message":false,
                  "attachments":[

                  ],
                  "direct_message":false,
                  "web_url":"https://www.yammer.com/redhat.com/messages/305298242"
              },
              {
                  "replied_to_id":null,
                  "network_id":7654,
                  "url":"https://www.yammer.com/api/v1/messages/294326302",
                  "thread_id":294326302,
                  "id":294326302,
                  "message_type":"system",
                  "chat_client_sequence":null,
                  "body":{
                      "parsed":"(Principal Software Engineer) has [[tag:14658]] the redhat.com network. Take a moment to welcome Jonathan.",
                      "plain":"(Principal Software Engineer) has #joined the redhat.com network. Take a moment to welcome Jonathan.",
                      "rich":"(Principal Software Engineer) has #joined the redhat.com network. Take a moment to welcome Jonathan."
                  },
                  "client_url":"https://www.yammer.com/",
                  "content_excerpt":"(Principal Software Engineer) has #joined the redhat.com network. Take a moment to welcome Jonathan.",
                  "created_at":"2013/05/10 19:08:29 +0000",
                  "client_type":"Web",
                  "sender_type":"user",
                  "privacy":"public",
                  "liked_by":{
                      "count":0,
                      "names":[

                      ]

                  }
              }
              ]

          }
      ----

      Camel will marshal that into a `Messages` object containing 2 `Message`
      objects. As shown below there is a rich object model that makes it easy
      to get any information you need:

      [source,java]
      ----
      Exchange exchange = mock.getExchanges().get(0);
      Messages messages = exchange.getIn().getBody(Messages.class);

      assertEquals(2, messages.getMessages().size());
      assertEquals("Testing yammer API...", messages.getMessages().get(0).getBody().getPlain());
      assertEquals("(Principal Software Engineer) has #joined the redhat.com network. Take a moment to welcome Jonathan.", messages.getMessages().get(1).getBody().getPlain());
      ----

      That said, marshaling this data into POJOs is not free so if you need
      you can switch back to using pure JSON by adding the `useJson=false`
      option to your URI.

      [[Yammer-Creatingmessages]]
      Creating messages
      ^^^^^^^^^^^^^^^^^

      To create a new message in the account of the current user, you can use
      the following URI:

      [source]
      ----
      yammer:messages?[options]
      ----

      The current Camel message body is what will be used to set the text of
      the Yammer message. The response body will include the new message
      formatted the same way as when you consume messages (i.e. as a `Messages`
      object by default).

      Take this route for instance:

      [source,java]
      ----
      from("direct:start")
          .to("yammer:messages?consumerKey=aConsumerKey&consumerSecret=aConsumerSecretKey&accessToken=aAccessToken")
          .to("mock:result");
      ----

      By sending to the `direct:start` endpoint a `"Hi from Camel!"` message body:

      [source,java]
      ----
      template.sendBody("direct:start", "Hi from Camel!");
      ----

      a new message will be created in the current user's account on the
      server and also this new message will be returned to Camel and converted
      into a `Messages` object. Like when consuming messages you can interrogate
      the `Messages` object:

      [source,java]
      ----
      Exchange exchange = mock.getExchanges().get(0);
      Messages messages = exchange.getIn().getBody(Messages.class);

      assertEquals(1, messages.getMessages().size());
      assertEquals("Hi from Camel!", messages.getMessages().get(0).getBody().getPlain());
      ----

      [[Yammer-Retrievinguserrelationships]]
      Retrieving user relationships
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      The Yammer component can retrieve user relationships:

      [source]
      ----
      yammer:relationships?[options]
      ----


      [[Yammer-Retrievingusers]]
      Retrieving users
      ^^^^^^^^^^^^^^^^

      The Yammer component provides several endpoints for retrieving
      users:

      [width="100%",cols="2l,3",options="header",]
      |=====================================================
      |URI |Description
      |yammer:users?[options]
      |Retrieve users in the current user's Yammer network.
      |yammer:current?[options]
      |View data about the current user.
      |=====================================================


      [[Yammer-Usinganenricher]]
      Using an enricher
      ^^^^^^^^^^^^^^^^^

      It is helpful sometimes (or maybe always in the case of users or
      relationship consumers) to use an enricher pattern rather than a route
      initiated with one of the polling consumers in camel-yammer. This is
      because the consumers will fire repeatedly, however often you set the
      delay for. If you just want to look up a user's data, or grab a message
      at a point in time, it is better to call that consumer once and then get
      one with your route.

      Lets say you have a route that at some point needs to go out and fetch
      user data for the current user. Rather than polling for this user over
      and over again, use the `pollEnrich` DSL method:

      [source,java]
      ----
      from("direct:start")
          .pollEnrich("yammer:current?consumerKey=aConsumerKey&consumerSecret=aConsumerSecretKey&accessToken=aAccessToken")
          .to("mock:result");
      ----

      This will go out and fetch the current user's `User` object and set it as
      the Camel message body.

      [[Yammer-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
- apiVersion: v1
  kind: ConfigMap
  metadata:
    labels:
      funktion.fabric8.io/kind: Connector
      provider: fabric8
      project: connector-zookeeper
      version: 1.1.30
      group: io.fabric8.funktion.connector
    name: zookeeper
  data:
    deployment.yml: |
      ---
      apiVersion: extensions/v1beta1
      kind: Deployment
      metadata:
        labels:
          funktion.fabric8.io/kind: Subscription
          connector: zookeeper
      spec:
        replicas: 1
        template:
          metadata:
            labels:
              funktion.fabric8.io/kind: Subscription
              connector: zookeeper
          spec:
            containers:
            - image: fabric8/connector-zookeeper:1.1.30
              name: connector
    schema.yml: |
      ---
      component:
        kind: component
        scheme: zookeeper
        syntax: zookeeper:serverUrls/path
        title: ZooKeeper
        description: The zookeeper component allows interaction with a ZooKeeper cluster.
        label: clustering
        deprecated: false
        async: false
        javaType: org.apache.camel.component.zookeeper.ZooKeeperComponent
        groupId: org.apache.camel
        artifactId: camel-zookeeper
        version: 2.18.1
      componentProperties:
        configuration:
          kind: property
          type: object
          javaType: org.apache.camel.component.zookeeper.ZooKeeperConfiguration
          deprecated: false
          secret: false
          description: To use a shared ZooKeeperConfiguration
      properties:
        serverUrls:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The zookeeper server hosts (multiple servers can be separated by comma)
        path:
          kind: path
          group: common
          required: true
          type: string
          javaType: java.lang.String
          deprecated: false
          secret: false
          description: The node in the ZooKeeper server (aka znode)
        awaitExistence:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: true
          secret: false
          defaultValue: true
          description: Not in use
        listChildren:
          kind: parameter
          group: common
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Whether the children of the node should be listed
        timeout:
          kind: parameter
          group: common
          type: integer
          javaType: int
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: The time interval to wait on connection before timing out.
        backoff:
          kind: parameter
          group: consumer
          label: consumer
          type: integer
          javaType: long
          deprecated: false
          secret: false
          defaultValue: "5000"
          description: The time interval to backoff for after an error before retrying.
        bridgeErrorHandler:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          defaultValue: false
          description: 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/ERROR level and ignored.
        repeat:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should changes to the znode be 'watched' and repeatedly processed.
        sendEmptyMessageOnDelete:
          kind: parameter
          group: consumer
          label: consumer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: true
          description: Upon the delete of a znode should an empty message be send to the consumer
        exceptionHandler:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: object
          javaType: org.apache.camel.spi.ExceptionHandler
          optionalPrefix: consumer.
          deprecated: false
          secret: false
          description: To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
        exchangePattern:
          kind: parameter
          group: consumer (advanced)
          label: consumer,advanced
          type: string
          javaType: org.apache.camel.ExchangePattern
          enum:
          - InOnly
          - RobustInOnly
          - InOut
          - InOptionalOut
          - OutOnly
          - RobustOutOnly
          - OutIn
          - OutOptionalIn
          deprecated: false
          secret: false
          description: Sets the exchange pattern when the consumer creates an exchange.
        create:
          kind: parameter
          group: producer
          label: producer
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Should the endpoint create the node if it does not currently exist.
        createMode:
          kind: parameter
          group: producer
          label: producer
          type: string
          javaType: java.lang.String
          enum:
          - PERSISTENT
          - PERSISTENT_SEQUENTIAL
          - EPHEMERAL
          - EPHEMERAL_SEQUENTIAL
          deprecated: false
          secret: false
          defaultValue: EPHEMERAL
          description: The create mode that should be used for the newly created node
        synchronous:
          kind: parameter
          group: advanced
          label: advanced
          type: boolean
          javaType: boolean
          deprecated: false
          secret: false
          defaultValue: false
          description: Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
    documentation.adoc: |
      ifdef::env-github[]
      :caution-caption: :boom:
      :important-caption: :exclamation:
      :note-caption: :information_source:
      :tip-caption: :bulb:
      :warning-caption: :warning:
      endif::[]

      [[Zookeeper-ZooKeeper]]
      ZooKeeper
      ~~~~~~~~~

      *Available as of Camel 2.9*

      The ZooKeeper component allows interaction with a
      http://hadoop.apache.org/zookeeper/[ZooKeeper] cluster and exposes the
      following features to Camel:

      1.  Creation of nodes in any of the ZooKeeper create modes.
      2.  Get and Set the data contents of arbitrary cluster nodes (data
      being set must be convertible to `byte[]`).
      3.  Create and retrieve the list the child nodes attached to a
      particular node.
      4.  A Distributed link:routepolicy.html[`RoutePolicy`] that leverages a
      Leader election coordinated by ZooKeeper to determine if exchanges
      should get processed.

      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-zookeeper</artifactId>
          <version>x.x.x</version>
          <!-- use the same version as your Camel core version -->
      </dependency>
      ----

      [[Zookeeper-URIformat]]
      URI format
      ^^^^^^^^^^

      [source]
      ----
      zookeeper://zookeeper-server[:port][/path][?options]
      ----

      The path from the URI specifies the node in the ZooKeeper server (a.k.a.
      _znode_) that will be the target of the endpoint:

      [[Zookeeper-Options]]
      Options
      ^^^^^^^

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



      {% raw %}
      [width="100%",cols="2,1m,7",options="header"]
      |=======================================================================
      | Name | Java Type | Description
      | configuration | ZooKeeperConfiguration | To use a shared ZooKeeperConfiguration
      |=======================================================================
      {% endraw %}
      // component options: END

      // endpoint options: START
      The ZooKeeper component supports 14 endpoint options which are listed below:

      {% raw %}
      [width="100%",cols="2,1,1m,1m,5",options="header"]
      |=======================================================================
      | Name | Group | Default | Java Type | Description
      | serverUrls | common |  | String | *Required* The zookeeper server hosts (multiple servers can be separated by comma)
      | path | common |  | String | *Required* The node in the ZooKeeper server (aka znode)
      | awaitExistence | common | true | boolean | Not in use
      | listChildren | common | false | boolean | Whether the children of the node should be listed
      | timeout | common | 5000 | int | The time interval to wait on connection before timing out.
      | backoff | consumer | 5000 | long | The time interval to backoff for after an error before retrying.
      | bridgeErrorHandler | consumer | false | boolean | 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/ERROR level and ignored.
      | repeat | consumer | false | boolean | Should changes to the znode be 'watched' and repeatedly processed.
      | sendEmptyMessageOnDelete | consumer | true | boolean | Upon the delete of a znode should an empty message be send to the consumer
      | exceptionHandler | consumer (advanced) |  | ExceptionHandler | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this options is not in use. By default the consumer will deal with exceptions that will be logged at WARN/ERROR level and ignored.
      | exchangePattern | consumer (advanced) |  | ExchangePattern | Sets the exchange pattern when the consumer creates an exchange.
      | create | producer | false | boolean | Should the endpoint create the node if it does not currently exist.
      | createMode | producer | EPHEMERAL | String | The create mode that should be used for the newly created node
      | synchronous | advanced | false | boolean | Sets whether synchronous processing should be strictly used or Camel is allowed to use asynchronous processing (if supported).
      |=======================================================================
      {% endraw %}
      // endpoint options: END


      [[Zookeeper-Usecases]]
      Use cases
      ^^^^^^^^^

      [[Zookeeper-Readingfromaznode]]
      Reading from a _znode_
      +++++++++++++++++++++

      The following snippet will read the data from the _znode_
      `/somepath/somenode/` provided that it already exists. The data
      retrieved will be placed into an exchange and passed onto
      the rest of the route:

      [source,java]
      ----
      from("zookeeper://localhost:39913/somepath/somenode").to("mock:result");
      ----

      If the node does not yet exist then a flag can be supplied to have the
      endpoint await its creation:

      [source,java]
      ----
      from("zookeeper://localhost:39913/somepath/somenode?awaitCreation=true").to("mock:result");
      ----

      [[Zookeeper-ReadingfromaznodeAdditionalCamel210onwards]]
      Reading from a _znode_ (additional Camel 2.10 onwards)
      ++++++++++++++++++++++++++++++++++++++++++++++++++++++

      When data is read due to a `WatchedEvent` received from the ZooKeeper
      ensemble, the `CamelZookeeperEventType` header holds ZooKeeper's
      http://zookeeper.apache.org/doc/current/api/org/apache/zookeeper/Watcher.Event.EventType.html[`EventType`]
      value from that `WatchedEvent`. If the data is read initially (not
      triggered by a `WatchedEvent`) the `CamelZookeeperEventType` header will not
      be set.

      [[Zookeeper-Writingtoaznode]]
      Writing to a _znode_
      ++++++++++++++++++++

      The following snippet will write the payload of the exchange into the
      znode at `/somepath/somenode/` provided that it already exists:

      [source,java]
      ----
      from("direct:write-to-znode")
          .to("zookeeper://localhost:39913/somepath/somenode");
      ----

      For flexibility, the endpoint allows the target _znode_ to be specified
      dynamically as a message header. If a header keyed by the string
      `CamelZooKeeperNode` is present then the value of the header will be
      used as the path to the _znode_ on the server. For instance using the same
      route definition above, the following code snippet will write the data
      not to `/somepath/somenode` but to the path from the header
      `/somepath/someothernode`.

      WARNING: the `testPayload` must be convertible
      to `byte[]` as the data stored in ZooKeeper is byte based.

      [source,java]
      ----
      Object testPayload = ...
      template.sendBodyAndHeader("direct:write-to-znode", testPayload, "CamelZooKeeperNode", "/somepath/someothernode");
      ----

      To also create the node if it does not exist the `create` option should
      be used.

      [source,java]
      ----
      from("direct:create-and-write-to-znode")
          .to("zookeeper://localhost:39913/somepath/somenode?create=true");
      ----

      Starting *version 2.11* it is also possible to *delete* a node using the
      header `CamelZookeeperOperation` by setting it to `DELETE`:

      [source,java]
      ----
      from("direct:delete-znode")
          .setHeader(ZooKeeperMessage.ZOOKEEPER_OPERATION, constant("DELETE"))
          .to("zookeeper://localhost:39913/somepath/somenode");
      ----

      or equivalently:

      [source,xml]
      ----
      <route>
        <from uri="direct:delete-znode" />
        <setHeader headerName="CamelZookeeperOperation">
           <constant>DELETE</constant>
        </setHeader>
        <to uri="zookeeper://localhost:39913/somepath/somenode" />
      </route>
      ----

      ZooKeeper nodes can have different types; they can be 'Ephemeral' or
      'Persistent' and 'Sequenced' or 'Unsequenced'. For further information
      of each type you can check
      http://zookeeper.apache.org/doc/trunk/zookeeperProgrammers.html#Ephemeral+Nodes[here].
      By default endpoints will create unsequenced, ephemeral nodes, but the
      type can be easily manipulated via a uri config parameter or via a
      special message header. The values expected for the create mode are
      simply the names from the `CreateMode` enumeration:

      * `PERSISTENT`
      * `PERSISTENT_SEQUENTIAL`
      * `EPHEMERAL`
      * `EPHEMERAL_SEQUENTIAL`

      For example to create a persistent _znode_ via the URI config:

      [source,java]
      ----
      from("direct:create-and-write-to-persistent-znode")
          .to("zookeeper://localhost:39913/somepath/somenode?create=true&createMode=PERSISTENT");
      ----

      or using the header `CamelZookeeperCreateMode`.

      WARNING: the `testPayload` must be convertible to `byte[]` as the data stored in
      ZooKeeper is byte based.

      [source,java]
      ----
      Object testPayload = ...
      template.sendBodyAndHeader("direct:create-and-write-to-persistent-znode", testPayload, "CamelZooKeeperCreateMode", "PERSISTENT");
      ----

      [[Zookeeper-ZooKeeperenabledRoutepolicy]]
      ZooKeeper enabled Route policy
      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

      ZooKeeper allows for very simple and effective leader election out of
      the box. This component exploits this election capability in a
      link:routepolicy.html[`RoutePolicy`] to control when and how routes are
      enabled. This policy would typically be used in fail-over scenarios, to
      control identical instances of a route across a cluster of Camel based
      servers. A very common scenario is a simple 'Master-Slave' setup where
      there are multiple instances of a route distributed across a cluster but
      only one of them, that of the master, should be running at a time. If
      the master fails, a new master should be elected from the available
      slaves and the route in this new master should be started.

      The policy uses a common _znode_ path across all instances of the
      `RoutePolicy` that will be involved in the election. Each policy writes
      its id into this node and Zookeeper will order the writes in the order
      it received them. The policy then reads the listing of the node to see
      what position of its id; this position is used to determine if the route
      should be started or not. The policy is configured at startup with the
      number of route instances that should be started across the cluster and
      if its position in the list is less than this value then its route will
      be started. For a Master-slave scenario, the route is configured with 1
      route instance and only the first entry in the listing will start its
      route. All policies watch for updates to the listing and if the listing
      changes they recalculate if their route should be started. For more info
      on Zookeeper's leader election capability see
      http://zookeeper.apache.org/doc/trunk/recipes.html#sc_leaderElection[this
      page].

      The following example uses the node `/someapplication/somepolicy` for
      the election and is set up to start only the top '1' entries in the node
      listing i.e. elect a master:

      [source,java]
      ----
      ZooKeeperRoutePolicy policy = new ZooKeeperRoutePolicy("zookeeper:localhost:39913/someapp/somepolicy", 1);
      from("direct:policy-controlled")
          .routePolicy(policy)
          .to("mock:controlled");
      ----

      [[Zookeeper-SeeAlso]]
      See Also
      ^^^^^^^^

      * link:configuring-camel.html[Configuring Camel]
      * link:component.html[Component]
      * link:endpoint.html[Endpoint]
      * link:getting-started.html[Getting Started]
