You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2021/04/29 13:12:29 UTC

[camel-k] 15/30: refactor(trait): error handler spec definition

This is an automated email from the ASF dual-hosted git repository.

nferraro pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 92d1c5db4d102ecdf26341121d83156372136169
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu Apr 22 15:57:40 2021 +0200

    refactor(trait): error handler spec definition
---
 .../crd/bases/camel.apache.org_integrations.yaml   |   6 +-
 .../bases/camel.apache.org_kameletbindings.yaml    | 231 +--------------------
 .../1.4.0/camel.apache.org_integrations.yaml       |   6 +-
 .../1.4.0/camel.apache.org_kameletbindings.yaml    | 231 +--------------------
 .../kamelet-binding-error-handler.yaml             |  22 +-
 examples/kamelets/error-handler/readme.md          |  23 +-
 helm/camel-k/crds/crd-integration.yaml             |   6 +-
 helm/camel-k/crds/crd-kamelet-binding.yaml         | 231 +--------------------
 pkg/apis/camel/v1/common_types.go                  |  10 +-
 pkg/apis/camel/v1alpha1/error_handler_types.go     | 111 ++++++++++
 pkg/apis/camel/v1alpha1/kamelet_binding_types.go   |  14 --
 pkg/controller/kameletbinding/common.go            |  33 +--
 pkg/controller/kameletbinding/error_handler.go     | 102 +++++++++
 pkg/trait/error_handler.go                         |  10 +-
 14 files changed, 278 insertions(+), 758 deletions(-)

diff --git a/config/crd/bases/camel.apache.org_integrations.yaml b/config/crd/bases/camel.apache.org_integrations.yaml
index c838f1f..0b1b88a 100644
--- a/config/crd/bases/camel.apache.org_integrations.yaml
+++ b/config/crd/bases/camel.apache.org_integrations.yaml
@@ -92,8 +92,10 @@ spec:
                 description: ErrorHandlerSpec respresents an integration error handler
                   to be used as default at runtime
                 properties:
-                  configuration:
-                    description: ErrorHandlerConfiguration --
+                  parameters:
+                    description: ErrorHandlerParameters is an unstructured object
+                      representing the configuration parameters available for an error
+                      handler
                     type: object
                     x-kubernetes-preserve-unknown-fields: true
                   type:
diff --git a/config/crd/bases/camel.apache.org_kameletbindings.yaml b/config/crd/bases/camel.apache.org_kameletbindings.yaml
index 046549c..2b78d2f 100644
--- a/config/crd/bases/camel.apache.org_kameletbindings.yaml
+++ b/config/crd/bases/camel.apache.org_kameletbindings.yaml
@@ -66,231 +66,8 @@ spec:
               errorHandler:
                 description: ErrorHandler is an optional handler called upon an error
                   occuring in the integration
