You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2020/07/15 17:13:14 UTC

[camel] 07/08: Added Camel-Jsonata to the kit

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

acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit eaebf6190d63306e6cf6295376e2e1886073cebf
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Jul 15 18:47:30 2020 +0200

    Added Camel-Jsonata to the kit
---
 apache-camel/src/main/descriptors/common-bin.xml   |   1 +
 bom/camel-bom/pom.xml                              |   5 +
 .../org/apache/camel/catalog/components.properties |   1 +
 .../apache/camel/catalog/components/jsonata.json   |  37 +++
 .../org/apache/camel/catalog/docs.properties       |   1 +
 .../camel/catalog/docs/jsonata-component.adoc      | 124 ++++++++
 .../component/ComponentsBuilderFactory.java        |  11 +
 .../dsl/JsonataComponentBuilderFactory.java        | 109 +++++++
 .../src/generated/resources/metadata.json          |  21 ++
 .../builder/endpoint/EndpointBuilderFactory.java   |   1 +
 .../camel/builder/endpoint/EndpointBuilders.java   |   1 +
 .../builder/endpoint/StaticEndpointBuilders.java   |  57 +++-
 .../dsl/JsonataEndpointBuilderFactory.java         | 331 +++++++++++++++++++++
 docs/components/modules/ROOT/nav.adoc              |   1 +
 .../modules/ROOT/pages/jsonata-component.adoc      | 126 ++++++++
 15 files changed, 823 insertions(+), 4 deletions(-)

diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index a9a3708..adf57d3 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -236,6 +236,7 @@
         <include>org.apache.camel:camel-jslt</include>
         <include>org.apache.camel:camel-json-validator</include>
         <include>org.apache.camel:camel-jsonapi</include>
+        <include>org.apache.camel:camel-jsonata</include>
         <include>org.apache.camel:camel-jsonpath</include>
         <include>org.apache.camel:camel-jt400</include>
         <include>org.apache.camel:camel-jta</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index e1bab41..9e5aaed 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1069,6 +1069,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-jsonata</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-jsonpath</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
index e3b8acf..c71460e 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components.properties
@@ -194,6 +194,7 @@ jooq
 jpa
 jslt
 json-validator
