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-kamelets.git
commit 908cf83ef755631943725e8efd7f86754ac4eeae Author: nicolaferraro <[email protected]> AuthorDate: Fri Jun 4 16:45:22 2021 +0200 Add protobuf serdes --- .../kamelets/protobuf-deserialize-action.svg | 59 ++++++++++++++++++ .../images/kamelets/protobuf-serialize-action.svg | 59 ++++++++++++++++++ docs/modules/ROOT/nav.adoc | 2 + .../ROOT/pages/protobuf-deserialize-action.adoc | 69 ++++++++++++++++++++++ .../ROOT/pages/protobuf-serialize-action.adoc | 69 ++++++++++++++++++++++ .../protobuf-deserialize-action.kamelet.yaml | 41 +++++++++++++ .../protobuf-serialize-action.kamelet.yaml | 45 ++++++++++++++ library/camel-kamelets-utils/pom.xml | 5 ++ .../InflightProtobufSchemaResolver.java | 25 ++++++++ protobuf-deserialize-action.kamelet.yaml | 41 +++++++++++++ protobuf-serialize-action.kamelet.yaml | 45 ++++++++++++++ 11 files changed, 460 insertions(+) diff --git a/docs/modules/ROOT/assets/images/kamelets/protobuf-deserialize-action.svg b/docs/modules/ROOT/assets/images/kamelets/protobuf-deserialize-action.svg new file mode 100644 index 0000000..fa06352 --- /dev/null +++ b/docs/modules/ROOT/assets/images/kamelets/protobuf-deserialize-action.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + viewBox="0 -256 1792 1792" + id="svg3025" + version="1.1" + inkscape:version="0.48.3.1 r9886" + width="100%" + height="100%" + sodipodi:docname="cog_font_awesome.svg"> + <metadata + id="metadata3035"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs3033" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="640" + inkscape:window-height="480" + id="namedview3031" + showgrid="false" + inkscape:zoom="0.13169643" + inkscape:cx="896" + inkscape:cy="896" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="svg3025" /> + <g + transform="matrix(1,0,0,-1,121.49153,1285.4237)" + id="g3027"> + <path + d="m 1024,640 q 0,106 -75,181 -75,75 -181,75 -106,0 -181,-75 -75,-75 -75,-181 0,-106 75,-181 75,-75 181,-75 106,0 181,75 75,75 75,181 z m 512,109 V 527 q 0,-12 -8,-23 -8,-11 -20,-13 l -185,-28 q -19,-54 -39,-91 35,-50 107,-138 10,-12 10,-25 0,-13 -9,-23 -27,-37 -99,-108 -72,-71 -94,-71 -12,0 -26,9 l -138,108 q -44,-23 -91,-38 -16,-136 -29,-186 -7,-28 -36,-28 H 657 q -14,0 -24.5,8.5 Q 622,-111 621,-98 L 593,86 q -49,16 -90,37 L 362,16 Q 352,7 337,7 323,7 312,18 186,132 147,186 q -7 [...] + id="path3029" + inkscape:connector-curvature="0" + style="fill:currentColor" /> + </g> +</svg> diff --git a/docs/modules/ROOT/assets/images/kamelets/protobuf-serialize-action.svg b/docs/modules/ROOT/assets/images/kamelets/protobuf-serialize-action.svg new file mode 100644 index 0000000..fa06352 --- /dev/null +++ b/docs/modules/ROOT/assets/images/kamelets/protobuf-serialize-action.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + viewBox="0 -256 1792 1792" + id="svg3025" + version="1.1" + inkscape:version="0.48.3.1 r9886" + width="100%" + height="100%" + sodipodi:docname="cog_font_awesome.svg"> + <metadata + id="metadata3035"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs3033" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="640" + inkscape:window-height="480" + id="namedview3031" + showgrid="false" + inkscape:zoom="0.13169643" + inkscape:cx="896" + inkscape:cy="896" + inkscape:window-x="0" + inkscape:window-y="25" + inkscape:window-maximized="0" + inkscape:current-layer="svg3025" /> + <g + transform="matrix(1,0,0,-1,121.49153,1285.4237)" + id="g3027"> + <path + d="m 1024,640 q 0,106 -75,181 -75,75 -181,75 -106,0 -181,-75 -75,-75 -75,-181 0,-106 75,-181 75,-75 181,-75 106,0 181,75 75,75 75,181 z m 512,109 V 527 q 0,-12 -8,-23 -8,-11 -20,-13 l -185,-28 q -19,-54 -39,-91 35,-50 107,-138 10,-12 10,-25 0,-13 -9,-23 -27,-37 -99,-108 -72,-71 -94,-71 -12,0 -26,9 l -138,108 q -44,-23 -91,-38 -16,-136 -29,-186 -7,-28 -36,-28 H 657 q -14,0 -24.5,8.5 Q 622,-111 621,-98 L 593,86 q -49,16 -90,37 L 362,16 Q 352,7 337,7 323,7 312,18 186,132 147,186 q -7 [...] + id="path3029" + inkscape:connector-curvature="0" + style="fill:currentColor" /> + </g> +</svg> diff --git a/docs/modules/ROOT/nav.adoc b/docs/modules/ROOT/nav.adoc index 0c31a62..8d23d36 100644 --- a/docs/modules/ROOT/nav.adoc +++ b/docs/modules/ROOT/nav.adoc @@ -75,6 +75,8 @@ * xref:ROOT:openai-classification-action.adoc[image:kamelets/openai-classification-action.svg[] OpenAI Classification Action] * xref:ROOT:openai-completion-action.adoc[image:kamelets/openai-completion-action.svg[] OpenAI Completion Action] * xref:ROOT:pdf-action.adoc[image:kamelets/pdf-action.svg[] PDF Action] +* xref:ROOT:protobuf-deserialize-action.adoc[image:kamelets/protobuf-deserialize-action.svg[] Protobuf Deserialize Action] +* xref:ROOT:protobuf-serialize-action.adoc[image:kamelets/protobuf-serialize-action.svg[] Protobuf Serialize Action] * xref:ROOT:rabbitmq-source.adoc[image:kamelets/rabbitmq-source.svg[] RabbitMQ Source] * 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] diff --git a/docs/modules/ROOT/pages/protobuf-deserialize-action.adoc b/docs/modules/ROOT/pages/protobuf-deserialize-action.adoc new file mode 100644 index 0000000..244ee29 --- /dev/null +++ b/docs/modules/ROOT/pages/protobuf-deserialize-action.adoc @@ -0,0 +1,69 @@ +// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT += image:kamelets/protobuf-deserialize-action.svg[] Protobuf Deserialize Action + +*Provided by: "Apache Software Foundation"* + +*Support Level for this Kamelet is: "Preview"* + +Deserialize payload to Protobuf + +== Configuration Options + +The following table summarizes the configuration options available for the `protobuf-deserialize-action` Kamelet: +[width="100%",cols="2,^2,3,^2,^2,^3",options="header"] +|=== +| Property| Name| Description| Type| Default| Example +| *schema {empty}* *| Schema| The Protobuf schema to use during serialization (as single-line)| string| | `"message Person { required string first = 1; required string last = 2; }"` +|=== + +NOTE: Fields marked with ({empty}*) are mandatory. + +== Usage + +This section summarizes how the `protobuf-deserialize-action` can be used in various contexts. + +=== Knative Action + +The `protobuf-deserialize-action` Kamelet can be used as intermediate step in a binding. + +.protobuf-deserialize-action-binding.yaml +[source,yaml] +---- +apiVersion: camel.apache.org/v1alpha1 +kind: KameletBinding +metadata: + name: protobuf-deserialize-action-binding +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1alpha1 + name: timer-source + properties: + message: "Hello" + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1alpha1 + name: protobuf-deserialize-action + properties: + schema: "message Person { required string first = 1; required string last = 2; }" + sink: + ref: + kind: InMemoryChannel + apiVersion: messaging.knative.dev/v1 + name: mychannel + +---- + +Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to. + +Save the `protobuf-deserialize-action-binding.yaml` file into your hard drive, then configure it according to your needs. + +You can run the action using the following command: + +[source,shell] +---- +kubectl apply -f protobuf-deserialize-action-binding.yaml +---- +// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT diff --git a/docs/modules/ROOT/pages/protobuf-serialize-action.adoc b/docs/modules/ROOT/pages/protobuf-serialize-action.adoc new file mode 100644 index 0000000..b8d59f6 --- /dev/null +++ b/docs/modules/ROOT/pages/protobuf-serialize-action.adoc @@ -0,0 +1,69 @@ +// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT += image:kamelets/protobuf-serialize-action.svg[] Protobuf Serialize Action + +*Provided by: "Apache Software Foundation"* + +*Support Level for this Kamelet is: "Preview"* + +Serialize payload to Protobuf + +== Configuration Options + +The following table summarizes the configuration options available for the `protobuf-serialize-action` Kamelet: +[width="100%",cols="2,^2,3,^2,^2,^3",options="header"] +|=== +| Property| Name| Description| Type| Default| Example +| *schema {empty}* *| Schema| The Protobuf schema to use during serialization (as single-line)| string| | `"message Person { required string first = 1; required string last = 2; }"` +|=== + +NOTE: Fields marked with ({empty}*) are mandatory. + +== Usage + +This section summarizes how the `protobuf-serialize-action` can be used in various contexts. + +=== Knative Action + +The `protobuf-serialize-action` Kamelet can be used as intermediate step in a binding. + +.protobuf-serialize-action-binding.yaml +[source,yaml] +---- +apiVersion: camel.apache.org/v1alpha1 +kind: KameletBinding +metadata: + name: protobuf-serialize-action-binding +spec: + source: + ref: + kind: Kamelet + apiVersion: camel.apache.org/v1alpha1 + name: timer-source + properties: + message: "Hello" + steps: + - ref: + kind: Kamelet + apiVersion: camel.apache.org/v1alpha1 + name: protobuf-serialize-action + properties: + schema: "message Person { required string first = 1; required string last = 2; }" + sink: + ref: + kind: InMemoryChannel + apiVersion: messaging.knative.dev/v1 + name: mychannel + +---- + +Make sure you have xref:latest@camel-k::installation/installation.adoc[Camel K installed] into the Kubernetes cluster you're connected to. + +Save the `protobuf-serialize-action-binding.yaml` file into your hard drive, then configure it according to your needs. + +You can run the action using the following command: + +[source,shell] +---- +kubectl apply -f protobuf-serialize-action-binding.yaml +---- +// THIS FILE IS AUTOMATICALLY GENERATED: DO NOT EDIT diff --git a/library/camel-kamelets-catalog/src/main/resources/kamelets/protobuf-deserialize-action.kamelet.yaml b/library/camel-kamelets-catalog/src/main/resources/kamelets/protobuf-deserialize-action.kamelet.yaml new file mode 100644 index 0000000..212502d --- /dev/null +++ b/library/camel-kamelets-catalog/src/main/resources/kamelets/protobuf-deserialize-action.kamelet.yaml @@ -0,0 +1,41 @@ +apiVersion: camel.apache.org/v1alpha1 +kind: Kamelet +metadata: + name: protobuf-deserialize-action + annotations: + camel.apache.org/kamelet.support.level: "Preview" + camel.apache.org/catalog.version: "main-SNAPSHOT" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG [...] + camel.apache.org/provider: "Apache Software Foundation" + camel.apache.org/kamelet.group: "Actions" + labels: + camel.apache.org/kamelet.type: "action" +spec: + definition: + title: "Protobuf Deserialize Action" + description: "Deserialize payload to Protobuf" + type: object + required: + - schema + properties: + schema: + title: Schema + description: The Protobuf schema to use during serialization (as single-line) + type: string + example: 'message Person { required string first = 1; required string last = 2; }' + dependencies: + - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT" + - "camel:kamelet" + - "camel:core" + - "camel:jackson-protobuf" + flow: + from: + uri: kamelet:source + steps: + - unmarshal: + protobuf: + library: Jackson + unmarshalTypeName: com.fasterxml.jackson.databind.JsonNode + schemaResolver: "#class:org.apache.camel.kamelets.utils.serialization.InflightProtobufSchemaResolver" + - remove-header: + header-name: "Content-Type" diff --git a/library/camel-kamelets-catalog/src/main/resources/kamelets/protobuf-serialize-action.kamelet.yaml b/library/camel-kamelets-catalog/src/main/resources/kamelets/protobuf-serialize-action.kamelet.yaml new file mode 100644 index 0000000..c5ce0bd --- /dev/null +++ b/library/camel-kamelets-catalog/src/main/resources/kamelets/protobuf-serialize-action.kamelet.yaml @@ -0,0 +1,45 @@ +apiVersion: camel.apache.org/v1alpha1 +kind: Kamelet +metadata: + name: protobuf-serialize-action + annotations: + camel.apache.org/kamelet.support.level: "Preview" + camel.apache.org/catalog.version: "main-SNAPSHOT" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG [...] + camel.apache.org/provider: "Apache Software Foundation" + camel.apache.org/kamelet.group: "Actions" + labels: + camel.apache.org/kamelet.type: "action" +spec: + definition: + title: "Protobuf Serialize Action" + description: "Serialize payload to Protobuf" + type: object + required: + - schema + properties: + schema: + title: Schema + description: The Protobuf schema to use during serialization (as single-line) + type: string + example: 'message Person { required string first = 1; required string last = 2; }' + dependencies: + - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT" + - "camel:kamelet" + - "camel:core" + - "camel:jackson-protobuf" + flow: + from: + uri: kamelet:source + steps: + - set-property: + name: schema + constant: "{{schema}}" + - marshal: + protobuf: + library: Jackson + unmarshalTypeName: com.fasterxml.jackson.databind.JsonNode + schemaResolver: "#class:org.apache.camel.kamelets.utils.serialization.InflightProtobufSchemaResolver" + - set-header: + name: "Content-Type" + constant: "application/protobuf" diff --git a/library/camel-kamelets-utils/pom.xml b/library/camel-kamelets-utils/pom.xml index 0d2041e..cb71d07 100644 --- a/library/camel-kamelets-utils/pom.xml +++ b/library/camel-kamelets-utils/pom.xml @@ -53,6 +53,11 @@ <dependency> <groupId>org.apache.camel</groupId> + <artifactId>camel-jackson-protobuf</artifactId> + </dependency> + + <dependency> + <groupId>org.apache.camel</groupId> <artifactId>camel-jackson</artifactId> </dependency> diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/serialization/InflightProtobufSchemaResolver.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/serialization/InflightProtobufSchemaResolver.java new file mode 100644 index 0000000..f4d39dd --- /dev/null +++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/serialization/InflightProtobufSchemaResolver.java @@ -0,0 +1,25 @@ +package org.apache.camel.kamelets.utils.serialization; + +import java.io.IOException; + +import com.fasterxml.jackson.core.FormatSchema; +import com.fasterxml.jackson.dataformat.protobuf.schema.ProtobufSchema; +import com.fasterxml.jackson.dataformat.protobuf.schema.ProtobufSchemaLoader; + +import org.apache.camel.Exchange; +import org.apache.camel.RuntimeCamelException; +import org.apache.camel.component.jackson.SchemaResolver; + +public class InflightProtobufSchemaResolver implements SchemaResolver { + + @Override + public FormatSchema resolve(Exchange exchange) { + String schemaStr = (String) exchange.getProperty("schema"); + try { + ProtobufSchema schema = ProtobufSchemaLoader.std.parse(schemaStr); + return schema; + } catch(IOException e) { + throw new RuntimeCamelException("Cannot parse protobuf schema", e); + } + } +} diff --git a/protobuf-deserialize-action.kamelet.yaml b/protobuf-deserialize-action.kamelet.yaml new file mode 100644 index 0000000..212502d --- /dev/null +++ b/protobuf-deserialize-action.kamelet.yaml @@ -0,0 +1,41 @@ +apiVersion: camel.apache.org/v1alpha1 +kind: Kamelet +metadata: + name: protobuf-deserialize-action + annotations: + camel.apache.org/kamelet.support.level: "Preview" + camel.apache.org/catalog.version: "main-SNAPSHOT" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG [...] + camel.apache.org/provider: "Apache Software Foundation" + camel.apache.org/kamelet.group: "Actions" + labels: + camel.apache.org/kamelet.type: "action" +spec: + definition: + title: "Protobuf Deserialize Action" + description: "Deserialize payload to Protobuf" + type: object + required: + - schema + properties: + schema: + title: Schema + description: The Protobuf schema to use during serialization (as single-line) + type: string + example: 'message Person { required string first = 1; required string last = 2; }' + dependencies: + - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT" + - "camel:kamelet" + - "camel:core" + - "camel:jackson-protobuf" + flow: + from: + uri: kamelet:source + steps: + - unmarshal: + protobuf: + library: Jackson + unmarshalTypeName: com.fasterxml.jackson.databind.JsonNode + schemaResolver: "#class:org.apache.camel.kamelets.utils.serialization.InflightProtobufSchemaResolver" + - remove-header: + header-name: "Content-Type" diff --git a/protobuf-serialize-action.kamelet.yaml b/protobuf-serialize-action.kamelet.yaml new file mode 100644 index 0000000..c5ce0bd --- /dev/null +++ b/protobuf-serialize-action.kamelet.yaml @@ -0,0 +1,45 @@ +apiVersion: camel.apache.org/v1alpha1 +kind: Kamelet +metadata: + name: protobuf-serialize-action + annotations: + camel.apache.org/kamelet.support.level: "Preview" + camel.apache.org/catalog.version: "main-SNAPSHOT" + camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG [...] + camel.apache.org/provider: "Apache Software Foundation" + camel.apache.org/kamelet.group: "Actions" + labels: + camel.apache.org/kamelet.type: "action" +spec: + definition: + title: "Protobuf Serialize Action" + description: "Serialize payload to Protobuf" + type: object + required: + - schema + properties: + schema: + title: Schema + description: The Protobuf schema to use during serialization (as single-line) + type: string + example: 'message Person { required string first = 1; required string last = 2; }' + dependencies: + - "github:apache.camel-kamelets:camel-kamelets-utils:main-SNAPSHOT" + - "camel:kamelet" + - "camel:core" + - "camel:jackson-protobuf" + flow: + from: + uri: kamelet:source + steps: + - set-property: + name: schema + constant: "{{schema}}" + - marshal: + protobuf: + library: Jackson + unmarshalTypeName: com.fasterxml.jackson.databind.JsonNode + schemaResolver: "#class:org.apache.camel.kamelets.utils.serialization.InflightProtobufSchemaResolver" + - set-header: + name: "Content-Type" + constant: "application/protobuf"