-                properties:
-                  configuration:
-                    type: object
-                    x-kubernetes-preserve-unknown-fields: true
-                  endpoint:
-                    description: Endpoint represents a source/sink external entity
-                    properties:
-                      properties:
-                        description: Properties are a key value representation of
-                          endpoint properties
-                        type: object
-                        x-kubernetes-preserve-unknown-fields: true
-                      ref:
-                        description: Ref can be used to declare a Kubernetes resource
-                          as source/sink endpoint
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: 'If referring to a piece of an object instead
-                              of an entire object, this string should contain a valid
-                              JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container
-                              within a pod, this would take on a value like: "spec.containers{name}"
-                              (where "name" refers to the name of the container that
-                              triggered the event) or if no container name is specified
-                              "spec.containers[2]" (container with index 2 in this
-                              pod). This syntax is chosen only to have some well-defined
-                              way of referencing a part of an object. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            type: string
-                          kind:
-                            description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-                            type: string
-                          name:
-                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
-                            type: string
-                          namespace:
-                            description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
-                            type: string
-                          resourceVersion:
-                            description: 'Specific resourceVersion to which this reference
-                              is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
-                            type: string
-                          uid:
-                            description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
-                            type: string
-                        type: object
-                      types:
-                        additionalProperties:
-                          properties:
-                            mediaType:
-                              type: string
-                            schema:
-                              description: JSONSchemaProps is a JSON-Schema following
-                                Specification Draft 4 (http://json-schema.org/).
-                              properties:
-                                $schema:
-                                  description: JSONSchemaURL represents a schema url.
-                                  type: string
-                                description:
-                                  type: string
-                                example:
-                                  description: 'JSON represents any valid JSON value.
-                                    These types are supported: bool, int64, float64,
-                                    string, []interface{}, map[string]interface{}
-                                    and nil.'
-                                  x-kubernetes-preserve-unknown-fields: true
-                                externalDocs:
-                                  description: ExternalDocumentation allows referencing
-                                    an external resource for extended documentation.
-                                  properties:
-                                    description:
-                                      type: string
-                                    url:
-                                      type: string
-                                  type: object
-                                id:
-                                  type: string
-                                properties:
-                                  additionalProperties:
-                                    properties:
-                                      default:
-                                        description: default is a default value for
-                                          undefined object fields.
-                                        x-kubernetes-preserve-unknown-fields: true
-                                      description:
-                                        type: string
-                                      enum:
-                                        items:
-                                          description: 'JSON represents any valid
-                                            JSON value. These types are supported:
-                                            bool, int64, float64, string, []interface{},
-                                            map[string]interface{} and nil.'
-                                          x-kubernetes-preserve-unknown-fields: true
-                                        type: array
-                                      example:
-                                        description: 'JSON represents any valid JSON
-                                          value. These types are supported: bool,
-                                          int64, float64, string, []interface{}, map[string]interface{}
-                                          and nil.'
-                                        x-kubernetes-preserve-unknown-fields: true
-                                      exclusiveMaximum:
-                                        type: boolean
-                                      exclusiveMinimum:
-                                        type: boolean
-                                      format:
-                                        description: "format is an OpenAPI v3 format
-                                          string. Unknown formats are ignored. The
-                                          following formats are validated: \n - bsonobjectid:
-                                          a bson object ID, i.e. a 24 characters hex
-                                          string - uri: an URI as parsed by Golang
-                                          net/url.ParseRequestURI - email: an email
-                                          address as parsed by Golang net/mail.ParseAddress
-                                          - hostname: a valid representation for an
-                                          Internet host name, as defined by RFC 1034,
-                                          section 3.1 [RFC1034]. - ipv4: an IPv4 IP
-                                          as parsed by Golang net.ParseIP - ipv6:
-                                          an IPv6 IP as parsed by Golang net.ParseIP
-                                          - cidr: a CIDR as parsed by Golang net.ParseCIDR
-                                          - mac: a MAC address as parsed by Golang
-                                          net.ParseMAC - uuid: an UUID that allows
-                                          uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
-                                          - uuid3: an UUID3 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
-                                          - uuid4: an UUID4 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
-                                          - uuid5: an UUID5 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
-                                          - isbn: an ISBN10 or ISBN13 number string
-                                          like \"0321751043\" or \"978-0321751041\"
-                                          - isbn10: an ISBN10 number string like \"0321751043\"
-                                          - isbn13: an ISBN13 number string like \"978-0321751041\"
-                                          - creditcard: a credit card number defined
-                                          by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\\\d{3})\\\\d{11})$
-                                          with any non digit characters mixed in -
-                                          ssn: a U.S. social security number following
-                                          the regex ^\\\\d{3}[- ]?\\\\d{2}[- ]?\\\\d{4}$
-                                          - hexcolor: an hexadecimal color code like
-                                          \"#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
-                                          - rgbcolor: an RGB color code like rgb like
-                                          \"rgb(255,255,2559\" - byte: base64 encoded
-                                          binary data - password: any kind of string
-                                          - date: a date string like \"2006-01-02\"
-                                          as defined by full-date in RFC3339 - duration:
-                                          a duration string like \"22 ns\" as parsed
-                                          by Golang time.ParseDuration or compatible
-                                          with Scala duration format - datetime: a
-                                          date time string like \"2014-12-15T19:30:20.000Z\"
-                                          as defined by date-time in RFC3339."
-                                        type: string
-                                      id:
-                                        type: string
-                                      maxItems:
-                                        format: int64
-                                        type: integer
-                                      maxLength:
-                                        format: int64
-                                        type: integer
-                                      maxProperties:
-                                        format: int64
-                                        type: integer
-                                      maximum:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      minItems:
-                                        format: int64
-                                        type: integer
-                                      minLength:
-                                        format: int64
-                                        type: integer
-                                      minProperties:
-                                        format: int64
-                                        type: integer
-                                      minimum:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      multipleOf:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      nullable:
-                                        type: boolean
-                                      pattern:
-                                        type: string
-                                      title:
-                                        type: string
-                                      type:
-                                        type: string
-                                      uniqueItems:
-                                        type: boolean
-                                      x-descriptors:
-                                        description: The list of descriptors that
-                                          determine which UI components to use on
-                                          different views
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                  type: object
-                                required:
-                                  items:
-                                    type: string
-                                  type: array
-                                title:
-                                  type: string
-                                type:
-                                  type: string
-                              type: object
-                          type: object
-                        description: Types defines the schema of the data produced/consumed
-                          by the endpoint
-                        type: object
-                      uri:
-                        description: URI can alternatively be used to specify the
-                          (Camel) endpoint explicitly
-                        type: string
-                    type: object
-                  type:
-                    type: string
                 type: object
+                x-kubernetes-preserve-unknown-fields: true
               integration:
                 description: Integration is an optional integration used to specify
                   custom parameters
@@ -316,8 +93,10 @@ spec:
                     description: ErrorHandlerSpec respresents an integration error
                       handler to be used as default at runtime
                     properties:
-                      configuration:
-                        description: ErrorHandlerConfiguration --
+                      parameters:
+                        description: ErrorHandlerParameters is an unstructured object
+                          representing the configuration parameters available for
+                          an error handler
                         type: object
                         x-kubernetes-preserve-unknown-fields: true
                       type:
diff --git a/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_integrations.yaml b/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_integrations.yaml
index c838f1f..0b1b88a 100644
--- a/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_integrations.yaml
+++ b/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_integrations.yaml
@@ -92,8 +92,10 @@ spec:
                 description: ErrorHandlerSpec respresents an integration error handler
                   to be used as default at runtime
                 properties:
-                  configuration:
-                    description: ErrorHandlerConfiguration --
+                  parameters:
+                    description: ErrorHandlerParameters is an unstructured object
+                      representing the configuration parameters available for an error
+                      handler
                     type: object
                     x-kubernetes-preserve-unknown-fields: true
                   type:
diff --git a/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_kameletbindings.yaml b/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_kameletbindings.yaml
index 046549c..2b78d2f 100644
--- a/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_kameletbindings.yaml
+++ b/deploy/olm-catalog/camel-k-dev/1.4.0/camel.apache.org_kameletbindings.yaml
@@ -66,231 +66,8 @@ spec:
               errorHandler:
                 description: ErrorHandler is an optional handler called upon an error
                   occuring in the integration