+jsonata
 jt400
 kafka
 kubernetes-config-maps
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jsonata.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jsonata.json
new file mode 100644
index 0000000..97b125a
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/jsonata.json
@@ -0,0 +1,37 @@
+{
+  "component": {
+    "kind": "component",
+    "name": "jsonata",
+    "title": "JSONATA",
+    "description": "JSON to JSON transformation using JSONATA.",
+    "deprecated": false,
+    "firstVersion": "3.5.0",
+    "label": "transformation",
+    "javaType": "org.apache.camel.component.jsonata.JsonataComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jsonata",
+    "version": "3.5.0-SNAPSHOT",
+    "scheme": "jsonata",
+    "extendsScheme": "",
+    "syntax": "jsonata:resourceUri",
+    "async": false,
+    "consumerOnly": false,
+    "producerOnly": true,
+    "lenientProperties": false
+  },
+  "componentProperties": {
+    "lazyStartProducer": { "kind": "property", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the r [...]
+    "basicPropertyBinding": { "kind": "property", "displayName": "Basic Property Binding", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities" }
+  },
+  "properties": {
+    "resourceUri": { "kind": "path", "displayName": "Resource Uri", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "secret": false, "description": "Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will call a method on a  [...]
+    "allowContextMapAll": { "kind": "parameter", "displayName": "Allow Context Map All", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "description": "Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and CamelContext. Doing so impose a [...]
+    "contentCache": { "kind": "parameter", "displayName": "Content Cache", "group": "producer", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "description": "Sets whether to use resource content cache or not" },
+    "inputType": { "kind": "parameter", "displayName": "Input Type", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.jsonata.JsonataInputOutputType", "enum": [ "Jackson", "JsonString" ], "deprecated": false, "secret": false, "defaultValue": "Jackson", "description": "Specifies if the output should be Jackson JsonNode or a JSON String." },
+    "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the  [...]
+    "outputType": { "kind": "parameter", "displayName": "Output Type", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.jsonata.JsonataInputOutputType", "enum": [ "Jackson", "JsonString" ], "deprecated": false, "secret": false, "defaultValue": "Jackson", "description": "Specifies if the output should be Jackson JsonNode or a JSON String." },
+    "basicPropertyBinding": { "kind": "parameter", "displayName": "Basic Property Binding", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities" },
+    "synchronous": { "kind": "parameter", "displayName": "Synchronous", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": "false", "description": "Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported)." }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
index 747b52c..0a3738b 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs.properties
@@ -268,6 +268,7 @@ json-johnzon-dataformat
 json-validator-component
 json-xstream-dataformat
 jsonApi-dataformat
+jsonata-component
 jsonpath-language
 jt400-component
 jta
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jsonata-component.adoc b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jsonata-component.adoc
new file mode 100644
index 0000000..b3fa011
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/docs/jsonata-component.adoc
@@ -0,0 +1,124 @@
+[[jsonata-component]]
+= JSONATA Component
+:docTitle: JSONATA
+:artifactId: camel-jsonata
+:description: JSON to JSON transformation using JSONATA.
+:since: 3.5
+:supportLevel: Preview
+:component-header: Only producer is supported
+
+*Since Camel {since}*
+
+*{component-header}*
+
+The Jsonata component allows you to process JSON messages using the
+https://jsonata.org/[JSONATA] specification. This can be
+ideal when doing JSON to JSON transformation and other transformations from JSON.
+
+Maven users will need to add the following dependency to
+their `pom.xml` for this component:
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-jsonata</artifactId>
+    <version>x.x.x</version>
+    <!-- use the same version as your Camel core version -->
+</dependency>
+------------------------------------------------------------
+ 
+
+== URI format
+
+[source,java]
+-----------------------
+jsonata:specName[?options]
+-----------------------
+
+Where *specName* is the classpath-local URI of the specification to
+invoke; or the complete URL of the remote specification
+(eg: \file://folder/myfile.vm).
+
+You can append query options to the URI in the following
+format, `?option=value&option=value&...`
+
+== Options
+
+
+
+
+// component options: START
+The JSONATA component supports 2 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
+| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+|===
+// component options: END
+
+
+// endpoint options: START
+The JSONATA endpoint is configured using URI syntax:
+
+----
+jsonata:resourceUri
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *resourceUri* | *Required* Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will call a method on a bean to be used as the resource. For bean you can specify the method name after dot, eg bean:myBean.myMethod. |  | String
+|===
+
+
+=== Query Parameters (7 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *allowContextMapAll* (producer) | Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and CamelContext. Doing so impose a potential security risk as this opens access to the full power of CamelContext API. | false | boolean
+| *contentCache* (producer) | Sets whether to use resource content cache or not | false | boolean
+| *inputType* (producer) | Specifies if the output should be Jackson JsonNode or a JSON String. The value can be one of: Jackson, JsonString | Jackson | JsonataInputOutputType
+| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
+| *outputType* (producer) | Specifies if the output should be Jackson JsonNode or a JSON String. The value can be one of: Jackson, JsonString | Jackson | JsonataInputOutputType
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+|===
+// endpoint options: END
+
+
+
+
+== Samples
+
+For example you could use something like
+
+[source,java]
+--------------------------------------
+from("activemq:My.Queue").
+  to("jsonata:com/acme/MyResponse.json");
+--------------------------------------
+
+And a file based resource:
+
+[source,java]
+---------------------------------------------------------------
+from("activemq:My.Queue").
+  to("jsonata:file://myfolder/MyResponse.json?contentCache=true").
+  to("activemq:Another.Queue");
+---------------------------------------------------------------
+
+
+
+include::camel-spring-boot::page$jsonata-component.adoc[]
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
index 1c9ebd1..ece952c 100644
--- a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/ComponentsBuilderFactory.java
@@ -2224,6 +2224,17 @@ public interface ComponentsBuilderFactory {
         return org.apache.camel.builder.component.dsl.JsonValidatorComponentBuilderFactory.jsonValidator();
     }
     /**
+     * JSONATA (camel-jsonata)
+     * JSON to JSON transformation using JSONATA.
+     * 
+     * Category: transformation
+     * Since: 3.5
+     * Maven coordinates: org.apache.camel:camel-jsonata
+     */
+    static org.apache.camel.builder.component.dsl.JsonataComponentBuilderFactory.JsonataComponentBuilder jsonata() {
+        return org.apache.camel.builder.component.dsl.JsonataComponentBuilderFactory.jsonata();
+    }
+    /**
      * JT400 (camel-jt400)
      * Exchanges messages with an IBM i system using data queues, message
      * queues, or program call. IBM i is the replacement for AS/400 and iSeries
diff --git a/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JsonataComponentBuilderFactory.java b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JsonataComponentBuilderFactory.java
new file mode 100644
index 0000000..716e972
--- /dev/null
+++ b/core/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/JsonataComponentBuilderFactory.java
@@ -0,0 +1,109 @@
+/*
+ * 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 org.apache.camel.builder.component.dsl;
+
+import javax.annotation.Generated;
+import org.apache.camel.Component;
+import org.apache.camel.builder.component.AbstractComponentBuilder;
+import org.apache.camel.builder.component.ComponentBuilder;
+import org.apache.camel.component.jsonata.JsonataComponent;
+
+/**
+ * JSON to JSON transformation using JSONATA.
+ * 
+ * Generated by camel-package-maven-plugin - do not edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.ComponentDslMojo")
+public interface JsonataComponentBuilderFactory {
+
+    /**
+     * JSONATA (camel-jsonata)
+     * JSON to JSON transformation using JSONATA.
+     * 
+     * Category: transformation
+     * Since: 3.5
+     * Maven coordinates: org.apache.camel:camel-jsonata
+     */
+    static JsonataComponentBuilder jsonata() {
+        return new JsonataComponentBuilderImpl();
+    }
+
+    /**
+     * Builder for the JSONATA component.
+     */
+    interface JsonataComponentBuilder
+            extends
+                ComponentBuilder<JsonataComponent> {
+        /**
+         * Whether the producer should be started lazy (on the first message).
+         * By starting lazy you can use this to allow CamelContext and routes to
+         * startup in situations where a producer may otherwise fail during
+         * starting and cause the route to fail being started. By deferring this
+         * startup to be lazy then the startup failure can be handled during
+         * routing messages via Camel's routing error handlers. Beware that when
+         * the first message is processed then creating and starting the
+         * producer may take a little time and prolong the total processing time
+         * of the processing.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataComponentBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Whether the component should use basic property binding (Camel 2.x)
+         * or the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default JsonataComponentBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+    }
+
+    class JsonataComponentBuilderImpl
+            extends
+                AbstractComponentBuilder<JsonataComponent>
+            implements
+                JsonataComponentBuilder {
+        @Override
+        protected JsonataComponent buildConcreteComponent() {
+            return new JsonataComponent();
+        }
+        @Override
+        protected boolean setPropertyOnComponent(
+                Component component,
+                String name,
+                Object value) {
+            switch (name) {
+            case "lazyStartProducer": ((JsonataComponent) component).setLazyStartProducer((boolean) value); return true;
+            case "basicPropertyBinding": ((JsonataComponent) component).setBasicPropertyBinding((boolean) value); return true;
+            default: return false;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index b6418d9..51eff44 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -4141,6 +4141,27 @@
     "producerOnly": true,
     "lenientProperties": false
   },
+  "JsonataComponentBuilderFactory": {
+    "kind": "component",
+    "name": "jsonata",
+    "title": "JSONATA",
+    "description": "JSON to JSON transformation using JSONATA.",
+    "deprecated": false,
+    "firstVersion": "3.5.0",
+    "label": "transformation",
+    "javaType": "org.apache.camel.component.jsonata.JsonataComponent",
+    "supportLevel": "Preview",
+    "groupId": "org.apache.camel",
+    "artifactId": "camel-jsonata",
+    "version": "3.5.0-SNAPSHOT",
+    "scheme": "jsonata",
+    "extendsScheme": "",
+    "syntax": "jsonata:resourceUri",
+    "async": false,
+    "consumerOnly": false,
+    "producerOnly": true,
+    "lenientProperties": false
+  },
   "Jt400ComponentBuilderFactory": {
     "kind": "component",
     "name": "jt400",
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
index 70fd722..b88f5b4 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilderFactory.java
@@ -194,6 +194,7 @@ public interface EndpointBuilderFactory
             org.apache.camel.builder.endpoint.dsl.JpaEndpointBuilderFactory.JpaBuilders,
             org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory.JsltBuilders,
             org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory.JsonValidatorBuilders,
+            org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.JsonataBuilders,
             org.apache.camel.builder.endpoint.dsl.Jt400EndpointBuilderFactory.Jt400Builders,
             org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory.KMS2Builders,
             org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory.KMSBuilders,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
index 7676f4c..bf7cc8c 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/EndpointBuilders.java
@@ -191,6 +191,7 @@ public interface EndpointBuilders
             org.apache.camel.builder.endpoint.dsl.JpaEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.JsonValidatorEndpointBuilderFactory,
+            org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.Jt400EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KMS2EndpointBuilderFactory,
             org.apache.camel.builder.endpoint.dsl.KMSEndpointBuilderFactory,
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
index 0715cfe..906e14c 100644
--- a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/StaticEndpointBuilders.java
@@ -2814,7 +2814,7 @@ public class StaticEndpointBuilders {
      * 
      * @param path apiName/methodName
      */
-    static org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.BraintreeEndpointBuilder braintree(
+    public static org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.BraintreeEndpointBuilder braintree(
             String path) {
         return org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.endpointBuilder("braintree", path);
     }
@@ -2842,7 +2842,7 @@ public class StaticEndpointBuilders {
      * instead of the default name
      * @param path apiName/methodName
      */
-    static org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.BraintreeEndpointBuilder braintree(
+    public static org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.BraintreeEndpointBuilder braintree(
             String componentName,
             String path) {
         return org.apache.camel.builder.endpoint.dsl.BraintreeEndpointBuilderFactory.endpointBuilder(componentName, path);
@@ -8432,6 +8432,55 @@ public class StaticEndpointBuilders {
         return org.apache.camel.builder.endpoint.dsl.JsltEndpointBuilderFactory.endpointBuilder(componentName, path);
     }
     /**
+     * JSONATA (camel-jsonata)
+     * JSON to JSON transformation using JSONATA.
+     * 
+     * Category: transformation
+     * Since: 3.5
+     * Maven coordinates: org.apache.camel:camel-jsonata
+     * 
+     * Syntax: <code>jsonata:resourceUri</code>
+     * 
+     * Path parameter: resourceUri (required)
+     * Path to the resource. You can prefix with: classpath, file, http, ref, or
+     * bean. classpath, file and http loads the resource using these protocols
+     * (classpath is default). ref will lookup the resource in the registry.
+     * bean will call a method on a bean to be used as the resource. For bean
+     * you can specify the method name after dot, eg bean:myBean.myMethod.
+     * 
+     * @param path resourceUri
+     */
+    public static org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.JsonataEndpointBuilder jsonata(
+            String path) {
+        return org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.endpointBuilder("jsonata", path);
+    }
+    /**
+     * JSONATA (camel-jsonata)
+     * JSON to JSON transformation using JSONATA.
+     * 
+     * Category: transformation
+     * Since: 3.5
+     * Maven coordinates: org.apache.camel:camel-jsonata
+     * 
+     * Syntax: <code>jsonata:resourceUri</code>
+     * 
+     * Path parameter: resourceUri (required)
+     * Path to the resource. You can prefix with: classpath, file, http, ref, or
+     * bean. classpath, file and http loads the resource using these protocols
+     * (classpath is default). ref will lookup the resource in the registry.
+     * bean will call a method on a bean to be used as the resource. For bean
+     * you can specify the method name after dot, eg bean:myBean.myMethod.
+     * 
+     * @param componentName to use a custom component name for the endpoint
+     * instead of the default name
+     * @param path resourceUri
+     */
+    public static org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.JsonataEndpointBuilder jsonata(
+            String componentName,
+            String path) {
+        return org.apache.camel.builder.endpoint.dsl.JsonataEndpointBuilderFactory.endpointBuilder(componentName, path);
+    }
+    /**
      * JSON Schema Validator (camel-json-validator)
      * Validate JSON payloads using NetworkNT JSON Schema.
      * 
@@ -15381,7 +15430,7 @@ public class StaticEndpointBuilders {
      * 
      * @param path serverUrls/path
      */
-    public static org.apache.camel.builder.endpoint.dsl.ZooKeeperEndpointBuilderFactory.ZooKeeperEndpointBuilder zookeeper(
+    static org.apache.camel.builder.endpoint.dsl.ZooKeeperEndpointBuilderFactory.ZooKeeperEndpointBuilder zookeeper(
             String path) {
         return org.apache.camel.builder.endpoint.dsl.ZooKeeperEndpointBuilderFactory.endpointBuilder("zookeeper", path);
     }
@@ -15405,7 +15454,7 @@ public class StaticEndpointBuilders {
      * instead of the default name
      * @param path serverUrls/path
      */
-    public static org.apache.camel.builder.endpoint.dsl.ZooKeeperEndpointBuilderFactory.ZooKeeperEndpointBuilder zookeeper(
+    static org.apache.camel.builder.endpoint.dsl.ZooKeeperEndpointBuilderFactory.ZooKeeperEndpointBuilder zookeeper(
             String componentName,
             String path) {
         return org.apache.camel.builder.endpoint.dsl.ZooKeeperEndpointBuilderFactory.endpointBuilder(componentName, path);
diff --git a/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JsonataEndpointBuilderFactory.java b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JsonataEndpointBuilderFactory.java
new file mode 100644
index 0000000..eba8934
--- /dev/null
+++ b/core/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/JsonataEndpointBuilderFactory.java
@@ -0,0 +1,331 @@
+/*
+ * 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 org.apache.camel.builder.endpoint.dsl;
+
+import javax.annotation.Generated;
+import org.apache.camel.builder.EndpointConsumerBuilder;
+import org.apache.camel.builder.EndpointProducerBuilder;
+import org.apache.camel.builder.endpoint.AbstractEndpointBuilder;
+
+/**
+ * JSON to JSON transformation using JSONATA.
+ * 
+ * Generated by camel build tools - do NOT edit this file!
+ */
+@Generated("org.apache.camel.maven.packaging.EndpointDslMojo")
+public interface JsonataEndpointBuilderFactory {
+
+
+    /**
+     * Builder for endpoint for the JSONATA component.
+     */
+    public interface JsonataEndpointBuilder extends EndpointProducerBuilder {
+        default AdvancedJsonataEndpointBuilder advanced() {
+            return (AdvancedJsonataEndpointBuilder) this;
+        }
+        /**
+         * Sets whether the context map should allow access to all details. By
+         * default only the message body and headers can be accessed. This
+         * option can be enabled for full access to the current Exchange and
+         * CamelContext. Doing so impose a potential security risk as this opens
+         * access to the full power of CamelContext API.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataEndpointBuilder allowContextMapAll(
+                boolean allowContextMapAll) {
+            doSetProperty("allowContextMapAll", allowContextMapAll);
+            return this;
+        }
+        /**
+         * Sets whether the context map should allow access to all details. By
+         * default only the message body and headers can be accessed. This
+         * option can be enabled for full access to the current Exchange and
+         * CamelContext. Doing so impose a potential security risk as this opens
+         * access to the full power of CamelContext API.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataEndpointBuilder allowContextMapAll(
+                String allowContextMapAll) {
+            doSetProperty("allowContextMapAll", allowContextMapAll);
+            return this;
+        }
+        /**
+         * Sets whether to use resource content cache or not.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataEndpointBuilder contentCache(boolean contentCache) {
+            doSetProperty("contentCache", contentCache);
+            return this;
+        }
+        /**
+         * Sets whether to use resource content cache or not.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataEndpointBuilder contentCache(String contentCache) {
+            doSetProperty("contentCache", contentCache);
+            return this;
+        }
+        /**
+         * Specifies if the output should be Jackson JsonNode or a JSON String.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.jsonata.JsonataInputOutputType</code> type.
+         * 
+         * Default: Jackson
+         * Group: producer
+         */
+        default JsonataEndpointBuilder inputType(
+                JsonataInputOutputType inputType) {
+            doSetProperty("inputType", inputType);
+            return this;
+        }
+        /**
+         * Specifies if the output should be Jackson JsonNode or a JSON String.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.jsonata.JsonataInputOutputType</code> type.
+         * 
+         * Default: Jackson
+         * Group: producer
+         */
+        default JsonataEndpointBuilder inputType(String inputType) {
+            doSetProperty("inputType", inputType);
+            return this;
+        }
+        /**
+         * Whether the producer should be started lazy (on the first message).
+         * By starting lazy you can use this to allow CamelContext and routes to
+         * startup in situations where a producer may otherwise fail during
+         * starting and cause the route to fail being started. By deferring this
+         * startup to be lazy then the startup failure can be handled during
+         * routing messages via Camel's routing error handlers. Beware that when
+         * the first message is processed then creating and starting the
+         * producer may take a little time and prolong the total processing time
+         * of the processing.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataEndpointBuilder lazyStartProducer(
+                boolean lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Whether the producer should be started lazy (on the first message).
+         * By starting lazy you can use this to allow CamelContext and routes to
+         * startup in situations where a producer may otherwise fail during
+         * starting and cause the route to fail being started. By deferring this
+         * startup to be lazy then the startup failure can be handled during
+         * routing messages via Camel's routing error handlers. Beware that when
+         * the first message is processed then creating and starting the
+         * producer may take a little time and prolong the total processing time
+         * of the processing.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: producer
+         */
+        default JsonataEndpointBuilder lazyStartProducer(
+                String lazyStartProducer) {
+            doSetProperty("lazyStartProducer", lazyStartProducer);
+            return this;
+        }
+        /**
+         * Specifies if the output should be Jackson JsonNode or a JSON String.
+         * 
+         * The option is a:
+         * <code>org.apache.camel.component.jsonata.JsonataInputOutputType</code> type.
+         * 
+         * Default: Jackson
+         * Group: producer
+         */
+        default JsonataEndpointBuilder outputType(
+                JsonataInputOutputType outputType) {
+            doSetProperty("outputType", outputType);
+            return this;
+        }
+        /**
+         * Specifies if the output should be Jackson JsonNode or a JSON String.
+         * 
+         * The option will be converted to a
+         * <code>org.apache.camel.component.jsonata.JsonataInputOutputType</code> type.
+         * 
+         * Default: Jackson
+         * Group: producer
+         */
+        default JsonataEndpointBuilder outputType(String outputType) {
+            doSetProperty("outputType", outputType);
+            return this;
+        }
+    }
+
+    /**
+     * Advanced builder for endpoint for the JSONATA component.
+     */
+    public interface AdvancedJsonataEndpointBuilder
+            extends
+                EndpointProducerBuilder {
+        default JsonataEndpointBuilder basic() {
+            return (JsonataEndpointBuilder) this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedJsonataEndpointBuilder basicPropertyBinding(
+                boolean basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Whether the endpoint should use basic property binding (Camel 2.x) or
+         * the newer property binding with additional capabilities.
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedJsonataEndpointBuilder basicPropertyBinding(
+                String basicPropertyBinding) {
+            doSetProperty("basicPropertyBinding", basicPropertyBinding);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option is a: <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedJsonataEndpointBuilder synchronous(boolean synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+        /**
+         * Sets whether synchronous processing should be strictly used, or Camel
+         * is allowed to use asynchronous processing (if supported).
+         * 
+         * The option will be converted to a <code>boolean</code> type.
+         * 
+         * Default: false
+         * Group: advanced
+         */
+        default AdvancedJsonataEndpointBuilder synchronous(String synchronous) {
+            doSetProperty("synchronous", synchronous);
+            return this;
+        }
+    }
+
+    /**
+     * Proxy enum for
+     * <code>org.apache.camel.component.jsonata.JsonataInputOutputType</code>
+     * enum.
+     */
+    enum JsonataInputOutputType {
+        Jackson,
+        JsonString;
+    }
+
+    public interface JsonataBuilders {
+        /**
+         * JSONATA (camel-jsonata)
+         * JSON to JSON transformation using JSONATA.
+         * 
+         * Category: transformation
+         * Since: 3.5
+         * Maven coordinates: org.apache.camel:camel-jsonata
+         * 
+         * Syntax: <code>jsonata:resourceUri</code>
+         * 
+         * Path parameter: resourceUri (required)
+         * Path to the resource. You can prefix with: classpath, file, http,
+         * ref, or bean. classpath, file and http loads the resource using these
+         * protocols (classpath is default). ref will lookup the resource in the
+         * registry. bean will call a method on a bean to be used as the
+         * resource. For bean you can specify the method name after dot, eg
+         * bean:myBean.myMethod.
+         * 
+         * @param path resourceUri
+         */
+        default JsonataEndpointBuilder jsonata(String path) {
+            return JsonataEndpointBuilderFactory.endpointBuilder("jsonata", path);
+        }
+        /**
+         * JSONATA (camel-jsonata)
+         * JSON to JSON transformation using JSONATA.
+         * 
+         * Category: transformation
+         * Since: 3.5
+         * Maven coordinates: org.apache.camel:camel-jsonata
+         * 
+         * Syntax: <code>jsonata:resourceUri</code>
+         * 
+         * Path parameter: resourceUri (required)
+         * Path to the resource. You can prefix with: classpath, file, http,
+         * ref, or bean. classpath, file and http loads the resource using these
+         * protocols (classpath is default). ref will lookup the resource in the
+         * registry. bean will call a method on a bean to be used as the
+         * resource. For bean you can specify the method name after dot, eg
+         * bean:myBean.myMethod.
+         * 
+         * @param componentName to use a custom component name for the endpoint
+         * instead of the default name
+         * @param path resourceUri
+         */
+        default JsonataEndpointBuilder jsonata(String componentName, String path) {
+            return JsonataEndpointBuilderFactory.endpointBuilder(componentName, path);
+        }
+    }
+    static JsonataEndpointBuilder endpointBuilder(
+            String componentName,
+            String path) {
+        class JsonataEndpointBuilderImpl extends AbstractEndpointBuilder implements JsonataEndpointBuilder, AdvancedJsonataEndpointBuilder {
+            public JsonataEndpointBuilderImpl(String path) {
+                super(componentName, path);
+            }
+        }
+        return new JsonataEndpointBuilderImpl(path);
+    }
+}
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 62db468..15598ad 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -197,6 +197,7 @@
 ** xref:jpa-component.adoc[JPA]
 ** xref:jslt-component.adoc[JSLT]
 ** xref:json-validator-component.adoc[JSON Schema Validator]
+** xref:jsonata-component.adoc[JSONATA]
 ** xref:jt400-component.adoc[JT400]
 ** xref:kafka-component.adoc[Kafka]
 ** xref:kubernetes-summary.adoc[Kubernetes]
diff --git a/docs/components/modules/ROOT/pages/jsonata-component.adoc b/docs/components/modules/ROOT/pages/jsonata-component.adoc
new file mode 100644
index 0000000..9d09f36
--- /dev/null
+++ b/docs/components/modules/ROOT/pages/jsonata-component.adoc
@@ -0,0 +1,126 @@
+[[jsonata-component]]
+= JSONATA Component
+//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
+:page-source: components/camel-jsonata/src/main/docs/jsonata-component.adoc
+:docTitle: JSONATA
+:artifactId: camel-jsonata
+:description: JSON to JSON transformation using JSONATA.
+:since: 3.5
+:supportLevel: Preview
+:component-header: Only producer is supported
+
+*Since Camel {since}*
+
+*{component-header}*
+
+The Jsonata component allows you to process JSON messages using the
+https://jsonata.org/[JSONATA] specification. This can be
+ideal when doing JSON to JSON transformation and other transformations from JSON.
+
+Maven users will need to add the following dependency to
+their `pom.xml` for this component:
+
+[source,xml]
+------------------------------------------------------------
+<dependency>
+    <groupId>org.apache.camel</groupId>
+    <artifactId>camel-jsonata</artifactId>
+    <version>x.x.x</version>
+    <!-- use the same version as your Camel core version -->
+</dependency>
+------------------------------------------------------------
+ 
+
+== URI format
+
+[source,java]
+-----------------------
+jsonata:specName[?options]
+-----------------------
+
+Where *specName* is the classpath-local URI of the specification to
+invoke; or the complete URL of the remote specification
+(eg: \file://folder/myfile.vm).
+
+You can append query options to the URI in the following
+format, `?option=value&option=value&...`
+
+== Options
+
+
+
+
+// component options: START
+The JSONATA component supports 2 options, which are listed below.
+
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
+| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+|===
+// component options: END
+
+
+// endpoint options: START
+The JSONATA endpoint is configured using URI syntax:
+
+----
+jsonata:resourceUri
+----
+
+with the following path and query parameters:
+
+=== Path Parameters (1 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *resourceUri* | *Required* Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will call a method on a bean to be used as the resource. For bean you can specify the method name after dot, eg bean:myBean.myMethod. |  | String
+|===
+
+
+=== Query Parameters (7 parameters):
+
+
+[width="100%",cols="2,5,^1,2",options="header"]
+|===
+| Name | Description | Default | Type
+| *allowContextMapAll* (producer) | Sets whether the context map should allow access to all details. By default only the message body and headers can be accessed. This option can be enabled for full access to the current Exchange and CamelContext. Doing so impose a potential security risk as this opens access to the full power of CamelContext API. | false | boolean
+| *contentCache* (producer) | Sets whether to use resource content cache or not | false | boolean
+| *inputType* (producer) | Specifies if the output should be Jackson JsonNode or a JSON String. The value can be one of: Jackson, JsonString | Jackson | JsonataInputOutputType
+| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and [...]
+| *outputType* (producer) | Specifies if the output should be Jackson JsonNode or a JSON String. The value can be one of: Jackson, JsonString | Jackson | JsonataInputOutputType
+| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
+| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
+|===
+// endpoint options: END
+
+
+
+
+== Samples
+
+For example you could use something like
+
+[source,java]
+--------------------------------------
+from("activemq:My.Queue").
+  to("jsonata:com/acme/MyResponse.json");
+--------------------------------------
+
+And a file based resource:
+
+[source,java]
+---------------------------------------------------------------
+from("activemq:My.Queue").
+  to("jsonata:file://myfolder/MyResponse.json?contentCache=true").
+  to("activemq:Another.Queue");
+---------------------------------------------------------------
+
+
+
+include::camel-spring-boot::page$jsonata-component.adoc[]