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"

Reply via email to