-                properties:
-                  configuration:
-                    type: object
-                    x-kubernetes-preserve-unknown-fields: true
-                  endpoint:
-                    description: Endpoint represents a source/sink external entity
-                    properties:
-                      properties:
-                        description: Properties are a key value representation of
-                          endpoint properties
-                        type: object
-                        x-kubernetes-preserve-unknown-fields: true
-                      ref:
-                        description: Ref can be used to declare a Kubernetes resource
-                          as source/sink endpoint
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: 'If referring to a piece of an object instead
-                              of an entire object, this string should contain a valid
-                              JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container
-                              within a pod, this would take on a value like: "spec.containers{name}"
-                              (where "name" refers to the name of the container that
-                              triggered the event) or if no container name is specified
-                              "spec.containers[2]" (container with index 2 in this
-                              pod). This syntax is chosen only to have some well-defined
-                              way of referencing a part of an object. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            type: string
-                          kind:
-                            description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-                            type: string
-                          name:
-                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
-                            type: string
-                          namespace:
-                            description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
-                            type: string
-                          resourceVersion:
-                            description: 'Specific resourceVersion to which this reference
-                              is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
-                            type: string
-                          uid:
-                            description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
-                            type: string
-                        type: object
-                      types:
-                        additionalProperties:
-                          properties:
-                            mediaType:
-                              type: string
-                            schema:
-                              description: JSONSchemaProps is a JSON-Schema following
-                                Specification Draft 4 (http://json-schema.org/).
-                              properties:
-                                $schema:
-                                  description: JSONSchemaURL represents a schema url.
-                                  type: string
-                                description:
-                                  type: string
-                                example:
-                                  description: 'JSON represents any valid JSON value.
-                                    These types are supported: bool, int64, float64,
-                                    string, []interface{}, map[string]interface{}
-                                    and nil.'
-                                  x-kubernetes-preserve-unknown-fields: true
-                                externalDocs:
-                                  description: ExternalDocumentation allows referencing
-                                    an external resource for extended documentation.
-                                  properties:
-                                    description:
-                                      type: string
-                                    url:
-                                      type: string
-                                  type: object
-                                id:
-                                  type: string
-                                properties:
-                                  additionalProperties:
-                                    properties:
-                                      default:
-                                        description: default is a default value for
-                                          undefined object fields.
-                                        x-kubernetes-preserve-unknown-fields: true
-                                      description:
-                                        type: string
-                                      enum:
-                                        items:
-                                          description: 'JSON represents any valid
-                                            JSON value. These types are supported:
-                                            bool, int64, float64, string, []interface{},
-                                            map[string]interface{} and nil.'
-                                          x-kubernetes-preserve-unknown-fields: true
-                                        type: array
-                                      example:
-                                        description: 'JSON represents any valid JSON
-                                          value. These types are supported: bool,
-                                          int64, float64, string, []interface{}, map[string]interface{}
-                                          and nil.'
-                                        x-kubernetes-preserve-unknown-fields: true
-                                      exclusiveMaximum:
-                                        type: boolean
-                                      exclusiveMinimum:
-                                        type: boolean
-                                      format:
-                                        description: "format is an OpenAPI v3 format
-                                          string. Unknown formats are ignored. The
-                                          following formats are validated: \n - bsonobjectid:
-                                          a bson object ID, i.e. a 24 characters hex
-                                          string - uri: an URI as parsed by Golang
-                                          net/url.ParseRequestURI - email: an email
-                                          address as parsed by Golang net/mail.ParseAddress
-                                          - hostname: a valid representation for an
-                                          Internet host name, as defined by RFC 1034,
-                                          section 3.1 [RFC1034]. - ipv4: an IPv4 IP
-                                          as parsed by Golang net.ParseIP - ipv6:
-                                          an IPv6 IP as parsed by Golang net.ParseIP
-                                          - cidr: a CIDR as parsed by Golang net.ParseCIDR
-                                          - mac: a MAC address as parsed by Golang
-                                          net.ParseMAC - uuid: an UUID that allows
-                                          uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
-                                          - uuid3: an UUID3 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
-                                          - uuid4: an UUID4 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
-                                          - uuid5: an UUID5 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
-                                          - isbn: an ISBN10 or ISBN13 number string
-                                          like \"0321751043\" or \"978-0321751041\"
-                                          - isbn10: an ISBN10 number string like \"0321751043\"
-                                          - isbn13: an ISBN13 number string like \"978-0321751041\"
-                                          - creditcard: a credit card number defined
-                                          by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\\\d{3})\\\\d{11})$
-                                          with any non digit characters mixed in -
-                                          ssn: a U.S. social security number following
-                                          the regex ^\\\\d{3}[- ]?\\\\d{2}[- ]?\\\\d{4}$
-                                          - hexcolor: an hexadecimal color code like
-                                          \"#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
-                                          - rgbcolor: an RGB color code like rgb like
-                                          \"rgb(255,255,2559\" - byte: base64 encoded
-                                          binary data - password: any kind of string
-                                          - date: a date string like \"2006-01-02\"
-                                          as defined by full-date in RFC3339 - duration:
-                                          a duration string like \"22 ns\" as parsed
-                                          by Golang time.ParseDuration or compatible
-                                          with Scala duration format - datetime: a
-                                          date time string like \"2014-12-15T19:30:20.000Z\"
-                                          as defined by date-time in RFC3339."
-                                        type: string
-                                      id:
-                                        type: string
-                                      maxItems:
-                                        format: int64
-                                        type: integer
-                                      maxLength:
-                                        format: int64
-                                        type: integer
-                                      maxProperties:
-                                        format: int64
-                                        type: integer
-                                      maximum:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      minItems:
-                                        format: int64
-                                        type: integer
-                                      minLength:
-                                        format: int64
-                                        type: integer
-                                      minProperties:
-                                        format: int64
-                                        type: integer
-                                      minimum:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      multipleOf:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      nullable:
-                                        type: boolean
-                                      pattern:
-                                        type: string
-                                      title:
-                                        type: string
-                                      type:
-                                        type: string
-                                      uniqueItems:
-                                        type: boolean
-                                      x-descriptors:
-                                        description: The list of descriptors that
-                                          determine which UI components to use on
-                                          different views
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                  type: object
-                                required:
-                                  items:
-                                    type: string
-                                  type: array
-                                title:
-                                  type: string
-                                type:
-                                  type: string
-                              type: object
-                          type: object
-                        description: Types defines the schema of the data produced/consumed
-                          by the endpoint
-                        type: object
-                      uri:
-                        description: URI can alternatively be used to specify the
-                          (Camel) endpoint explicitly
-                        type: string
-                    type: object
-                  type:
-                    type: string
                 type: object
