---
apiVersion: v1
kind: ConfigMap
metadata:
  labels:
    funktion.fabric8.io/kind: 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: funktion/connector-class:${project.version}
            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
      producerOnly: true
      javaType: org.apache.camel.component.beanclass.ClassComponent
      groupId: org.apache.camel
      artifactId: camel-core
      version: 2.18.3
    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
        order: 0
      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
        order: 1
      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.
        order: 2
      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.'
        order: 3
      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
        order: 4
      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).
        order: 5
  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 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


    [[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]

