diff --git a/docs/modules/ROOT/assets/images/kamelets/resolve-pojo-schema-action.svg b/docs/modules/ROOT/assets/images/kamelets/resolve-pojo-schema-action.svg new file mode 100644 index 000000000..fa06352da --- /dev/null +++ b/docs/modules/ROOT/assets/images/kamelets/resolve-pojo-schema-action.svg @@ -0,0 +1,59 @@ + + + + + + image/svg+xml + + + + + + + + + + diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index c90960bd9..e5c9f3fa7 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -95,6 +95,7 @@ * xref:ROOT:protobuf-serialize-action.adoc[image:kamelets/protobuf-serialize-action.svg[] Protobuf Serialize Action] * xref:ROOT:regex-router-action.adoc[image:kamelets/regex-router-action.svg[] Regex Router Action] * xref:ROOT:replace-field-action.adoc[image:kamelets/replace-field-action.svg[] Replace Field Action] +* xref:ROOT:resolve-pojo-schema-action.adoc[image:kamelets/resolve-pojo-schema-action.svg[] Resolve Schema Action] * xref:ROOT:salesforce-create-sink.adoc[image:kamelets/salesforce-create-sink.svg[] Salesforce Create Sink] * xref:ROOT:salesforce-delete-sink.adoc[image:kamelets/salesforce-delete-sink.svg[] Salesforce Delete Sink] * xref:ROOT:salesforce-source.adoc[image:kamelets/salesforce-source.svg[] Salesforce Source] diff --git a/docs/modules/ROOT/pages/resolve-pojo-schema-action.adoc b/docs/modules/ROOT/pages/resolve-pojo-schema-action.adoc new file mode 100644 index 000000000..d504db0cd --- /dev/null +++ b/docs/modules/ROOT/pages/resolve-pojo-schema-action.adoc @@ -0,0 +1,159 @@ +// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT + += image:kamelets/resolve-pojo-schema-action.svg[] Resolve Schema Action + +*Provided by: "Red Hat"* + +Resolves schema from given mime type and payload. Sets the resolved schema, the schema type and its content class as properties for later reference. + +== Configuration Options + +The following table summarizes the configuration options available for the `resolve-pojo-schema-action` Kamelet: +[width="100%",cols="2,^2,3,^2,^2,^3",options="header"] +|=== +| Property| Name| Description| Type| Default| Example +| contentClass| Content Class| Type information of the content object. Fully qualified class name.| string| | `"org.apache.camel.content.Foo"` +| mimeType| Mime Type| The mime type to determine the schema resolver implementation that should perform the operation.| string| `"application/json"`| `"application/json"` +| schema| Schema| Optional schema content (as single-line, using JSON format).| string| | +| targetMimeType| Target Mime Type| Additional mime type information used to determine the schema resolver. Usually only used in combination with mime type "application/x-java-object"| string| | `"application/json"` +|=== + +NOTE: Fields marked with an asterisk ({empty}*) are mandatory. + + +== Dependencies + +At runtime, the `resolve-pojo-schema-action` Kamelet relies upon the presence of the following dependencies: + +- mvn:org.apache.camel.kamelets:camel-kamelets-utils:2.3.0 +- camel:kamelet +- camel:core +- camel:jackson-avro +- camel:jackson-protobuf + +== Usage + +This section describes how you can use the `resolve-pojo-schema-action`. + +=== Knative Action + +You can use the `resolve-pojo-schema-action` Kamelet as an intermediate step in a Knative binding. + +.resolve-pojo-schema-action-binding.yaml +[source,yaml] +---- +apiVersion: camel.apache.org/v1 +kind: KameletBinding +metadata: + name: resolve-pojo-schema-action-binding +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + message: "Hello" + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + sink: + ref: + kind: Channel + apiVersion: messaging.knative.dev/v1 + name: mychannel + +---- + +==== *Prerequisite* + +Make sure you have *"Red Hat Integration - Camel K"* installed into the OpenShift cluster you're connected to. + +==== *Procedure for using the cluster CLI* + +. Save the `resolve-pojo-schema-action-binding.yaml` file to your local drive, and then edit it as needed for your configuration. + +. Run the action by using the following command: ++ +[source,shell] +---- +oc apply -f resolve-pojo-schema-action-binding.yaml +---- + +==== *Procedure for using the Kamel CLI* + +Configure and run the action by using the following command: + +[source,shell] +---- +kamel bind timer-source?message=Hello --step resolve-pojo-schema-action channel:mychannel +---- + +This command creates the KameletBinding in the current namespace on the cluster. + +=== Kafka Action + +You can use the `resolve-pojo-schema-action` Kamelet as an intermediate step in a Kafka binding. + +.resolve-pojo-schema-action-binding.yaml +[source,yaml] +---- +apiVersion: camel.apache.org/v1 +kind: KameletBinding +metadata: + name: resolve-pojo-schema-action-binding +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + message: "Hello" + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + sink: + ref: + kind: KafkaTopic + apiVersion: kafka.strimzi.io/v1beta1 + name: my-topic + +---- + +==== *Prerequisites* + +Ensure that you've installed the *AMQ Streams* operator in your OpenShift cluster and created a topic named `my-topic` in the current namespace. +Make also sure you have *"Red Hat Integration - Camel K"* installed into the OpenShift cluster you're connected to. + +==== *Procedure for using the cluster CLI* + +. Save the `resolve-pojo-schema-action-binding.yaml` file to your local drive, and then edit it as needed for your configuration. + +. Run the action by using the following command: ++ +[source,shell] +---- +oc apply -f resolve-pojo-schema-action-binding.yaml +---- + +==== *Procedure for using the Kamel CLI* + +Configure and run the action by using the following command: + +[source,shell] +---- +kamel bind timer-source?message=Hello --step resolve-pojo-schema-action kafka.strimzi.io/v1beta1:KafkaTopic:my-topic +---- + +This command creates the KameletBinding in the current namespace on the cluster. + +== Kamelet source file + +https://github.com/openshift-integration/kamelet-catalog/blob/main/resolve-pojo-schema-action.kamelet.yaml + +// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT diff --git a/library/camel-kamelets-catalog/src/main/resources/kamelets/resolve-pojo-schema-action.kamelet.yaml b/library/camel-kamelets-catalog/src/main/resources/kamelets/resolve-pojo-schema-action.kamelet.yaml new file mode 100644 index 000000000..17e963160 --- /dev/null +++ b/library/camel-kamelets-catalog/src/main/resources/kamelets/resolve-pojo-schema-action.kamelet.yaml @@ -0,0 +1,59 @@ +apiVersion: camel.apache.org/v1 +kind: Kamelet +metadata: + name: resolve-pojo-schema-action + annotations: + camel.apache.org/kamelet.support.level: "Preview" + camel.apache.org/catalog.version: "2.3.0" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmlld0JveD0iMCAtMjU2IDE3OTIgMTc5MiIKICAgaWQ9InN2ZzMwMjUiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40OC4zLjEgcjk4ODYiCiAgIHdpZHRoPSIxMDAlIgogICBoZWlnaHQ9IjEwMCUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvZ19mb250X2F3ZXNvbWUuc3ZnIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEzMDM1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzAzMyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI0ODAiCiAgICAgaWQ9Im5hbWVkdmlldzMwMzEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMTMxNjk2NDMiCiAgICAgaW5rc2NhcGU6Y3g9Ijg5NiIKICAgICBpbmtzY2FwZTpjeT0iODk2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzMwMjUiIC8+CiAgPGcKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwxMjEuNDkxNTMsMTI4NS40MjM3KSIKICAgICBpZD0iZzMwMjciPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTAyNCw2NDAgcSAwLDEwNiAtNzUsMTgxIC03NSw3NSAtMTgxLDc1IC0xMDYsMCAtMTgxLC03NSAtNzUsLTc1IC03NSwtMTgxIDAsLTEwNiA3NSwtMTgxIDc1LC03NSAxODEsLTc1IDEwNiwwIDE4MSw3NSA3NSw3NSA3NSwxODEgeiBtIDUxMiwxMDkgViA1MjcgcSAwLC0xMiAtOCwtMjMgLTgsLTExIC0yMCwtMTMgbCAtMTg1LC0yOCBxIC0xOSwtNTQgLTM5LC05MSAzNSwtNTAgMTA3LC0xMzggMTAsLTEyIDEwLC0yNSAwLC0xMyAtOSwtMjMgLTI3LC0zNyAtOTksLTEwOCAtNzIsLTcxIC05NCwtNzEgLTEyLDAgLTI2LDkgbCAtMTM4LDEwOCBxIC00NCwtMjMgLTkxLC0zOCAtMTYsLTEzNiAtMjksLTE4NiAtNywtMjggLTM2LC0yOCBIIDY1NyBxIC0xNCwwIC0yNC41LDguNSBRIDYyMiwtMTExIDYyMSwtOTggTCA1OTMsODYgcSAtNDksMTYgLTkwLDM3IEwgMzYyLDE2IFEgMzUyLDcgMzM3LDcgMzIzLDcgMzEyLDE4IDE4NiwxMzIgMTQ3LDE4NiBxIC03LDEwIC03LDIzIDAsMTIgOCwyMyAxNSwyMSA1MSw2Ni41IDM2LDQ1LjUgNTQsNzAuNSAtMjcsNTAgLTQxLDk5IEwgMjksNDk1IFEgMTYsNDk3IDgsNTA3LjUgMCw1MTggMCw1MzEgdiAyMjIgcSAwLDEyIDgsMjMgOCwxMSAxOSwxMyBsIDE4NiwyOCBxIDE0LDQ2IDM5LDkyIC00MCw1NyAtMTA3LDEzOCAtMTAsMTIgLTEwLDI0IDAsMTAgOSwyMyAyNiwzNiA5OC41LDEwNy41IDcyLjUsNzEuNSA5NC41LDcxLjUgMTMsMCAyNiwtMTAgbCAxMzgsLTEwNyBxIDQ0LDIzIDkxLDM4IDE2LDEzNiAyOSwxODYgNywyOCAzNiwyOCBoIDIyMiBxIDE0LDAgMjQuNSwtOC41IFEgOTE0LDEzOTEgOTE1LDEzNzggbCAyOCwtMTg0IHEgNDksLTE2IDkwLC0zNyBsIDE0MiwxMDcgcSA5LDkgMjQsOSAxMywwIDI1LC0xMCAxMjksLTExOSAxNjUsLTE3MCA3LC04IDcsLTIyIDAsLTEyIC04LC0yMyAtMTUsLTIxIC01MSwtNjYuNSAtMzYsLTQ1LjUgLTU0LC03MC41IDI2LC01MCA0MSwtOTggbCAxODMsLTI4IHEgMTMsLTIgMjEsLTEyLjUgOCwtMTAuNSA4LC0yMy41IHoiCiAgICAgICBpZD0icGF0aDMwMjkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6Y3VycmVudENvbG9yIiAvPgogIDwvZz4KPC9zdmc+Cg==" + camel.apache.org/provider: "Red Hat" + camel.apache.org/kamelet.group: "Actions" + camel.apache.org/kamelet.namespace: "Transformation" + labels: + camel.apache.org/kamelet.type: "action" +spec: + definition: + title: "Resolve Schema Action" + description: "Resolves schema from given mime type and payload. Sets the resolved schema, the schema type and its content class as properties for later reference." + type: object + properties: + mimeType: + title: Mime Type + description: The mime type to determine the schema resolver implementation that should perform the operation. + type: string + default: "application/json" + example: "application/json" + schema: + title: Schema + description: Optional schema content (as single-line, using JSON format). + type: string + contentClass: + title: Content Class + description: Type information of the content object. Fully qualified class name. + type: string + example: "org.apache.camel.content.Foo" + targetMimeType: + title: Target Mime Type + description: Additional mime type information used to determine the schema resolver. Usually only used in combination with mime type "application/x-java-object" + type: string + example: "application/json" + dependencies: + - "mvn:org.apache.camel.kamelets:camel-kamelets-utils:2.3.0" + - "camel:kamelet" + - "camel:core" + - "camel:jackson-avro" + - "camel:jackson-protobuf" + template: + beans: + - name: schemaResolver + type: "#class:org.apache.camel.kamelets.utils.format.schema.DelegatingSchemaResolver" + properties: + mimeType: '{{mimeType}}' + schema: '{{schema:}}' + contentClass: '{{contentClass:}}' + targetMimeType: '{{targetMimeType:}}' + from: + uri: "kamelet:source" + steps: + - process: + ref: "{{schemaResolver}}" diff --git a/resolve-pojo-schema-action.kamelet.yaml b/resolve-pojo-schema-action.kamelet.yaml new file mode 100644 index 000000000..17e963160 --- /dev/null +++ b/resolve-pojo-schema-action.kamelet.yaml @@ -0,0 +1,59 @@ +apiVersion: camel.apache.org/v1 +kind: Kamelet +metadata: + name: resolve-pojo-schema-action + annotations: + camel.apache.org/kamelet.support.level: "Preview" + camel.apache.org/catalog.version: "2.3.0" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmlld0JveD0iMCAtMjU2IDE3OTIgMTc5MiIKICAgaWQ9InN2ZzMwMjUiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40OC4zLjEgcjk4ODYiCiAgIHdpZHRoPSIxMDAlIgogICBoZWlnaHQ9IjEwMCUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvZ19mb250X2F3ZXNvbWUuc3ZnIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEzMDM1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzAzMyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI0ODAiCiAgICAgaWQ9Im5hbWVkdmlldzMwMzEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMTMxNjk2NDMiCiAgICAgaW5rc2NhcGU6Y3g9Ijg5NiIKICAgICBpbmtzY2FwZTpjeT0iODk2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzMwMjUiIC8+CiAgPGcKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwxMjEuNDkxNTMsMTI4NS40MjM3KSIKICAgICBpZD0iZzMwMjciPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTAyNCw2NDAgcSAwLDEwNiAtNzUsMTgxIC03NSw3NSAtMTgxLDc1IC0xMDYsMCAtMTgxLC03NSAtNzUsLTc1IC03NSwtMTgxIDAsLTEwNiA3NSwtMTgxIDc1LC03NSAxODEsLTc1IDEwNiwwIDE4MSw3NSA3NSw3NSA3NSwxODEgeiBtIDUxMiwxMDkgViA1MjcgcSAwLC0xMiAtOCwtMjMgLTgsLTExIC0yMCwtMTMgbCAtMTg1LC0yOCBxIC0xOSwtNTQgLTM5LC05MSAzNSwtNTAgMTA3LC0xMzggMTAsLTEyIDEwLC0yNSAwLC0xMyAtOSwtMjMgLTI3LC0zNyAtOTksLTEwOCAtNzIsLTcxIC05NCwtNzEgLTEyLDAgLTI2LDkgbCAtMTM4LDEwOCBxIC00NCwtMjMgLTkxLC0zOCAtMTYsLTEzNiAtMjksLTE4NiAtNywtMjggLTM2LC0yOCBIIDY1NyBxIC0xNCwwIC0yNC41LDguNSBRIDYyMiwtMTExIDYyMSwtOTggTCA1OTMsODYgcSAtNDksMTYgLTkwLDM3IEwgMzYyLDE2IFEgMzUyLDcgMzM3LDcgMzIzLDcgMzEyLDE4IDE4NiwxMzIgMTQ3LDE4NiBxIC03LDEwIC03LDIzIDAsMTIgOCwyMyAxNSwyMSA1MSw2Ni41IDM2LDQ1LjUgNTQsNzAuNSAtMjcsNTAgLTQxLDk5IEwgMjksNDk1IFEgMTYsNDk3IDgsNTA3LjUgMCw1MTggMCw1MzEgdiAyMjIgcSAwLDEyIDgsMjMgOCwxMSAxOSwxMyBsIDE4NiwyOCBxIDE0LDQ2IDM5LDkyIC00MCw1NyAtMTA3LDEzOCAtMTAsMTIgLTEwLDI0IDAsMTAgOSwyMyAyNiwzNiA5OC41LDEwNy41IDcyLjUsNzEuNSA5NC41LDcxLjUgMTMsMCAyNiwtMTAgbCAxMzgsLTEwNyBxIDQ0LDIzIDkxLDM4IDE2LDEzNiAyOSwxODYgNywyOCAzNiwyOCBoIDIyMiBxIDE0LDAgMjQuNSwtOC41IFEgOTE0LDEzOTEgOTE1LDEzNzggbCAyOCwtMTg0IHEgNDksLTE2IDkwLC0zNyBsIDE0MiwxMDcgcSA5LDkgMjQsOSAxMywwIDI1LC0xMCAxMjksLTExOSAxNjUsLTE3MCA3LC04IDcsLTIyIDAsLTEyIC04LC0yMyAtMTUsLTIxIC01MSwtNjYuNSAtMzYsLTQ1LjUgLTU0LC03MC41IDI2LC01MCA0MSwtOTggbCAxODMsLTI4IHEgMTMsLTIgMjEsLTEyLjUgOCwtMTAuNSA4LC0yMy41IHoiCiAgICAgICBpZD0icGF0aDMwMjkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6Y3VycmVudENvbG9yIiAvPgogIDwvZz4KPC9zdmc+Cg==" + camel.apache.org/provider: "Red Hat" + camel.apache.org/kamelet.group: "Actions" + camel.apache.org/kamelet.namespace: "Transformation" + labels: + camel.apache.org/kamelet.type: "action" +spec: + definition: + title: "Resolve Schema Action" + description: "Resolves schema from given mime type and payload. Sets the resolved schema, the schema type and its content class as properties for later reference." + type: object + properties: + mimeType: + title: Mime Type + description: The mime type to determine the schema resolver implementation that should perform the operation. + type: string + default: "application/json" + example: "application/json" + schema: + title: Schema + description: Optional schema content (as single-line, using JSON format). + type: string + contentClass: + title: Content Class + description: Type information of the content object. Fully qualified class name. + type: string + example: "org.apache.camel.content.Foo" + targetMimeType: + title: Target Mime Type + description: Additional mime type information used to determine the schema resolver. Usually only used in combination with mime type "application/x-java-object" + type: string + example: "application/json" + dependencies: + - "mvn:org.apache.camel.kamelets:camel-kamelets-utils:2.3.0" + - "camel:kamelet" + - "camel:core" + - "camel:jackson-avro" + - "camel:jackson-protobuf" + template: + beans: + - name: schemaResolver + type: "#class:org.apache.camel.kamelets.utils.format.schema.DelegatingSchemaResolver" + properties: + mimeType: '{{mimeType}}' + schema: '{{schema:}}' + contentClass: '{{contentClass:}}' + targetMimeType: '{{targetMimeType:}}' + from: + uri: "kamelet:source" + steps: + - process: + ref: "{{schemaResolver}}" diff --git a/templates/bindings/camel-k/resolve-pojo-schema-action-binding.yaml b/templates/bindings/camel-k/resolve-pojo-schema-action-binding.yaml new file mode 100644 index 000000000..7a1ba5f67 --- /dev/null +++ b/templates/bindings/camel-k/resolve-pojo-schema-action-binding.yaml @@ -0,0 +1,22 @@ +apiVersion: camel.apache.org/v1 +kind: KameletBinding +metadata: + name: resolve-pojo-schema-action-binding +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + message: "Hello" + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + sink: + ref: + kind: KafkaTopic + apiVersion: kafka.strimzi.io/v1beta1 + name: my-topic diff --git a/templates/bindings/core/resolve-pojo-schema-action-binding.yaml b/templates/bindings/core/resolve-pojo-schema-action-binding.yaml new file mode 100644 index 000000000..be51a403b --- /dev/null +++ b/templates/bindings/core/resolve-pojo-schema-action-binding.yaml @@ -0,0 +1,11 @@ +- route: + from: + uri: "kamelet:timer-source" + parameters: + period: 1000 + message: "{ \"foo\": \"John\"}" + steps: + - to: + uri: "kamelet:resolve-pojo-schema-action" + - to: + uri: "log:info" diff --git a/test/avro/README.md b/test/avro/README.md new file mode 100644 index 000000000..6825c4def --- /dev/null +++ b/test/avro/README.md @@ -0,0 +1,42 @@ +# Avro serialization/deserialization + +This test verifies the Avro serialization/deserialization actions + +## Objectives + +The test verifies the proper Avro serialization and deserialization of Avro. + +The test uses two Pipes that interact with each other. The first binding `avro-binary-source-pipe` periodically creates a test data event as Json and applies the `avro/binary` data type using the schema in [User.avsc](User.avsc). + +The binary Avro data is then sent to a Http webhook sink that references a Http endpoint that is provided by the 2nd binding `avro-deserialize-pipe`. The `avro-deserialize-pipe` binding provides the Http service and deserializes the binary Avro data using the same User schema. The deserialized data is printed to the log output. + +The test starts both Pipes and is able to verify the proper log output as an expected outcome. + +### YAKS Test + +The test performs the following high level steps: + +*Avro data type feature* +- Create test data based on the User.avsc Avro schema +- Load and run the `avro-deserialize-pipe` Pipe +- Load and run the `avro-binary-source-pipe` Pipe +- Verify that the bindings do interact with each other and the proper test data is logged in the binding output + +## Installation + +The test assumes that you have [JBang](https://www.jbang.dev/) installed and the YAKS CLI setup locally. + +You can review the installation steps for the tooling in the documentation: + +- [JBang](https://www.jbang.dev/documentation/guide/latest/installation.html) +- [Install YAKS CLI](https://github.com/citrusframework/yaks#installation) + +## Run the tests with JBang + +To run tests with URI based configuration: + +```shell script +$ yaks run --local test/avro/avro-serdes-action.feature +``` + +You will be provided with the test log output and the test results. diff --git a/test/avro/User.avsc b/test/avro/User.avsc new file mode 100644 index 000000000..a2d21f3b3 --- /dev/null +++ b/test/avro/User.avsc @@ -0,0 +1,23 @@ +{ + "name": "User", + "type": "record", + "namespace": "demo.kamelets", + "fields": [ + { + "name": "id", + "type": "string" + }, + { + "name": "firstname", + "type": "string" + }, + { + "name": "lastname", + "type": "string" + }, + { + "name": "age", + "type": "int" + }, + ] +} diff --git a/test/avro/avro-binary-source-pipe.yaml b/test/avro/avro-binary-source-pipe.yaml new file mode 100644 index 000000000..ff06479c3 --- /dev/null +++ b/test/avro/avro-binary-source-pipe.yaml @@ -0,0 +1,39 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: avro-binary-source-pipe +spec: + integration: + dependencies: + - "camel:jackson-avro" + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + period: 10000 + contentType: application/json + message: > + ${user} + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: json-deserialize-action + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + properties: + mimeType: "avro/binary" + schema: > + { "name": "User", "type": "record", "namespace": "demo.kamelets", "fields": [{ "name": "id", "type": "string" }, { "name": "firstname", "type": "string" }, { "name": "lastname", "type": "string" }, { "name": "age", "type": "int" }] } + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: data-type-action + properties: + format: "avro-binary" + sink: + uri: yaks:resolveURL('avro-x-struct-sink-pipe')/user diff --git a/test/avro/avro-data-type.feature b/test/avro/avro-data-type.feature new file mode 100644 index 000000000..b7f684e42 --- /dev/null +++ b/test/avro/avro-data-type.feature @@ -0,0 +1,22 @@ +Feature: Avro data type + + Scenario: Create Kamelet Pipes + Given variable uuid is "citrus:randomUUID()" + Given variable user is + """ + { "id": "${uuid}", "firstname": "Sheldon", "lastname": "Cooper", "age": 28 } + """ + # Create avro-to-log binding + When load Pipe avro-x-struct-sink-pipe.yaml + Then Camel K integration avro-x-struct-sink-pipe should be running + + # Create json-to-avro binding + When load Pipe avro-binary-source-pipe.yaml + Then Camel K integration avro-binary-source-pipe should be running + + # Verify output message sent + Then Camel K integration avro-x-struct-sink-pipe should print Body: { "id" : "${uuid}", "firstname" : "Sheldon", "lastname" : "Cooper", "age" : 28} + + Scenario: Remove resources + Given delete Pipe avro-x-struct-sink-pipe + Given delete Pipe avro-binary-source-pipe diff --git a/test/avro/avro-deserialize-pipe.yaml b/test/avro/avro-deserialize-pipe.yaml new file mode 100644 index 000000000..dd5fef089 --- /dev/null +++ b/test/avro/avro-deserialize-pipe.yaml @@ -0,0 +1,27 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: avro-deserialize-pipe +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: webhook-source + properties: + subpath: user + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: avro-deserialize-action + properties: + schema: > + { "name": "User", "type": "record", "namespace": "demo.kamelets", "fields": [{ "name": "id", "type": "string" }, { "name": "firstname", "type": "string" }, { "name": "lastname", "type": "string" }, { "name": "age", "type": "int" }] } + sink: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: log-action + properties: + showHeaders: true diff --git a/test/avro/avro-serdes-action.feature b/test/avro/avro-serdes-action.feature new file mode 100644 index 000000000..c5b2ac84a --- /dev/null +++ b/test/avro/avro-serdes-action.feature @@ -0,0 +1,22 @@ +Feature: Avro serialize/deserialize action + + Scenario: Create Kamelet Pipes + Given variable uuid is "citrus:randomUUID()" + Given variable user is + """ + { "id": "${uuid}", "firstname": "Sheldon", "lastname": "Cooper", "age": 28 } + """ + # Create avro-to-log binding + When load Pipe avro-deserialize-pipe.yaml + Then Camel K integration avro-deserialize-pipe should be running + + # Create json-to-avro binding + When load Pipe avro-serialize-pipe.yaml + Then Camel K integration avro-serialize-pipe should be running + + # Verify output message sent + Then Camel K integration avro-deserialize-pipe should print Body: { "id" : "${uuid}", "firstname" : "Sheldon", "lastname" : "Cooper", "age" : 28} + + Scenario: Remove resources + Given delete Pipe avro-deserialize-pipe + Given delete Pipe avro-serialize-pipe diff --git a/test/avro/avro-serialize-pipe.yaml b/test/avro/avro-serialize-pipe.yaml new file mode 100644 index 000000000..3de93f156 --- /dev/null +++ b/test/avro/avro-serialize-pipe.yaml @@ -0,0 +1,35 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: avro-serialize-pipe +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + period: 10000 + contentType: application/json + message: > + ${user} + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: json-deserialize-action + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: avro-serialize-action + properties: + schema: > + { "name": "User", "type": "record", "namespace": "demo.kamelets", "fields": [{ "name": "id", "type": "string" }, { "name": "firstname", "type": "string" }, { "name": "lastname", "type": "string" }, { "name": "age", "type": "int" }] } + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: log-action + properties: + showHeaders: true + sink: + uri: yaks:resolveURL('avro-deserialize-pipe')/user diff --git a/test/avro/avro-x-struct-sink-pipe.yaml b/test/avro/avro-x-struct-sink-pipe.yaml new file mode 100644 index 000000000..5ae038da9 --- /dev/null +++ b/test/avro/avro-x-struct-sink-pipe.yaml @@ -0,0 +1,43 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: avro-x-struct-sink-pipe +spec: + integration: + dependencies: + - "camel:jackson-avro" + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: webhook-source + properties: + subpath: user + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: data-type-action + properties: + format: "application-octet-stream" + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + properties: + mimeType: "avro/binary" + schema: > + { "name": "User", "type": "record", "namespace": "demo.kamelets", "fields": [{ "name": "id", "type": "string" }, { "name": "firstname", "type": "string" }, { "name": "lastname", "type": "string" }, { "name": "age", "type": "int" }] } + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: data-type-action + properties: + format: "avro-x-struct" + sink: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: log-action + properties: + showHeaders: true diff --git a/test/avro/yaks-config.yaml b/test/avro/yaks-config.yaml new file mode 100644 index 000000000..64010f2d2 --- /dev/null +++ b/test/avro/yaks-config.yaml @@ -0,0 +1,28 @@ +config: + namespace: + temporary: false + runtime: + env: + - name: YAKS_CAMELK_AUTO_REMOVE_RESOURCES + value: false + - name: YAKS_KUBERNETES_AUTO_REMOVE_RESOURCES + value: false + - name: YAKS_JBANG_CAMEL_DUMP_INTEGRATION_OUTPUT + value: true + settings: + loggers: + - name: INTEGRATION_STATUS + level: INFO + - name: INTEGRATION_LOGS + level: INFO + resources: + - avro-serialize-pipe.yaml + - avro-deserialize-pipe.yaml + - avro-binary-source-pipe.yaml + - avro-x-struct-sink-pipe.yaml + - User.avsc + dump: + enabled: true + failedOnly: true + includes: + - app=camel-k diff --git a/test/protobuf/README.md b/test/protobuf/README.md new file mode 100644 index 000000000..852f5ad8f --- /dev/null +++ b/test/protobuf/README.md @@ -0,0 +1,42 @@ +# Protobuf serialization/deserialization + +This test verifies the Protobuf serialization/deserialization actions + +## Objectives + +The test verifies the proper Protobuf serialization and deserialization of Protobuf. + +The test uses two Pipes that interact with each other. The first binding `protobuf-binary-source-pipe` periodically creates a test data event as Json and applies the `protobuf/binary` data type using the schema in [User.proto](User.proto). + +The binary Protobuf data is then sent to a Http webhook sink that references a Http endpoint that is provided by the 2nd binding `protobuf-deserialize-pipe`. The `protobuf-deserialize-pipe` binding provides the Http service and deserializes the binary Protobuf data using the same User schema. The deserialized data is printed to the log output. + +The test starts both Pipes and is able to verify the proper log output as an expected outcome. + +### YAKS Test + +The test performs the following high level steps: + +*Protobuf data type feature* +- Create test data based on the User.proto Protobuf schema +- Load and run the `protobuf-deserialize-pipe` Pipe +- Load and run the `protobuf-binary-source-pipe` Pipe +- Verify that the bindings do interact with each other and the proper test data is logged in the binding output + +## Installation + +The test assumes that you have [JBang](https://www.jbang.dev/) installed and the YAKS CLI setup locally. + +You can review the installation steps for the tooling in the documentation: + +- [JBang](https://www.jbang.dev/documentation/guide/latest/installation.html) +- [Install YAKS CLI](https://github.com/citrusframework/yaks#installation) + +## Run the tests with JBang + +To run tests with URI based configuration: + +```shell script +$ yaks run --local test/protobuf/protobuf-serdes-action.feature +``` + +You will be provided with the test log output and the test results. diff --git a/test/protobuf/User.proto b/test/protobuf/User.proto new file mode 100644 index 000000000..e520bfe9a --- /dev/null +++ b/test/protobuf/User.proto @@ -0,0 +1,10 @@ +syntax = "proto3"; + +package demo.kamelets; + +message User { + optional string id = 1; + optional string firstname = 2; + optional string lastname = 3; + optional int32 age = 4; +} diff --git a/test/protobuf/protobuf-binary-source-pipe.yaml b/test/protobuf/protobuf-binary-source-pipe.yaml new file mode 100644 index 000000000..60ebdd35b --- /dev/null +++ b/test/protobuf/protobuf-binary-source-pipe.yaml @@ -0,0 +1,46 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: protobuf-binary-source-pipe +spec: + integration: + dependencies: + - "camel:jackson-protobuf" + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + period: 10000 + contentType: application/json + message: > + ${user} + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: json-deserialize-action + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + properties: + mimeType: "protobuf/binary" + schema: > + syntax = "proto3"; + package demo.kamelets; + message User { + optional string id=1; + optional string firstname=2; + optional string lastname=3; + optional int32 age=4; + } + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: data-type-action + properties: + format: "protobuf-binary" + sink: + uri: yaks:resolveURL('protobuf-x-struct-sink-pipe')/user diff --git a/test/protobuf/protobuf-data-type.feature b/test/protobuf/protobuf-data-type.feature new file mode 100644 index 000000000..b8f408bc8 --- /dev/null +++ b/test/protobuf/protobuf-data-type.feature @@ -0,0 +1,22 @@ +Feature: Protobuf data type + + Scenario: Create Kamelet Pipes + Given variable uuid is "citrus:randomUUID()" + Given variable user is + """ + { "id": "${uuid}", "firstname": "Sheldon", "lastname": "Cooper", "age": 28 } + """ + # Create protobuf-to-log binding + When load Pipe protobuf-x-struct-sink-pipe.yaml + Then Camel K integration protobuf-x-struct-sink-pipe should be running + + # Create json-to-protobuf binding + When load Pipe protobuf-binary-source-pipe.yaml + Then Camel K integration protobuf-binary-source-pipe should be running + + # Verify output message sent + Then Camel K integration protobuf-x-struct-sink-pipe should print Body: { "id" : "${uuid}", "firstname" : "Sheldon", "lastname" : "Cooper", "age" : 28} + + Scenario: Remove resources + Given delete Pipe protobuf-x-struct-sink-pipe + Given delete Pipe protobuf-binary-source-pipe diff --git a/test/protobuf/protobuf-deserialize-pipe.yaml b/test/protobuf/protobuf-deserialize-pipe.yaml new file mode 100644 index 000000000..9cb6a9b1b --- /dev/null +++ b/test/protobuf/protobuf-deserialize-pipe.yaml @@ -0,0 +1,34 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: protobuf-deserialize-pipe +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: webhook-source + properties: + subpath: user + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: protobuf-deserialize-action + properties: + schema: > + syntax = "proto3"; + package demo.kamelets; + message User { + optional string id=1; + optional string firstname=2; + optional string lastname=3; + optional int32 age=4; + } + sink: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: log-action + properties: + showHeaders: true diff --git a/test/protobuf/protobuf-serdes-action.feature b/test/protobuf/protobuf-serdes-action.feature new file mode 100644 index 000000000..594a84dab --- /dev/null +++ b/test/protobuf/protobuf-serdes-action.feature @@ -0,0 +1,22 @@ +Feature: Protobuf serialize/deserialize action + + Scenario: Create Kamelet Pipes + Given variable uuid is "citrus:randomUUID()" + Given variable user is + """ + { "id": "${uuid}", "firstname": "Sheldon", "lastname": "Cooper", "age": 28 } + """ + # Create protobuf-to-log binding + When load Pipe protobuf-deserialize-pipe.yaml + Then Camel K integration protobuf-deserialize-pipe should be running + + # Create json-to-protobuf binding + When load Pipe protobuf-serialize-pipe.yaml + Then Camel K integration protobuf-serialize-pipe should be running + + # Verify output message sent + Then Camel K integration protobuf-deserialize-pipe should print Body: { "id" : "${uuid}", "firstname" : "Sheldon", "lastname" : "Cooper", "age" : 28} + + Scenario: Remove resources + Given delete Pipe protobuf-deserialize-pipe + Given delete Pipe protobuf-serialize-pipe diff --git a/test/protobuf/protobuf-serialize-pipe.yaml b/test/protobuf/protobuf-serialize-pipe.yaml new file mode 100644 index 000000000..89b61d315 --- /dev/null +++ b/test/protobuf/protobuf-serialize-pipe.yaml @@ -0,0 +1,42 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: protobuf-serialize-pipe +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: timer-source + properties: + period: 10000 + contentType: application/json + message: > + ${user} + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: json-deserialize-action + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: protobuf-serialize-action + properties: + schema: > + syntax = "proto3"; + package demo.kamelets; + message User { + optional string id=1; + optional string firstname=2; + optional string lastname=3; + optional int32 age=4; + } + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: log-action + properties: + showHeaders: true + sink: + uri: yaks:resolveURL('protobuf-deserialize-pipe')/user diff --git a/test/protobuf/protobuf-x-struct-sink-pipe.yaml b/test/protobuf/protobuf-x-struct-sink-pipe.yaml new file mode 100644 index 000000000..ccf319dc3 --- /dev/null +++ b/test/protobuf/protobuf-x-struct-sink-pipe.yaml @@ -0,0 +1,50 @@ +apiVersion: camel.apache.org/v1 +kind: Pipe +metadata: + name: protobuf-x-struct-sink-pipe +spec: + integration: + dependencies: + - "camel:jackson-protobuf" + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: webhook-source + properties: + subpath: user + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: data-type-action + properties: + format: "application-octet-stream" + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: resolve-pojo-schema-action + properties: + mimeType: "protobuf/binary" + schema: > + syntax = "proto3"; + package demo.kamelets; + message User { + optional string id=1; + optional string firstname=2; + optional string lastname=3; + optional int32 age=4; + } + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: data-type-action + properties: + format: "protobuf-x-struct" + sink: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1 + name: log-action + properties: + showHeaders: true diff --git a/test/protobuf/yaks-config.yaml b/test/protobuf/yaks-config.yaml new file mode 100644 index 000000000..5f0a9948e --- /dev/null +++ b/test/protobuf/yaks-config.yaml @@ -0,0 +1,28 @@ +config: + namespace: + temporary: false + runtime: + env: + - name: YAKS_CAMELK_AUTO_REMOVE_RESOURCES + value: false + - name: YAKS_KUBERNETES_AUTO_REMOVE_RESOURCES + value: false + - name: YAKS_JBANG_CAMEL_DUMP_INTEGRATION_OUTPUT + value: true + settings: + loggers: + - name: INTEGRATION_STATUS + level: INFO + - name: INTEGRATION_LOGS + level: INFO + resources: + - protobuf-serialize-pipe.yaml + - protobuf-deserialize-pipe.yaml + - protobuf-binary-source-pipe.yaml + - protobuf-x-struct-sink-pipe.yaml + - User.proto + dump: + enabled: true + failedOnly: true + includes: + - app=camel-k