+                x-kubernetes-preserve-unknown-fields: true
               integration:
                 description: Integration is an optional integration used to specify
                   custom parameters
@@ -316,8 +93,10 @@ spec:
                     description: ErrorHandlerSpec respresents an integration error
                       handler to be used as default at runtime
                     properties:
-                      configuration:
-                        description: ErrorHandlerConfiguration --
+                      parameters:
+                        description: ErrorHandlerParameters is an unstructured object
+                          representing the configuration parameters available for
+                          an error handler
                         type: object
                         x-kubernetes-preserve-unknown-fields: true
                       type:
diff --git a/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml b/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml
index 457b173..5f62adc 100644
--- a/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml
+++ b/examples/kamelets/error-handler/kamelet-binding-error-handler.yaml
@@ -31,15 +31,15 @@ spec:
       apiVersion: camel.apache.org/v1alpha1
       name: log-sink
   errorHandler:
-    type: dead-letter-channel
-    endpoint:
-      ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1alpha1
-        name: error-handler
-      properties:
-        message: "ERROR!"
-    configuration:
-      maximumRedeliveries: 3
-      redeliveryDelay: 2000
+    dead-letter-channel:
+      endpoint:
+        ref:
+          kind: Kamelet
+          apiVersion: camel.apache.org/v1alpha1
+          name: error-handler
+        properties:
+          message: "ERROR!"
+      parameters:
+        maximumRedeliveries: 3
+        redeliveryDelay: 2000    
     
diff --git a/examples/kamelets/error-handler/readme.md b/examples/kamelets/error-handler/readme.md
index dc4d75b..42293cd 100644
--- a/examples/kamelets/error-handler/readme.md
+++ b/examples/kamelets/error-handler/readme.md
@@ -41,18 +41,21 @@ log-sink                Ready
 incremental-id-source   Ready
 ```
 ## Error Handler Kamelet Binding
-We can create a `KameletBinding` which is started by the _incremental-id-source_ `Kamelet` and log events to _log-sink_ `Kamelet`. As this will sporadically fail, we can configure an _errorHandler_ with the _error-handler_ `Kamelet` as **Dead Letter Channel**. We can declare it as in `kamelet-binding-error-handler.yaml` file:
+We can create a `KameletBinding` which is started by the _incremental-id-source_ `Kamelet` and log events to _log-sink_ `Kamelet`. As this will sporadically fail, we can configure an _errorHandler_ with the _error-handler_ `Kamelet` as **Dead Letter Channel**. We want to configure also some redelivery policies. We can declare it as in `kamelet-binding-error-handler.yaml` file:
 ```
 ...
   errorHandler:
-    type: dead-letter-channel
-    endpoint:
-      ref:
-        kind: Kamelet
-        apiVersion: camel.apache.org/v1alpha1
-        name: error-handler
-      properties:
-        message: "ERROR!"
+    dead-letter-channel:
+      endpoint:
+        ref:
+          kind: Kamelet
+          apiVersion: camel.apache.org/v1alpha1
+          name: error-handler
+        properties:
+          message: "ERROR!"
+      parameters:
+        maximumRedeliveries: 3
+        redeliveryDelay: 2000
 ```
 Execute the following command to start the `Integration`:
 ```
@@ -63,6 +66,6 @@ As soon as the `Integration` starts, it will log the events on the `ok` log chan
 [1] 2021-04-21 13:03:43,773 INFO  [sink] (Camel (camel-1) thread #0 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Producing message #8]
 [1] 2021-04-21 13:03:44,774 INFO  [sink] (Camel (camel-1) thread #0 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Producing message #9]
 [1] 2021-04-21 13:03:45,898 INFO  [error-sink] (Camel (camel-1) thread #0 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: String, Body: ERROR!]
-[1] 2021-04-21 13:03:46,775 INFO  [sink] (Camel (camel-1) thread #0 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Producing message #11]
+[1] 2021-04-21 13:09:46,775 INFO  [sink] (Camel (camel-1) thread #0 - timer://tick) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Producing message #11]
 ```
 This example is useful to guide you through the configuration of an error handler. In a production environment you will likely configure the error handler `Kamelet` pointing to a persistent queue.
\ No newline at end of file
diff --git a/helm/camel-k/crds/crd-integration.yaml b/helm/camel-k/crds/crd-integration.yaml
index c838f1f..0b1b88a 100644
--- a/helm/camel-k/crds/crd-integration.yaml
+++ b/helm/camel-k/crds/crd-integration.yaml
@@ -92,8 +92,10 @@ spec:
                 description: ErrorHandlerSpec respresents an integration error handler
                   to be used as default at runtime
                 properties:
-                  configuration:
-                    description: ErrorHandlerConfiguration --
+                  parameters:
+                    description: ErrorHandlerParameters is an unstructured object
+                      representing the configuration parameters available for an error
+                      handler
                     type: object
                     x-kubernetes-preserve-unknown-fields: true
                   type:
diff --git a/helm/camel-k/crds/crd-kamelet-binding.yaml b/helm/camel-k/crds/crd-kamelet-binding.yaml
index 046549c..2b78d2f 100644
--- a/helm/camel-k/crds/crd-kamelet-binding.yaml
+++ b/helm/camel-k/crds/crd-kamelet-binding.yaml
@@ -66,231 +66,8 @@ spec:
               errorHandler:
                 description: ErrorHandler is an optional handler called upon an error
                   occuring in the integration
-                properties:
-                  configuration:
-                    type: object
-                    x-kubernetes-preserve-unknown-fields: true
-                  endpoint:
-                    description: Endpoint represents a source/sink external entity
-                    properties:
-                      properties:
-                        description: Properties are a key value representation of
-                          endpoint properties
-                        type: object
-                        x-kubernetes-preserve-unknown-fields: true
-                      ref:
-                        description: Ref can be used to declare a Kubernetes resource
-                          as source/sink endpoint
-                        properties:
-                          apiVersion:
-                            description: API version of the referent.
-                            type: string
-                          fieldPath:
-                            description: 'If referring to a piece of an object instead
-                              of an entire object, this string should contain a valid
-                              JSON/Go field access statement, such as desiredState.manifest.containers[2].
-                              For example, if the object reference is to a container
-                              within a pod, this would take on a value like: "spec.containers{name}"
-                              (where "name" refers to the name of the container that
-                              triggered the event) or if no container name is specified
-                              "spec.containers[2]" (container with index 2 in this
-                              pod). This syntax is chosen only to have some well-defined
-                              way of referencing a part of an object. TODO: this design
-                              is not final and this field is subject to change in
-                              the future.'
-                            type: string
-                          kind:
-                            description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-                            type: string
-                          name:
-                            description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
-                            type: string
-                          namespace:
-                            description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
-                            type: string
-                          resourceVersion:
-                            description: 'Specific resourceVersion to which this reference
-                              is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency'
-                            type: string
-                          uid:
-                            description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids'
-                            type: string
-                        type: object
-                      types:
-                        additionalProperties:
-                          properties:
-                            mediaType:
-                              type: string
-                            schema:
-                              description: JSONSchemaProps is a JSON-Schema following
-                                Specification Draft 4 (http://json-schema.org/).
-                              properties:
-                                $schema:
-                                  description: JSONSchemaURL represents a schema url.
-                                  type: string
-                                description:
-                                  type: string
-                                example:
-                                  description: 'JSON represents any valid JSON value.
-                                    These types are supported: bool, int64, float64,
-                                    string, []interface{}, map[string]interface{}
-                                    and nil.'
-                                  x-kubernetes-preserve-unknown-fields: true
-                                externalDocs:
-                                  description: ExternalDocumentation allows referencing
-                                    an external resource for extended documentation.
-                                  properties:
-                                    description:
-                                      type: string
-                                    url:
-                                      type: string
-                                  type: object
-                                id:
-                                  type: string
-                                properties:
-                                  additionalProperties:
-                                    properties:
-                                      default:
-                                        description: default is a default value for
-                                          undefined object fields.
-                                        x-kubernetes-preserve-unknown-fields: true
-                                      description:
-                                        type: string
-                                      enum:
-                                        items:
-                                          description: 'JSON represents any valid
-                                            JSON value. These types are supported:
-                                            bool, int64, float64, string, []interface{},
-                                            map[string]interface{} and nil.'
-                                          x-kubernetes-preserve-unknown-fields: true
-                                        type: array
-                                      example:
-                                        description: 'JSON represents any valid JSON
-                                          value. These types are supported: bool,
-                                          int64, float64, string, []interface{}, map[string]interface{}
-                                          and nil.'
-                                        x-kubernetes-preserve-unknown-fields: true
-                                      exclusiveMaximum:
-                                        type: boolean
-                                      exclusiveMinimum:
-                                        type: boolean
-                                      format:
-                                        description: "format is an OpenAPI v3 format
-                                          string. Unknown formats are ignored. The
-                                          following formats are validated: \n - bsonobjectid:
-                                          a bson object ID, i.e. a 24 characters hex
-                                          string - uri: an URI as parsed by Golang
-                                          net/url.ParseRequestURI - email: an email
-                                          address as parsed by Golang net/mail.ParseAddress
-                                          - hostname: a valid representation for an
-                                          Internet host name, as defined by RFC 1034,
-                                          section 3.1 [RFC1034]. - ipv4: an IPv4 IP
-                                          as parsed by Golang net.ParseIP - ipv6:
-                                          an IPv6 IP as parsed by Golang net.ParseIP
-                                          - cidr: a CIDR as parsed by Golang net.ParseCIDR
-                                          - mac: a MAC address as parsed by Golang
-                                          net.ParseMAC - uuid: an UUID that allows
-                                          uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
-                                          - uuid3: an UUID3 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
-                                          - uuid4: an UUID4 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
-                                          - uuid5: an UUID5 that allows uppercase
-                                          defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
-                                          - isbn: an ISBN10 or ISBN13 number string
-                                          like \"0321751043\" or \"978-0321751041\"
-                                          - isbn10: an ISBN10 number string like \"0321751043\"
-                                          - isbn13: an ISBN13 number string like \"978-0321751041\"
-                                          - creditcard: a credit card number defined
-                                          by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\\\d{3})\\\\d{11})$
-                                          with any non digit characters mixed in -
-                                          ssn: a U.S. social security number following
-                                          the regex ^\\\\d{3}[- ]?\\\\d{2}[- ]?\\\\d{4}$
-                                          - hexcolor: an hexadecimal color code like
-                                          \"#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
-                                          - rgbcolor: an RGB color code like rgb like
-                                          \"rgb(255,255,2559\" - byte: base64 encoded
-                                          binary data - password: any kind of string
-                                          - date: a date string like \"2006-01-02\"
-                                          as defined by full-date in RFC3339 - duration:
-                                          a duration string like \"22 ns\" as parsed
-                                          by Golang time.ParseDuration or compatible
-                                          with Scala duration format - datetime: a
-                                          date time string like \"2014-12-15T19:30:20.000Z\"
-                                          as defined by date-time in RFC3339."
-                                        type: string
-                                      id:
-                                        type: string
-                                      maxItems:
-                                        format: int64
-                                        type: integer
-                                      maxLength:
-                                        format: int64
-                                        type: integer
-                                      maxProperties:
-                                        format: int64
-                                        type: integer
-                                      maximum:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      minItems:
-                                        format: int64
-                                        type: integer
-                                      minLength:
-                                        format: int64
-                                        type: integer
-                                      minProperties:
-                                        format: int64
-                                        type: integer
-                                      minimum:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      multipleOf:
-                                        description: A Number represents a JSON number
-                                          literal.
-                                        type: string
-                                      nullable:
-                                        type: boolean
-                                      pattern:
-                                        type: string
-                                      title:
-                                        type: string
-                                      type:
-                                        type: string
-                                      uniqueItems:
-                                        type: boolean
-                                      x-descriptors:
-                                        description: The list of descriptors that
-                                          determine which UI components to use on
-                                          different views
-                                        items:
-                                          type: string
-                                        type: array
-                                    type: object
-                                  type: object
-                                required:
-                                  items:
-                                    type: string
-                                  type: array
-                                title:
-                                  type: string
-                                type:
-                                  type: string
-                              type: object
-                          type: object
-                        description: Types defines the schema of the data produced/consumed
-                          by the endpoint
-                        type: object
-                      uri:
-                        description: URI can alternatively be used to specify the
-                          (Camel) endpoint explicitly
-                        type: string
-                    type: object
-                  type:
-                    type: string
                 type: object
+                x-kubernetes-preserve-unknown-fields: true
               integration:
                 description: Integration is an optional integration used to specify
                   custom parameters
@@ -316,8 +93,10 @@ spec:
                     description: ErrorHandlerSpec respresents an integration error
                       handler to be used as default at runtime
                     properties:
-                      configuration:
-                        description: ErrorHandlerConfiguration --
+                      parameters:
+                        description: ErrorHandlerParameters is an unstructured object
+                          representing the configuration parameters available for
+                          an error handler
                         type: object
                         x-kubernetes-preserve-unknown-fields: true
                       type:
diff --git a/pkg/apis/camel/v1/common_types.go b/pkg/apis/camel/v1/common_types.go
index e1b27e1..71774fc 100644
--- a/pkg/apis/camel/v1/common_types.go
+++ b/pkg/apis/camel/v1/common_types.go
@@ -164,13 +164,13 @@ type Flow struct {
 
 // ErrorHandlerSpec respresents an integration error handler to be used as default at runtime
 type ErrorHandlerSpec struct {
-	Type          string                     `json:"type,omitempty"`
-	URI           string                     `json:"uri,omitempty"`
-	Configuration *ErrorHandlerConfiguration `json:"configuration,omitempty"`
+	Type       string                  `json:"type,omitempty"`
+	URI        string                  `json:"uri,omitempty"`
+	Parameters *ErrorHandlerParameters `json:"parameters,omitempty"`
 }
 
-// ErrorHandlerConfiguration --
-type ErrorHandlerConfiguration struct {
+// ErrorHandlerParameters is an unstructured object representing the configuration parameters available for an error handler
+type ErrorHandlerParameters struct {
 	RawMessage `json:",inline"`
 }
 
diff --git a/pkg/apis/camel/v1alpha1/error_handler_types.go b/pkg/apis/camel/v1alpha1/error_handler_types.go
new file mode 100644
index 0000000..a6b15b1
--- /dev/null
+++ b/pkg/apis/camel/v1alpha1/error_handler_types.go
@@ -0,0 +1,111 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package v1alpha1
+
+import (
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+)
+
+// ErrorHandler represent an unstructured object for an error handler
+type ErrorHandler struct {
+	v1.RawMessage `json:",omitempty"`
+}
+
+// AbstractErrorHandler is a generic interface that represent any type of error handler specification
+type AbstractErrorHandler interface {
+	Type() ErrorHandlerType
+	Params() *ErrorHandlerProperties
+	Endpoint() *Endpoint
+}
+
+// ErrorHandlerNone --
+type ErrorHandlerNone struct {
+}
+
+// NewErrorHandlerNone represents a no (ignore) error handler type
+func NewErrorHandlerNone() ErrorHandlerNone {
+	return ErrorHandlerNone{}
+}
+
+// Type --
+func (e ErrorHandlerNone) Type() ErrorHandlerType {
+	return ErrorHandlerTypeNone
+}
+
+// Params --
+func (e ErrorHandlerNone) Params() *ErrorHandlerProperties {
+	return nil
+}
+
+// Endpoint --
+func (e ErrorHandlerNone) Endpoint() *Endpoint {
+	return nil
+}
+
+// ErrorHandlerLog represent a default (log) error handler type
+type ErrorHandlerLog struct {
+	Parameters *ErrorHandlerProperties `json:"parameters,omitempty"`
+}
+
+// Type --
+func (e ErrorHandlerLog) Type() ErrorHandlerType {
+	return ErrorHandlerTypeLog
+}
+
+// Params --
+func (e ErrorHandlerLog) Params() *ErrorHandlerProperties {
+	return e.Parameters
+}
+
+// Endpoint --
+func (e ErrorHandlerLog) Endpoint() *Endpoint {
+	return nil
+}
+
+// ErrorHandlerDeadLetterChannel represents a dead letter channel error handler type
+type ErrorHandlerDeadLetterChannel struct {
+	*ErrorHandlerLog
+	DLCEndpoint *Endpoint `json:"endpoint,omitempty"`
+}
+
+// Type --
+func (e ErrorHandlerDeadLetterChannel) Type() ErrorHandlerType {
+	return ErrorHandlerTypeDeadLetterChannel
+}
+
+// Params --
+func (e ErrorHandlerDeadLetterChannel) Params() *ErrorHandlerProperties {
+	return e.Parameters
+}
+
+// Endpoint --
+func (e ErrorHandlerDeadLetterChannel) Endpoint() *Endpoint {
+	return e.DLCEndpoint
+}
+
+// ErrorHandlerType --
+type ErrorHandlerType string
+
+const (
+	// ErrorHandlerTypeNone --
+	ErrorHandlerTypeNone ErrorHandlerType = "none"
+	// ErrorHandlerTypeLog --
+	ErrorHandlerTypeLog ErrorHandlerType = "log"
+	// ErrorHandlerTypeDeadLetterChannel --
+	ErrorHandlerTypeDeadLetterChannel ErrorHandlerType = "dead-letter-channel"
+)
diff --git a/pkg/apis/camel/v1alpha1/kamelet_binding_types.go b/pkg/apis/camel/v1alpha1/kamelet_binding_types.go
index 367692c..5a279e1 100644
--- a/pkg/apis/camel/v1alpha1/kamelet_binding_types.go
+++ b/pkg/apis/camel/v1alpha1/kamelet_binding_types.go
@@ -38,20 +38,6 @@ type KameletBindingSpec struct {
 	Steps []Endpoint `json:"steps,omitempty"`
 }
 
-type ErrorHandler struct {
-	Endpoint      Endpoint                `json:"endpoint,omitempty"`
-	Type          ErrorHandlerType        `json:"type,omitempty"`
-	Configuration *ErrorHandlerProperties `json:"configuration,omitempty"`
-}
-
-type ErrorHandlerType string
-
-const (
-	ErrorHandlerTypeNone              ErrorHandlerType = "no"
-	ErrorHandlerTypeDefault           ErrorHandlerType = "default"
-	ErrorHandlerTypeDeadLetterChannel ErrorHandlerType = "dead-letter-channel"
-)
-
 // Endpoint represents a source/sink external entity
 type Endpoint struct {
 	// Ref can be used to declare a Kubernetes resource as source/sink endpoint
diff --git a/pkg/controller/kameletbinding/common.go b/pkg/controller/kameletbinding/common.go
index c4d4641..d434000 100644
--- a/pkg/controller/kameletbinding/common.go
+++ b/pkg/controller/kameletbinding/common.go
@@ -79,22 +79,10 @@ func createIntegrationFor(ctx context.Context, c client.Client, kameletbinding *
 	if err != nil {
 		return nil, errors.Wrap(err, "could not determine sink URI")
 	}
-	var errorHandler *bindings.Binding
-	if kameletbinding.Spec.ErrorHandler.Type != "" {
-		errorHandlerURI := ""
-		if kameletbinding.Spec.ErrorHandler.Endpoint.Ref != nil || kameletbinding.Spec.ErrorHandler.Endpoint.URI != nil {
-			errorHandler, err = bindings.Translate(bindingContext, bindings.EndpointContext{Type: v1alpha1.EndpointTypeErrorHandler}, kameletbinding.Spec.ErrorHandler.Endpoint)
-			if err != nil {
-				return nil, errors.Wrap(err, "could not determine error handler URI")
-			}
-
-			errorHandlerURI = errorHandler.URI
-		}
-
-		err = setIntegrationErrorHandler(&it.Spec, errorHandlerURI, kameletbinding.Spec.ErrorHandler)
-		if err != nil {
-			return nil, errors.Wrap(err, "could not set integration error handler")
-		}
+	// error handler is optional
+	errorHandler, err := maybeErrorHandler(kameletbinding.Spec.ErrorHandler, bindingContext, &it.Spec)
+	if err != nil {
+		return nil, errors.Wrap(err, "could not determine error handler")
 	}
 
 	steps := make([]*bindings.Binding, 0, len(kameletbinding.Spec.Steps))
@@ -164,19 +152,6 @@ func createIntegrationFor(ctx context.Context, c client.Client, kameletbinding *
 	return &it, nil
 }
 
-func setIntegrationErrorHandler(it *v1.IntegrationSpec, errorHandlerURI string, errorHandlerSpec v1alpha1.ErrorHandler) error {
-	it.ErrorHandler = v1.ErrorHandlerSpec{
-		Type:          string(errorHandlerSpec.Type),
-		Configuration: &v1.ErrorHandlerConfiguration{errorHandlerSpec.Configuration.RawMessage},
-	}
-
-	if errorHandlerURI != "" {
-		it.ErrorHandler.URI = errorHandlerURI
-	}
-
-	return nil
-}
-
 func determineProfile(ctx context.Context, c client.Client, binding *v1alpha1.KameletBinding) (v1.TraitProfile, error) {
 	if binding.Spec.Integration != nil && binding.Spec.Integration.Profile != "" {
 		return binding.Spec.Integration.Profile, nil
diff --git a/pkg/controller/kameletbinding/error_handler.go b/pkg/controller/kameletbinding/error_handler.go
new file mode 100644
index 0000000..90ba3cc
--- /dev/null
+++ b/pkg/controller/kameletbinding/error_handler.go
@@ -0,0 +1,102 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one or more
+contributor license agreements.  See the NOTICE file distributed with
+this work for additional information regarding copyright ownership.
+The ASF licenses this file to You under the Apache License, Version 2.0
+(the "License"); you may not use this file except in compliance with
+the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package kameletbinding
+
+import (
+	"encoding/json"
+
+	v1 "github.com/apache/camel-k/pkg/apis/camel/v1"
+	"github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
+	"github.com/apache/camel-k/pkg/util/bindings"
+	"github.com/pkg/errors"
+)
+
+func maybeErrorHandler(errHandlConf v1alpha1.ErrorHandler, bindingContext bindings.BindingContext, itSpec *v1.IntegrationSpec) (*bindings.Binding, error) {
+	var errorHandler *bindings.Binding
+	if errHandlConf.RawMessage != nil {
+		errorHandlerSpec, err := parseErrorHandler(errHandlConf.RawMessage)
+		if err != nil {
+			return nil, errors.Wrap(err, "could not parse error handler")
+		}
+		errorHandlerURI := ""
+		if errorHandlerSpec.Type() == v1alpha1.ErrorHandlerTypeDeadLetterChannel {
+			errorHandler, err = bindings.Translate(bindingContext, bindings.EndpointContext{Type: v1alpha1.EndpointTypeErrorHandler}, *errorHandlerSpec.Endpoint())
+			if err != nil {
+				return nil, errors.Wrap(err, "could not determine error handler URI")
+			}
+
+			errorHandlerURI = errorHandler.URI
+		}
+
+		err = setIntegrationErrorHandler(itSpec, errorHandlerURI, errorHandlerSpec)
+		if err != nil {
+			return nil, errors.Wrap(err, "could not set integration error handler")
+		}
+
+		return errorHandler, nil
+	}
+	return nil, nil
+}
+
+func parseErrorHandler(rawMessage v1.RawMessage) (v1alpha1.AbstractErrorHandler, error) {
+	var properties map[v1alpha1.ErrorHandlerType]v1.RawMessage
+	err := json.Unmarshal(rawMessage, &properties)
+	if err != nil {
+		return nil, err
+	}
+	if len(properties) > 1 {
+		return nil, errors.Errorf("You must provide just 1 error handler, provided %d", len(properties))
+	}
+
+	for errHandlType, errHandlValue := range properties {
+		var dst v1alpha1.AbstractErrorHandler
+		switch errHandlType {
+		case v1alpha1.ErrorHandlerTypeNone:
+			dst = new(v1alpha1.ErrorHandlerNone)
+		case v1alpha1.ErrorHandlerTypeLog:
+			dst = new(v1alpha1.ErrorHandlerLog)
+		case v1alpha1.ErrorHandlerTypeDeadLetterChannel:
+			dst = new(v1alpha1.ErrorHandlerDeadLetterChannel)
+		default:
+			return nil, errors.Errorf("Unknown error type %s, supported error types are: none, log, dead-letter-channel", errHandlType)
+		}
+
+		err := json.Unmarshal(errHandlValue, dst)
+		if err != nil {
+			return nil, err
+		}
+
+		return dst, nil
+	}
+
+	return nil, errors.New("You must provide any supported error handler (none, log, dead-letter-channel)")
+}
+
+func setIntegrationErrorHandler(it *v1.IntegrationSpec, errorHandlerURI string, errorHandlerSpec v1alpha1.AbstractErrorHandler) error {
+	it.ErrorHandler = v1.ErrorHandlerSpec{
+		Type: string(errorHandlerSpec.Type()),
+	}
+	if errorHandlerSpec.Params() != nil {
+		it.ErrorHandler.Parameters = &v1.ErrorHandlerParameters{errorHandlerSpec.Params().RawMessage}
+	}
+	if errorHandlerURI != "" {
+		it.ErrorHandler.URI = errorHandlerURI
+	}
+
+	return nil
+}
diff --git a/pkg/trait/error_handler.go b/pkg/trait/error_handler.go
index eadaa70..e82dcf9 100644
--- a/pkg/trait/error_handler.go
+++ b/pkg/trait/error_handler.go
@@ -107,17 +107,17 @@ func addErrorHandlerAsSource(e *Environment) error {
 
 func parseErrorHandler(errorHandlerSpec v1.ErrorHandlerSpec) (string, error) {
 	switch errorHandlerSpec.Type {
-	case "no":
+	case "none":
 		return `errorHandler(noErrorHandler());`, nil
-	case "default":
-		errorHandlerConfiguration, err := parseErrorHandlerConfiguration(errorHandlerSpec.Configuration)
+	case "log":
+		errorHandlerConfiguration, err := parseErrorHandlerConfiguration(errorHandlerSpec.Parameters)
 		if err != nil {
 			return "", err
 		}
 
 		return fmt.Sprintf(`errorHandler(defaultErrorHandler()%v);`, errorHandlerConfiguration), nil
 	case "dead-letter-channel":
-		errorHandlerConfiguration, err := parseErrorHandlerConfiguration(errorHandlerSpec.Configuration)
+		errorHandlerConfiguration, err := parseErrorHandlerConfiguration(errorHandlerSpec.Parameters)
 		if err != nil {
 			return "", err
 		}
@@ -128,7 +128,7 @@ func parseErrorHandler(errorHandlerSpec v1.ErrorHandlerSpec) (string, error) {
 	return "", fmt.Errorf("Cannot recognize any error handler of type %s", errorHandlerSpec.Type)
 }
 
-func parseErrorHandlerConfiguration(conf *v1.ErrorHandlerConfiguration) (string, error) {
+func parseErrorHandlerConfiguration(conf *v1.ErrorHandlerParameters) (string, error) {
 	javaPropertiesBuilder := ""
 	var properties map[string]interface{}
 	err := json.Unmarshal(conf.RawMessage, &properties)