You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ma...@apache.org on 2023/10/20 00:24:51 UTC

[camel-karavan] branch main updated (53e30a09 -> 86beea5d)

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

marat pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git


    from 53e30a09 Fix #942
     new c9fa4388 CamelDefinitionGenerator for Camel YAML DSL 4.1.0
     new ba9d49d7 CamelDefinitionApiGenerator and CamelDefinitionYamlStepGenerator for Camel YAML DSL 4.1.0
     new bfea1a8a CamelMetadataGenerator for Camel YAML DSL 4.1.0
     new 86beea5d Core Tests passed for Camel YAML DSL 4.1.0

The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 karavan-core/src/core/api/CamelDefinitionApi.ts    | 275 ++++++----------
 karavan-core/src/core/api/CamelDefinitionApiExt.ts |  63 +---
 .../src/core/api/CamelDefinitionYamlStep.ts        | 360 ++++++---------------
 karavan-core/src/core/model/CamelDefinition.ts     | 121 +++----
 karavan-core/src/core/model/CamelMetadata.ts       | 189 ++++++-----
 karavan-core/test/demo.yaml                        |   6 +-
 karavan-core/test/errorHandler1.yaml               |   2 +-
 karavan-generator/pom.xml                          |   2 +-
 .../camel/karavan/generator/AbstractGenerator.java | 184 +++++++++--
 .../generator/CamelDefinitionApiGenerator.java     |  87 ++---
 .../generator/CamelDefinitionGenerator.java        |  90 ++----
 .../CamelDefinitionYamlStepGenerator.java          | 108 +++----
 .../karavan/generator/CamelMetadataGenerator.java  |  11 +-
 13 files changed, 689 insertions(+), 809 deletions(-)


[camel-karavan] 02/04: CamelDefinitionApiGenerator and CamelDefinitionYamlStepGenerator for Camel YAML DSL 4.1.0

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit ba9d49d77ad5e2f371ac03d9c98ef2487f8cb0a3
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Thu Oct 19 18:58:22 2023 -0400

    CamelDefinitionApiGenerator and CamelDefinitionYamlStepGenerator for Camel YAML DSL 4.1.0
---
 karavan-core/src/core/api/CamelDefinitionApi.ts    | 275 ++++++----------
 .../src/core/api/CamelDefinitionYamlStep.ts        | 360 ++++++---------------
 karavan-core/src/core/model/CamelDefinition.ts     |  14 +-
 .../camel/karavan/generator/AbstractGenerator.java | 103 ++++--
 .../generator/CamelDefinitionApiGenerator.java     |  87 ++---
 .../generator/CamelDefinitionGenerator.java        |  47 +--
 .../CamelDefinitionYamlStepGenerator.java          | 108 +++----
 .../camel/karavan/generator/KaravanGenerator.java  |   4 +-
 8 files changed, 381 insertions(+), 617 deletions(-)

diff --git a/karavan-core/src/core/api/CamelDefinitionApi.ts b/karavan-core/src/core/api/CamelDefinitionApi.ts
index 19f5299c..c856e3e1 100644
--- a/karavan-core/src/core/api/CamelDefinitionApi.ts
+++ b/karavan-core/src/core/api/CamelDefinitionApi.ts
@@ -121,6 +121,8 @@ import {
     WhenSkipSendToEndpointDefinition,
     WireTapDefinition,
     ApplicationDefinition,
+    BeanConstructorDefinition,
+    BeanConstructorsDefinition,
     BeanPropertiesDefinition,
     BeanPropertyDefinition,
     BeansDefinition,
@@ -306,15 +308,6 @@ export class CamelDefinitionApi {
         if (element?.idempotentConsumer !== undefined) { 
             def.idempotentConsumer = CamelDefinitionApi.createIdempotentConsumerDefinition(element.idempotentConsumer); 
         }
-        if (element?.intercept !== undefined) { 
-            def.intercept = CamelDefinitionApi.createInterceptDefinition(element.intercept); 
-        }
-        if (element?.interceptFrom !== undefined) { 
-            def.interceptFrom = CamelDefinitionApi.createInterceptFromDefinition(element.interceptFrom); 
-        }
-        if (element?.interceptSendToEndpoint !== undefined) { 
-            def.interceptSendToEndpoint = CamelDefinitionApi.createInterceptSendToEndpointDefinition(element.interceptSendToEndpoint); 
-        }
         if (element?.kamelet !== undefined) { 
             def.kamelet = CamelDefinitionApi.createKameletDefinition(element.kamelet); 
         }
@@ -333,9 +326,6 @@ export class CamelDefinitionApi {
         if (element?.multicast !== undefined) { 
             def.multicast = CamelDefinitionApi.createMulticastDefinition(element.multicast); 
         }
-        if (element?.onCompletion !== undefined) { 
-            def.onCompletion = CamelDefinitionApi.createOnCompletionDefinition(element.onCompletion); 
-        }
         if (element?.onFallback !== undefined) { 
             def.onFallback = CamelDefinitionApi.createOnFallbackDefinition(element.onFallback); 
         }
@@ -496,17 +486,17 @@ export class CamelDefinitionApi {
     static createAggregateDefinition = (element: any): AggregateDefinition => { 
         const def = element ? new AggregateDefinition({...element}) : new AggregateDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        if (element?.correlationExpression !== undefined) { 
+            def.correlationExpression = CamelDefinitionApi.createExpressionSubElementDefinition(element.correlationExpression); 
+        }
         if (element?.completionPredicate !== undefined) { 
             def.completionPredicate = CamelDefinitionApi.createExpressionSubElementDefinition(element.completionPredicate); 
         }
-        if (element?.completionSizeExpression !== undefined) { 
-            def.completionSizeExpression = CamelDefinitionApi.createExpressionSubElementDefinition(element.completionSizeExpression); 
-        }
         if (element?.completionTimeoutExpression !== undefined) { 
             def.completionTimeoutExpression = CamelDefinitionApi.createExpressionSubElementDefinition(element.completionTimeoutExpression); 
         }
-        if (element?.correlationExpression !== undefined) { 
-            def.correlationExpression = CamelDefinitionApi.createExpressionSubElementDefinition(element.correlationExpression); 
+        if (element?.completionSizeExpression !== undefined) { 
+            def.completionSizeExpression = CamelDefinitionApi.createExpressionSubElementDefinition(element.completionSizeExpression); 
         }
         if (element?.optimisticLockRetryPolicy !== undefined) { 
             def.optimisticLockRetryPolicy = CamelDefinitionApi.createOptimisticLockRetryPolicyDefinition(element.optimisticLockRetryPolicy); 
@@ -534,25 +524,25 @@ export class CamelDefinitionApi {
     static createChoiceDefinition = (element: any): ChoiceDefinition => { 
         const def = element ? new ChoiceDefinition({...element}) : new ChoiceDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        def.when = element && element?.when ? element?.when.map((x:any) => CamelDefinitionApi.createWhenDefinition(x)) :[];
         if (element?.otherwise !== undefined) { 
             def.otherwise = CamelDefinitionApi.createOtherwiseDefinition(element.otherwise); 
         }
-        def.when = element && element?.when ? element?.when.map((x:any) => CamelDefinitionApi.createWhenDefinition(x)) :[];
         return def;
     }
 
     static createCircuitBreakerDefinition = (element: any): CircuitBreakerDefinition => { 
         const def = element ? new CircuitBreakerDefinition({...element}) : new CircuitBreakerDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        if (element?.resilience4jConfiguration !== undefined) { 
+            def.resilience4jConfiguration = CamelDefinitionApi.createResilience4jConfigurationDefinition(element.resilience4jConfiguration); 
+        }
         if (element?.faultToleranceConfiguration !== undefined) { 
             def.faultToleranceConfiguration = CamelDefinitionApi.createFaultToleranceConfigurationDefinition(element.faultToleranceConfiguration); 
         }
         if (element?.onFallback !== undefined) { 
             def.onFallback = CamelDefinitionApi.createOnFallbackDefinition(element.onFallback); 
         }
-        if (element?.resilience4jConfiguration !== undefined) { 
-            def.resilience4jConfiguration = CamelDefinitionApi.createResilience4jConfigurationDefinition(element.resilience4jConfiguration); 
-        }
         def.steps = CamelDefinitionApi.createSteps(element?.steps);
         return def;
     }
@@ -812,7 +802,6 @@ export class CamelDefinitionApi {
         if (element?.roundRobin !== undefined) { 
             def.roundRobin = CamelDefinitionApi.createRoundRobinLoadBalancerDefinition(element.roundRobin); 
         }
-        def.steps = CamelDefinitionApi.createSteps(element?.steps);
         if (element?.sticky !== undefined) { 
             def.sticky = CamelDefinitionApi.createStickyLoadBalancerDefinition(element.sticky); 
         }
@@ -822,6 +811,7 @@ export class CamelDefinitionApi {
         if (element?.weighted !== undefined) { 
             def.weighted = CamelDefinitionApi.createWeightedLoadBalancerDefinition(element.weighted); 
         }
+        def.steps = CamelDefinitionApi.createSteps(element?.steps);
         return def;
     }
 
@@ -989,20 +979,20 @@ export class CamelDefinitionApi {
     static createOnExceptionDefinition = (element: any): OnExceptionDefinition => { 
         const def = element ? new OnExceptionDefinition({...element}) : new OnExceptionDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
-        if (element?.continued !== undefined) { 
-            def.continued = CamelDefinitionApi.createExpressionSubElementDefinition(element.continued); 
-        }
-        if (element?.handled !== undefined) { 
-            def.handled = CamelDefinitionApi.createExpressionSubElementDefinition(element.handled); 
-        }
         if (element?.onWhen !== undefined) { 
             def.onWhen = CamelDefinitionApi.createWhenDefinition(element.onWhen); 
         }
+        if (element?.retryWhile !== undefined) { 
+            def.retryWhile = CamelDefinitionApi.createExpressionSubElementDefinition(element.retryWhile); 
+        }
         if (element?.redeliveryPolicy !== undefined) { 
             def.redeliveryPolicy = CamelDefinitionApi.createRedeliveryPolicyDefinition(element.redeliveryPolicy); 
         }
-        if (element?.retryWhile !== undefined) { 
-            def.retryWhile = CamelDefinitionApi.createExpressionSubElementDefinition(element.retryWhile); 
+        if (element?.handled !== undefined) { 
+            def.handled = CamelDefinitionApi.createExpressionSubElementDefinition(element.handled); 
+        }
+        if (element?.continued !== undefined) { 
+            def.continued = CamelDefinitionApi.createExpressionSubElementDefinition(element.continued); 
         }
         def.steps = CamelDefinitionApi.createSteps(element?.steps);
         return def;
@@ -1148,15 +1138,9 @@ export class CamelDefinitionApi {
     static createResequenceDefinition = (element: any): ResequenceDefinition => { 
         const def = element ? new ResequenceDefinition({...element}) : new ResequenceDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
-        if (element?.batchConfig !== undefined) { 
-            def.batchConfig = CamelDefinitionApi.createBatchResequencerConfig(element.batchConfig); 
-        }
         def.expression = CamelDefinitionApi.createExpressionDefinition(element.expression); 
 
         def.steps = CamelDefinitionApi.createSteps(element?.steps);
-        if (element?.streamConfig !== undefined) { 
-            def.streamConfig = CamelDefinitionApi.createStreamResequencerConfig(element.streamConfig); 
-        }
         return def;
     }
 
@@ -1211,11 +1195,6 @@ export class CamelDefinitionApi {
         if (element?.errorHandler !== undefined) { 
             def.errorHandler = CamelDefinitionApi.createErrorHandlerDefinition(element.errorHandler); 
         }
-        def.intercept = element && element?.intercept ? element?.intercept.map((x:any) => CamelDefinitionApi.createInterceptDefinition(x)) :[];
-        def.interceptFrom = element && element?.interceptFrom ? element?.interceptFrom.map((x:any) => CamelDefinitionApi.createInterceptFromDefinition(x)) :[];
-        def.interceptSendToEndpoint = element && element?.interceptSendToEndpoint ? element?.interceptSendToEndpoint.map((x:any) => CamelDefinitionApi.createInterceptSendToEndpointDefinition(x)) :[];
-        def.onCompletion = element && element?.onCompletion ? element?.onCompletion.map((x:any) => CamelDefinitionApi.createOnCompletionDefinition(x)) :[];
-        def.onException = element && element?.onException ? element?.onException.map((x:any) => CamelDefinitionApi.createOnExceptionDefinition(x)) :[];
         return def;
     }
 
@@ -1253,14 +1232,14 @@ export class CamelDefinitionApi {
     static createRouteTemplateDefinition = (element: any): RouteTemplateDefinition => { 
         const def = element ? new RouteTemplateDefinition({...element}) : new RouteTemplateDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        if (element?.route !== undefined) { 
+            def.route = CamelDefinitionApi.createRouteDefinition(element.route); 
+        }
         def.beans = element && element?.beans ? element?.beans.map((x:any) => CamelDefinitionApi.createRouteTemplateBeanDefinition(x)) :[];
         if (element?.from !== undefined) { 
             def.from = CamelDefinitionApi.createFromDefinition(element.from); 
         }
         def.parameters = element && element?.parameters ? element?.parameters.map((x:any) => CamelDefinitionApi.createRouteTemplateParameterDefinition(x)) :[];
-        if (element?.route !== undefined) { 
-            def.route = CamelDefinitionApi.createRouteDefinition(element.route); 
-        }
         return def;
     }
 
@@ -1405,11 +1384,11 @@ export class CamelDefinitionApi {
     static createThrottleDefinition = (element: any): ThrottleDefinition => { 
         const def = element ? new ThrottleDefinition({...element}) : new ThrottleDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        def.expression = CamelDefinitionApi.createExpressionDefinition(element.expression); 
+
         if (element?.correlationExpression !== undefined) { 
             def.correlationExpression = CamelDefinitionApi.createExpressionSubElementDefinition(element.correlationExpression); 
         }
-        def.expression = CamelDefinitionApi.createExpressionDefinition(element.expression); 
-
         return def;
     }
 
@@ -1641,6 +1620,19 @@ export class CamelDefinitionApi {
         return def;
     }
 
+    static createBeanConstructorDefinition = (element: any): BeanConstructorDefinition => { 
+        const def = element ? new BeanConstructorDefinition({...element}) : new BeanConstructorDefinition();
+        def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        return def;
+    }
+
+    static createBeanConstructorsDefinition = (element: any): BeanConstructorsDefinition => { 
+        const def = element ? new BeanConstructorsDefinition({...element}) : new BeanConstructorsDefinition();
+        def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        def.constructor = element && element?.constructor ? element?.constructor.map((x:any) => CamelDefinitionApi.createBeanConstructorDefinition(x)) :[];
+        return def;
+    }
+
     static createBeanPropertiesDefinition = (element: any): BeanPropertiesDefinition => { 
         const def = element ? new BeanPropertiesDefinition({...element}) : new BeanPropertiesDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
@@ -1661,13 +1653,13 @@ export class CamelDefinitionApi {
         const def = element ? new BeansDefinition({...element}) : new BeansDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
         def.bean = element && element?.bean ? element?.bean.map((x:any) => CamelDefinitionApi.createRegistryBeanDefinition(x)) :[];
-        def.componentScan = element && element?.componentScan ? element?.componentScan.map((x:any) => CamelDefinitionApi.createComponentScanDefinition(x)) :[];
-        def.rest = element && element?.rest ? element?.rest.map((x:any) => CamelDefinitionApi.createRestDefinition(x)) :[];
         def.restConfiguration = element && element?.restConfiguration ? element?.restConfiguration.map((x:any) => CamelDefinitionApi.createRestConfigurationDefinition(x)) :[];
-        def.route = element && element?.route ? element?.route.map((x:any) => CamelDefinitionApi.createRouteDefinition(x)) :[];
+        def.rest = element && element?.rest ? element?.rest.map((x:any) => CamelDefinitionApi.createRestDefinition(x)) :[];
         def.routeConfiguration = element && element?.routeConfiguration ? element?.routeConfiguration.map((x:any) => CamelDefinitionApi.createRouteConfigurationDefinition(x)) :[];
         def.routeTemplate = element && element?.routeTemplate ? element?.routeTemplate.map((x:any) => CamelDefinitionApi.createRouteTemplateDefinition(x)) :[];
         def.templatedRoute = element && element?.templatedRoute ? element?.templatedRoute.map((x:any) => CamelDefinitionApi.createTemplatedRouteDefinition(x)) :[];
+        def.route = element && element?.route ? element?.route.map((x:any) => CamelDefinitionApi.createRouteDefinition(x)) :[];
+        def.componentScan = element && element?.componentScan ? element?.componentScan.map((x:any) => CamelDefinitionApi.createComponentScanDefinition(x)) :[];
         return def;
     }
 
@@ -1705,10 +1697,10 @@ export class CamelDefinitionApi {
         if (element?.kubernetesServiceDiscovery !== undefined) { 
             def.kubernetesServiceDiscovery = CamelDefinitionApi.createKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
         }
-        def.properties = element && element?.properties ? element?.properties.map((x:any) => CamelDefinitionApi.createPropertyDefinition(x)) :[];
         if (element?.staticServiceDiscovery !== undefined) { 
             def.staticServiceDiscovery = CamelDefinitionApi.createStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
         }
+        def.properties = element && element?.properties ? element?.properties.map((x:any) => CamelDefinitionApi.createPropertyDefinition(x)) :[];
         return def;
     }
 
@@ -1805,48 +1797,23 @@ export class CamelDefinitionApi {
     static createServiceCallConfigurationDefinition = (element: any): ServiceCallConfigurationDefinition => { 
         const def = element ? new ServiceCallConfigurationDefinition({...element}) : new ServiceCallConfigurationDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        def.expression = CamelDefinitionApi.createExpressionDefinition(element.expression); 
+
         if (element?.blacklistServiceFilter !== undefined) { 
             def.blacklistServiceFilter = CamelDefinitionApi.createBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
         }
-        if (element?.cachingServiceDiscovery !== undefined) { 
-            def.cachingServiceDiscovery = CamelDefinitionApi.createCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
-        }
-        if (element?.combinedServiceDiscovery !== undefined) { 
-            def.combinedServiceDiscovery = CamelDefinitionApi.createCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
-        }
         if (element?.combinedServiceFilter !== undefined) { 
             def.combinedServiceFilter = CamelDefinitionApi.createCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
         }
-        if (element?.consulServiceDiscovery !== undefined) { 
-            def.consulServiceDiscovery = CamelDefinitionApi.createConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
-        }
         if (element?.customServiceFilter !== undefined) { 
             def.customServiceFilter = CamelDefinitionApi.createCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
         }
-        if (element?.defaultLoadBalancer !== undefined) { 
-            def.defaultLoadBalancer = CamelDefinitionApi.createDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
-        }
-        if (element?.dnsServiceDiscovery !== undefined) { 
-            def.dnsServiceDiscovery = CamelDefinitionApi.createDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
-        }
-        if (element?.expression !== undefined) { 
-            def.expression = CamelDefinitionApi.createServiceCallExpressionConfiguration(element.expression); 
-        }
         if (element?.healthyServiceFilter !== undefined) { 
             def.healthyServiceFilter = CamelDefinitionApi.createHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
         }
-        if (element?.kubernetesServiceDiscovery !== undefined) { 
-            def.kubernetesServiceDiscovery = CamelDefinitionApi.createKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
-        }
         if (element?.passThroughServiceFilter !== undefined) { 
             def.passThroughServiceFilter = CamelDefinitionApi.createPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
         }
-        if (element?.staticServiceDiscovery !== undefined) { 
-            def.staticServiceDiscovery = CamelDefinitionApi.createStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
-        }
-        if (element?.zookeeperServiceDiscovery !== undefined) { 
-            def.zookeeperServiceDiscovery = CamelDefinitionApi.createZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
-        }
         return def;
     }
 
@@ -1856,48 +1823,8 @@ export class CamelDefinitionApi {
         }
         const def = element ? new ServiceCallDefinition({...element}) : new ServiceCallDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
-        if (element?.blacklistServiceFilter !== undefined) { 
-            def.blacklistServiceFilter = CamelDefinitionApi.createBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
-        }
-        if (element?.cachingServiceDiscovery !== undefined) { 
-            def.cachingServiceDiscovery = CamelDefinitionApi.createCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
-        }
-        if (element?.combinedServiceDiscovery !== undefined) { 
-            def.combinedServiceDiscovery = CamelDefinitionApi.createCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
-        }
-        if (element?.combinedServiceFilter !== undefined) { 
-            def.combinedServiceFilter = CamelDefinitionApi.createCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
-        }
-        if (element?.consulServiceDiscovery !== undefined) { 
-            def.consulServiceDiscovery = CamelDefinitionApi.createConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
-        }
-        if (element?.customServiceFilter !== undefined) { 
-            def.customServiceFilter = CamelDefinitionApi.createCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
-        }
-        if (element?.defaultLoadBalancer !== undefined) { 
-            def.defaultLoadBalancer = CamelDefinitionApi.createDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
-        }
-        if (element?.dnsServiceDiscovery !== undefined) { 
-            def.dnsServiceDiscovery = CamelDefinitionApi.createDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
-        }
-        if (element?.expression !== undefined) { 
-            def.expression = CamelDefinitionApi.createServiceCallExpressionConfiguration(element.expression); 
-        }
-        if (element?.healthyServiceFilter !== undefined) { 
-            def.healthyServiceFilter = CamelDefinitionApi.createHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
-        }
-        if (element?.kubernetesServiceDiscovery !== undefined) { 
-            def.kubernetesServiceDiscovery = CamelDefinitionApi.createKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
-        }
-        if (element?.passThroughServiceFilter !== undefined) { 
-            def.passThroughServiceFilter = CamelDefinitionApi.createPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
-        }
-        if (element?.staticServiceDiscovery !== undefined) { 
-            def.staticServiceDiscovery = CamelDefinitionApi.createStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
-        }
-        if (element?.zookeeperServiceDiscovery !== undefined) { 
-            def.zookeeperServiceDiscovery = CamelDefinitionApi.createZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
-        }
+        def.expression = CamelDefinitionApi.createExpressionDefinition(element.expression); 
+
         return def;
     }
 
@@ -2839,8 +2766,8 @@ export class CamelDefinitionApi {
     static createResponseMessageDefinition = (element: any): ResponseMessageDefinition => { 
         const def = element ? new ResponseMessageDefinition({...element}) : new ResponseMessageDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
-        def.examples = element && element?.examples ? element?.examples.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
         def.header = element && element?.header ? element?.header.map((x:any) => CamelDefinitionApi.createResponseHeaderDefinition(x)) :[];
+        def.examples = element && element?.examples ? element?.examples.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
         return def;
     }
 
@@ -2853,28 +2780,28 @@ export class CamelDefinitionApi {
     static createRestConfigurationDefinition = (element: any): RestConfigurationDefinition => { 
         const def = element ? new RestConfigurationDefinition({...element}) : new RestConfigurationDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
-        def.apiProperty = element && element?.apiProperty ? element?.apiProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
         def.componentProperty = element && element?.componentProperty ? element?.componentProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
+        def.endpointProperty = element && element?.endpointProperty ? element?.endpointProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
         def.consumerProperty = element && element?.consumerProperty ? element?.consumerProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
-        def.corsHeaders = element && element?.corsHeaders ? element?.corsHeaders.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
         def.dataFormatProperty = element && element?.dataFormatProperty ? element?.dataFormatProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
-        def.endpointProperty = element && element?.endpointProperty ? element?.endpointProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
+        def.apiProperty = element && element?.apiProperty ? element?.apiProperty.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
+        def.corsHeaders = element && element?.corsHeaders ? element?.corsHeaders.map((x:any) => CamelDefinitionApi.createRestPropertyDefinition(x)) :[];
         return def;
     }
 
     static createRestDefinition = (element: any): RestDefinition => { 
         const def = element ? new RestDefinition({...element}) : new RestDefinition();
         def.uuid = element?.uuid ? element.uuid : def.uuid; 
+        if (element?.securityDefinitions !== undefined) { 
+            def.securityDefinitions = CamelDefinitionApi.createRestSecuritiesDefinition(element.securityDefinitions); 
+        }
+        def.securityRequirements = element && element?.securityRequirements ? element?.securityRequirements.map((x:any) => CamelDefinitionApi.createSecurityDefinition(x)) :[];
         def.delete = element && element?.delete ? element?.delete.map((x:any) => CamelDefinitionApi.createDeleteDefinition(x)) :[];
         def.get = element && element?.get ? element?.get.map((x:any) => CamelDefinitionApi.createGetDefinition(x)) :[];
         def.head = element && element?.head ? element?.head.map((x:any) => CamelDefinitionApi.createHeadDefinition(x)) :[];
         def.patch = element && element?.patch ? element?.patch.map((x:any) => CamelDefinitionApi.createPatchDefinition(x)) :[];
         def.post = element && element?.post ? element?.post.map((x:any) => CamelDefinitionApi.createPostDefinition(x)) :[];
         def.put = element && element?.put ? element?.put.map((x:any) => CamelDefinitionApi.createPutDefinition(x)) :[];
-        if (element?.securityDefinitions !== undefined) { 
-            def.securityDefinitions = CamelDefinitionApi.createRestSecuritiesDefinition(element.securityDefinitions); 
-        }
-        def.securityRequirements = element && element?.securityRequirements ? element?.securityRequirements.map((x:any) => CamelDefinitionApi.createSecurityDefinition(x)) :[];
         return def;
     }
 
@@ -3222,6 +3149,8 @@ export class CamelDefinitionApi {
             case 'WhenSkipSendToEndpointDefinition': return CamelDefinitionApi.createWhenSkipSendToEndpointDefinition(newBody);
             case 'WireTapDefinition': return CamelDefinitionApi.createWireTapDefinition(newBody);
             case 'ApplicationDefinition': return CamelDefinitionApi.createApplicationDefinition(newBody);
+            case 'BeanConstructorDefinition': return CamelDefinitionApi.createBeanConstructorDefinition(newBody);
+            case 'BeanConstructorsDefinition': return CamelDefinitionApi.createBeanConstructorsDefinition(newBody);
             case 'BeanPropertiesDefinition': return CamelDefinitionApi.createBeanPropertiesDefinition(newBody);
             case 'BeanPropertyDefinition': return CamelDefinitionApi.createBeanPropertyDefinition(newBody);
             case 'BeansDefinition': return CamelDefinitionApi.createBeansDefinition(newBody);
@@ -3369,29 +3298,29 @@ export class CamelDefinitionApi {
        delete newBody.expressionName;
        delete newBody.dslName;
        switch (name) { 
-            case 'XPathExpression': return CamelDefinitionApi.createXPathExpression(newBody);
             case 'ConstantExpression': return CamelDefinitionApi.createConstantExpression(newBody);
-            case 'GroovyExpression': return CamelDefinitionApi.createGroovyExpression(newBody);
-            case 'SimpleExpression': return CamelDefinitionApi.createSimpleExpression(newBody);
-            case 'MvelExpression': return CamelDefinitionApi.createMvelExpression(newBody);
-            case 'RefExpression': return CamelDefinitionApi.createRefExpression(newBody);
-            case 'MethodCallExpression': return CamelDefinitionApi.createMethodCallExpression(newBody);
-            case 'LanguageExpression': return CamelDefinitionApi.createLanguageExpression(newBody);
+            case 'CSimpleExpression': return CamelDefinitionApi.createCSimpleExpression(newBody);
+            case 'DatasonnetExpression': return CamelDefinitionApi.createDatasonnetExpression(newBody);
             case 'ExchangePropertyExpression': return CamelDefinitionApi.createExchangePropertyExpression(newBody);
+            case 'GroovyExpression': return CamelDefinitionApi.createGroovyExpression(newBody);
+            case 'HeaderExpression': return CamelDefinitionApi.createHeaderExpression(newBody);
+            case 'Hl7TerserExpression': return CamelDefinitionApi.createHl7TerserExpression(newBody);
+            case 'JoorExpression': return CamelDefinitionApi.createJoorExpression(newBody);
+            case 'JqExpression': return CamelDefinitionApi.createJqExpression(newBody);
             case 'JavaScriptExpression': return CamelDefinitionApi.createJavaScriptExpression(newBody);
+            case 'JsonPathExpression': return CamelDefinitionApi.createJsonPathExpression(newBody);
+            case 'LanguageExpression': return CamelDefinitionApi.createLanguageExpression(newBody);
+            case 'MethodCallExpression': return CamelDefinitionApi.createMethodCallExpression(newBody);
+            case 'MvelExpression': return CamelDefinitionApi.createMvelExpression(newBody);
             case 'OgnlExpression': return CamelDefinitionApi.createOgnlExpression(newBody);
             case 'PythonExpression': return CamelDefinitionApi.createPythonExpression(newBody);
+            case 'RefExpression': return CamelDefinitionApi.createRefExpression(newBody);
+            case 'SimpleExpression': return CamelDefinitionApi.createSimpleExpression(newBody);
+            case 'SpELExpression': return CamelDefinitionApi.createSpELExpression(newBody);
+            case 'TokenizerExpression': return CamelDefinitionApi.createTokenizerExpression(newBody);
+            case 'XPathExpression': return CamelDefinitionApi.createXPathExpression(newBody);
             case 'XQueryExpression': return CamelDefinitionApi.createXQueryExpression(newBody);
-            case 'HeaderExpression': return CamelDefinitionApi.createHeaderExpression(newBody);
-            case 'CSimpleExpression': return CamelDefinitionApi.createCSimpleExpression(newBody);
             case 'XMLTokenizerExpression': return CamelDefinitionApi.createXMLTokenizerExpression(newBody);
-            case 'JqExpression': return CamelDefinitionApi.createJqExpression(newBody);
-            case 'DatasonnetExpression': return CamelDefinitionApi.createDatasonnetExpression(newBody);
-            case 'TokenizerExpression': return CamelDefinitionApi.createTokenizerExpression(newBody);
-            case 'SpELExpression': return CamelDefinitionApi.createSpELExpression(newBody);
-            case 'JoorExpression': return CamelDefinitionApi.createJoorExpression(newBody);
-            case 'JsonPathExpression': return CamelDefinitionApi.createJsonPathExpression(newBody);
-            case 'Hl7TerserExpression': return CamelDefinitionApi.createHl7TerserExpression(newBody);
             default: return new SimpleExpression(newBody);
         }
     }
@@ -3401,46 +3330,46 @@ export class CamelDefinitionApi {
        delete newBody.dataFormatName;
        delete newBody.dslName;
        switch (name) { 
-            case 'TarFileDataFormat': return CamelDefinitionApi.createTarFileDataFormat(newBody);
+            case 'ASN1DataFormat': return CamelDefinitionApi.createASN1DataFormat(newBody);
+            case 'AvroDataFormat': return CamelDefinitionApi.createAvroDataFormat(newBody);
+            case 'BarcodeDataFormat': return CamelDefinitionApi.createBarcodeDataFormat(newBody);
+            case 'Base64DataFormat': return CamelDefinitionApi.createBase64DataFormat(newBody);
+            case 'BindyDataFormat': return CamelDefinitionApi.createBindyDataFormat(newBody);
             case 'CBORDataFormat': return CamelDefinitionApi.createCBORDataFormat(newBody);
-            case 'LZFDataFormat': return CamelDefinitionApi.createLZFDataFormat(newBody);
-            case 'UniVocityFixedDataFormat': return CamelDefinitionApi.createUniVocityFixedDataFormat(newBody);
-            case 'JsonApiDataFormat': return CamelDefinitionApi.createJsonApiDataFormat(newBody);
-            case 'XMLSecurityDataFormat': return CamelDefinitionApi.createXMLSecurityDataFormat(newBody);
-            case 'TidyMarkupDataFormat': return CamelDefinitionApi.createTidyMarkupDataFormat(newBody);
-            case 'FhirJsonDataFormat': return CamelDefinitionApi.createFhirJsonDataFormat(newBody);
-            case 'ThriftDataFormat': return CamelDefinitionApi.createThriftDataFormat(newBody);
-            case 'IcalDataFormat': return CamelDefinitionApi.createIcalDataFormat(newBody);
             case 'CryptoDataFormat': return CamelDefinitionApi.createCryptoDataFormat(newBody);
-            case 'ZipFileDataFormat': return CamelDefinitionApi.createZipFileDataFormat(newBody);
-            case 'JaxbDataFormat': return CamelDefinitionApi.createJaxbDataFormat(newBody);
-            case 'UniVocityTsvDataFormat': return CamelDefinitionApi.createUniVocityTsvDataFormat(newBody);
-            case 'BarcodeDataFormat': return CamelDefinitionApi.createBarcodeDataFormat(newBody);
             case 'CsvDataFormat': return CamelDefinitionApi.createCsvDataFormat(newBody);
-            case 'GrokDataFormat': return CamelDefinitionApi.createGrokDataFormat(newBody);
+            case 'CustomDataFormat': return CamelDefinitionApi.createCustomDataFormat(newBody);
+            case 'FhirJsonDataFormat': return CamelDefinitionApi.createFhirJsonDataFormat(newBody);
+            case 'FhirXmlDataFormat': return CamelDefinitionApi.createFhirXmlDataFormat(newBody);
             case 'FlatpackDataFormat': return CamelDefinitionApi.createFlatpackDataFormat(newBody);
-            case 'SoapDataFormat': return CamelDefinitionApi.createSoapDataFormat(newBody);
-            case 'AvroDataFormat': return CamelDefinitionApi.createAvroDataFormat(newBody);
+            case 'GrokDataFormat': return CamelDefinitionApi.createGrokDataFormat(newBody);
             case 'GzipDeflaterDataFormat': return CamelDefinitionApi.createGzipDeflaterDataFormat(newBody);
+            case 'HL7DataFormat': return CamelDefinitionApi.createHL7DataFormat(newBody);
+            case 'IcalDataFormat': return CamelDefinitionApi.createIcalDataFormat(newBody);
             case 'JacksonXMLDataFormat': return CamelDefinitionApi.createJacksonXMLDataFormat(newBody);
-            case 'ProtobufDataFormat': return CamelDefinitionApi.createProtobufDataFormat(newBody);
-            case 'BindyDataFormat': return CamelDefinitionApi.createBindyDataFormat(newBody);
+            case 'JaxbDataFormat': return CamelDefinitionApi.createJaxbDataFormat(newBody);
             case 'JsonDataFormat': return CamelDefinitionApi.createJsonDataFormat(newBody);
+            case 'JsonApiDataFormat': return CamelDefinitionApi.createJsonApiDataFormat(newBody);
+            case 'LZFDataFormat': return CamelDefinitionApi.createLZFDataFormat(newBody);
             case 'MimeMultipartDataFormat': return CamelDefinitionApi.createMimeMultipartDataFormat(newBody);
-            case 'ZipDeflaterDataFormat': return CamelDefinitionApi.createZipDeflaterDataFormat(newBody);
-            case 'ASN1DataFormat': return CamelDefinitionApi.createASN1DataFormat(newBody);
-            case 'YAMLDataFormat': return CamelDefinitionApi.createYAMLDataFormat(newBody);
-            case 'SwiftMxDataFormat': return CamelDefinitionApi.createSwiftMxDataFormat(newBody);
-            case 'CustomDataFormat': return CamelDefinitionApi.createCustomDataFormat(newBody);
-            case 'HL7DataFormat': return CamelDefinitionApi.createHL7DataFormat(newBody);
-            case 'Base64DataFormat': return CamelDefinitionApi.createBase64DataFormat(newBody);
-            case 'RssDataFormat': return CamelDefinitionApi.createRssDataFormat(newBody);
-            case 'PGPDataFormat': return CamelDefinitionApi.createPGPDataFormat(newBody);
-            case 'UniVocityCsvDataFormat': return CamelDefinitionApi.createUniVocityCsvDataFormat(newBody);
-            case 'SyslogDataFormat': return CamelDefinitionApi.createSyslogDataFormat(newBody);
             case 'ParquetAvroDataFormat': return CamelDefinitionApi.createParquetAvroDataFormat(newBody);
-            case 'FhirXmlDataFormat': return CamelDefinitionApi.createFhirXmlDataFormat(newBody);
+            case 'PGPDataFormat': return CamelDefinitionApi.createPGPDataFormat(newBody);
+            case 'ProtobufDataFormat': return CamelDefinitionApi.createProtobufDataFormat(newBody);
+            case 'RssDataFormat': return CamelDefinitionApi.createRssDataFormat(newBody);
+            case 'SoapDataFormat': return CamelDefinitionApi.createSoapDataFormat(newBody);
             case 'SwiftMtDataFormat': return CamelDefinitionApi.createSwiftMtDataFormat(newBody);
+            case 'SwiftMxDataFormat': return CamelDefinitionApi.createSwiftMxDataFormat(newBody);
+            case 'SyslogDataFormat': return CamelDefinitionApi.createSyslogDataFormat(newBody);
+            case 'TarFileDataFormat': return CamelDefinitionApi.createTarFileDataFormat(newBody);
+            case 'ThriftDataFormat': return CamelDefinitionApi.createThriftDataFormat(newBody);
+            case 'TidyMarkupDataFormat': return CamelDefinitionApi.createTidyMarkupDataFormat(newBody);
+            case 'UniVocityCsvDataFormat': return CamelDefinitionApi.createUniVocityCsvDataFormat(newBody);
+            case 'UniVocityFixedDataFormat': return CamelDefinitionApi.createUniVocityFixedDataFormat(newBody);
+            case 'UniVocityTsvDataFormat': return CamelDefinitionApi.createUniVocityTsvDataFormat(newBody);
+            case 'XMLSecurityDataFormat': return CamelDefinitionApi.createXMLSecurityDataFormat(newBody);
+            case 'YAMLDataFormat': return CamelDefinitionApi.createYAMLDataFormat(newBody);
+            case 'ZipDeflaterDataFormat': return CamelDefinitionApi.createZipDeflaterDataFormat(newBody);
+            case 'ZipFileDataFormat': return CamelDefinitionApi.createZipFileDataFormat(newBody);
             default: return new JsonDataFormat(newBody);
         }
     }
diff --git a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
index 0a1ef7c6..646bb533 100644
--- a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
@@ -122,6 +122,8 @@ import {
     WhenSkipSendToEndpointDefinition,
     WireTapDefinition,
     ApplicationDefinition,
+    BeanConstructorDefinition,
+    BeanConstructorsDefinition,
     BeanPropertiesDefinition,
     BeanPropertyDefinition,
     BeansDefinition,
@@ -326,13 +328,6 @@ export class CamelDefinitionYamlStep {
                def.split = CamelDefinitionYamlStep.readSplitDefinition(element.split); 
             } 
         } 
-        if (element?.interceptSendToEndpoint !== undefined) { 
-            if (Array.isArray(element.interceptSendToEndpoint)) { 
-               def.interceptSendToEndpoint = CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(element.interceptSendToEndpoint[0]); 
-            } else { 
-               def.interceptSendToEndpoint = CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(element.interceptSendToEndpoint); 
-            } 
-        } 
         if (element?.loop !== undefined) { 
             if (Array.isArray(element.loop)) { 
                def.loop = CamelDefinitionYamlStep.readLoopDefinition(element.loop[0]); 
@@ -452,13 +447,6 @@ export class CamelDefinitionYamlStep {
                def.serviceCall = CamelDefinitionYamlStep.readServiceCallDefinition(element.serviceCall); 
             } 
         } 
-        if (element?.intercept !== undefined) { 
-            if (Array.isArray(element.intercept)) { 
-               def.intercept = CamelDefinitionYamlStep.readInterceptDefinition(element.intercept[0]); 
-            } else { 
-               def.intercept = CamelDefinitionYamlStep.readInterceptDefinition(element.intercept); 
-            } 
-        } 
         if (element?.whenSkipSendToEndpoint !== undefined) { 
             if (Array.isArray(element.whenSkipSendToEndpoint)) { 
                def.whenSkipSendToEndpoint = CamelDefinitionYamlStep.readWhenSkipSendToEndpointDefinition(element.whenSkipSendToEndpoint[0]); 
@@ -480,20 +468,6 @@ export class CamelDefinitionYamlStep {
                def.removeProperty = CamelDefinitionYamlStep.readRemovePropertyDefinition(element.removeProperty); 
             } 
         } 
-        if (element?.interceptFrom !== undefined) { 
-            if (Array.isArray(element.interceptFrom)) { 
-               def.interceptFrom = CamelDefinitionYamlStep.readInterceptFromDefinition(element.interceptFrom[0]); 
-            } else { 
-               def.interceptFrom = CamelDefinitionYamlStep.readInterceptFromDefinition(element.interceptFrom); 
-            } 
-        } 
-        if (element?.onCompletion !== undefined) { 
-            if (Array.isArray(element.onCompletion)) { 
-               def.onCompletion = CamelDefinitionYamlStep.readOnCompletionDefinition(element.onCompletion[0]); 
-            } else { 
-               def.onCompletion = CamelDefinitionYamlStep.readOnCompletionDefinition(element.onCompletion); 
-            } 
-        } 
         if (element?.pausable !== undefined) { 
             if (Array.isArray(element.pausable)) { 
                def.pausable = CamelDefinitionYamlStep.readPausableDefinition(element.pausable[0]); 
@@ -1329,7 +1303,6 @@ export class CamelDefinitionYamlStep {
                def.topic = CamelDefinitionYamlStep.readTopicLoadBalancerDefinition(element.topic); 
             } 
         } 
-        def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
         if (element?.weighted !== undefined) { 
             if (Array.isArray(element.weighted)) { 
                def.weighted = CamelDefinitionYamlStep.readWeightedLoadBalancerDefinition(element.weighted[0]); 
@@ -1337,6 +1310,7 @@ export class CamelDefinitionYamlStep {
                def.weighted = CamelDefinitionYamlStep.readWeightedLoadBalancerDefinition(element.weighted); 
             } 
         } 
+        def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
         if (element?.roundRobin !== undefined) { 
             if (Array.isArray(element.roundRobin)) { 
                def.roundRobin = CamelDefinitionYamlStep.readRoundRobinLoadBalancerDefinition(element.roundRobin[0]); 
@@ -1901,13 +1875,6 @@ export class CamelDefinitionYamlStep {
     static readResequenceDefinition = (element: any): ResequenceDefinition => {
         
         let def = element ? new ResequenceDefinition({...element}) : new ResequenceDefinition();
-        if (element?.streamConfig !== undefined) { 
-            if (Array.isArray(element.streamConfig)) { 
-               def.streamConfig = CamelDefinitionYamlStep.readStreamResequencerConfig(element.streamConfig[0]); 
-            } else { 
-               def.streamConfig = CamelDefinitionYamlStep.readStreamResequencerConfig(element.streamConfig); 
-            } 
-        } 
         if (element?.expression !== undefined) { 
             def.expression = CamelDefinitionYamlStep.readExpressionDefinition(element.expression); 
         } else {
@@ -1920,13 +1887,6 @@ export class CamelDefinitionYamlStep {
             }
         }
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
-        if (element?.batchConfig !== undefined) { 
-            if (Array.isArray(element.batchConfig)) { 
-               def.batchConfig = CamelDefinitionYamlStep.readBatchResequencerConfig(element.batchConfig[0]); 
-            } else { 
-               def.batchConfig = CamelDefinitionYamlStep.readBatchResequencerConfig(element.batchConfig); 
-            } 
-        } 
 
         return def;
     }
@@ -1976,9 +1936,6 @@ export class CamelDefinitionYamlStep {
     static readRouteConfigurationDefinition = (element: any): RouteConfigurationDefinition => {
         
         let def = element ? new RouteConfigurationDefinition({...element}) : new RouteConfigurationDefinition();
-        def.onCompletion = element && element?.onCompletion ? element?.onCompletion.map((x:any) => CamelDefinitionYamlStep.readOnCompletionDefinition(x.onCompletion)) :[]; 
-        def.interceptSendToEndpoint = element && element?.interceptSendToEndpoint ? element?.interceptSendToEndpoint.map((x:any) => CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(x.interceptSendToEndpoint)) :[]; 
-        def.intercept = element && element?.intercept ? element?.intercept.map((x:any) => CamelDefinitionYamlStep.readInterceptDefinition(x.intercept)) :[]; 
         if (element?.errorHandler !== undefined) { 
             if (Array.isArray(element.errorHandler)) { 
                def.errorHandler = CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler[0]); 
@@ -1986,8 +1943,6 @@ export class CamelDefinitionYamlStep {
                def.errorHandler = CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler); 
             } 
         } 
-        def.onException = element && element?.onException ? element?.onException.map((x:any) => CamelDefinitionYamlStep.readOnExceptionDefinition(x.onException)) :[]; 
-        def.interceptFrom = element && element?.interceptFrom ? element?.interceptFrom.map((x:any) => CamelDefinitionYamlStep.readInterceptFromDefinition(x.interceptFrom)) :[]; 
 
         return def;
     }
@@ -2739,6 +2694,21 @@ export class CamelDefinitionYamlStep {
         return def;
     }
 
+    static readBeanConstructorDefinition = (element: any): BeanConstructorDefinition => {
+        
+        let def = element ? new BeanConstructorDefinition({...element}) : new BeanConstructorDefinition();
+
+        return def;
+    }
+
+    static readBeanConstructorsDefinition = (element: any): BeanConstructorsDefinition => {
+        
+        let def = element ? new BeanConstructorsDefinition({...element}) : new BeanConstructorsDefinition();
+        def.constructor = element && element?.constructor ? element?.constructor.map((x:any) => CamelDefinitionYamlStep.readBeanConstructorDefinition(x)) :[]; 
+
+        return def;
+    }
+
     static readBeanPropertiesDefinition = (element: any): BeanPropertiesDefinition => {
         
         let def = element ? new BeanPropertiesDefinition({...element}) : new BeanPropertiesDefinition();
@@ -2980,41 +2950,6 @@ export class CamelDefinitionYamlStep {
         
         let def = element ? new ServiceCallConfigurationDefinition({...element}) : new ServiceCallConfigurationDefinition();
         def = ComponentApi.parseElementUri(def);
-        if (element?.defaultLoadBalancer !== undefined) { 
-            if (Array.isArray(element.defaultLoadBalancer)) { 
-               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer[0]); 
-            } else { 
-               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
-            } 
-        } 
-        if (element?.expression !== undefined) { 
-            if (Array.isArray(element.expression)) { 
-               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression[0]); 
-            } else { 
-               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression); 
-            } 
-        } 
-        if (element?.kubernetesServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.kubernetesServiceDiscovery)) { 
-               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery[0]); 
-            } else { 
-               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
-            } 
-        } 
-        if (element?.customServiceFilter !== undefined) { 
-            if (Array.isArray(element.customServiceFilter)) { 
-               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter[0]); 
-            } else { 
-               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
-            } 
-        } 
-        if (element?.zookeeperServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.zookeeperServiceDiscovery)) { 
-               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery[0]); 
-            } else { 
-               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
-            } 
-        } 
         if (element?.blacklistServiceFilter !== undefined) { 
             if (Array.isArray(element.blacklistServiceFilter)) { 
                def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter[0]); 
@@ -3022,6 +2957,17 @@ export class CamelDefinitionYamlStep {
                def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
             } 
         } 
+        if (element?.expression !== undefined) { 
+            def.expression = CamelDefinitionYamlStep.readExpressionDefinition(element.expression); 
+        } else {
+            const languageName: string | undefined = Object.keys(element).filter(key => CamelMetadataApi.hasLanguage(key))[0] || undefined;
+            if (languageName){
+                const exp:any = {};
+                exp[languageName] = element[languageName]
+                def.expression = CamelDefinitionYamlStep.readExpressionDefinition(exp);
+                delete (def as any)[languageName];
+            }
+        }
         if (element?.passThroughServiceFilter !== undefined) { 
             if (Array.isArray(element.passThroughServiceFilter)) { 
                def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter[0]); 
@@ -3029,20 +2975,6 @@ export class CamelDefinitionYamlStep {
                def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
             } 
         } 
-        if (element?.cachingServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.cachingServiceDiscovery)) { 
-               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery[0]); 
-            } else { 
-               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
-            } 
-        } 
-        if (element?.dnsServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.dnsServiceDiscovery)) { 
-               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery[0]); 
-            } else { 
-               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
-            } 
-        } 
         if (element?.healthyServiceFilter !== undefined) { 
             if (Array.isArray(element.healthyServiceFilter)) { 
                def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter[0]); 
@@ -3057,25 +2989,11 @@ export class CamelDefinitionYamlStep {
                def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
             } 
         } 
-        if (element?.consulServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.consulServiceDiscovery)) { 
-               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery[0]); 
-            } else { 
-               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
-            } 
-        } 
-        if (element?.staticServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.staticServiceDiscovery)) { 
-               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery[0]); 
-            } else { 
-               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
-            } 
-        } 
-        if (element?.combinedServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.combinedServiceDiscovery)) { 
-               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery[0]); 
+        if (element?.customServiceFilter !== undefined) { 
+            if (Array.isArray(element.customServiceFilter)) { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter[0]); 
             } else { 
-               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
             } 
         } 
 
@@ -3086,104 +3004,17 @@ export class CamelDefinitionYamlStep {
         if (element && typeof element === 'string') element = {name: element};
         let def = element ? new ServiceCallDefinition({...element}) : new ServiceCallDefinition();
         def = ComponentApi.parseElementUri(def);
-        if (element?.defaultLoadBalancer !== undefined) { 
-            if (Array.isArray(element.defaultLoadBalancer)) { 
-               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer[0]); 
-            } else { 
-               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
-            } 
-        } 
         if (element?.expression !== undefined) { 
-            if (Array.isArray(element.expression)) { 
-               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression[0]); 
-            } else { 
-               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression); 
-            } 
-        } 
-        if (element?.kubernetesServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.kubernetesServiceDiscovery)) { 
-               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery[0]); 
-            } else { 
-               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
-            } 
-        } 
-        if (element?.customServiceFilter !== undefined) { 
-            if (Array.isArray(element.customServiceFilter)) { 
-               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter[0]); 
-            } else { 
-               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
-            } 
-        } 
-        if (element?.zookeeperServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.zookeeperServiceDiscovery)) { 
-               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery[0]); 
-            } else { 
-               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
-            } 
-        } 
-        if (element?.blacklistServiceFilter !== undefined) { 
-            if (Array.isArray(element.blacklistServiceFilter)) { 
-               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter[0]); 
-            } else { 
-               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
-            } 
-        } 
-        if (element?.passThroughServiceFilter !== undefined) { 
-            if (Array.isArray(element.passThroughServiceFilter)) { 
-               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter[0]); 
-            } else { 
-               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
-            } 
-        } 
-        if (element?.cachingServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.cachingServiceDiscovery)) { 
-               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery[0]); 
-            } else { 
-               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
-            } 
-        } 
-        if (element?.dnsServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.dnsServiceDiscovery)) { 
-               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery[0]); 
-            } else { 
-               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
-            } 
-        } 
-        if (element?.healthyServiceFilter !== undefined) { 
-            if (Array.isArray(element.healthyServiceFilter)) { 
-               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter[0]); 
-            } else { 
-               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
-            } 
-        } 
-        if (element?.combinedServiceFilter !== undefined) { 
-            if (Array.isArray(element.combinedServiceFilter)) { 
-               def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter[0]); 
-            } else { 
-               def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
-            } 
-        } 
-        if (element?.consulServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.consulServiceDiscovery)) { 
-               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery[0]); 
-            } else { 
-               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
-            } 
-        } 
-        if (element?.staticServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.staticServiceDiscovery)) { 
-               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery[0]); 
-            } else { 
-               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
-            } 
-        } 
-        if (element?.combinedServiceDiscovery !== undefined) { 
-            if (Array.isArray(element.combinedServiceDiscovery)) { 
-               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery[0]); 
-            } else { 
-               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
-            } 
-        } 
+            def.expression = CamelDefinitionYamlStep.readExpressionDefinition(element.expression); 
+        } else {
+            const languageName: string | undefined = Object.keys(element).filter(key => CamelMetadataApi.hasLanguage(key))[0] || undefined;
+            if (languageName){
+                const exp:any = {};
+                exp[languageName] = element[languageName]
+                def.expression = CamelDefinitionYamlStep.readExpressionDefinition(exp);
+                delete (def as any)[languageName];
+            }
+        }
 
         return def;
     }
@@ -4454,8 +4285,8 @@ export class CamelDefinitionYamlStep {
         def.corsHeaders = element && element?.corsHeaders ? element?.corsHeaders.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
         def.dataFormatProperty = element && element?.dataFormatProperty ? element?.dataFormatProperty.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
         def.consumerProperty = element && element?.consumerProperty ? element?.consumerProperty.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
-        def.apiProperty = element && element?.apiProperty ? element?.apiProperty.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
         def.endpointProperty = element && element?.endpointProperty ? element?.endpointProperty.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
+        def.apiProperty = element && element?.apiProperty ? element?.apiProperty.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
         def.componentProperty = element && element?.componentProperty ? element?.componentProperty.map((x:any) => CamelDefinitionYamlStep.readRestPropertyDefinition(x)) :[]; 
 
         return def;
@@ -4467,9 +4298,8 @@ export class CamelDefinitionYamlStep {
         def.head = element && element?.head ? element?.head.map((x:any) => CamelDefinitionYamlStep.readHeadDefinition(x)) :[]; 
         def.patch = element && element?.patch ? element?.patch.map((x:any) => CamelDefinitionYamlStep.readPatchDefinition(x)) :[]; 
         def.post = element && element?.post ? element?.post.map((x:any) => CamelDefinitionYamlStep.readPostDefinition(x)) :[]; 
-        def.get = element && element?.get ? element?.get.map((x:any) => CamelDefinitionYamlStep.readGetDefinition(x)) :[]; 
         def.securityRequirements = element && element?.securityRequirements ? element?.securityRequirements.map((x:any) => CamelDefinitionYamlStep.readSecurityDefinition(x)) :[]; 
-        def.delete = element && element?.delete ? element?.delete.map((x:any) => CamelDefinitionYamlStep.readDeleteDefinition(x)) :[]; 
+        def.get = element && element?.get ? element?.get.map((x:any) => CamelDefinitionYamlStep.readGetDefinition(x)) :[]; 
         if (element?.securityDefinitions !== undefined) { 
             if (Array.isArray(element.securityDefinitions)) { 
                def.securityDefinitions = CamelDefinitionYamlStep.readRestSecuritiesDefinition(element.securityDefinitions[0]); 
@@ -4477,6 +4307,7 @@ export class CamelDefinitionYamlStep {
                def.securityDefinitions = CamelDefinitionYamlStep.readRestSecuritiesDefinition(element.securityDefinitions); 
             } 
         } 
+        def.delete = element && element?.delete ? element?.delete.map((x:any) => CamelDefinitionYamlStep.readDeleteDefinition(x)) :[]; 
         def.put = element && element?.put ? element?.put.map((x:any) => CamelDefinitionYamlStep.readPutDefinition(x)) :[]; 
 
         return def;
@@ -4962,71 +4793,66 @@ export class CamelDefinitionYamlStep {
         const name = Object.getOwnPropertyNames(body)[0];
         const newBody = CamelUtil.camelizeBody(name, body[name], clone);
         switch (name) { 
-            case 'setProperty': return CamelDefinitionYamlStep.readSetPropertyDefinition(newBody);
-            case 'to': return CamelDefinitionYamlStep.readToDefinition(newBody);
-            case 'doCatch': return CamelDefinitionYamlStep.readCatchDefinition(newBody);
-            case 'onFallback': return CamelDefinitionYamlStep.readOnFallbackDefinition(newBody);
-            case 'loadBalance': return CamelDefinitionYamlStep.readLoadBalanceDefinition(newBody);
-            case 'process': return CamelDefinitionYamlStep.readProcessDefinition(newBody);
+            case 'aggregate': return CamelDefinitionYamlStep.readAggregateDefinition(newBody);
             case 'bean': return CamelDefinitionYamlStep.readBeanDefinition(newBody);
-            case 'transacted': return CamelDefinitionYamlStep.readTransactedDefinition(newBody);
-            case 'pollEnrich': return CamelDefinitionYamlStep.readPollEnrichDefinition(newBody);
-            case 'filter': return CamelDefinitionYamlStep.readFilterDefinition(newBody);
-            case 'pausable': return CamelDefinitionYamlStep.readPausableDefinition(newBody);
-            case 'setBody': return CamelDefinitionYamlStep.readSetBodyDefinition(newBody);
+            case 'doCatch': return CamelDefinitionYamlStep.readCatchDefinition(newBody);
+            case 'choice': return CamelDefinitionYamlStep.readChoiceDefinition(newBody);
+            case 'circuitBreaker': return CamelDefinitionYamlStep.readCircuitBreakerDefinition(newBody);
             case 'claimCheck': return CamelDefinitionYamlStep.readClaimCheckDefinition(newBody);
-            case 'step': return CamelDefinitionYamlStep.readStepDefinition(newBody);
-            case 'aggregate': return CamelDefinitionYamlStep.readAggregateDefinition(newBody);
-            case 'when': return CamelDefinitionYamlStep.readWhenDefinition(newBody);
-            case 'loop': return CamelDefinitionYamlStep.readLoopDefinition(newBody);
-            case 'stop': return CamelDefinitionYamlStep.readStopDefinition(newBody);
-            case 'resumable': return CamelDefinitionYamlStep.readResumableDefinition(newBody);
-            case 'removeProperty': return CamelDefinitionYamlStep.readRemovePropertyDefinition(newBody);
-            case 'split': return CamelDefinitionYamlStep.readSplitDefinition(newBody);
-            case 'multicast': return CamelDefinitionYamlStep.readMulticastDefinition(newBody);
-            case 'otherwise': return CamelDefinitionYamlStep.readOtherwiseDefinition(newBody);
-            case 'removeProperties': return CamelDefinitionYamlStep.readRemovePropertiesDefinition(newBody);
-            case 'saga': return CamelDefinitionYamlStep.readSagaDefinition(newBody);
-            case 'removeHeaders': return CamelDefinitionYamlStep.readRemoveHeadersDefinition(newBody);
-            case 'setExchangePattern': return CamelDefinitionYamlStep.readSetExchangePatternDefinition(newBody);
-            case 'intercept': return CamelDefinitionYamlStep.readInterceptDefinition(newBody);
-            case 'transform': return CamelDefinitionYamlStep.readTransformDefinition(newBody);
-            case 'routingSlip': return CamelDefinitionYamlStep.readRoutingSlipDefinition(newBody);
-            case 'doTry': return CamelDefinitionYamlStep.readTryDefinition(newBody);
+            case 'convertBodyTo': return CamelDefinitionYamlStep.readConvertBodyDefinition(newBody);
             case 'delay': return CamelDefinitionYamlStep.readDelayDefinition(newBody);
-            case 'script': return CamelDefinitionYamlStep.readScriptDefinition(newBody);
+            case 'dynamicRouter': return CamelDefinitionYamlStep.readDynamicRouterDefinition(newBody);
             case 'enrich': return CamelDefinitionYamlStep.readEnrichDefinition(newBody);
-            case 'onCompletion': return CamelDefinitionYamlStep.readOnCompletionDefinition(newBody);
-            case 'wireTap': return CamelDefinitionYamlStep.readWireTapDefinition(newBody);
-            case 'kamelet': return CamelDefinitionYamlStep.readKameletDefinition(newBody);
-            case 'interceptFrom': return CamelDefinitionYamlStep.readInterceptFromDefinition(newBody);
+            case 'filter': return CamelDefinitionYamlStep.readFilterDefinition(newBody);
             case 'doFinally': return CamelDefinitionYamlStep.readFinallyDefinition(newBody);
             case 'idempotentConsumer': return CamelDefinitionYamlStep.readIdempotentConsumerDefinition(newBody);
-            case 'removeHeader': return CamelDefinitionYamlStep.readRemoveHeaderDefinition(newBody);
-            case 'circuitBreaker': return CamelDefinitionYamlStep.readCircuitBreakerDefinition(newBody);
-            case 'rollback': return CamelDefinitionYamlStep.readRollbackDefinition(newBody);
-            case 'dynamicRouter': return CamelDefinitionYamlStep.readDynamicRouterDefinition(newBody);
-            case 'resequence': return CamelDefinitionYamlStep.readResequenceDefinition(newBody);
+            case 'kamelet': return CamelDefinitionYamlStep.readKameletDefinition(newBody);
+            case 'loadBalance': return CamelDefinitionYamlStep.readLoadBalanceDefinition(newBody);
             case 'log': return CamelDefinitionYamlStep.readLogDefinition(newBody);
-            case 'throttle': return CamelDefinitionYamlStep.readThrottleDefinition(newBody);
-            case 'recipientList': return CamelDefinitionYamlStep.readRecipientListDefinition(newBody);
+            case 'loop': return CamelDefinitionYamlStep.readLoopDefinition(newBody);
             case 'marshal': return CamelDefinitionYamlStep.readMarshalDefinition(newBody);
-            case 'policy': return CamelDefinitionYamlStep.readPolicyDefinition(newBody);
-            case 'serviceCall': return CamelDefinitionYamlStep.readServiceCallDefinition(newBody);
-            case 'unmarshal': return CamelDefinitionYamlStep.readUnmarshalDefinition(newBody);
-            case 'threads': return CamelDefinitionYamlStep.readThreadsDefinition(newBody);
-            case 'toD': return CamelDefinitionYamlStep.readToDynamicDefinition(newBody);
-            case 'convertBodyTo': return CamelDefinitionYamlStep.readConvertBodyDefinition(newBody);
+            case 'multicast': return CamelDefinitionYamlStep.readMulticastDefinition(newBody);
+            case 'onFallback': return CamelDefinitionYamlStep.readOnFallbackDefinition(newBody);
+            case 'otherwise': return CamelDefinitionYamlStep.readOtherwiseDefinition(newBody);
+            case 'pausable': return CamelDefinitionYamlStep.readPausableDefinition(newBody);
             case 'pipeline': return CamelDefinitionYamlStep.readPipelineDefinition(newBody);
-            case 'throwException': return CamelDefinitionYamlStep.readThrowExceptionDefinition(newBody);
-            case 'validate': return CamelDefinitionYamlStep.readValidateDefinition(newBody);
-            case 'interceptSendToEndpoint': return CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(newBody);
-            case 'choice': return CamelDefinitionYamlStep.readChoiceDefinition(newBody);
-            case 'whenSkipSendToEndpoint': return CamelDefinitionYamlStep.readWhenSkipSendToEndpointDefinition(newBody);
+            case 'policy': return CamelDefinitionYamlStep.readPolicyDefinition(newBody);
+            case 'pollEnrich': return CamelDefinitionYamlStep.readPollEnrichDefinition(newBody);
+            case 'process': return CamelDefinitionYamlStep.readProcessDefinition(newBody);
+            case 'recipientList': return CamelDefinitionYamlStep.readRecipientListDefinition(newBody);
+            case 'removeHeader': return CamelDefinitionYamlStep.readRemoveHeaderDefinition(newBody);
+            case 'removeHeaders': return CamelDefinitionYamlStep.readRemoveHeadersDefinition(newBody);
+            case 'removeProperties': return CamelDefinitionYamlStep.readRemovePropertiesDefinition(newBody);
+            case 'removeProperty': return CamelDefinitionYamlStep.readRemovePropertyDefinition(newBody);
+            case 'resequence': return CamelDefinitionYamlStep.readResequenceDefinition(newBody);
+            case 'resumable': return CamelDefinitionYamlStep.readResumableDefinition(newBody);
+            case 'rollback': return CamelDefinitionYamlStep.readRollbackDefinition(newBody);
+            case 'routingSlip': return CamelDefinitionYamlStep.readRoutingSlipDefinition(newBody);
+            case 'saga': return CamelDefinitionYamlStep.readSagaDefinition(newBody);
             case 'sample': return CamelDefinitionYamlStep.readSamplingDefinition(newBody);
+            case 'script': return CamelDefinitionYamlStep.readScriptDefinition(newBody);
+            case 'setBody': return CamelDefinitionYamlStep.readSetBodyDefinition(newBody);
+            case 'setExchangePattern': return CamelDefinitionYamlStep.readSetExchangePatternDefinition(newBody);
             case 'setHeader': return CamelDefinitionYamlStep.readSetHeaderDefinition(newBody);
+            case 'setProperty': return CamelDefinitionYamlStep.readSetPropertyDefinition(newBody);
             case 'sort': return CamelDefinitionYamlStep.readSortDefinition(newBody);
+            case 'split': return CamelDefinitionYamlStep.readSplitDefinition(newBody);
+            case 'step': return CamelDefinitionYamlStep.readStepDefinition(newBody);
+            case 'stop': return CamelDefinitionYamlStep.readStopDefinition(newBody);
+            case 'threads': return CamelDefinitionYamlStep.readThreadsDefinition(newBody);
+            case 'throttle': return CamelDefinitionYamlStep.readThrottleDefinition(newBody);
+            case 'throwException': return CamelDefinitionYamlStep.readThrowExceptionDefinition(newBody);
+            case 'to': return CamelDefinitionYamlStep.readToDefinition(newBody);
             case 'toD': return CamelDefinitionYamlStep.readToDynamicDefinition(newBody);
+            case 'transacted': return CamelDefinitionYamlStep.readTransactedDefinition(newBody);
+            case 'transform': return CamelDefinitionYamlStep.readTransformDefinition(newBody);
+            case 'doTry': return CamelDefinitionYamlStep.readTryDefinition(newBody);
+            case 'unmarshal': return CamelDefinitionYamlStep.readUnmarshalDefinition(newBody);
+            case 'validate': return CamelDefinitionYamlStep.readValidateDefinition(newBody);
+            case 'when': return CamelDefinitionYamlStep.readWhenDefinition(newBody);
+            case 'whenSkipSendToEndpoint': return CamelDefinitionYamlStep.readWhenSkipSendToEndpointDefinition(newBody);
+            case 'wireTap': return CamelDefinitionYamlStep.readWireTapDefinition(newBody);
+            case 'serviceCall': return CamelDefinitionYamlStep.readServiceCallDefinition(newBody);
             default: return new CamelElement('');
         }
     }
diff --git a/karavan-core/src/core/model/CamelDefinition.ts b/karavan-core/src/core/model/CamelDefinition.ts
index 676dbab0..63b0827b 100644
--- a/karavan-core/src/core/model/CamelDefinition.ts
+++ b/karavan-core/src/core/model/CamelDefinition.ts
@@ -1516,18 +1516,18 @@ export class ToDefinition extends CamelElement {
 }
 
 export class ToDynamicDefinition extends CamelElement {
-    stepName?: string = 'toDynamic';
+    stepName?: string = 'toD';
+    uri: string = '';
+    pattern?: string;
+    cacheSize?: number;
+    ignoreInvalidEndpoint?: boolean;
     allowOptimisedComponents?: boolean;
     autoStartComponents?: boolean;
-    cacheSize?: number;
-    description?: string;
     disabled?: boolean;
-    id?: string = 'toDynamic-' + uuidv4().substring(0,4);
-    ignoreInvalidEndpoint?: boolean;
+    id?: string = 'toD-' + uuidv4().substring(0,4);
+    description?: string;
     inheritErrorHandler?: boolean;
     parameters?: any = {};
-    pattern?: string;
-    uri: string = '';
     public constructor(init?: Partial<ToDynamicDefinition>) {
         super('ToDynamicDefinition');
         Object.assign(this, init);
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
index a7fbbfa8..80490dd0 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
@@ -61,6 +61,8 @@ public class AbstractGenerator {
             className = "convertBodyTo";
         } else if (className.equals("FinallyDefinition")) {
             className = "doFinally";
+        } else if (className.equals("ToDynamicDefinition")) {
+            className = "toD";
         } else if (className.equals("SamplingDefinition")) {
             className = "sample";
         } else if (className.endsWith("Definition")) {
@@ -94,11 +96,60 @@ public class AbstractGenerator {
             String fullClassName = prop.getJsonObject("properties").getJsonObject(key).getString("$ref");
             String className = classSimple(fullClassName);
             stepNames.put(className, key);
-            System.out.println(className + " : " + key);
         }
         return stepNames;
     }
 
+    private Map<String, JsonObject> getJsonObjectProperties (JsonObject val) {
+        Map<String, JsonObject> properties = new LinkedHashMap<>();
+        val.getMap().keySet().forEach(s -> {
+            JsonObject value = val.getJsonObject(s);
+            if (!value.getMap().isEmpty()) {
+                properties.put(s, val.getJsonObject(s));
+            } else if (s.equals("expression")){
+                properties.put(s, JsonObject.of("$ref", "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"));
+            }
+        });
+        return properties;
+    }
+
+    protected Map<String, JsonObject> getClassProperties (JsonObject obj) {
+        Map<String, JsonObject> properties = new LinkedHashMap<>();
+
+        obj.getMap().keySet().forEach(key -> {
+            if (key.equals("oneOf")) {
+                JsonObject val = obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties");
+                properties.putAll(getJsonObjectProperties(val));
+            } else if (key.equals("properties")) {
+                JsonObject val = obj.getJsonObject("properties");
+                properties.putAll(getJsonObjectProperties(val));
+            } else if (key.equals("anyOf")) {
+                JsonArray vals = obj.getJsonArray("anyOf").getJsonObject(0).getJsonArray("oneOf");
+                for (int i = 0; i < vals.size(); i++){
+                    JsonObject data = vals.getJsonObject(i);
+                    if (!data.containsKey("not") && data.containsKey("type")) {
+                        JsonObject val = data.getJsonObject("properties");
+                        properties.putAll(getJsonObjectProperties(val));
+                    }
+                }
+            }
+        });
+        return properties;
+    }
+
+    protected Comparator<String> getComparator(String stepName) {
+        String json = getMetaModel(stepName);
+        if (json != null) {
+            JsonObject props = new JsonObject(json).getJsonObject("properties");
+            List propsLowerCase = props.getMap().keySet().stream().map(String::toLowerCase).collect(Collectors.toList());
+            return Comparator.comparing(e -> {
+                if (propsLowerCase.contains(e.toLowerCase())) return propsLowerCase.indexOf(e.toLowerCase());
+                else return propsLowerCase.size() + 1;
+            });
+        }
+        return Comparator.comparing(s -> 0);
+    }
+
 //    protected Map<String, String> getStepNames(){
 //        // Prepare stepNames map
 //        JsonObject definitions = getDefinitions();
@@ -118,8 +169,8 @@ public class AbstractGenerator {
         // Prepare stepNames map
         Map<String, String> stepNames = getProcessorStepNameMap();
 
-        Map<String, JsonObject> classProps = new HashMap<>();
-        Map<String, Object> defsMap = new HashMap<>();
+        Map<String, JsonObject> classProps = new LinkedHashMap<>();
+        Map<String, Object> defsMap = new LinkedHashMap<>();
         defsMap.putAll(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties").getMap());
         defsMap.putAll(new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("properties").getMap());
 
@@ -284,26 +335,8 @@ public class AbstractGenerator {
         return result;
     }
 
-    protected Map<String, String> getProcessorStepName(JsonObject properties) {
-        Map<String, String> result = new HashMap<>();
-        properties.getMap().forEach((name, o) -> {
-            String ref = properties.getJsonObject(name).getString("$ref");
-            ref = ref.equals("#/items/definitions/org.apache.camel.dsl.yaml.deserializers.RouteFromDefinitionDeserializer")
-                    ? "#/items/definitions/org.apache.camel.model.FromDefinition"
-                    : ref;
-            ref = ref.equals("#/items/definitions/org.apache.camel.dsl.yaml.deserializers.ErrorHandlerBuilderDeserializer")
-                    ? "#/items/definitions/org.apache.camel.model.ErrorHandlerDefinition"
-                    : ref;
-            String className = classSimple(ref);
-            result.put(className, className.equals("ToDynamicDefinition") ? "toD" : name);
-        });
-        return result;
-    }
-
-
-
     protected Map<String, String> getProcessorStepNameMapForObject(String key, JsonObject jsonObject) {
-        Map<String, String> result = new HashMap<>();
+        Map<String, String> result = new LinkedHashMap<>();
 
         jsonObject.fieldNames().forEach(k -> {
             Object object = jsonObject.getValue(k);
@@ -323,7 +356,7 @@ public class AbstractGenerator {
     }
 
     protected Map<String, String> getProcessorStepNameMapForArray(JsonArray jsonArray) {
-        Map<String, String> result = new HashMap<>();
+        Map<String, String> result = new LinkedHashMap<>();
 
         jsonArray.forEach(object -> {
             if (object instanceof JsonObject) {
@@ -339,8 +372,28 @@ public class AbstractGenerator {
         String camelYamlDSL = getCamelYamlDSL();
         JsonObject definitions = new JsonObject(camelYamlDSL);
 
-        Map<String, String> result = new HashMap<>(getProcessorStepNameMapForObject(null, definitions));
-        result.put("ToDynamicDefinition", "toD");
+        Map<String, String> result = new LinkedHashMap<>(getProcessorStepNameMapForObject(null, definitions));
+        return result;
+    }
+
+    protected Map<String, String> getProcessorDefinitionStepNameMap() {
+        Map<String, String> result = new LinkedHashMap<>();
+        String camelYamlDSL = getCamelYamlDSL();
+        JsonObject definitions = new JsonObject(camelYamlDSL);
+
+        JsonObject properties = definitions
+                .getJsonObject("items")
+                .getJsonObject("definitions")
+                .getJsonObject("org.apache.camel.model.ProcessorDefinition")
+                .getJsonObject("properties");
+
+        properties.getMap().forEach((key, o) -> {
+            String ref = ((Map)o).get("$ref").toString();
+            System.out.println(ref);
+            System.out.println(key);
+            String className = classSimple(ref);
+            result.put(className, key);
+        });
         return result;
     }
 
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
index 8979d8d1..e440c396 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java
@@ -66,8 +66,9 @@ public final class CamelDefinitionApiGenerator extends AbstractGenerator {
         });
 
         // generate createStep function
-        Map<String, String> stepNames  = getProcessorStepName(new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("properties"));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
+        Map<String, String> stepNames = getProcessorStepNameMap();
+//        Map<String, String> stepNames  = getProcessorStepName(new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("properties"));
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
         StringBuilder cs = new StringBuilder(
                 "    static createStep = (name: string, body: any, clone: boolean = false): CamelElement => {\n" +
                 "       const newBody = CamelUtil.camelizeBody(name, body, clone);\n" +
@@ -85,8 +86,8 @@ public final class CamelDefinitionApiGenerator extends AbstractGenerator {
         camelModel.append(cs);
 
         // generate createExpression function
-        stepNames.clear();
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
+//        stepNames.clear();
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
         StringBuilder ce = new StringBuilder(
                 "    static createExpression = (name: string, body: any): CamelElement => {\n" +
                         "       const newBody = CamelUtil.camelizeBody(name, body, false);\n" +
@@ -94,7 +95,9 @@ public final class CamelDefinitionApiGenerator extends AbstractGenerator {
                         "       delete newBody.dslName;\n" +
                         "       switch (name) { \n"
         );
-        stepNames.forEach((className, stepName) -> {
+        stepNames.entrySet().stream().filter(e-> e.getKey().endsWith("Expression")).forEach(e -> {
+            String className = e.getKey();
+            String stepName = e.getValue();
             String code = String.format("            case '%1$s': return CamelDefinitionApi.create%1$s(newBody);\n", className);
             ce.append(code);
         });
@@ -105,8 +108,8 @@ public final class CamelDefinitionApiGenerator extends AbstractGenerator {
         camelModel.append(ce);
 
         // generate createDataFormat function
-        stepNames.clear();
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
+//        stepNames.clear();
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
         StringBuilder df = new StringBuilder(
                 "    static createDataFormat = (name: string, body: any): CamelElement => {\n" +
                         "       const newBody = CamelUtil.camelizeBody(name, body, false);\n" +
@@ -114,7 +117,10 @@ public final class CamelDefinitionApiGenerator extends AbstractGenerator {
                         "       delete newBody.dslName;\n" +
                         "       switch (name) { \n"
         );
-        stepNames.forEach((className, stepName) -> {
+        stepNames.entrySet().stream().filter(e-> e.getKey().endsWith("DataFormat")).forEach(e -> {
+            String className = e.getKey();
+            String stepName = e.getValue();
+//        stepNames.forEach((className, stepName) -> {
             String code = String.format("            case '%1$s': return CamelDefinitionApi.create%1$s(newBody);\n", className);
             df.append(code);
         });
@@ -132,44 +138,41 @@ public final class CamelDefinitionApiGenerator extends AbstractGenerator {
 
     private String generateModelApi(String classFullName, JsonObject obj) {
         String className = classSimple(classFullName);
+        String stepName = getStepNameForClass(className);
 
-        JsonObject properties = obj.containsKey("oneOf")
-                ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties")
-                : obj.getJsonObject("properties");
+        Map<String, JsonObject> properties = getClassProperties(obj);
 
         List<String> attrs = new ArrayList<>();
         AtomicBoolean hasId = new AtomicBoolean(false);
-        if (properties != null) {
-            properties.getMap().keySet().forEach(name -> {
-                JsonObject aValue = properties.getJsonObject(name);
-                if ("id".equals(name)) {
-                    hasId.set(true);
-                }
-                if (isAttributeRefArray(aValue) && name.equals("steps") && ! className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition") && ! className.equals("KameletDefinition")) {
-                    attrs.add("        def.steps = CamelDefinitionApi.createSteps(element?.steps);");
-                } else if (isAttributeRefArray(aValue) && !name.equals("steps")) {
-                    String code = String.format(
-                            "        def.%1$s = element && element?.%1$s ? element?.%1$s.map((x:any) => CamelDefinitionApi.create%2$s(x)) :[];"
-                            , name, getAttributeArrayClass(aValue));
-                    attrs.add(code);
-                } else if (isAttributeRef(aValue)
-                        && !getAttributeClass(aValue).equals("SagaActionUriDefinition") // SagaActionUriDefinition is exception
-                        && !getAttributeClass(aValue).equals("ToDefinition") // exception for ToDefinition (in REST Methods)
-                        && !getAttributeClass(aValue).equals("ToDynamicDefinition") // exception for ToDynamicDefinition (in REST Methods)
-                ) {
-                    String attributeClass = getAttributeClass(aValue);
-                    String template = attributeClass.equals("ExpressionDefinition")
-                            ? "        def.%1$s = CamelDefinitionApi.create%2$s(element.%1$s); \n"
-                            : "        if (element?.%1$s !== undefined) { \n" +
-                            "            def.%1$s = CamelDefinitionApi.create%2$s(element.%1$s); \n" +
-                            "        }";
-                    String code = String.format(template, name, getAttributeClass(aValue));
-                    attrs.add(code);
-                } else {
-
-                }
-            });
-        }
+        properties.keySet().stream().sorted(getComparator(stepName)).forEach(name -> {
+            JsonObject aValue = properties.get(name);
+            if ("id".equals(name)) {
+                hasId.set(true);
+            }
+            if (isAttributeRefArray(aValue) && name.equals("steps") && ! className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition") && ! className.equals("KameletDefinition")) {
+                attrs.add("        def.steps = CamelDefinitionApi.createSteps(element?.steps);");
+            } else if (isAttributeRefArray(aValue) && !name.equals("steps")) {
+                String code = String.format(
+                        "        def.%1$s = element && element?.%1$s ? element?.%1$s.map((x:any) => CamelDefinitionApi.create%2$s(x)) :[];"
+                        , name, getAttributeArrayClass(aValue));
+                attrs.add(code);
+            } else if (isAttributeRef(aValue)
+                    && !getAttributeClass(aValue).equals("SagaActionUriDefinition") // SagaActionUriDefinition is exception
+                    && !getAttributeClass(aValue).equals("ToDefinition") // exception for ToDefinition (in REST Methods)
+                    && !getAttributeClass(aValue).equals("ToDynamicDefinition") // exception for ToDynamicDefinition (in REST Methods)
+            ) {
+                String attributeClass = getAttributeClass(aValue);
+                String template = attributeClass.equals("ExpressionDefinition")
+                        ? "        def.%1$s = CamelDefinitionApi.create%2$s(element.%1$s); \n"
+                        : "        if (element?.%1$s !== undefined) { \n" +
+                        "            def.%1$s = CamelDefinitionApi.create%2$s(element.%1$s); \n" +
+                        "        }";
+                String code = String.format(template, name, getAttributeClass(aValue));
+                attrs.add(code);
+            } else {
+
+            }
+        });
         String stringToRequired = getStringToRequired(obj, className);
         String s2 = stringToRequired.isEmpty() ? "" : "\n" + stringToRequired;
         String s3 = attrs.size() > 0 ? "\n" + attrs.stream().collect(Collectors.joining("\n")) : "";
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
index c540caed..c217b5f1 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
@@ -58,41 +58,11 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
         writeFileText(targetModel, camelModel.toString());
     }
 
-    private Map<String, JsonObject> getJsonObjectProperties (JsonObject val) {
-        Map<String, JsonObject> properties = new LinkedHashMap<>();
-        val.getMap().keySet().forEach(s -> {
-            JsonObject value = val.getJsonObject(s);
-            if (!value.getMap().isEmpty()) {
-                properties.put(s, val.getJsonObject(s));
-            } else if (s.equals("expression")){
-                properties.put(s, JsonObject.of("$ref", "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"));
-            }
-        });
-        return properties;
-    }
+
 
     private String generateModel(String classFullName, JsonObject obj, JsonObject definitions, Map<String, JsonObject> dslMetadata) {
         String className = classSimple(classFullName);
-        Map<String, JsonObject> properties = new LinkedHashMap<>();
-
-        obj.getMap().keySet().forEach(key -> {
-            if (key.equals("oneOf")) {
-                JsonObject val = obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties");
-                properties.putAll(getJsonObjectProperties(val));
-            } else if (key.equals("properties")) {
-                JsonObject val = obj.getJsonObject("properties");
-                properties.putAll(getJsonObjectProperties(val));
-            } else if (key.equals("anyOf")) {
-                JsonArray vals = obj.getJsonArray("anyOf").getJsonObject(0).getJsonArray("oneOf");
-                for (int i = 0; i < vals.size(); i++){
-                    JsonObject data = vals.getJsonObject(i);
-                    if (!data.containsKey("not") && data.containsKey("type")) {
-                        JsonObject val = data.getJsonObject("properties");
-                        properties.putAll(getJsonObjectProperties(val));
-                    }
-                }
-            }
-        });
+        Map<String, JsonObject> properties = getClassProperties(obj);
 
         List<String> required = obj.containsKey("required") ? obj.getJsonArray("required").getList() : List.of();
         List<String> attrs = new ArrayList<>();
@@ -124,19 +94,6 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
         return String.format(readFileText(modelTemplate), className, s2);
     }
 
-    private Comparator<String> getComparator(String stepName) {
-        String json = getMetaModel(stepName);
-        if (json != null) {
-            JsonObject props = new JsonObject(json).getJsonObject("properties");
-            List propsLowerCase = props.getMap().keySet().stream().map(String::toLowerCase).collect(Collectors.toList());
-            return Comparator.comparing(e -> {
-                if (propsLowerCase.contains(e.toLowerCase())) return propsLowerCase.indexOf(e.toLowerCase());
-                else return propsLowerCase.size() + 1;
-            });
-        }
-        return Comparator.comparing(s -> 0);
-    }
-
     private String getAttributeType(String stepName, JsonObject attribute, boolean required, JsonObject definitions, String generatedValue) {
         if (attribute.containsKey("$ref")) {
             String classFullName = attribute.getString("$ref");
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
index f1c87d18..29b40606 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java
@@ -67,7 +67,7 @@ public final class CamelDefinitionYamlStepGenerator extends AbstractGenerator {
             camelModel.append(model).append(System.lineSeparator());
         });
         // generate readStep function
-        Map<String, String> stepNames  = getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties"));
+        Map<String, String> stepNames = getProcessorDefinitionStepNameMap();
         StringBuilder cs = new StringBuilder(
                 "    static readStep = (body: any, clone: boolean = false): CamelElement => {\n" +
                 "        const name = Object.getOwnPropertyNames(body)[0];\n" +
@@ -75,10 +75,9 @@ public final class CamelDefinitionYamlStepGenerator extends AbstractGenerator {
                 "        switch (name) { \n"
         );
         stepNames.forEach((className, stepName) -> {
-            String code = String.format("            case '%1$s': return CamelDefinitionYamlStep.read%2$s(newBody);\n",stepName, className);
+            String code = String.format("            case '%1$s': return CamelDefinitionYamlStep.read%2$s(newBody);\n", stepName, className);
             cs.append(code);
         });
-        cs.append("            case 'toD': return CamelDefinitionYamlStep.readToDynamicDefinition(newBody);\n");  //exception for ToDynamicDefinition
         cs.append(
                 "            default: return new CamelElement('');\n" +
                 "        }\n" +
@@ -93,65 +92,62 @@ public final class CamelDefinitionYamlStepGenerator extends AbstractGenerator {
 
     private String generateModelApi(String classFullName, JsonObject obj) {
         String className = classSimple(classFullName);
+        String stepName = getStepNameForClass(className);
 
         String s1 = getStringToRequired(obj, className);
         AtomicReference<String> s3 = new AtomicReference<>("");
 
-        JsonObject properties = obj.containsKey("oneOf")
-                ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties")
-                : obj.getJsonObject("properties");
+        Map<String, JsonObject> properties = getClassProperties(obj);
 
         Map<String, String> attrs = new HashMap<>();
-        if (properties != null) {
-            properties.getMap().keySet().forEach(aName -> {
-                if (aName.equals("uri")) {
-                    s3.set("\n        def = ComponentApi.parseElementUri(def);");
-                }
-                JsonObject aValue = properties.getJsonObject(aName);
-                if (isAttributeRefArray(aValue) && aName.equals("steps") && ! className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition") && ! className.equals("KameletDefinition")) {
-                    attrs.put(aName, "        def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);\n");
-                } else if (isAttributeRefArray(aValue) && !aName.equals("steps")) {
-                    String format = Arrays.asList("intercept", "interceptFrom", "interceptSendToEndpoint", "onCompletion", "onException").contains(aName)
-                            ? "        def.%1$s = element && element?.%1$s ? element?.%1$s.map((x:any) => CamelDefinitionYamlStep.read%2$s(x.%1$s)) :[]; \n"
-                            : "        def.%1$s = element && element?.%1$s ? element?.%1$s.map((x:any) => CamelDefinitionYamlStep.read%2$s(x)) :[]; \n";
-
-                    String code = String.format(format, aName, getAttributeArrayClass(aValue));
-                    attrs.put(aName, code);
-                } else if (isAttributeRef(aValue) && getAttributeClass(aValue).equals("ExpressionDefinition")) { // Expressions implicits
-                    String code = String.format(
-                                    "        if (element?.%1$s !== undefined) { \n" +
-                                    "            def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s); \n" +
-                                    "        } else {\n" +
-                                    "            const languageName: string | undefined = Object.keys(element).filter(key => CamelMetadataApi.hasLanguage(key))[0] || undefined;\n" +
-                                    "            if (languageName){\n" +
-                                    "                const exp:any = {};\n" +
-                                    "                exp[languageName] = element[languageName]\n" +
-                                    "                def.%1$s = CamelDefinitionYamlStep.readExpressionDefinition(exp);\n" +
-                                    "                delete (def as any)[languageName];\n" +
-                                    "            }\n" +
-                                    "        }\n"
-                            , aName, getAttributeClass(aValue));
-                    attrs.put(aName, code);
-                } else if (isAttributeRef(aValue)
-                        && !getAttributeClass(aValue).equals("SagaActionUriDefinition") // SagaActionUriDefinition is exception
-                        && !getAttributeClass(aValue).equals("ToDefinition") // exception for ToDefinition (in REST Methods)
-                        && !getAttributeClass(aValue).equals("ToDynamicDefinition") // exception for ToDynamicDefinition (in REST Methods)
-                            ) {
-                    String code = String.format(
-                                    "        if (element?.%1$s !== undefined) { \n" +
-                                    "            if (Array.isArray(element.%1$s)) { \n" +
-                                    "               def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s[0]); \n" +
-                                    "            } else { \n" +
-                                    "               def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s); \n" +
-                                    "            } \n" +
-                                    "        } \n"
-                            , aName, getAttributeClass(aValue));
-                    attrs.put(aName, code);
-                } else {
-
-                }
-            });
-        }
+        properties.keySet().stream().sorted(getComparator(stepName)).forEach(aName -> {
+            if (aName.equals("uri")) {
+                s3.set("\n        def = ComponentApi.parseElementUri(def);");
+            }
+            JsonObject aValue = properties.get(aName);
+            if (isAttributeRefArray(aValue) && aName.equals("steps") && ! className.equals("ChoiceDefinition") && ! className.equals("SwitchDefinition") && ! className.equals("KameletDefinition")) {
+                attrs.put(aName, "        def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);\n");
+            } else if (isAttributeRefArray(aValue) && !aName.equals("steps")) {
+                String format = Arrays.asList("intercept", "interceptFrom", "interceptSendToEndpoint", "onCompletion", "onException").contains(aName)
+                        ? "        def.%1$s = element && element?.%1$s ? element?.%1$s.map((x:any) => CamelDefinitionYamlStep.read%2$s(x.%1$s)) :[]; \n"
+                        : "        def.%1$s = element && element?.%1$s ? element?.%1$s.map((x:any) => CamelDefinitionYamlStep.read%2$s(x)) :[]; \n";
+
+                String code = String.format(format, aName, getAttributeArrayClass(aValue));
+                attrs.put(aName, code);
+            } else if (isAttributeRef(aValue) && getAttributeClass(aValue).equals("ExpressionDefinition")) { // Expressions implicits
+                String code = String.format(
+                        "        if (element?.%1$s !== undefined) { \n" +
+                                "            def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s); \n" +
+                                "        } else {\n" +
+                                "            const languageName: string | undefined = Object.keys(element).filter(key => CamelMetadataApi.hasLanguage(key))[0] || undefined;\n" +
+                                "            if (languageName){\n" +
+                                "                const exp:any = {};\n" +
+                                "                exp[languageName] = element[languageName]\n" +
+                                "                def.%1$s = CamelDefinitionYamlStep.readExpressionDefinition(exp);\n" +
+                                "                delete (def as any)[languageName];\n" +
+                                "            }\n" +
+                                "        }\n"
+                        , aName, getAttributeClass(aValue));
+                attrs.put(aName, code);
+            } else if (isAttributeRef(aValue)
+                    && !getAttributeClass(aValue).equals("SagaActionUriDefinition") // SagaActionUriDefinition is exception
+                    && !getAttributeClass(aValue).equals("ToDefinition") // exception for ToDefinition (in REST Methods)
+                    && !getAttributeClass(aValue).equals("ToDynamicDefinition") // exception for ToDynamicDefinition (in REST Methods)
+            ) {
+                String code = String.format(
+                        "        if (element?.%1$s !== undefined) { \n" +
+                                "            if (Array.isArray(element.%1$s)) { \n" +
+                                "               def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s[0]); \n" +
+                                "            } else { \n" +
+                                "               def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s); \n" +
+                                "            } \n" +
+                                "        } \n"
+                        , aName, getAttributeClass(aValue));
+                attrs.put(aName, code);
+            } else {
+
+            }
+        });
         return String.format(readFileText(modelTemplate), className, s1, s3, attrs.values().stream().collect(Collectors.joining("")));
     }
 
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
index 5e6360e4..e48b32d8 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
@@ -28,8 +28,8 @@ public final class KaravanGenerator {
             paths = new String[] {args[0]};
         }
         CamelDefinitionGenerator.generate();
-//        CamelDefinitionApiGenerator.generate();
-//        CamelDefinitionYamlStepGenerator.generate();
+        CamelDefinitionApiGenerator.generate();
+        CamelDefinitionYamlStepGenerator.generate();
 //        CamelMetadataGenerator.generate();
         KameletGenerator.generate(paths);
         CamelComponentsGenerator.generate(paths);


[camel-karavan] 03/04: CamelMetadataGenerator for Camel YAML DSL 4.1.0

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit bfea1a8a6caa8ef6ce7a44e9c3b7d0925f3a5869
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Thu Oct 19 19:47:00 2023 -0400

    CamelMetadataGenerator for Camel YAML DSL 4.1.0
---
 karavan-core/src/core/api/CamelDefinitionApiExt.ts |  63 +---
 karavan-core/src/core/model/CamelDefinition.ts     |   6 +-
 karavan-core/src/core/model/CamelMetadata.ts       | 401 ++++++---------------
 .../camel/karavan/generator/AbstractGenerator.java |   7 +-
 .../karavan/generator/CamelMetadataGenerator.java  |   6 +-
 .../camel/karavan/generator/KaravanGenerator.java  |   2 +-
 6 files changed, 136 insertions(+), 349 deletions(-)

diff --git a/karavan-core/src/core/api/CamelDefinitionApiExt.ts b/karavan-core/src/core/api/CamelDefinitionApiExt.ts
index 954c613f..6ec8ffe5 100644
--- a/karavan-core/src/core/api/CamelDefinitionApiExt.ts
+++ b/karavan-core/src/core/api/CamelDefinitionApiExt.ts
@@ -44,12 +44,7 @@ export class CamelDefinitionApiExt {
         return integration.spec.flows?.filter(flow => !types.includes(flow.dslName)) ?? [];
     }
 
-    static addStepToIntegration = (
-        integration: Integration,
-        step: CamelElement,
-        parentId: string,
-        position?: number,
-    ): Integration => {
+    static addStepToIntegration = (integration: Integration, step: CamelElement, parentId: string, position?: number,): Integration => {
         if (step.dslName === 'RouteDefinition') {
             integration.spec.flows?.push(step as RouteDefinition);
         } else {
@@ -57,31 +52,17 @@ export class CamelDefinitionApiExt {
             CamelDefinitionApiExt.getFlowsNotOfTypes(integration, ['RouteConfigurationDefinition', 'RouteDefinition']).forEach(bean =>
                 flows.push(bean),
             );
-            const routes = CamelDefinitionApiExt.addStepToSteps(
-                CamelDefinitionApiExt.getFlowsOfType(integration, 'RouteDefinition'),
-                step,
-                parentId,
-                position,
-            );
+            const routes = CamelDefinitionApiExt.addStepToSteps(CamelDefinitionApiExt.getFlowsOfType(integration, 'RouteDefinition'), step, parentId, position,);
             flows.push(...routes);
             const routeConfigurations = CamelDefinitionApiExt.addStepToSteps(
-                CamelDefinitionApiExt.getFlowsOfType(integration, 'RouteConfigurationDefinition'),
-                step,
-                parentId,
-                position,
-            );
+                CamelDefinitionApiExt.getFlowsOfType(integration, 'RouteConfigurationDefinition'),step, parentId, position,);
             flows.push(...routeConfigurations);
             integration.spec.flows = flows;
         }
         return integration;
     }; 
 
-    static addStepToStep = (
-        step: CamelElement,
-        stepAdded: CamelElement,
-        parentId: string,
-        position: number = -1,
-    ): CamelElement => {
+    static addStepToStep = (step: CamelElement, stepAdded: CamelElement, parentId: string, position: number = -1,): CamelElement => {
         const result = CamelUtil.cloneStep(step);
         const children = CamelDefinitionApiExt.getElementChildrenDefinition(result.dslName);
         let added = false;
@@ -100,12 +81,7 @@ export class CamelDefinitionApiExt {
             } else {
                 const fieldValue = (result as any)[child.name];
                 if (child.multiple) {
-                    (result as any)[child.name] = CamelDefinitionApiExt.addStepToSteps(
-                        (result as any)[child.name],
-                        stepAdded,
-                        parentId,
-                        position,
-                    );
+                    (result as any)[child.name] = CamelDefinitionApiExt.addStepToSteps((result as any)[child.name], stepAdded, parentId, position,);
                 } else if (fieldValue) {
                     (result as any)[child.name] = CamelDefinitionApiExt.addStepToStep(fieldValue, stepAdded, parentId, position);
                 }
@@ -127,12 +103,7 @@ export class CamelDefinitionApiExt {
         return result;
     };
     
-    static addStepToSteps = (
-        steps: CamelElement[],
-        step: CamelElement,
-        parentId: string,
-        position?: number,
-    ): CamelElement[] => {
+    static addStepToSteps = (steps: CamelElement[], step: CamelElement, parentId: string, position?: number,): CamelElement[] => {
         const result: CamelElement[] = [];
         for (const element of steps) {
             const newStep = CamelDefinitionApiExt.addStepToStep(element, step, parentId, position);
@@ -169,12 +140,8 @@ export class CamelDefinitionApiExt {
         return result;
     };
 
-    static findElementInElements = (
-        steps: CamelElement[] | undefined,
-        uuid: string,
-        result: CamelElementMeta = new CamelElementMeta(undefined, undefined, undefined),
-        parentUuid?: string,
-    ): CamelElementMeta => {
+    static findElementInElements = (steps: CamelElement[] | undefined, uuid: string, result: CamelElementMeta = new CamelElementMeta(undefined, undefined, undefined),
+                                    parentUuid?: string,): CamelElementMeta => {
         if (result?.step !== undefined) {
             return result;
         }
@@ -225,23 +192,13 @@ export class CamelDefinitionApiExt {
         return hasId;
     };
 
-    static moveRouteElement = (
-        integration: Integration,
-        source: string,
-        target: string,
-        asChild: boolean,
-    ): Integration => {
+    static moveRouteElement = (integration: Integration, source: string, target: string, asChild: boolean,): Integration => {
         const sourceFindStep = CamelDefinitionApiExt.findElementMetaInIntegration(integration, source);
         const sourceStep = sourceFindStep.step;
         const sourceUuid = sourceStep?.uuid;
         const targetFindStep = CamelDefinitionApiExt.findElementMetaInIntegration(integration, target);
         const parentUuid = targetFindStep.parentUuid;
-        if (
-            sourceUuid &&
-            parentUuid &&
-            sourceStep &&
-            !CamelDefinitionApiExt.findElementPathUuids(integration, target).includes(source)
-        ) {
+        if (sourceUuid && parentUuid && sourceStep && !CamelDefinitionApiExt.findElementPathUuids(integration, target).includes(source)) {
             CamelDefinitionApiExt.deleteStepFromIntegration(integration, sourceUuid);
             if (asChild) {
                 return CamelDefinitionApiExt.addStepToIntegration(
diff --git a/karavan-core/src/core/model/CamelDefinition.ts b/karavan-core/src/core/model/CamelDefinition.ts
index 63b0827b..2c2747ac 100644
--- a/karavan-core/src/core/model/CamelDefinition.ts
+++ b/karavan-core/src/core/model/CamelDefinition.ts
@@ -1564,12 +1564,12 @@ export class TransformDefinition extends CamelElement {
 }
 
 export class TryDefinition extends CamelElement {
-    stepName?: string = 'try';
-    description?: string;
+    stepName?: string = 'doTry';
     disabled?: boolean;
+    id?: string = 'doTry-' + uuidv4().substring(0,4);
+    description?: string;
     doCatch?: CatchDefinition[] = [];
     doFinally?: FinallyDefinition;
-    id?: string = 'try-' + uuidv4().substring(0,4);
     inheritErrorHandler?: boolean;
     steps?: CamelElement[] = [];
     public constructor(init?: Partial<TryDefinition>) {
diff --git a/karavan-core/src/core/model/CamelMetadata.ts b/karavan-core/src/core/model/CamelMetadata.ts
index 30db399b..5f28b4e9 100644
--- a/karavan-core/src/core/model/CamelMetadata.ts
+++ b/karavan-core/src/core/model/CamelMetadata.ts
@@ -191,13 +191,13 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('ignoreTrailingWhitespaces', 'Ignore Trailing Whitespaces', "Whether or not the trailing white spaces must be ignored. The default value is true", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('ignoreLeadingWhitespaces', 'Ignore Leading Whitespaces', "Whether or not the leading white spaces must be ignored. The default value is true", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('headersDisabled', 'Headers Disabled', "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
-        new PropertyMeta('headerExtractionEnabled', 'Header Extraction Enabled', "Whether or not the header must be read in the first line of the test document The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
+        new PropertyMeta('headerExtractionEnabled', 'Header Extraction Enabled', "Whether or not the header must be read in the first line of the test document. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('numberOfRecordsToRead', 'Number Of Records To Read', "The maximum number of record to read.", 'number', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('emptyValue', 'Empty Value', "The String representation of an empty value", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('lineSeparator', 'Line Separator', "The line separator of the files The default value is to use the JVM platform line separator", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('normalizedLineSeparator', 'Normalized Line Separator', "The normalized line separator of the files The default value is a new line character.", 'string', '', '\n', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('emptyValue', 'Empty Value', "The String representation of an empty value.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('lineSeparator', 'Line Separator', "The line separator of the files. The default value is to use the JVM platform line separator", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('normalizedLineSeparator', 'Normalized Line Separator', "The normalized line separator of the files. The default value is a new line character.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('comment', 'Comment', "The comment symbol. The default value is #", 'string', '', '#', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
+        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('asMap', 'As Map', "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('univocityHeader', 'univocityHeader', "univocityHeader", 'UniVocityHeader', '', '', false, false, true, true, '', ''),
@@ -465,13 +465,13 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('ignoreTrailingWhitespaces', 'Ignore Trailing Whitespaces', "Whether or not the trailing white spaces must be ignored. The default value is true", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('ignoreLeadingWhitespaces', 'Ignore Leading Whitespaces', "Whether or not the leading white spaces must be ignored. The default value is true", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('headersDisabled', 'Headers Disabled', "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
-        new PropertyMeta('headerExtractionEnabled', 'Header Extraction Enabled', "Whether or not the header must be read in the first line of the test document The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
+        new PropertyMeta('headerExtractionEnabled', 'Header Extraction Enabled', "Whether or not the header must be read in the first line of the test document. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('numberOfRecordsToRead', 'Number Of Records To Read', "The maximum number of record to read.", 'number', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('emptyValue', 'Empty Value', "The String representation of an empty value", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('lineSeparator', 'Line Separator', "The line separator of the files The default value is to use the JVM platform line separator", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('normalizedLineSeparator', 'Normalized Line Separator', "The normalized line separator of the files The default value is a new line character.", 'string', '', '\n', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('emptyValue', 'Empty Value', "The String representation of an empty value.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('lineSeparator', 'Line Separator', "The line separator of the files. The default value is to use the JVM platform line separator", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('normalizedLineSeparator', 'Normalized Line Separator', "The normalized line separator of the files. The default value is a new line character.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('comment', 'Comment', "The comment symbol. The default value is #", 'string', '', '#', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
+        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('asMap', 'As Map', "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('univocityHeader', 'univocityHeader', "univocityHeader", 'UniVocityHeader', '', '', false, false, true, true, '', ''),
@@ -510,13 +510,13 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('ignoreTrailingWhitespaces', 'Ignore Trailing Whitespaces', "Whether or not the trailing white spaces must be ignored. The default value is true", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('ignoreLeadingWhitespaces', 'Ignore Leading Whitespaces', "Whether or not the leading white spaces must be ignored. The default value is true", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('headersDisabled', 'Headers Disabled', "Whether or not the headers are disabled. When defined, this option explicitly sets the headers as null which indicates that there is no header. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
-        new PropertyMeta('headerExtractionEnabled', 'Header Extraction Enabled', "Whether or not the header must be read in the first line of the test document The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
+        new PropertyMeta('headerExtractionEnabled', 'Header Extraction Enabled', "Whether or not the header must be read in the first line of the test document. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('numberOfRecordsToRead', 'Number Of Records To Read', "The maximum number of record to read.", 'number', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('emptyValue', 'Empty Value', "The String representation of an empty value", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('lineSeparator', 'Line Separator', "The line separator of the files The default value is to use the JVM platform line separator", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('normalizedLineSeparator', 'Normalized Line Separator', "The normalized line separator of the files The default value is a new line character.", 'string', '', '\n', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('emptyValue', 'Empty Value', "The String representation of an empty value.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('lineSeparator', 'Line Separator', "The line separator of the files. The default value is to use the JVM platform line separator", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('normalizedLineSeparator', 'Normalized Line Separator', "The normalized line separator of the files. The default value is a new line character.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('comment', 'Comment', "The comment symbol. The default value is #", 'string', '', '#', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at one. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
+        new PropertyMeta('lazyLoad', 'Lazy Load', "Whether the unmarshalling should produce an iterator that reads the lines on the fly or if all the lines must be read at once. The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('asMap', 'As Map', "Whether the unmarshalling should produce maps for the lines values instead of lists. It requires to have header (either defined or collected). The default value is false", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('univocityHeader', 'univocityHeader', "univocityHeader", 'UniVocityHeader', '', '', false, false, true, true, '', ''),
@@ -721,6 +721,7 @@ export const CamelLanguageMetadata: ElementMeta[] = [
         new PropertyMeta('method', 'Method', "Name of method to call", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('beanType', 'Bean Type', "Class name (fully qualified) of the bean to use Will lookup in registry and if there is a single instance of the same type, then the existing bean is used, otherwise a new bean is created (requires a default no-arg constructor).", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('scope', 'Scope', "Scope of bean. When using singleton scope (default) the bean is created or looked up only once and reused for the lifetime of the endpoint. The bean should be thread-safe in case concurrent threads is calling the bean at the same time. When using request scope the bean is created or looked up once per request (exchange). This can be used if you want to store state on a bean while processing a request and you want to call the same bean instance  [...]
+        new PropertyMeta('validate', 'Validate', "Whether to validate the bean has the configured method.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
         new PropertyMeta('resultType', 'Result Type', "Sets the class of the result type (type from output)", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -806,6 +807,31 @@ export const CamelLanguageMetadata: ElementMeta[] = [
         new PropertyMeta('trim', 'Trim', "Whether to trim the value to remove leading and trailing whitespaces and line breaks", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('expression', 'ExpressionDefinition', 'Expression', "A useful base class for an expression", 'language', [
+        new PropertyMeta('constant', 'constant', "constant", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('csimple', 'csimple', "csimple", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('datasonnet', 'datasonnet', "datasonnet", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('exchangeProperty', 'exchangeProperty', "exchangeProperty", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('groovy', 'groovy', "groovy", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('header', 'header', "header", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('hl7terser', 'hl7terser', "hl7terser", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('joor', 'joor', "joor", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('jq', 'jq', "jq", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('js', 'js', "js", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('jsonpath', 'jsonpath', "jsonpath", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('language', 'language', "language", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('method', 'method', "method", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('mvel', 'mvel', "mvel", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('ognl', 'ognl', "ognl", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('python', 'python', "python", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('ref', 'ref', "ref", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('simple', 'simple', "simple", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('spel', 'spel', "spel", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('tokenize', 'tokenize', "tokenize", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('xpath', 'xpath', "xpath", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('xquery', 'xquery', "xquery", 'null', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('xtokenize', 'xtokenize', "xtokenize", 'null', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('xtokenize', 'XMLTokenizerExpression', 'XML Tokenize', "Tokenize XML payloads.", 'language,core,xml', [
         new PropertyMeta('expression', 'Expression', "The expression value in your chosen language syntax", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('mode', 'Mode', "The extraction mode. The available extraction modes are: i - injecting the contextual namespace bindings into the extracted token (default) w - wrapping the extracted token in its ancestor context u - unwrapping the extracted token to its child content t - extracting the text content of the specified element", 'string', 'i, w, u, t', 'i', false, false, false, false, '', ''),
@@ -826,11 +852,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('bearerToken', 'BearerTokenDefinition', 'Bearer Token', "Rest security bearer token authentication definition", 'rest,security,configuration', [
-        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('format', 'Format', "A hint to the client to identify how the bearer token is formatted.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('from', 'FromDefinition', 'From', "Act as a message source as input to a route", 'eip,routing', [
         new PropertyMeta('uri', 'Uri', "Sets the URI of the endpoint to use", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -838,13 +859,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('responseMessage', 'ResponseMessageDefinition', 'Response Message', "To specify the rest operation response messages.", 'rest', [
-        new PropertyMeta('code', 'Code', "The response code such as a HTTP status code", 'string', '', '200', false, false, false, false, '', ''),
-        new PropertyMeta('message', 'Message', "The response message (description)", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('responseModel', 'Response Model', "The response model", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('header', 'Header', "Adds a response header", 'ResponseHeaderDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('examples', 'Examples', "Examples of response messages", 'RestPropertyDefinition', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('refErrorHandler', 'RefErrorHandlerDefinition', 'Ref Error Handler', "References to an existing or custom error handler.", 'configuration,error', [
         new PropertyMeta('ref', 'Ref', "References to an existing or custom error handler.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -857,13 +871,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('when', 'WhenDefinition', 'When', "Triggers a route when the expression evaluates to true", 'eip,routing', [
-        new PropertyMeta('expression', 'Expression', "Expression used as the predicate to evaluate whether this when should trigger and route the message or not.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('loop', 'LoopDefinition', 'Loop', "Processes a message multiple times", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to define how many times we should loop. Notice the expression is only evaluated once, and should return a number as how many times to loop. A value of zero or negative means no looping. The loop is like a for-loop fashion, if you want a while loop, then the dynamic router may be a better choice.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('copy', 'Copy', "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -874,6 +881,12 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('weighted', 'WeightedLoadBalancerDefinition', 'Weighted', "Uses a weighted load distribution ratio for each server with respect to others.", 'eip,routing', [
+        new PropertyMeta('distributionRatio', 'Distribution Ratio', "The distribution ratio is a delimited String consisting on integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('distributionRatioDelimiter', 'Distribution Ratio Delimiter', "Delimiter used to specify the distribution ratio. The default value is , (comma)", 'string', '', ',', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('roundRobin', 'Round Robin', "To enable round robin mode. By default the weighted distribution mode is used. The default value is false.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('resumable', 'ResumableDefinition', 'Resumable', "Resume EIP to support resuming processing from last known offset.", 'eip,routing', [
         new PropertyMeta('resumeStrategy', 'Resume Strategy', "Sets the resume strategy to use", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('loggingLevel', 'Logging Level', "loggingLevel", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
@@ -894,6 +907,13 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('failover', 'FailoverLoadBalancerDefinition', 'Failover', "In case of failures the exchange will be tried on the next endpoint.", 'eip,routing', [
+        new PropertyMeta('exception', 'Exception', "A list of class names for specific exceptions to monitor. If no exceptions are configured then all exceptions are monitored", 'string', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('roundRobin', 'Round Robin', "Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick  [...]
+        new PropertyMeta('sticky', 'Sticky', "Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to u [...]
+        new PropertyMeta('maximumFailoverAttempts', 'Maximum Failover Attempts', "A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. his option can be used whether or not roundRobin is enabled or not.", 'string', '', '-1', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('otherwise', 'OtherwiseDefinition', 'Otherwise', "Route to be executed when all other choices evaluate to false", 'eip,routing', [
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -959,6 +979,9 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('roundRobin', 'RoundRobinLoadBalancerDefinition', 'Round Robin', "The destination endpoints are selected in a round-robin fashion. This is a well known and classic policy, which spreads the load evenly.", 'eip,routing', [
+        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('setExchangePattern', 'SetExchangePatternDefinition', 'Set Exchange Pattern', "Sets the exchange pattern on the message exchange", 'configuration', [
         new PropertyMeta('pattern', 'Pattern', "Sets the new exchange pattern of the Exchange to be used from this point forward", 'string', 'InOnly, InOut', '', true, false, false, false, '', ''),
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -1030,31 +1053,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('get', 'GetDefinition', 'Get', "Rest GET command", 'rest', [
-        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
-        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
-        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
-    ]),
-    new ElementMeta('restProperty', 'RestPropertyDefinition', 'Rest Property', "A key value pair", 'rest', [
-        new PropertyMeta('key', 'Key', "Property key", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('value', 'Value', "Property value", 'string', '', '', true, false, false, false, '', ''),
-    ]),
     new ElementMeta('enrich', 'EnrichDefinition', 'Enrich', "Enriches a message with data from a secondary resource", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('aggregationStrategy', 'Aggregation Strategy', "Sets the AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message.", 'string', '', '', false, false, false, false, '', 'org.apache.camel.AggregationStrategy'),
@@ -1082,18 +1080,11 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('value', 'ValueDefinition', 'Value', "A single value", 'configuration', [
-        new PropertyMeta('value', 'Value', "Property value", 'string', '', '', true, false, false, false, '', ''),
-    ]),
     new ElementMeta('kamelet', 'KameletDefinition', 'Kamelet', "To call Kamelets in special situations", 'eip,routing', [
         new PropertyMeta('name', 'Name', "Name of the Kamelet (templateId/routeId) to call. Options for the kamelet can be specified using uri syntax, eg mynamecount=4&type=gold.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('globalOption', 'GlobalOptionDefinition', 'Global Option', "Models a string key/value pair for configuring some global options on a Camel context such as max debug log length.", 'configuration', [
-        new PropertyMeta('key', 'Key', "Global option key", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('value', 'Value', "Global option value", 'string', '', '', true, false, false, false, '', ''),
-    ]),
     new ElementMeta('restBinding', 'RestBindingDefinition', 'Rest Binding', "To configure rest binding", 'rest', [
         new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json", 'string', '', '', false, false, false, false, '', ''),
@@ -1113,16 +1104,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('responseHeader', 'ResponseHeaderDefinition', 'Response Header', "To specify the rest operation response headers.", 'rest', [
-        new PropertyMeta('name', 'Name', "Name of the parameter. This option is mandatory.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('collectionFormat', 'Collection Format', "Sets the parameter collection format.", 'string', 'csv, multi, pipes, ssv, tsv', 'csv', false, false, false, false, '', ''),
-        new PropertyMeta('arrayType', 'Array Type', "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", 'string', '', 'string', false, false, false, false, '', ''),
-        new PropertyMeta('dataType', 'Data Type', "Sets the header data type.", 'string', '', 'string', false, false, false, false, '', ''),
-        new PropertyMeta('dataFormat', 'Data Format', "Sets the parameter data format.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('allowableValues', 'Allowable Values', "Sets the parameter list of allowable values.", 'ValueDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('example', 'Example', "Sets the example", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Description of the parameter.", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('circuitBreaker', 'CircuitBreakerDefinition', 'Circuit Breaker', "Route messages in a fault tolerance way using Circuit Breaker", 'eip,routing', [
         new PropertyMeta('configuration', 'Configuration', "Refers to a circuit breaker configuration (such as resillience4j, or microprofile-fault-tolerance) to use for configuring the circuit breaker EIP.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('resilience4jConfiguration', 'Resilience4j Configuration', "Configures the circuit breaker to use Resilience4j with the given configuration.", 'Resilience4jConfigurationDefinition', '', '', false, false, false, true, '', ''),
@@ -1144,19 +1125,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('ref', 'Ref', "Refers to the custom load balancer to lookup from the registry", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('param', 'ParamDefinition', 'Param', "To specify the rest operation parameters.", 'rest', [
-        new PropertyMeta('name', 'Name', "Sets the parameter name.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('type', 'Type', "Sets the parameter type.", 'string', 'body, formData, header, path, query', 'path', false, false, false, false, '', ''),
-        new PropertyMeta('defaultValue', 'Default Value', "Sets the parameter default value.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('required', 'Required', "Sets the parameter required flag.", 'boolean', '', 'true', false, false, false, false, '', ''),
-        new PropertyMeta('collectionFormat', 'Collection Format', "Sets the parameter collection format.", 'string', 'csv, multi, pipes, ssv, tsv', 'csv', false, false, false, false, '', ''),
-        new PropertyMeta('arrayType', 'Array Type', "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", 'string', '', 'string', false, false, false, false, '', ''),
-        new PropertyMeta('dataType', 'Data Type', "Sets the parameter data type.", 'string', '', 'string', false, false, false, false, '', ''),
-        new PropertyMeta('dataFormat', 'Data Format', "Sets the parameter data format.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('allowableValues', 'Allowable Values', "Sets the parameter list of allowable values (enum).", 'ValueDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('examples', 'Examples', "Sets the parameter examples.", 'RestPropertyDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the parameter description.", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('throttle', 'ThrottleDefinition', 'Throttle', "Controls the rate at which messages are passed to the next node in the route", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to configure the maximum number of messages to throttle per request", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('correlationExpression', 'Correlation Expression', "The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, '', ''),
@@ -1169,42 +1137,21 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('head', 'HeadDefinition', 'Head', "Rest HEAD command", 'rest', [
-        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
-        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
-        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('jtaTransactionErrorHandler', 'JtaTransactionErrorHandlerDefinition', 'Jta Transaction Error Handler', "JTA based transactional error handler (requires camel-jta).", 'configuration,error', [
         new PropertyMeta('transactedPolicyRef', 'Transacted Policy Ref', "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('rollbackLoggingLevel', 'Rollback Logging Level', "Sets the logging level to use for logging transactional rollback. This option is default WARN.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'WARN', false, false, false, false, '', ''),
+        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
+        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('loggerRef', 'Logger Ref', "References to a logger to use as logger for the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('level', 'Level', "Logging level to use when using the logging error handler type.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('logName', 'Log Name', "Name of the logger to use for the logging error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
-        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('level', 'Level', "Logging level to use by error handler", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('logName', 'Log Name', "Name of the logger to use by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('onRedeliveryRef', 'On Redelivery Ref', "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onExceptionOccurredRef', 'On Exception Occurred Ref', "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onPrepareFailureRef', 'On Prepare Failure Ref', "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('retryWhileRef', 'Retry While Ref', "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
-        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Sets a reference to a thread pool to be used by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
     new ElementMeta('marshal', 'MarshalDefinition', 'Marshal', "Marshals data into a specified format for transmission over a transport or component", 'dataformat,transformation', [
@@ -1320,6 +1267,14 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('securityDefinitions', 'RestSecuritiesDefinition', 'Rest Security Definitions', "To configure rest security definitions.", 'rest,security,configuration', [
+        new PropertyMeta('apiKey', 'apiKey', "apiKey", 'ApiKeyDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('basicAuth', 'basicAuth', "basicAuth", 'BasicAuthDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('bearer', 'bearer', "bearer", 'BearerTokenDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('mutualTls', 'mutualTls', "mutualTls", 'MutualTLSDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('oauth2', 'oauth2', "oauth2", 'OAuth2Definition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('openIdConnect', 'openIdConnect', "openIdConnect", 'OpenIdConnectDefinition', '', '', false, false, false, true, '', ''),
+    ]),
     new ElementMeta('pipeline', 'PipelineDefinition', 'Pipeline', "Routes the message to a sequence of processors.", 'eip,routing', [
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -1331,27 +1286,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('excludes', 'Excludes', "Exclude finding route builder from these java package names.", 'string', '', '', false, false, true, true, 'advanced', ''),
         new PropertyMeta('includes', 'Includes', "Include finding route builder from these java package names.", 'string', '', '', false, false, true, true, 'advanced', ''),
     ]),
-    new ElementMeta('patch', 'PatchDefinition', 'Patch', "Rest PATCH command", 'rest', [
-        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
-        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
-        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('validate', 'ValidateDefinition', 'Validate', "Validates a message based on an expression", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression to use for validation as a predicate. The expression should return either true or false. If returning false the message is invalid and an exception is thrown.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('predicateExceptionFactory', 'Predicate Exception Factory', "The bean id of custom PredicateExceptionFactory to use for creating the exception when the validation fails. By default, Camel will throw PredicateValidationException. By using a custom factory you can control which exception to throw instead.", 'string', '', '', false, false, false, false, 'advanced', ''),
@@ -1367,10 +1301,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('property', 'PropertyDefinition', 'Property', "A key value pair where the value is a literal value", 'configuration', [
-        new PropertyMeta('key', 'Key', "Property key", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('value', 'Value', "Property value", 'string', '', '', true, false, false, false, '', ''),
-    ]),
     new ElementMeta('validators', 'ValidatorsDefinition', 'Validations', "To configure validators.", 'validation', [
         new PropertyMeta('customValidator', 'customValidator', "customValidator", 'CustomValidatorDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('endpointValidator', 'endpointValidator', "endpointValidator", 'EndpointValidatorDefinition', '', '', false, false, false, true, '', ''),
@@ -1451,14 +1381,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('doCatch', 'CatchDefinition', 'Do Catch', "Catches exceptions as part of a try, catch, finally block", 'error', [
-        new PropertyMeta('exception', 'Exception', "The exception(s) to catch.", 'string', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onCatch is triggered. To be used for fine grained controlling whether a thrown exception should be intercepted by this exception type or not.", 'WhenDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('onFallback', 'OnFallbackDefinition', 'On Fallback', "Route to be executed when Circuit Breaker EIP executes fallback", 'eip,routing', [
         new PropertyMeta('fallbackViaNetwork', 'Fallback Via Network', "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", 'boolean', '', 'false', false, false, false, false, 'a [...]
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -1466,6 +1388,15 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('oauth2', 'OAuth2Definition', 'Oauth2', "Rest security OAuth2 definition", 'rest,security,configuration', [
+        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('authorizationUrl', 'Authorization Url', "The authorization URL to be used for this flow. This SHOULD be in the form of a URL. Required for implicit and access code flows", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('tokenUrl', 'Token Url', "The token URL to be used for this flow. This SHOULD be in the form of a URL. Required for password, application, and access code flows.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('refreshUrl', 'Refresh Url', "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('flow', 'Flow', "The flow used by the OAuth2 security scheme. Valid values are implicit, password, application or accessCode.", 'string', 'implicit, password, application, clientCredentials, accessCode, authorizationCode', '', false, false, false, false, '', ''),
+        new PropertyMeta('scopes', 'Scopes', "The available scopes for an OAuth2 security scheme", 'RestPropertyDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('rests', 'RestsDefinition', 'Rests', "A series of rest services defined using the rest-dsl", 'rest', [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -1486,10 +1417,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('failover', 'failover', "failover", 'FailoverLoadBalancerDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('random', 'random', "random", 'RandomLoadBalancerDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('roundRobin', 'roundRobin', "roundRobin", 'RoundRobinLoadBalancerDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
         new PropertyMeta('sticky', 'sticky', "sticky", 'StickyLoadBalancerDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('topic', 'topic', "topic", 'TopicLoadBalancerDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('weighted', 'weighted', "weighted", 'WeightedLoadBalancerDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
     new ElementMeta('process', 'ProcessDefinition', 'Process', "Calls a Camel processor", 'eip,endpoint', [
         new PropertyMeta('ref', 'Ref', "Reference to the Processor to lookup in the registry to use. Can also be used for creating new beans by their class name by prefixing with #class, eg #class:com.foo.MyClassType. And it is also possible to refer to singleton beans by their type in the registry by prefixing with #type: syntax, eg #type:com.foo.MyClassType", 'string', '', '', true, false, false, false, '', 'org.apache.camel.Processor'),
@@ -1514,7 +1445,7 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
     new ElementMeta('serviceCallConfiguration', 'ServiceCallConfigurationDefinition', 'Service Call Configuration', "Remote service call configuration", 'routing,cloud', [
-        new PropertyMeta('expression', 'Expression', "Configures the Expression using the given configuration.", 'ServiceCallExpressionConfiguration', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('expression', 'Expression', "Configures the Expression using the given configuration.", 'ExpressionDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the simple language expression.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('component', 'Component', "The component to use.", 'string', '', 'http', false, false, false, false, '', ''),
         new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut', '', false, false, false, false, '', ''),
@@ -1525,18 +1456,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('expressionRef', 'Expression Ref', "Set a reference to a custom Expression to use.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('blacklistServiceFilter', 'blacklistServiceFilter', "blacklistServiceFilter", 'BlacklistServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('cachingServiceDiscovery', 'cachingServiceDiscovery', "cachingServiceDiscovery", 'CachingServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('combinedServiceDiscovery', 'combinedServiceDiscovery', "combinedServiceDiscovery", 'CombinedServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
         new PropertyMeta('combinedServiceFilter', 'combinedServiceFilter', "combinedServiceFilter", 'CombinedServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('consulServiceDiscovery', 'consulServiceDiscovery', "consulServiceDiscovery", 'ConsulServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
         new PropertyMeta('customServiceFilter', 'customServiceFilter', "customServiceFilter", 'CustomServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('defaultLoadBalancer', 'defaultLoadBalancer', "defaultLoadBalancer", 'DefaultServiceCallServiceLoadBalancerConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('dnsServiceDiscovery', 'dnsServiceDiscovery', "dnsServiceDiscovery", 'DnsServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
         new PropertyMeta('healthyServiceFilter', 'healthyServiceFilter', "healthyServiceFilter", 'HealthyServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('kubernetesServiceDiscovery', 'kubernetesServiceDiscovery', "kubernetesServiceDiscovery", 'KubernetesServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
         new PropertyMeta('passThroughServiceFilter', 'passThroughServiceFilter', "passThroughServiceFilter", 'PassThroughServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('staticServiceDiscovery', 'staticServiceDiscovery', "staticServiceDiscovery", 'StaticServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('zookeeperServiceDiscovery', 'zookeeperServiceDiscovery', "zookeeperServiceDiscovery", 'ZooKeeperServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
     ]),
     new ElementMeta('pollEnrich', 'PollEnrichDefinition', 'Poll Enrich', "Enriches messages with data polled from a secondary resource", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
@@ -1626,14 +1549,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('noErrorHandler', 'noErrorHandler', "noErrorHandler", 'NoErrorHandlerDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('springTransactionErrorHandler', 'springTransactionErrorHandler', "springTransactionErrorHandler", 'SpringTransactionErrorHandlerDefinition', '', '', false, false, false, true, '', ''),
     ]),
-    new ElementMeta('templatedRouteBean', 'TemplatedRouteBeanDefinition', 'Templated Route Bean', "A bean as input of a route template (local bean)", 'configuration', [
-        new PropertyMeta('name', 'Name', "Bean name", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('type', 'Type', "What type to use for creating the bean. Can be one of: #class,#type,bean,groovy,joor,language,mvel,ognl. #class or #type then the bean is created via the fully qualified classname, such as #class:com.foo.MyBean The others are scripting languages that gives more power to create the bean with an inlined code in the script section, such as using groovy.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('beanType', 'Bean Type', "To set the type (fully qualified class name) of the returned bean created by the script. Knowing the type of the bean can be needed when dependency injection by type is in use, or when looking in registry via class type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('property', 'Property', "Optional properties to set on the created local bean", 'PropertyDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('properties', 'Properties', "Optional properties to set on the created local bean", 'object', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('script', 'Script', "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com/foo/myscript.groovy, resource:file:/var/myscript.groovy, then its loaded from the external resource.", 'string', '', '', false, false, false, false, 'advanced', ''),
-    ]),
     new ElementMeta('dataFormats', 'DataFormatsDefinition', 'Data formats', "Configure data formats.", 'dataformat,transformation', [
         new PropertyMeta('asn1', 'asn1', "asn1", 'ASN1DataFormat', '', '', false, false, false, true, '', ''),
         new PropertyMeta('avro', 'avro', "avro", 'AvroDataFormat', '', '', false, false, false, true, '', ''),
@@ -1676,10 +1591,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('zipDeflater', 'zipDeflater', "zipDeflater", 'ZipDeflaterDataFormat', '', '', false, false, false, true, '', ''),
         new PropertyMeta('zipFile', 'zipFile', "zipFile", 'ZipFileDataFormat', '', '', false, false, false, true, '', ''),
     ]),
-    new ElementMeta('mutualTLS', 'MutualTLSDefinition', 'Mutual TLS', "Rest security mutual TLS authentication definition", 'rest,security,configuration', [
-        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('split', 'SplitDefinition', 'Split', "Splits a single message into many sub-messages.", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('delimiter', 'Delimiter', "Delimiter used in splitting messages. Can be turned off using the value false. The default value is ,", 'string', '', ',', false, false, false, false, '', ''),
@@ -1706,10 +1617,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('security', 'SecurityDefinition', 'Rest Security', "Rest security definition", 'rest,security,configuration', [
-        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('scopes', 'Scopes', "The scopes to allow (separate multiple scopes by comma)", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('onException', 'OnExceptionDefinition', 'On Exception', "Route to be executed when an exception is thrown", 'error', [
         new PropertyMeta('exception', 'Exception', "A set of exceptions to react upon.", 'string', '', '', true, false, true, true, '', ''),
         new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onException is triggered. To be used for fine grained controlling whether a thrown exception should be intercepted by this exception type or not.", 'WhenDefinition', '', '', false, false, false, true, '', ''),
@@ -1776,41 +1683,20 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('ref', 'Ref', "Reference to the routes in the xml dsl", 'string', '', '', true, false, false, false, '', ''),
     ]),
     new ElementMeta('defaultErrorHandler', 'DefaultErrorHandlerDefinition', 'Default Error Handler', "The default error handler.", 'configuration,error', [
+        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
+        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('loggerRef', 'Logger Ref', "References to a logger to use as logger for the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('level', 'Level', "Logging level to use when using the logging error handler type.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('logName', 'Log Name', "Name of the logger to use for the logging error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
-        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('level', 'Level', "Logging level to use by error handler", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('logName', 'Log Name', "Name of the logger to use by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('onRedeliveryRef', 'On Redelivery Ref', "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onExceptionOccurredRef', 'On Exception Occurred Ref', "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onPrepareFailureRef', 'On Prepare Failure Ref', "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('retryWhileRef', 'Retry While Ref', "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
-        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Sets a reference to a thread pool to be used by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('put', 'PutDefinition', 'Put', "Rest PUT command", 'rest', [
-        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
-        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
-        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('transform', 'TransformDefinition', 'Transform', "Transforms the message body based on an expression", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression to return the transformed message body (the new message body to use)", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('fromType', 'From Type', "From type used in data type transformation.", 'string', '', '', false, false, false, false, '', ''),
@@ -1877,11 +1763,11 @@ export const CamelModelMetadata: ElementMeta[] = [
     ]),
     new ElementMeta('routeConfiguration', 'RouteConfigurationDefinition', 'Route Configuration', "Reusable configuration for Camel route(s).", 'configuration', [
         new PropertyMeta('errorHandler', 'Error Handler', "Sets the error handler to use, for routes that has not already been configured with an error handler.", 'ErrorHandlerDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('intercept', 'Intercept', "Adds a route for an interceptor that intercepts every processing step.", 'InterceptDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('interceptFrom', 'Intercept From', "Adds a route for an interceptor that intercepts incoming messages on the given endpoint.", 'InterceptFromDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('interceptSendToEndpoint', 'Intercept Send To Endpoint', "Applies a route for an interceptor if an exchange is send to the given endpoint", 'InterceptSendToEndpointDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('onException', 'On Exception', "Exception clause for catching certain exceptions and handling them.", 'OnExceptionDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('onCompletion', 'On Completion', "On completion callback for doing custom routing when the org.apache.camel.Exchange is complete.", 'OnCompletionDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('intercept', 'Intercept', "Adds a route for an interceptor that intercepts every processing step.", 'object', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('interceptFrom', 'Intercept From', "Adds a route for an interceptor that intercepts incoming messages on the given endpoint.", 'object', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('interceptSendToEndpoint', 'Intercept Send To Endpoint', "Applies a route for an interceptor if an exchange is send to the given endpoint", 'object', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('onException', 'On Exception', "Exception clause for catching certain exceptions and handling them.", 'object', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('onCompletion', 'On Completion', "On completion callback for doing custom routing when the org.apache.camel.Exchange is complete.", 'object', '', '', false, false, true, true, '', ''),
         new PropertyMeta('precondition', 'Precondition', "The predicate of the precondition in simple language to evaluate in order to determine if this route configuration should be included or not.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
@@ -1892,6 +1778,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('exponentialBackOff', 'Exponential Back Off', "Enable exponential backoff", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
         new PropertyMeta('randomBackOff', 'Random Back Off', "Enables random backoff", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
     ]),
+    new ElementMeta('sticky', 'StickyLoadBalancerDefinition', 'Sticky', "Sticky load balancing using an expression to calculate a correlation key to perform the sticky load balancing.", 'eip,routing', [
+        new PropertyMeta('correlationExpression', 'Correlation Expression', "The correlation expression to use to calculate the correlation key", 'ExpressionSubElementDefinition', '', '', true, false, false, true, '', ''),
+        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('interceptFrom', 'InterceptFromDefinition', 'Intercept From', "Intercepts incoming messages", 'configuration', [
         new PropertyMeta('uri', 'Uri', "Intercept incoming messages from the uri or uri pattern. If this option is not configured, then all incoming messages is intercepted.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -1902,18 +1792,18 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('deadLetterChannel', 'DeadLetterChannelDefinition', 'Dead Letter Channel', "Error handler with dead letter queue.", 'configuration,error', [
         new PropertyMeta('deadLetterUri', 'Dead Letter Uri', "The dead letter endpoint uri for the Dead Letter error handler.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('deadLetterHandleNewException', 'Dead Letter Handle New Exception', "Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending the message to the dead letter endpoint. The default value is true which means any such kind of exception is handled and ignored. Set this to false to let the exception be propagated back on the org.apache.camel.Exchange . This can be used in situations where you use transactions, and [...]
+        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
+        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('loggerRef', 'Logger Ref', "References to a logger to use as logger for the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('level', 'Level', "Logging level to use when using the logging error handler type.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('logName', 'Log Name', "Name of the logger to use for the logging error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
-        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('level', 'Level', "Logging level to use by error handler", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('logName', 'Log Name', "Name of the logger to use by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('onRedeliveryRef', 'On Redelivery Ref', "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onExceptionOccurredRef', 'On Exception Occurred Ref', "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onPrepareFailureRef', 'On Prepare Failure Ref', "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('retryWhileRef', 'Retry While Ref', "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
-        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Sets a reference to a thread pool to be used by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
     new ElementMeta('apiKey', 'ApiKeyDefinition', 'Api Key', "Rest security basic auth definition", 'rest,security,configuration', [
@@ -1942,42 +1832,20 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('random', 'RandomLoadBalancerDefinition', 'Random', "The destination endpoints are selected by random.", 'eip,routing', [
+        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('openIdConnect', 'OpenIdConnectDefinition', 'Open Id Connect', "Rest security OpenID Connect definition", 'rest,security,configuration', [
         new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('url', 'Url', "OpenId Connect URL to discover OAuth2 configuration values.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('propertyExpression', 'PropertyExpressionDefinition', 'Property Expression', "A key value pair where the value is an expression.", 'configuration', [
-        new PropertyMeta('key', 'Key', "Property key", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('expression', 'Expression', "Property values as an expression", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
-    ]),
     new ElementMeta('inputType', 'InputTypeDefinition', 'Input Type', "Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} .  [...]
         new PropertyMeta('urn', 'Urn', "The input type URN.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('validate', 'Validate', "Whether if validation is required for this input type.", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('delete', 'DeleteDefinition', 'Delete', "Rest DELETE command", 'rest', [
-        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
-        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
-        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('rollback', 'RollbackDefinition', 'Rollback', "Forces a rollback by stopping routing the message", 'eip,routing', [
         new PropertyMeta('message', 'Message', "Message to use in rollback exception", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('markRollbackOnly', 'Mark Rollback Only', "Mark the transaction for rollback only (cannot be overruled to commit)", 'boolean', '', 'false', false, false, false, false, '', ''),
@@ -1991,9 +1859,7 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('batchConfig', 'batchConfig', "batchConfig", 'BatchResequencerConfig', '', '', false, false, false, true, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('streamConfig', 'streamConfig', "streamConfig", 'StreamResequencerConfig', '', '', false, false, false, true, '', ''),
     ]),
     new ElementMeta('dynamicRouter', 'DynamicRouterDefinition', 'Dynamic Router', "Route messages based on dynamic rules", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to call that returns the endpoint(s) to route to in the dynamic routing. Important: The expression will be called in a while loop fashion, until the expression returns null which means the dynamic router is finished.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
@@ -2004,27 +1870,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('post', 'PostDefinition', 'Post', "Rest POST command", 'rest', [
-        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
-        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
-        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
-    ]),
     new ElementMeta('log', 'LogDefinition', 'Log', "Logs the defined message to the logger", 'eip,routing', [
         new PropertyMeta('message', 'Message', "Sets the log message (uses simple language)", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('loggingLevel', 'Logging Level', "Sets the logging level. The default value is INFO", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'INFO', false, false, false, false, '', ''),
@@ -2084,23 +1929,23 @@ export const CamelModelMetadata: ElementMeta[] = [
     new ElementMeta('springTransactionErrorHandler', 'SpringTransactionErrorHandlerDefinition', 'Spring Transaction Error Handler', "Spring based transactional error handler (requires camel-spring).", 'configuration,error', [
         new PropertyMeta('transactedPolicyRef', 'Transacted Policy Ref', "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('rollbackLoggingLevel', 'Rollback Logging Level', "Sets the logging level to use for logging transactional rollback. This option is default WARN.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'WARN', false, false, false, false, '', ''),
+        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
+        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('loggerRef', 'Logger Ref', "References to a logger to use as logger for the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('level', 'Level', "Logging level to use when using the logging error handler type.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('logName', 'Log Name', "Name of the logger to use for the logging error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('useOriginalMessage', 'Use Original Message', "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the [...]
-        new PropertyMeta('useOriginalBody', 'Use Original Body', "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.Exchange is doomed for failure. Instead of using the current inprogress org.apache.camel.Exchange IN message we use the original IN message instead. This allows you to store the origina [...]
+        new PropertyMeta('level', 'Level', "Logging level to use by error handler", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('logName', 'Log Name', "Name of the logger to use by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('onRedeliveryRef', 'On Redelivery Ref', "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onExceptionOccurredRef', 'On Exception Occurred Ref', "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ignored.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('onPrepareFailureRef', 'On Prepare Failure Ref', "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a dead letter queue.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
         new PropertyMeta('retryWhileRef', 'Retry While Ref', "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false.", 'string', '', '', false, false, false, false, 'advanced', 'org.apache.camel.Processor'),
-        new PropertyMeta('redeliveryPolicyRef', 'Redelivery Policy Ref', "Sets a reference to a RedeliveryPolicy to be used for redelivery settings.", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Sets a reference to a thread pool to be used by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('redeliveryPolicy', 'Redelivery Policy', "Sets the redelivery settings", 'RedeliveryPolicyDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
     new ElementMeta('serviceCall', 'ServiceCallDefinition', 'Service Call', "To call remote services", 'eip,routing', [
         new PropertyMeta('name', 'Name', "Sets the name of the service to use", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('expression', 'Expression', "Configures the Expression using the given configuration.", 'ServiceCallExpressionConfiguration', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('expression', 'Expression', "Configures the Expression using the given configuration.", 'ExpressionDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('uri', 'Uri', "The uri of the endpoint to send to. The uri can be dynamic computed using the org.apache.camel.language.simple.SimpleLanguage expression.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('component', 'Component', "The component to use.", 'string', '', 'http', false, false, false, false, '', ''),
         new PropertyMeta('pattern', 'Pattern', "Sets the optional ExchangePattern used to invoke this endpoint", 'string', 'InOnly, InOut', '', false, false, false, false, '', ''),
@@ -2113,19 +1958,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('blacklistServiceFilter', 'blacklistServiceFilter', "blacklistServiceFilter", 'BlacklistServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('cachingServiceDiscovery', 'cachingServiceDiscovery', "cachingServiceDiscovery", 'CachingServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('combinedServiceDiscovery', 'combinedServiceDiscovery', "combinedServiceDiscovery", 'CombinedServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('combinedServiceFilter', 'combinedServiceFilter', "combinedServiceFilter", 'CombinedServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('consulServiceDiscovery', 'consulServiceDiscovery', "consulServiceDiscovery", 'ConsulServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('customServiceFilter', 'customServiceFilter', "customServiceFilter", 'CustomServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('defaultLoadBalancer', 'defaultLoadBalancer', "defaultLoadBalancer", 'DefaultServiceCallServiceLoadBalancerConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('dnsServiceDiscovery', 'dnsServiceDiscovery', "dnsServiceDiscovery", 'DnsServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('healthyServiceFilter', 'healthyServiceFilter', "healthyServiceFilter", 'HealthyServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('kubernetesServiceDiscovery', 'kubernetesServiceDiscovery', "kubernetesServiceDiscovery", 'KubernetesServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('passThroughServiceFilter', 'passThroughServiceFilter', "passThroughServiceFilter", 'PassThroughServiceCallServiceFilterConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('staticServiceDiscovery', 'staticServiceDiscovery', "staticServiceDiscovery", 'StaticServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('zookeeperServiceDiscovery', 'zookeeperServiceDiscovery', "zookeeperServiceDiscovery", 'ZooKeeperServiceCallServiceDiscoveryConfiguration', '', '', false, false, false, true, '', ''),
     ]),
     new ElementMeta('routeTemplate', 'RouteTemplateDefinition', 'Route Template', "Defines a route template (parameterized routes)", 'configuration', [
         new PropertyMeta('route', 'Route', "To define the route in the template", 'RouteDefinition', '', '', true, false, false, true, '', ''),
@@ -2158,6 +1990,9 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('topic', 'TopicLoadBalancerDefinition', 'Topic', "Topic which sends to all destinations.", 'eip,routing', [
+        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('basicAuth', 'BasicAuthDefinition', 'Basic Auth', "Rest security basic auth definition", 'rest,security,configuration', [
         new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
@@ -2177,10 +2012,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('templatedRouteParameter', 'TemplatedRouteParameterDefinition', 'Templated Route Parameter', "An input parameter of a route template.", 'configuration', [
-        new PropertyMeta('name', 'Name', "The name of the parameter", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('value', 'Value', "The value of the parameter.", 'string', '', '', true, false, false, false, '', ''),
-    ]),
     new ElementMeta('setHeader', 'SetHeaderDefinition', 'Set Header', "Sets the value of a message header", 'eip,transformation', [
         new PropertyMeta('name', 'Name', "Name of message header to set a new value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('expression', 'Expression', "Expression to return the value of the header", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
index 80490dd0..8102e5f3 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
@@ -59,6 +59,8 @@ public class AbstractGenerator {
             className = "doCatch";
         } else if (className.equals("ConvertBodyDefinition")) {
             className = "convertBodyTo";
+         } else if (className.equals("TryDefinition")) {
+            className = "doTry";
         } else if (className.equals("FinallyDefinition")) {
             className = "doFinally";
         } else if (className.equals("ToDynamicDefinition")) {
@@ -372,8 +374,7 @@ public class AbstractGenerator {
         String camelYamlDSL = getCamelYamlDSL();
         JsonObject definitions = new JsonObject(camelYamlDSL);
 
-        Map<String, String> result = new LinkedHashMap<>(getProcessorStepNameMapForObject(null, definitions));
-        return result;
+        return new LinkedHashMap<>(getProcessorStepNameMapForObject(null, definitions));
     }
 
     protected Map<String, String> getProcessorDefinitionStepNameMap() {
@@ -389,8 +390,6 @@ public class AbstractGenerator {
 
         properties.getMap().forEach((key, o) -> {
             String ref = ((Map)o).get("$ref").toString();
-            System.out.println(ref);
-            System.out.println(key);
             String className = classSimple(ref);
             result.put(className, key);
         });
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
index 3e74e3a0..1356f269 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
@@ -126,8 +126,9 @@ public final class CamelMetadataGenerator extends AbstractGenerator {
             if (s.startsWith("org.apache.camel.model.") && s.endsWith("Definition")) {
                 String name = classSimple(s);
                 JsonObject obj = getDefinition(definitions, s);
-                JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
-                classProps.put(name, props);
+//                JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
+                Map<String, JsonObject> properties = getClassProperties(obj);
+                classProps.put(name, JsonObject.mapFrom(properties));
             }
         });
 
@@ -149,7 +150,6 @@ public final class CamelMetadataGenerator extends AbstractGenerator {
         code.append(String.format("export const %s: ElementMeta[] = [\n", className));
         classProps.entrySet().stream().filter(entry -> {
             if (entry.getValue() == null) {
-                System.out.println(entry.getKey());
                 return false;
             } else {
                 return true;
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
index e48b32d8..c3950392 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
@@ -30,7 +30,7 @@ public final class KaravanGenerator {
         CamelDefinitionGenerator.generate();
         CamelDefinitionApiGenerator.generate();
         CamelDefinitionYamlStepGenerator.generate();
-//        CamelMetadataGenerator.generate();
+        CamelMetadataGenerator.generate();
         KameletGenerator.generate(paths);
         CamelComponentsGenerator.generate(paths);
         System.exit(0);


[camel-karavan] 01/04: CamelDefinitionGenerator for Camel YAML DSL 4.1.0

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit c9fa438807e563ba256a77fe9556b98f5fcc33f1
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Thu Oct 19 18:16:51 2023 -0400

    CamelDefinitionGenerator for Camel YAML DSL 4.1.0
---
 karavan-core/src/core/model/CamelDefinition.ts     | 139 +++++++++++----------
 karavan-generator/pom.xml                          |   2 +-
 .../camel/karavan/generator/AbstractGenerator.java | 105 ++++++++++++++--
 .../generator/CamelDefinitionGenerator.java        | 109 +++++++++-------
 .../karavan/generator/CamelMetadataGenerator.java  |   2 +-
 .../camel/karavan/generator/KaravanGenerator.java  |   6 +-
 6 files changed, 238 insertions(+), 125 deletions(-)

diff --git a/karavan-core/src/core/model/CamelDefinition.ts b/karavan-core/src/core/model/CamelDefinition.ts
index 8ada7e8b..676dbab0 100644
--- a/karavan-core/src/core/model/CamelDefinition.ts
+++ b/karavan-core/src/core/model/CamelDefinition.ts
@@ -35,16 +35,12 @@ export class ProcessorDefinition extends CamelElement {
     filter?: FilterDefinition;
     doFinally?: FinallyDefinition;
     idempotentConsumer?: IdempotentConsumerDefinition;
-    intercept?: InterceptDefinition;
-    interceptFrom?: InterceptFromDefinition | string;
-    interceptSendToEndpoint?: InterceptSendToEndpointDefinition | string;
     kamelet?: KameletDefinition | string;
     loadBalance?: LoadBalanceDefinition;
     log?: LogDefinition | string;
     loop?: LoopDefinition;
     marshal?: MarshalDefinition;
     multicast?: MulticastDefinition;
-    onCompletion?: OnCompletionDefinition;
     onFallback?: OnFallbackDefinition;
     otherwise?: OtherwiseDefinition;
     pausable?: PausableDefinition;
@@ -114,8 +110,9 @@ export class ErrorHandlerBuilderDeserializer extends CamelElement {
 }
 
 export class OutputAwareFromDefinition extends CamelElement {
+    stepName?: string = 'outputAwareFrom';
     description?: string;
-    id?: string;
+    id?: string = 'outputAwareFrom-' + uuidv4().substring(0,4);
     parameters?: any = {};
     steps: CamelElement[] = [];
     uri: string = '';
@@ -555,10 +552,10 @@ export class LoadBalanceDefinition extends CamelElement {
     failover?: FailoverLoadBalancerDefinition;
     random?: RandomLoadBalancerDefinition;
     roundRobin?: RoundRobinLoadBalancerDefinition;
-    steps?: CamelElement[] = [];
     sticky?: StickyLoadBalancerDefinition;
     topic?: TopicLoadBalancerDefinition;
     weighted?: WeightedLoadBalancerDefinition;
+    steps?: CamelElement[] = [];
     public constructor(init?: Partial<LoadBalanceDefinition>) {
         super('LoadBalanceDefinition');
         Object.assign(this, init);
@@ -620,7 +617,6 @@ export class MarshalDefinition extends CamelElement {
     gzipDeflater?: GzipDeflaterDataFormat;
     hl7?: HL7DataFormat;
     ical?: IcalDataFormat;
-    inheritErrorHandler?: boolean;
     jacksonXml?: JacksonXMLDataFormat;
     jaxb?: JaxbDataFormat;
     json?: JsonDataFormat;
@@ -645,6 +641,7 @@ export class MarshalDefinition extends CamelElement {
     yaml?: YAMLDataFormat;
     zipDeflater?: ZipDeflaterDataFormat;
     zipFile?: ZipFileDataFormat;
+    inheritErrorHandler?: boolean;
     public constructor(init?: Partial<MarshalDefinition>) {
         super('MarshalDefinition');
         Object.assign(this, init);
@@ -1011,10 +1008,8 @@ export class ResequenceDefinition extends CamelElement {
     disabled?: boolean;
     id?: string = 'resequence-' + uuidv4().substring(0,4);
     description?: string;
-    batchConfig?: BatchResequencerConfig;
     inheritErrorHandler?: boolean;
     steps?: CamelElement[] = [];
-    streamConfig?: StreamResequencerConfig;
     public constructor(init?: Partial<ResequenceDefinition>) {
         super('ResequenceDefinition');
         Object.assign(this, init);
@@ -1159,11 +1154,11 @@ export class RouteDefinition extends CamelElement {
 
 export class RouteTemplateBeanDefinition extends CamelElement {
     stepName?: string = 'routeTemplateBean';
-    beanType?: string;
     name: string = '';
     properties?: any = {};
     property?: PropertyDefinition[] = [];
     script?: string;
+    scriptLanguage?: string;
     type: string = '';
     public constructor(init?: Partial<RouteTemplateBeanDefinition>) {
         super('RouteTemplateBeanDefinition');
@@ -1398,7 +1393,7 @@ export class TemplatedRouteBeanDefinition extends CamelElement {
     stepName?: string = 'templatedRouteBean';
     name: string = '';
     type: string = '';
-    beanType?: string;
+    scriptLanguage?: string;
     property?: PropertyDefinition[] = [];
     properties?: any = {};
     script?: string;
@@ -1521,18 +1516,18 @@ export class ToDefinition extends CamelElement {
 }
 
 export class ToDynamicDefinition extends CamelElement {
-    stepName?: string = 'toD';
-    uri: string = '';
-    pattern?: string;
-    cacheSize?: number;
-    ignoreInvalidEndpoint?: boolean;
+    stepName?: string = 'toDynamic';
     allowOptimisedComponents?: boolean;
     autoStartComponents?: boolean;
-    disabled?: boolean;
-    id?: string = 'toD-' + uuidv4().substring(0,4);
+    cacheSize?: number;
     description?: string;
+    disabled?: boolean;
+    id?: string = 'toDynamic-' + uuidv4().substring(0,4);
+    ignoreInvalidEndpoint?: boolean;
     inheritErrorHandler?: boolean;
     parameters?: any = {};
+    pattern?: string;
+    uri: string = '';
     public constructor(init?: Partial<ToDynamicDefinition>) {
         super('ToDynamicDefinition');
         Object.assign(this, init);
@@ -1569,12 +1564,12 @@ export class TransformDefinition extends CamelElement {
 }
 
 export class TryDefinition extends CamelElement {
-    stepName?: string = 'doTry';
-    disabled?: boolean;
-    id?: string = 'doTry-' + uuidv4().substring(0,4);
+    stepName?: string = 'try';
     description?: string;
+    disabled?: boolean;
     doCatch?: CatchDefinition[] = [];
     doFinally?: FinallyDefinition;
+    id?: string = 'try-' + uuidv4().substring(0,4);
     inheritErrorHandler?: boolean;
     steps?: CamelElement[] = [];
     public constructor(init?: Partial<TryDefinition>) {
@@ -1589,6 +1584,7 @@ export class UnmarshalDefinition extends CamelElement {
     disabled?: boolean;
     id?: string = 'unmarshal-' + uuidv4().substring(0,4);
     description?: string;
+    inheritErrorHandler?: boolean;
     asn1?: ASN1DataFormat | string;
     avro?: AvroDataFormat | string;
     barcode?: BarcodeDataFormat;
@@ -1605,7 +1601,6 @@ export class UnmarshalDefinition extends CamelElement {
     gzipDeflater?: GzipDeflaterDataFormat;
     hl7?: HL7DataFormat;
     ical?: IcalDataFormat;
-    inheritErrorHandler?: boolean;
     jacksonXml?: JacksonXMLDataFormat;
     jaxb?: JaxbDataFormat;
     json?: JsonDataFormat;
@@ -1726,6 +1721,25 @@ export class ApplicationDefinition extends CamelElement {
     }
 }
 
+export class BeanConstructorDefinition extends CamelElement {
+    stepName?: string = 'beanConstructor';
+    index?: number;
+    value: string = '';
+    public constructor(init?: Partial<BeanConstructorDefinition>) {
+        super('BeanConstructorDefinition');
+        Object.assign(this, init);
+    }
+}
+
+export class BeanConstructorsDefinition extends CamelElement {
+    stepName?: string = 'beanConstructors';
+    _constructor?: BeanConstructorDefinition[] = [];
+    public constructor(init?: Partial<BeanConstructorsDefinition>) {
+        super('BeanConstructorsDefinition');
+        Object.assign(this, init);
+    }
+}
+
 export class BeanPropertiesDefinition extends CamelElement {
     stepName?: string = 'beanProperties';
     property?: BeanPropertyDefinition[] = [];
@@ -1773,9 +1787,16 @@ export class ComponentScanDefinition extends CamelElement {
 
 export class RegistryBeanDefinition extends CamelElement {
     stepName?: string = 'registryBean';
-    name?: string;
+    constructors?: any = {};
+    destroyMethod?: string;
+    factoryBean?: string;
+    factoryMethod?: string;
+    initMethod?: string;
+    name: string = '';
     properties?: any = {};
-    type?: string;
+    script?: string;
+    scriptLanguage?: string;
+    type: string = '';
     public constructor(init?: Partial<RegistryBeanDefinition>) {
         super('RegistryBeanDefinition');
         Object.assign(this, init);
@@ -1796,10 +1817,10 @@ export class CachingServiceCallServiceDiscoveryConfiguration extends CamelElemen
     combinedServiceDiscovery?: CombinedServiceCallServiceDiscoveryConfiguration;
     consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
     dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
-    id?: string = 'cachingServiceCallServiceDiscoveryConfiguration-' + uuidv4().substring(0,4);
     kubernetesServiceDiscovery?: KubernetesServiceCallServiceDiscoveryConfiguration;
-    properties?: PropertyDefinition[] = [];
     staticServiceDiscovery?: StaticServiceCallServiceDiscoveryConfiguration;
+    id?: string = 'cachingServiceCallServiceDiscoveryConfiguration-' + uuidv4().substring(0,4);
+    properties?: PropertyDefinition[] = [];
     timeout?: number;
     units?: string;
     public constructor(init?: Partial<CachingServiceCallServiceDiscoveryConfiguration>) {
@@ -1931,7 +1952,7 @@ export class PassThroughServiceCallServiceFilterConfiguration extends CamelEleme
 
 export class ServiceCallConfigurationDefinition extends CamelElement {
     stepName?: string = 'serviceCallConfiguration';
-    expression?: ServiceCallExpressionConfiguration;
+    expression?: ExpressionDefinition;
     uri?: string;
     component?: string;
     pattern?: string;
@@ -1942,18 +1963,10 @@ export class ServiceCallConfigurationDefinition extends CamelElement {
     expressionRef?: string;
     id?: string = 'serviceCallConfiguration-' + uuidv4().substring(0,4);
     blacklistServiceFilter?: BlacklistServiceCallServiceFilterConfiguration;
-    cachingServiceDiscovery?: CachingServiceCallServiceDiscoveryConfiguration;
-    combinedServiceDiscovery?: CombinedServiceCallServiceDiscoveryConfiguration;
     combinedServiceFilter?: CombinedServiceCallServiceFilterConfiguration;
-    consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
     customServiceFilter?: CustomServiceCallServiceFilterConfiguration;
-    defaultLoadBalancer?: DefaultServiceCallServiceLoadBalancerConfiguration;
-    dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
     healthyServiceFilter?: HealthyServiceCallServiceFilterConfiguration;
-    kubernetesServiceDiscovery?: KubernetesServiceCallServiceDiscoveryConfiguration;
     passThroughServiceFilter?: PassThroughServiceCallServiceFilterConfiguration;
-    staticServiceDiscovery?: StaticServiceCallServiceDiscoveryConfiguration;
-    zookeeperServiceDiscovery?: ZooKeeperServiceCallServiceDiscoveryConfiguration;
     public constructor(init?: Partial<ServiceCallConfigurationDefinition>) {
         super('ServiceCallConfigurationDefinition');
         Object.assign(this, init);
@@ -1963,7 +1976,7 @@ export class ServiceCallConfigurationDefinition extends CamelElement {
 export class ServiceCallDefinition extends CamelElement {
     stepName?: string = 'serviceCall';
     name: string = '';
-    expression?: ServiceCallExpressionConfiguration;
+    expression?: ExpressionDefinition;
     uri?: string;
     component?: string;
     pattern?: string;
@@ -1976,20 +1989,7 @@ export class ServiceCallDefinition extends CamelElement {
     disabled?: boolean;
     id?: string = 'serviceCall-' + uuidv4().substring(0,4);
     description?: string;
-    blacklistServiceFilter?: BlacklistServiceCallServiceFilterConfiguration;
-    cachingServiceDiscovery?: CachingServiceCallServiceDiscoveryConfiguration;
-    combinedServiceDiscovery?: CombinedServiceCallServiceDiscoveryConfiguration;
-    combinedServiceFilter?: CombinedServiceCallServiceFilterConfiguration;
-    consulServiceDiscovery?: ConsulServiceCallServiceDiscoveryConfiguration;
-    customServiceFilter?: CustomServiceCallServiceFilterConfiguration;
-    defaultLoadBalancer?: DefaultServiceCallServiceLoadBalancerConfiguration;
-    dnsServiceDiscovery?: DnsServiceCallServiceDiscoveryConfiguration;
-    healthyServiceFilter?: HealthyServiceCallServiceFilterConfiguration;
     inheritErrorHandler?: boolean;
-    kubernetesServiceDiscovery?: KubernetesServiceCallServiceDiscoveryConfiguration;
-    passThroughServiceFilter?: PassThroughServiceCallServiceFilterConfiguration;
-    staticServiceDiscovery?: StaticServiceCallServiceDiscoveryConfiguration;
-    zookeeperServiceDiscovery?: ZooKeeperServiceCallServiceDiscoveryConfiguration;
     public constructor(init?: Partial<ServiceCallDefinition>) {
         super('ServiceCallDefinition');
         Object.assign(this, init);
@@ -2862,18 +2862,18 @@ export class DeadLetterChannelDefinition extends CamelElement {
     stepName?: string = 'deadLetterChannel';
     deadLetterUri: string = '';
     deadLetterHandleNewException?: boolean;
+    redeliveryPolicy?: RedeliveryPolicyDefinition;
+    useOriginalMessage?: boolean;
+    useOriginalBody?: boolean;
+    redeliveryPolicyRef?: string;
     loggerRef?: string;
     level?: string;
     logName?: string;
-    useOriginalMessage?: boolean;
-    useOriginalBody?: boolean;
     onRedeliveryRef?: string;
     onExceptionOccurredRef?: string;
     onPrepareFailureRef?: string;
     retryWhileRef?: string;
-    redeliveryPolicyRef?: string;
     executorServiceRef?: string;
-    redeliveryPolicy?: RedeliveryPolicyDefinition;
     id?: string = 'deadLetterChannel-' + uuidv4().substring(0,4);
     public constructor(init?: Partial<DeadLetterChannelDefinition>) {
         super('DeadLetterChannelDefinition');
@@ -2883,18 +2883,18 @@ export class DeadLetterChannelDefinition extends CamelElement {
 
 export class DefaultErrorHandlerDefinition extends CamelElement {
     stepName?: string = 'defaultErrorHandler';
+    redeliveryPolicy?: RedeliveryPolicyDefinition;
+    useOriginalMessage?: boolean;
+    useOriginalBody?: boolean;
+    redeliveryPolicyRef?: string;
     loggerRef?: string;
     level?: string;
     logName?: string;
-    useOriginalMessage?: boolean;
-    useOriginalBody?: boolean;
     onRedeliveryRef?: string;
     onExceptionOccurredRef?: string;
     onPrepareFailureRef?: string;
     retryWhileRef?: string;
-    redeliveryPolicyRef?: string;
     executorServiceRef?: string;
-    redeliveryPolicy?: RedeliveryPolicyDefinition;
     id?: string = 'defaultErrorHandler-' + uuidv4().substring(0,4);
     public constructor(init?: Partial<DefaultErrorHandlerDefinition>) {
         super('DefaultErrorHandlerDefinition');
@@ -2906,18 +2906,18 @@ export class JtaTransactionErrorHandlerDefinition extends CamelElement {
     stepName?: string = 'jtaTransactionErrorHandler';
     transactedPolicyRef?: string;
     rollbackLoggingLevel?: string;
+    redeliveryPolicy?: RedeliveryPolicyDefinition;
+    useOriginalMessage?: boolean;
+    useOriginalBody?: boolean;
+    redeliveryPolicyRef?: string;
     loggerRef?: string;
     level?: string;
     logName?: string;
-    useOriginalMessage?: boolean;
-    useOriginalBody?: boolean;
     onRedeliveryRef?: string;
     onExceptionOccurredRef?: string;
     onPrepareFailureRef?: string;
     retryWhileRef?: string;
-    redeliveryPolicyRef?: string;
     executorServiceRef?: string;
-    redeliveryPolicy?: RedeliveryPolicyDefinition;
     id?: string = 'jtaTransactionErrorHandler-' + uuidv4().substring(0,4);
     public constructor(init?: Partial<JtaTransactionErrorHandlerDefinition>) {
         super('JtaTransactionErrorHandlerDefinition');
@@ -2948,18 +2948,18 @@ export class SpringTransactionErrorHandlerDefinition extends CamelElement {
     stepName?: string = 'springTransactionErrorHandler';
     transactedPolicyRef?: string;
     rollbackLoggingLevel?: string;
+    redeliveryPolicy?: RedeliveryPolicyDefinition;
+    useOriginalMessage?: boolean;
+    useOriginalBody?: boolean;
+    redeliveryPolicyRef?: string;
     loggerRef?: string;
     level?: string;
     logName?: string;
-    useOriginalMessage?: boolean;
-    useOriginalBody?: boolean;
     onRedeliveryRef?: string;
     onExceptionOccurredRef?: string;
     onPrepareFailureRef?: string;
     retryWhileRef?: string;
-    redeliveryPolicyRef?: string;
     executorServiceRef?: string;
-    redeliveryPolicy?: RedeliveryPolicyDefinition;
     id?: string = 'springTransactionErrorHandler-' + uuidv4().substring(0,4);
     public constructor(init?: Partial<SpringTransactionErrorHandlerDefinition>) {
         super('SpringTransactionErrorHandlerDefinition');
@@ -3162,6 +3162,7 @@ export class MethodCallExpression extends CamelElement {
     method?: string;
     beanType?: string;
     scope?: string;
+    validate?: boolean;
     resultType?: string;
     trim?: boolean;
     id?: string = 'method-' + uuidv4().substring(0,4);
@@ -3827,7 +3828,6 @@ export class DataFormatTransformerDefinition extends CamelElement {
     fhirJson?: FhirJsonDataFormat;
     fhirXml?: FhirXmlDataFormat;
     flatpack?: FlatpackDataFormat;
-    fromType?: string;
     grok?: GrokDataFormat;
     gzipDeflater?: GzipDeflaterDataFormat;
     hl7?: HL7DataFormat;
@@ -3838,12 +3838,10 @@ export class DataFormatTransformerDefinition extends CamelElement {
     jsonApi?: JsonApiDataFormat;
     lzf?: LZFDataFormat;
     mimeMultipart?: MimeMultipartDataFormat;
-    name?: string;
     parquetAvro?: ParquetAvroDataFormat | string;
     pgp?: PGPDataFormat;
     protobuf?: ProtobufDataFormat | string;
     rss?: RssDataFormat;
-    scheme?: string;
     soap?: SoapDataFormat | string;
     swiftMt?: SwiftMtDataFormat | string;
     swiftMx?: SwiftMxDataFormat;
@@ -3851,7 +3849,6 @@ export class DataFormatTransformerDefinition extends CamelElement {
     tarFile?: TarFileDataFormat;
     thrift?: ThriftDataFormat | string;
     tidyMarkup?: TidyMarkupDataFormat;
-    toType?: string;
     univocityCsv?: UniVocityCsvDataFormat;
     univocityFixed?: UniVocityFixedDataFormat;
     univocityTsv?: UniVocityTsvDataFormat;
@@ -3859,6 +3856,10 @@ export class DataFormatTransformerDefinition extends CamelElement {
     yaml?: YAMLDataFormat;
     zipDeflater?: ZipDeflaterDataFormat;
     zipFile?: ZipFileDataFormat;
+    fromType?: string;
+    name?: string;
+    scheme?: string;
+    toType?: string;
     public constructor(init?: Partial<DataFormatTransformerDefinition>) {
         super('DataFormatTransformerDefinition');
         Object.assign(this, init);
diff --git a/karavan-generator/pom.xml b/karavan-generator/pom.xml
index 831fd9db..c3a78dad 100644
--- a/karavan-generator/pom.xml
+++ b/karavan-generator/pom.xml
@@ -28,7 +28,7 @@
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
         <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
-        <version.camel-core>4.0.1</version.camel-core>
+        <version.camel-core>4.1.0</version.camel-core>
         <version.camel-kamelet>4.0.1</version.camel-kamelet>
         <camel.k.extension.version>6.7.2</camel.k.extension.version>
         <version.vertx>4.4.3</version.vertx>
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
index 1b4e1236..a7fbbfa8 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
@@ -54,24 +54,69 @@ public class AbstractGenerator {
         return new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
     }
 
-    protected Map<String, String> getStepNames(){
-        // Prepare stepNames map
+    protected String getStepNameForClass (String className) {
+        if (className.equals("CatchDefinition")) {
+            className = "doCatch";
+        } else if (className.equals("ConvertBodyDefinition")) {
+            className = "convertBodyTo";
+        } else if (className.equals("FinallyDefinition")) {
+            className = "doFinally";
+        } else if (className.equals("SamplingDefinition")) {
+            className = "sample";
+        } else if (className.endsWith("Definition")) {
+            className = className.substring(0, className.length() - 10);
+        } else if (className.endsWith("DataFormat")){
+            return getDataFormatStepNameForClass().get(className);
+        } else if (className.endsWith("Expression")){
+            return getExpressionStepNameForClass().get(className);
+        }
+        return deCapitalize(className);
+    }
+
+    protected Map<String, String> getDataFormatStepNameForClass(){
+        Map<String, String> stepNames = new LinkedHashMap<>();
+        JsonObject definitions = getDefinitions();
+        JsonObject props = definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties");
+        props.getMap().keySet().forEach(key -> {
+            String className = classSimple(props.getJsonObject(key).getString("$ref"));
+            stepNames.put(className, key);
+        });
+        return stepNames;
+    }
+
+    protected Map<String, String> getExpressionStepNameForClass(){
+        Map<String, String> stepNames = new LinkedHashMap<>();
         JsonObject definitions = getDefinitions();
-        Map<String, String> stepNames = getProcessorStepName(new JsonObject(getCamelYamlDSL()).getJsonObject("items").getJsonObject("properties"));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
+        JsonArray props = definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonArray("anyOf").getJsonObject(0).getJsonArray("oneOf");
+        for (int i =0; i < props.size(); i++) {
+            JsonObject prop = props.getJsonObject(i);
+            String key = prop.getJsonObject("properties").getMap().keySet().iterator().next();
+            String fullClassName = prop.getJsonObject("properties").getJsonObject(key).getString("$ref");
+            String className = classSimple(fullClassName);
+            stepNames.put(className, key);
+            System.out.println(className + " : " + key);
+        }
         return stepNames;
     }
 
+//    protected Map<String, String> getStepNames(){
+//        // Prepare stepNames map
+//        JsonObject definitions = getDefinitions();
+//        Map<String, String> stepNames = getProcessorStepName(new JsonObject(getCamelYamlDSL()).getJsonObject("items").getJsonObject("properties"));
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
+//        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
+//        return stepNames;
+//    }
+
     protected Map<String, JsonObject> getDslMetadata(){
         // Generate DSL Metadata
         String camelYamlDSL = getCamelYamlDSL();
         JsonObject definitions = new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
 
         // Prepare stepNames map
-        Map<String, String> stepNames = getStepNames();
+        Map<String, String> stepNames = getProcessorStepNameMap();
 
         Map<String, JsonObject> classProps = new HashMap<>();
         Map<String, Object> defsMap = new HashMap<>();
@@ -255,6 +300,50 @@ public class AbstractGenerator {
         return result;
     }
 
+
+
+    protected Map<String, String> getProcessorStepNameMapForObject(String key, JsonObject jsonObject) {
+        Map<String, String> result = new HashMap<>();
+
+        jsonObject.fieldNames().forEach(k -> {
+            Object object = jsonObject.getValue(k);
+            if (object instanceof JsonObject) {
+                JsonObject value = jsonObject.getJsonObject(k);
+                result.putAll(getProcessorStepNameMapForObject(k, value));
+            } else if (object instanceof JsonArray) {
+                JsonArray value = jsonObject.getJsonArray(k);
+                result.putAll(getProcessorStepNameMapForArray(value));
+            } else if (object instanceof String && k.equals("$ref") && !object.toString().contains(".deserializers.")) {
+                String ref = jsonObject.getString(k);
+                String className = classSimple(ref);
+                result.put(className, key);
+            }
+        });
+        return result;
+    }
+
+    protected Map<String, String> getProcessorStepNameMapForArray(JsonArray jsonArray) {
+        Map<String, String> result = new HashMap<>();
+
+        jsonArray.forEach(object -> {
+            if (object instanceof JsonObject) {
+                result.putAll(getProcessorStepNameMapForObject(null, (JsonObject) object));
+            } else if (object instanceof JsonArray) {
+                result.putAll(getProcessorStepNameMapForArray((JsonArray) object));
+            }
+        });
+        return result;
+    }
+
+    protected Map<String, String> getProcessorStepNameMap() {
+        String camelYamlDSL = getCamelYamlDSL();
+        JsonObject definitions = new JsonObject(camelYamlDSL);
+
+        Map<String, String> result = new HashMap<>(getProcessorStepNameMapForObject(null, definitions));
+        result.put("ToDynamicDefinition", "toD");
+        return result;
+    }
+
     protected JsonObject getDefinition(JsonObject definitions, String className) {
         return definitions.getJsonObject(className.replace("#/items/definitions/", ""));
     }
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
index 0493289f..c540caed 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionGenerator.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.karavan.generator;
 
+import io.vertx.core.json.JsonArray;
 import io.vertx.core.json.JsonObject;
 
 import java.util.*;
@@ -42,65 +43,84 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
         camelModel.append(readFileText(modelHeader));
 
         String camelYamlDSL = getCamelYamlDSL();
+
         JsonObject definitions = new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
 
         // Prepare stepNames map
-        Map<String, String> stepNames = getProcessorStepName(new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("properties"));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties")));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.language.ExpressionDefinition").getJsonObject("properties")));
-        stepNames.putAll(getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.dataformat.DataFormatsDefinition").getJsonObject("properties")));
-
-        // add additional classes
-        getClasses(definitions, "org.apache.camel.model").forEach(s -> {
-            String className = classSimple(s);
-            if (!stepNames.containsKey(className)) {
-                String stepName = deCapitalize(className.replace("Definition", ""));
-                stepNames.put(className, stepName);
-            }
-        });
+        Map<String, String> stepNames = getProcessorStepNameMap();
 
         List<String> modelList = getClasses(definitions, "org.apache.camel");
         modelList.forEach(className -> {
-            String model = generateModel(className, definitions.getJsonObject(className), definitions, stepNames, getDslMetadata());
+            String model = generateModel(className, definitions.getJsonObject(className), definitions, getDslMetadata());
             camelModel.append(model).append(System.lineSeparator());
         });
 
         writeFileText(targetModel, camelModel.toString());
     }
 
-    private String generateModel(String classFullName, JsonObject obj, JsonObject definitions, Map<String, String> stepNames, Map<String, JsonObject> dslMetadata) {
+    private Map<String, JsonObject> getJsonObjectProperties (JsonObject val) {
+        Map<String, JsonObject> properties = new LinkedHashMap<>();
+        val.getMap().keySet().forEach(s -> {
+            JsonObject value = val.getJsonObject(s);
+            if (!value.getMap().isEmpty()) {
+                properties.put(s, val.getJsonObject(s));
+            } else if (s.equals("expression")){
+                properties.put(s, JsonObject.of("$ref", "#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"));
+            }
+        });
+        return properties;
+    }
+
+    private String generateModel(String classFullName, JsonObject obj, JsonObject definitions, Map<String, JsonObject> dslMetadata) {
         String className = classSimple(classFullName);
-        JsonObject properties = obj.containsKey("oneOf")
-                ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties")
-                : obj.getJsonObject("properties");
+        Map<String, JsonObject> properties = new LinkedHashMap<>();
+
+        obj.getMap().keySet().forEach(key -> {
+            if (key.equals("oneOf")) {
+                JsonObject val = obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties");
+                properties.putAll(getJsonObjectProperties(val));
+            } else if (key.equals("properties")) {
+                JsonObject val = obj.getJsonObject("properties");
+                properties.putAll(getJsonObjectProperties(val));
+            } else if (key.equals("anyOf")) {
+                JsonArray vals = obj.getJsonArray("anyOf").getJsonObject(0).getJsonArray("oneOf");
+                for (int i = 0; i < vals.size(); i++){
+                    JsonObject data = vals.getJsonObject(i);
+                    if (!data.containsKey("not") && data.containsKey("type")) {
+                        JsonObject val = data.getJsonObject("properties");
+                        properties.putAll(getJsonObjectProperties(val));
+                    }
+                }
+            }
+        });
 
         List<String> required = obj.containsKey("required") ? obj.getJsonArray("required").getList() : List.of();
         List<String> attrs = new ArrayList<>();
-        String stepName = stepNames.get(className);
-        if (className.endsWith("Definition") && stepNames.containsKey(className)) {
+        String stepName = getStepNameForClass(className);
+        if (className.endsWith("Definition")) {
             attrs.add("    stepName?: string = '" + stepName + "'");
-        } else if (className.endsWith("Expression") && stepNames.containsKey(className)) {
-            attrs.add("    expressionName?: string = '" + stepNames.get(className) + "'");
-        } else if (className.endsWith("DataFormat") && stepNames.containsKey(className)) {
-            attrs.add("    dataFormatName?: string = '" + stepNames.get(className) + "'");
-        }
-        if (properties != null) {
-            properties.getMap().keySet().stream().sorted(getComparator(stepName)).forEach(name -> {
-                JsonObject attributeValue = properties.getJsonObject(name);
-                boolean req = required.contains(name);
-                String generatedValue = ("id".equals(name) && stepName != null && !"routeConfiguration".equals(stepName)) ? "'" + stepName + "-' + uuidv4().substring(0,4)" : null;
-                String attributeType = getAttributeType(attributeValue, req, definitions, generatedValue);
-                String r = req ? "" : "?";
-                name = name.equals("constructor") ? "_constructor" : name; // exception for YAMLDataFormat
-                if (className.equals("ChoiceDefinition") && name.equals("steps")) { // exception for ChoiceDefinition
-                } else if (className.equals("SwitchDefinition") && name.equals("steps")) { // exception for SwitchDefinition
-                } else if (className.equals("KameletDefinition") && name.equals("steps")) { // exception for KameletDefinition
-                } else {
-                    attrs.add("    " + name + r + ": " + attributeType);
-                }
-            });
+        } else if (className.endsWith("Expression")) {
+            attrs.add("    expressionName?: string = '" + stepName + "'");
+        } else if (className.endsWith("DataFormat")) {
+            attrs.add("    dataFormatName?: string = '" + stepName + "'");
         }
-        String s2 = attrs.stream().collect(Collectors.joining(";\n")) + ((attrs.isEmpty()) ? "" : ";");
+
+        properties.keySet().stream().sorted(getComparator(stepName)).forEach(name -> {
+            JsonObject attributeValue = properties.get(name);
+            boolean req = required.contains(name);
+            String generatedValue = ("id".equals(name) && stepName != null && !"routeConfiguration".equals(stepName)) ? "'" + stepName + "-' + uuidv4().substring(0,4)" : null;
+            String attributeType = getAttributeType(name, attributeValue, req, definitions, generatedValue);
+
+            String r = req ? "" : "?";
+            name = name.equals("constructor") ? "_constructor" : name; // exception for YAMLDataFormat
+            if (className.equals("ChoiceDefinition") && name.equals("steps")) { // exception for ChoiceDefinition
+            } else if (className.equals("SwitchDefinition") && name.equals("steps")) { // exception for SwitchDefinition
+            } else if (className.equals("KameletDefinition") && name.equals("steps")) { // exception for KameletDefinition
+            } else if (!Objects.equals(attributeType, "null")) {
+                attrs.add("    " + name + r + ": " + attributeType);
+            }
+        });
+        String s2 = String.join(";\n", attrs) + ((attrs.isEmpty()) ? "" : ";");
         return String.format(readFileText(modelTemplate), className, s2);
     }
 
@@ -108,7 +128,7 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
         String json = getMetaModel(stepName);
         if (json != null) {
             JsonObject props = new JsonObject(json).getJsonObject("properties");
-            List propsLowerCase = props.getMap().keySet().stream().map(s -> s.toLowerCase()).collect(Collectors.toList());
+            List propsLowerCase = props.getMap().keySet().stream().map(String::toLowerCase).collect(Collectors.toList());
             return Comparator.comparing(e -> {
                 if (propsLowerCase.contains(e.toLowerCase())) return propsLowerCase.indexOf(e.toLowerCase());
                 else return propsLowerCase.size() + 1;
@@ -117,7 +137,7 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
         return Comparator.comparing(s -> 0);
     }
 
-    private String getAttributeType(JsonObject attribute, boolean required, JsonObject definitions, String generatedValue) {
+    private String getAttributeType(String stepName, JsonObject attribute, boolean required, JsonObject definitions, String generatedValue) {
         if (attribute.containsKey("$ref")) {
             String classFullName = attribute.getString("$ref");
             JsonObject clazz = getDefinition(definitions, classFullName);
@@ -134,6 +154,9 @@ public final class CamelDefinitionGenerator extends AbstractGenerator {
             } else if (items.containsKey("$ref")) {
                 String className = classSimple(items.getString("$ref"));
                 return className + "[] = []";
+            } else if (items.containsKey("properties") && items.getJsonObject("properties").containsKey(stepName)) {
+                String className = classSimple(items.getJsonObject("properties").getJsonObject(stepName).getString("$ref"));
+                return className + "[] = []";
             } else {
                 return items.getString("type") + "[] = []";
             }
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
index f72206dd..3e74e3a0 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
@@ -57,7 +57,7 @@ public final class CamelMetadataGenerator extends AbstractGenerator {
         camelModel.append("]\n\n");
 
         // Prepare stepNames map
-        Map<String, String> stepNames = getStepNames();
+        Map<String, String> stepNames = getProcessorStepNameMap();
 
         Map<String, JsonObject> classProps = new HashMap<>();
         // Generate DataFormatMetadata
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
index c3950392..5e6360e4 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/KaravanGenerator.java
@@ -28,9 +28,9 @@ public final class KaravanGenerator {
             paths = new String[] {args[0]};
         }
         CamelDefinitionGenerator.generate();
-        CamelDefinitionApiGenerator.generate();
-        CamelDefinitionYamlStepGenerator.generate();
-        CamelMetadataGenerator.generate();
+//        CamelDefinitionApiGenerator.generate();
+//        CamelDefinitionYamlStepGenerator.generate();
+//        CamelMetadataGenerator.generate();
         KameletGenerator.generate(paths);
         CamelComponentsGenerator.generate(paths);
         System.exit(0);


[camel-karavan] 04/04: Core Tests passed for Camel YAML DSL 4.1.0

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 86beea5de5ec7bcda62d4037293012697f8ef9fa
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Thu Oct 19 20:24:41 2023 -0400

    Core Tests passed for Camel YAML DSL 4.1.0
---
 karavan-core/src/core/model/CamelDefinition.ts     |   2 +-
 karavan-core/src/core/model/CamelMetadata.ts       | 300 ++++++++++++++++++---
 karavan-core/test/demo.yaml                        |   6 +-
 karavan-core/test/errorHandler1.yaml               |   2 +-
 .../camel/karavan/generator/AbstractGenerator.java |   3 +-
 .../karavan/generator/CamelMetadataGenerator.java  |   3 +-
 6 files changed, 266 insertions(+), 50 deletions(-)

diff --git a/karavan-core/src/core/model/CamelDefinition.ts b/karavan-core/src/core/model/CamelDefinition.ts
index 2c2747ac..cb0de8c7 100644
--- a/karavan-core/src/core/model/CamelDefinition.ts
+++ b/karavan-core/src/core/model/CamelDefinition.ts
@@ -1741,7 +1741,7 @@ export class BeanConstructorsDefinition extends CamelElement {
 }
 
 export class BeanPropertiesDefinition extends CamelElement {
-    stepName?: string = 'beanProperties';
+    stepName?: string = 'properties';
     property?: BeanPropertyDefinition[] = [];
     public constructor(init?: Partial<BeanPropertiesDefinition>) {
         super('BeanPropertiesDefinition');
diff --git a/karavan-core/src/core/model/CamelMetadata.ts b/karavan-core/src/core/model/CamelMetadata.ts
index 5f28b4e9..3bc408fd 100644
--- a/karavan-core/src/core/model/CamelMetadata.ts
+++ b/karavan-core/src/core/model/CamelMetadata.ts
@@ -373,6 +373,48 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
         new PropertyMeta('contentTypeHeader', 'Content Type Header', "Whether the data format should set the Content-Type header with the type from the data format. For example application/xml for data formats marshalling to XML, or application/json for data formats marshalling to JSON", 'boolean', '', 'true', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('dataFormats', 'DataFormatsDefinition', 'Data formats', "Configure data formats.", 'dataformat,transformation', [
+        new PropertyMeta('asn1', 'asn1', "asn1", 'ASN1DataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('avro', 'avro', "avro", 'AvroDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('barcode', 'barcode', "barcode", 'BarcodeDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('base64', 'base64', "base64", 'Base64DataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('bindy', 'bindy', "bindy", 'BindyDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('cbor', 'cbor', "cbor", 'CBORDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('crypto', 'crypto', "crypto", 'CryptoDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('csv', 'csv', "csv", 'CsvDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('custom', 'custom', "custom", 'CustomDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('fhirJson', 'fhirJson', "fhirJson", 'FhirJsonDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('fhirXml', 'fhirXml', "fhirXml", 'FhirXmlDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('flatpack', 'flatpack', "flatpack", 'FlatpackDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('grok', 'grok', "grok", 'GrokDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('gzipDeflater', 'gzipDeflater', "gzipDeflater", 'GzipDeflaterDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('hl7', 'hl7', "hl7", 'HL7DataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('ical', 'ical', "ical", 'IcalDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('jacksonXml', 'jacksonXml', "jacksonXml", 'JacksonXMLDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('jaxb', 'jaxb', "jaxb", 'JaxbDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('json', 'json', "json", 'JsonDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('jsonApi', 'jsonApi', "jsonApi", 'JsonApiDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('lzf', 'lzf', "lzf", 'LZFDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('mimeMultipart', 'mimeMultipart', "mimeMultipart", 'MimeMultipartDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('parquetAvro', 'parquetAvro', "parquetAvro", 'ParquetAvroDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('pgp', 'pgp', "pgp", 'PGPDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('protobuf', 'protobuf', "protobuf", 'ProtobufDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('rss', 'rss', "rss", 'RssDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('soap', 'soap', "soap", 'SoapDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('swiftMt', 'swiftMt', "swiftMt", 'SwiftMtDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('swiftMx', 'swiftMx', "swiftMx", 'SwiftMxDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('syslog', 'syslog', "syslog", 'SyslogDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('tarFile', 'tarFile', "tarFile", 'TarFileDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('thrift', 'thrift', "thrift", 'ThriftDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('tidyMarkup', 'tidyMarkup', "tidyMarkup", 'TidyMarkupDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('univocityCsv', 'univocityCsv', "univocityCsv", 'UniVocityCsvDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('univocityFixed', 'univocityFixed', "univocityFixed", 'UniVocityFixedDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('univocityTsv', 'univocityTsv', "univocityTsv", 'UniVocityTsvDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('xmlSecurity', 'xmlSecurity', "xmlSecurity", 'XMLSecurityDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('yaml', 'yaml', "yaml", 'YAMLDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('zipDeflater', 'zipDeflater', "zipDeflater", 'ZipDeflaterDataFormat', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('zipFile', 'zipFile', "zipFile", 'ZipFileDataFormat', '', '', false, false, false, true, '', ''),
+    ]),
     new ElementMeta('yaml', 'YAMLDataFormat', 'YAML', "Marshal and unmarshal Java objects to and from YAML.", 'dataformat,transformation,yaml', [
         new PropertyMeta('library', 'Library', "Which yaml library to use. By default it is SnakeYAML", 'string', 'SnakeYAML', 'SnakeYAML', false, false, false, false, '', ''),
         new PropertyMeta('unmarshalType', 'Unmarshal Type', "Class name of the java type to use when unmarshalling", 'string', '', '', false, false, false, false, '', ''),
@@ -852,6 +894,11 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('bearerToken', 'BearerTokenDefinition', 'Bearer Token', "Rest security bearer token authentication definition", 'rest,security,configuration', [
+        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('format', 'Format', "A hint to the client to identify how the bearer token is formatted.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('from', 'FromDefinition', 'From', "Act as a message source as input to a route", 'eip,routing', [
         new PropertyMeta('uri', 'Uri', "Sets the URI of the endpoint to use", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -859,6 +906,13 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('responseMessage', 'ResponseMessageDefinition', 'Response Message', "To specify the rest operation response messages.", 'rest', [
+        new PropertyMeta('code', 'Code', "The response code such as a HTTP status code", 'string', '', '200', false, false, false, false, '', ''),
+        new PropertyMeta('message', 'Message', "The response message (description)", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('responseModel', 'Response Model', "The response model", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('header', 'Header', "Adds a response header", 'ResponseHeaderDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('examples', 'Examples', "Examples of response messages", 'RestPropertyDefinition', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('refErrorHandler', 'RefErrorHandlerDefinition', 'Ref Error Handler', "References to an existing or custom error handler.", 'configuration,error', [
         new PropertyMeta('ref', 'Ref', "References to an existing or custom error handler.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -871,6 +925,13 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('when', 'WhenDefinition', 'When', "Triggers a route when the expression evaluates to true", 'eip,routing', [
+        new PropertyMeta('expression', 'Expression', "Expression used as the predicate to evaluate whether this when should trigger and route the message or not.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('loop', 'LoopDefinition', 'Loop', "Processes a message multiple times", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to define how many times we should loop. Notice the expression is only evaluated once, and should return a number as how many times to loop. A value of zero or negative means no looping. The loop is like a for-loop fashion, if you want a while loop, then the dynamic router may be a better choice.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('copy', 'Copy', "If the copy attribute is true, a copy of the input Exchange is used for each iteration. That means each iteration will start from a copy of the same message. By default loop will loop the same exchange all over, so each iteration may have different message content.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -881,12 +942,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('weighted', 'WeightedLoadBalancerDefinition', 'Weighted', "Uses a weighted load distribution ratio for each server with respect to others.", 'eip,routing', [
-        new PropertyMeta('distributionRatio', 'Distribution Ratio', "The distribution ratio is a delimited String consisting on integer weights separated by delimiters for example 2,3,5. The distributionRatio must match the number of endpoints and/or processors specified in the load balancer list.", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('distributionRatioDelimiter', 'Distribution Ratio Delimiter', "Delimiter used to specify the distribution ratio. The default value is , (comma)", 'string', '', ',', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('roundRobin', 'Round Robin', "To enable round robin mode. By default the weighted distribution mode is used. The default value is false.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
-        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('resumable', 'ResumableDefinition', 'Resumable', "Resume EIP to support resuming processing from last known offset.", 'eip,routing', [
         new PropertyMeta('resumeStrategy', 'Resume Strategy', "Sets the resume strategy to use", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('loggingLevel', 'Logging Level', "loggingLevel", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'ERROR', false, false, false, false, 'advanced', ''),
@@ -907,13 +962,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('failover', 'FailoverLoadBalancerDefinition', 'Failover', "In case of failures the exchange will be tried on the next endpoint.", 'eip,routing', [
-        new PropertyMeta('exception', 'Exception', "A list of class names for specific exceptions to monitor. If no exceptions are configured then all exceptions are monitored", 'string', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('roundRobin', 'Round Robin', "Whether or not the failover load balancer should operate in round robin mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If round robin is enabled, then it keeps state and will continue with the next endpoint in a round robin fashion. You can also enable sticky mode together with round robin, if so then it will pick  [...]
-        new PropertyMeta('sticky', 'Sticky', "Whether or not the failover load balancer should operate in sticky mode or not. If not, then it will always start from the first endpoint when a new message is to be processed. In other words it restart from the top for every message. If sticky is enabled, then it keeps state and will continue with the last known good endpoint. You can also enable sticky mode together with round robin, if so then it will pick the last known good endpoint to u [...]
-        new PropertyMeta('maximumFailoverAttempts', 'Maximum Failover Attempts', "A value to indicate after X failover attempts we should exhaust (give up). Use -1 to indicate never give up and continuously try to failover. Use 0 to never failover. And use e.g. 3 to failover at most 3 times before giving up. his option can be used whether or not roundRobin is enabled or not.", 'string', '', '-1', false, false, false, false, '', ''),
-        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('otherwise', 'OtherwiseDefinition', 'Otherwise', "Route to be executed when all other choices evaluate to false", 'eip,routing', [
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -979,9 +1027,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('roundRobin', 'RoundRobinLoadBalancerDefinition', 'Round Robin', "The destination endpoints are selected in a round-robin fashion. This is a well known and classic policy, which spreads the load evenly.", 'eip,routing', [
-        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('setExchangePattern', 'SetExchangePatternDefinition', 'Set Exchange Pattern', "Sets the exchange pattern on the message exchange", 'configuration', [
         new PropertyMeta('pattern', 'Pattern', "Sets the new exchange pattern of the Exchange to be used from this point forward", 'string', 'InOnly, InOut', '', true, false, false, false, '', ''),
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -1053,6 +1098,31 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('get', 'GetDefinition', 'Get', "Rest GET command", 'rest', [
+        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
+        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
+        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
+    ]),
+    new ElementMeta('restProperty', 'RestPropertyDefinition', 'Rest Property', "A key value pair", 'rest', [
+        new PropertyMeta('key', 'Key', "Property key", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('value', 'Value', "Property value", 'string', '', '', true, false, false, false, '', ''),
+    ]),
     new ElementMeta('enrich', 'EnrichDefinition', 'Enrich', "Enriches a message with data from a secondary resource", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression that computes the endpoint uri to use as the resource endpoint to enrich from", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('aggregationStrategy', 'Aggregation Strategy', "Sets the AggregationStrategy to be used to merge the reply from the external service, into a single outgoing message. By default Camel will use the reply from the external service as outgoing message.", 'string', '', '', false, false, false, false, '', 'org.apache.camel.AggregationStrategy'),
@@ -1080,11 +1150,18 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('value', 'ValueDefinition', 'Value', "A single value", 'configuration', [
+        new PropertyMeta('value', 'Value', "Property value", 'string', '', '', true, false, false, false, '', ''),
+    ]),
     new ElementMeta('kamelet', 'KameletDefinition', 'Kamelet', "To call Kamelets in special situations", 'eip,routing', [
         new PropertyMeta('name', 'Name', "Name of the Kamelet (templateId/routeId) to call. Options for the kamelet can be specified using uri syntax, eg mynamecount=4&type=gold.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('globalOption', 'GlobalOptionDefinition', 'Global Option', "Models a string key/value pair for configuring some global options on a Camel context such as max debug log length.", 'configuration', [
+        new PropertyMeta('key', 'Key', "Global option key", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('value', 'Value', "Global option value", 'string', '', '', true, false, false, false, '', ''),
+    ]),
     new ElementMeta('restBinding', 'RestBindingDefinition', 'Rest Binding', "To configure rest binding", 'rest', [
         new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json", 'string', '', '', false, false, false, false, '', ''),
@@ -1104,6 +1181,16 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
+    new ElementMeta('responseHeader', 'ResponseHeaderDefinition', 'Response Header', "To specify the rest operation response headers.", 'rest', [
+        new PropertyMeta('name', 'Name', "Name of the parameter. This option is mandatory.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('collectionFormat', 'Collection Format', "Sets the parameter collection format.", 'string', 'csv, multi, pipes, ssv, tsv', 'csv', false, false, false, false, '', ''),
+        new PropertyMeta('arrayType', 'Array Type', "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", 'string', '', 'string', false, false, false, false, '', ''),
+        new PropertyMeta('dataType', 'Data Type', "Sets the header data type.", 'string', '', 'string', false, false, false, false, '', ''),
+        new PropertyMeta('dataFormat', 'Data Format', "Sets the parameter data format.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('allowableValues', 'Allowable Values', "Sets the parameter list of allowable values.", 'ValueDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('example', 'Example', "Sets the example", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Description of the parameter.", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('circuitBreaker', 'CircuitBreakerDefinition', 'Circuit Breaker', "Route messages in a fault tolerance way using Circuit Breaker", 'eip,routing', [
         new PropertyMeta('configuration', 'Configuration', "Refers to a circuit breaker configuration (such as resillience4j, or microprofile-fault-tolerance) to use for configuring the circuit breaker EIP.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('resilience4jConfiguration', 'Resilience4j Configuration', "Configures the circuit breaker to use Resilience4j with the given configuration.", 'Resilience4jConfigurationDefinition', '', '', false, false, false, true, '', ''),
@@ -1125,6 +1212,19 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('ref', 'Ref', "Refers to the custom load balancer to lookup from the registry", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('param', 'ParamDefinition', 'Param', "To specify the rest operation parameters.", 'rest', [
+        new PropertyMeta('name', 'Name', "Sets the parameter name.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('type', 'Type', "Sets the parameter type.", 'string', 'body, formData, header, path, query', 'path', false, false, false, false, '', ''),
+        new PropertyMeta('defaultValue', 'Default Value', "Sets the parameter default value.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('required', 'Required', "Sets the parameter required flag.", 'boolean', '', 'true', false, false, false, false, '', ''),
+        new PropertyMeta('collectionFormat', 'Collection Format', "Sets the parameter collection format.", 'string', 'csv, multi, pipes, ssv, tsv', 'csv', false, false, false, false, '', ''),
+        new PropertyMeta('arrayType', 'Array Type', "Sets the parameter array type. Required if data type is array. Describes the type of items in the array.", 'string', '', 'string', false, false, false, false, '', ''),
+        new PropertyMeta('dataType', 'Data Type', "Sets the parameter data type.", 'string', '', 'string', false, false, false, false, '', ''),
+        new PropertyMeta('dataFormat', 'Data Format', "Sets the parameter data format.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('allowableValues', 'Allowable Values', "Sets the parameter list of allowable values (enum).", 'ValueDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('examples', 'Examples', "Sets the parameter examples.", 'RestPropertyDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the parameter description.", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('throttle', 'ThrottleDefinition', 'Throttle', "Controls the rate at which messages are passed to the next node in the route", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression to configure the maximum number of messages to throttle per request", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('correlationExpression', 'Correlation Expression', "The expression used to calculate the correlation key to use for throttle grouping. The Exchange which has the same correlation key is throttled together.", 'ExpressionSubElementDefinition', '', '', false, false, false, true, '', ''),
@@ -1137,6 +1237,27 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('head', 'HeadDefinition', 'Head', "Rest HEAD command", 'rest', [
+        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
+        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
+        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('jtaTransactionErrorHandler', 'JtaTransactionErrorHandlerDefinition', 'Jta Transaction Error Handler', "JTA based transactional error handler (requires camel-jta).", 'configuration,error', [
         new PropertyMeta('transactedPolicyRef', 'Transacted Policy Ref', "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('rollbackLoggingLevel', 'Rollback Logging Level', "Sets the logging level to use for logging transactional rollback. This option is default WARN.", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'WARN', false, false, false, false, '', ''),
@@ -1267,14 +1388,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('securityDefinitions', 'RestSecuritiesDefinition', 'Rest Security Definitions', "To configure rest security definitions.", 'rest,security,configuration', [
-        new PropertyMeta('apiKey', 'apiKey', "apiKey", 'ApiKeyDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('basicAuth', 'basicAuth', "basicAuth", 'BasicAuthDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('bearer', 'bearer', "bearer", 'BearerTokenDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('mutualTls', 'mutualTls', "mutualTls", 'MutualTLSDefinition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('oauth2', 'oauth2', "oauth2", 'OAuth2Definition', '', '', false, false, false, true, '', ''),
-        new PropertyMeta('openIdConnect', 'openIdConnect', "openIdConnect", 'OpenIdConnectDefinition', '', '', false, false, false, true, '', ''),
-    ]),
     new ElementMeta('pipeline', 'PipelineDefinition', 'Pipeline', "Routes the message to a sequence of processors.", 'eip,routing', [
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -1286,6 +1399,27 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('excludes', 'Excludes', "Exclude finding route builder from these java package names.", 'string', '', '', false, false, true, true, 'advanced', ''),
         new PropertyMeta('includes', 'Includes', "Include finding route builder from these java package names.", 'string', '', '', false, false, true, true, 'advanced', ''),
     ]),
+    new ElementMeta('patch', 'PatchDefinition', 'Patch', "Rest PATCH command", 'rest', [
+        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
+        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
+        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('validate', 'ValidateDefinition', 'Validate', "Validates a message based on an expression", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression to use for validation as a predicate. The expression should return either true or false. If returning false the message is invalid and an exception is thrown.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('predicateExceptionFactory', 'Predicate Exception Factory', "The bean id of custom PredicateExceptionFactory to use for creating the exception when the validation fails. By default, Camel will throw PredicateValidationException. By using a custom factory you can control which exception to throw instead.", 'string', '', '', false, false, false, false, 'advanced', ''),
@@ -1301,6 +1435,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('property', 'PropertyDefinition', 'Property', "A key value pair where the value is a literal value", 'configuration', [
+        new PropertyMeta('key', 'Key', "Property key", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('value', 'Value', "Property value", 'string', '', '', true, false, false, false, '', ''),
+    ]),
     new ElementMeta('validators', 'ValidatorsDefinition', 'Validations', "To configure validators.", 'validation', [
         new PropertyMeta('customValidator', 'customValidator', "customValidator", 'CustomValidatorDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('endpointValidator', 'endpointValidator', "endpointValidator", 'EndpointValidatorDefinition', '', '', false, false, false, true, '', ''),
@@ -1381,6 +1519,14 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('parameters', 'parameters', "parameters", 'object', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('doCatch', 'CatchDefinition', 'Do Catch', "Catches exceptions as part of a try, catch, finally block", 'error', [
+        new PropertyMeta('exception', 'Exception', "The exception(s) to catch.", 'string', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onCatch is triggered. To be used for fine grained controlling whether a thrown exception should be intercepted by this exception type or not.", 'WhenDefinition', '', '', false, false, false, true, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('onFallback', 'OnFallbackDefinition', 'On Fallback', "Route to be executed when Circuit Breaker EIP executes fallback", 'eip,routing', [
         new PropertyMeta('fallbackViaNetwork', 'Fallback Via Network', "Whether the fallback goes over the network. If the fallback will go over the network it is another possible point of failure. It is important to execute the fallback command on a separate thread-pool, otherwise if the main command were to become latent and fill the thread-pool this would prevent the fallback from running if the two commands share the same pool.", 'boolean', '', 'false', false, false, false, false, 'a [...]
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -1388,15 +1534,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('steps', 'steps', "steps", 'CamelElement', '', '', false, false, true, true, '', ''),
     ]),
-    new ElementMeta('oauth2', 'OAuth2Definition', 'Oauth2', "Rest security OAuth2 definition", 'rest,security,configuration', [
-        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
-        new PropertyMeta('authorizationUrl', 'Authorization Url', "The authorization URL to be used for this flow. This SHOULD be in the form of a URL. Required for implicit and access code flows", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('tokenUrl', 'Token Url', "The token URL to be used for this flow. This SHOULD be in the form of a URL. Required for password, application, and access code flows.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('refreshUrl', 'Refresh Url', "The URL to be used for obtaining refresh tokens. This MUST be in the form of a URL.", 'string', '', '', false, false, false, false, '', ''),
-        new PropertyMeta('flow', 'Flow', "The flow used by the OAuth2 security scheme. Valid values are implicit, password, application or accessCode.", 'string', 'implicit, password, application, clientCredentials, accessCode, authorizationCode', '', false, false, false, false, '', ''),
-        new PropertyMeta('scopes', 'Scopes', "The available scopes for an OAuth2 security scheme", 'RestPropertyDefinition', '', '', false, false, true, true, '', ''),
-        new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('rests', 'RestsDefinition', 'Rests', "A series of rest services defined using the rest-dsl", 'rest', [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
@@ -1549,6 +1686,14 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('noErrorHandler', 'noErrorHandler', "noErrorHandler", 'NoErrorHandlerDefinition', '', '', false, false, false, true, '', ''),
         new PropertyMeta('springTransactionErrorHandler', 'springTransactionErrorHandler', "springTransactionErrorHandler", 'SpringTransactionErrorHandlerDefinition', '', '', false, false, false, true, '', ''),
     ]),
+    new ElementMeta('templatedRouteBean', 'TemplatedRouteBeanDefinition', 'Templated Route Bean', "A bean as input of a route template (local bean)", 'configuration', [
+        new PropertyMeta('name', 'Name', "Bean name", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('type', 'Type', "What type to use for creating the bean (FQN classname). Can be prefixed with: #class or #type #class or #type then the bean is created via the fully qualified classname, such as #class:com.foo.MyBean", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('scriptLanguage', 'Script Language', "The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('property', 'Property', "Optional properties to set on the created local bean", 'PropertyDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('properties', 'Properties', "Optional properties to set on the created local bean", 'object', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('script', 'Script', "The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such as resource:classpath:com/foo/myscript.groovy, resource:file:/var/myscript.groovy, then its loaded from the external resource.", 'string', '', '', false, false, false, false, 'advanced', ''),
+    ]),
     new ElementMeta('dataFormats', 'DataFormatsDefinition', 'Data formats', "Configure data formats.", 'dataformat,transformation', [
         new PropertyMeta('asn1', 'asn1', "asn1", 'ASN1DataFormat', '', '', false, false, false, true, '', ''),
         new PropertyMeta('avro', 'avro', "avro", 'AvroDataFormat', '', '', false, false, false, true, '', ''),
@@ -1591,6 +1736,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('zipDeflater', 'zipDeflater', "zipDeflater", 'ZipDeflaterDataFormat', '', '', false, false, false, true, '', ''),
         new PropertyMeta('zipFile', 'zipFile', "zipFile", 'ZipFileDataFormat', '', '', false, false, false, true, '', ''),
     ]),
+    new ElementMeta('mutualTLS', 'MutualTLSDefinition', 'Mutual TLS', "Rest security mutual TLS authentication definition", 'rest,security,configuration', [
+        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('split', 'SplitDefinition', 'Split', "Splits a single message into many sub-messages.", 'eip,routing', [
         new PropertyMeta('expression', 'Expression', "Expression of how to split the message body, such as as-is, using a tokenizer, or using a xpath.", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('delimiter', 'Delimiter', "Delimiter used in splitting messages. Can be turned off using the value false. The default value is ,", 'string', '', ',', false, false, false, false, '', ''),
@@ -1617,6 +1766,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('security', 'SecurityDefinition', 'Rest Security', "Rest security definition", 'rest,security,configuration', [
+        new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('scopes', 'Scopes', "The scopes to allow (separate multiple scopes by comma)", 'string', '', '', false, false, false, false, '', ''),
+    ]),
     new ElementMeta('onException', 'OnExceptionDefinition', 'On Exception', "Route to be executed when an exception is thrown", 'error', [
         new PropertyMeta('exception', 'Exception', "A set of exceptions to react upon.", 'string', '', '', true, false, true, true, '', ''),
         new PropertyMeta('onWhen', 'On When', "Sets an additional predicate that should be true before the onException is triggered. To be used for fine grained controlling whether a thrown exception should be intercepted by this exception type or not.", 'WhenDefinition', '', '', false, false, false, true, '', ''),
@@ -1697,6 +1850,27 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('executorServiceRef', 'Executor Service Ref', "Sets a reference to a thread pool to be used by the error handler", 'string', '', '', false, false, false, false, 'advanced', ''),
         new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('put', 'PutDefinition', 'Put', "Rest PUT command", 'rest', [
+        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
+        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
+        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('transform', 'TransformDefinition', 'Transform', "Transforms the message body based on an expression", 'eip,transformation', [
         new PropertyMeta('expression', 'Expression', "Expression to return the transformed message body (the new message body to use)", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
         new PropertyMeta('fromType', 'From Type', "From type used in data type transformation.", 'string', '', '', false, false, false, false, '', ''),
@@ -1778,10 +1952,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('exponentialBackOff', 'Exponential Back Off', "Enable exponential backoff", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
         new PropertyMeta('randomBackOff', 'Random Back Off', "Enables random backoff", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
     ]),
-    new ElementMeta('sticky', 'StickyLoadBalancerDefinition', 'Sticky', "Sticky load balancing using an expression to calculate a correlation key to perform the sticky load balancing.", 'eip,routing', [
-        new PropertyMeta('correlationExpression', 'Correlation Expression', "The correlation expression to use to calculate the correlation key", 'ExpressionSubElementDefinition', '', '', true, false, false, true, '', ''),
-        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('interceptFrom', 'InterceptFromDefinition', 'Intercept From', "Intercepts incoming messages", 'configuration', [
         new PropertyMeta('uri', 'Uri', "Intercept incoming messages from the uri or uri pattern. If this option is not configured, then all incoming messages is intercepted.", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('disabled', 'Disabled', "Whether to disable this EIP from the route during build time. Once an EIP has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
@@ -1832,20 +2002,42 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('random', 'RandomLoadBalancerDefinition', 'Random', "The destination endpoints are selected by random.", 'eip,routing', [
-        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('openIdConnect', 'OpenIdConnectDefinition', 'Open Id Connect', "Rest security OpenID Connect definition", 'rest,security,configuration', [
         new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('url', 'Url', "OpenId Connect URL to discover OAuth2 configuration values.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('propertyExpression', 'PropertyExpressionDefinition', 'Property Expression', "A key value pair where the value is an expression.", 'configuration', [
+        new PropertyMeta('key', 'Key', "Property key", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('expression', 'Expression', "Property values as an expression", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
+    ]),
     new ElementMeta('inputType', 'InputTypeDefinition', 'Input Type', "Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For example {code java:java.lang.String} , {code json:ABCOrder} .  [...]
         new PropertyMeta('urn', 'Urn', "The input type URN.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('validate', 'Validate', "Whether if validation is required for this input type.", 'boolean', '', 'false', false, false, false, false, '', ''),
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('delete', 'DeleteDefinition', 'Delete', "Rest DELETE command", 'rest', [
+        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
+        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
+        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('rollback', 'RollbackDefinition', 'Rollback', "Forces a rollback by stopping routing the message", 'eip,routing', [
         new PropertyMeta('message', 'Message', "Message to use in rollback exception", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('markRollbackOnly', 'Mark Rollback Only', "Mark the transaction for rollback only (cannot be overruled to commit)", 'boolean', '', 'false', false, false, false, false, '', ''),
@@ -1870,6 +2062,27 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('post', 'PostDefinition', 'Post', "Rest POST command", 'rest', [
+        new PropertyMeta('path', 'Path', "The path mapping URIs of this REST operation such as /{id}.", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('to', 'To', "The Camel endpoint this REST service will call, such as a direct endpoint to link to an existing route that handles this REST call.", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('consumes', 'Consumes', "To define the content type what the REST service consumes (accept as input), such as application/xml or application/json. This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('produces', 'Produces', "To define the content type what the REST service produces (uses for output), such as application/xml or application/json This option will override what may be configured on a parent level", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('disabled', 'Disabled', "Whether to disable this REST service from the route during build time. Once an REST service has been disabled then it cannot be enabled later at runtime.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('type', 'Type', "Sets the class name to use for binding from input to POJO for the incoming data This option will override what may be configured on a parent level. The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('outType', 'Out Type', "Sets the class name to use for binding from POJO to output for the outgoing data This option will override what may be configured on a parent level The name of the class of the input data. Append a to the end of the name if you want the input to be an array type.", 'string', '', '', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('bindingMode', 'Binding Mode', "Sets the binding mode to use. This option will override what may be configured on a parent level The default value is off", 'string', 'off, auto, json, xml, json_xml', 'off', false, false, false, false, '', ''),
+        new PropertyMeta('skipBindingOnErrorCode', 'Skip Binding On Error Code', "Whether to skip binding on output if there is a custom HTTP error code header. This allows to build custom error messages that do not bind to json / xml etc, as success messages otherwise will do. This option will override what may be configured on a parent level", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('clientRequestValidation', 'Client Request Validation', "Whether to enable validation of the client request to check: 1) Content-Type header matches what the Rest DSL consumes; returns HTTP Status 415 if validation error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status 406 if validation error. 3) Missing required data (query parameters, HTTP headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of the message body  [...]
+        new PropertyMeta('enableCors', 'enableCors', "enableCors", 'boolean', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('apiDocs', 'Api Docs', "Whether to include or exclude this rest operation in API documentation. The default value is true.", 'boolean', '', 'true', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('deprecated', 'Deprecated', "Marks this rest operation as deprecated in OpenApi documentation.", 'boolean', '', 'false', false, false, false, false, 'advanced', ''),
+        new PropertyMeta('routeId', 'Route Id', "Sets the id of the route", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
+        new PropertyMeta('param', 'param', "param", 'ParamDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('responseMessage', 'responseMessage', "responseMessage", 'ResponseMessageDefinition', '', '', false, false, true, true, '', ''),
+        new PropertyMeta('security', 'security', "security", 'SecurityDefinition', '', '', false, false, true, true, '', ''),
+    ]),
     new ElementMeta('log', 'LogDefinition', 'Log', "Logs the defined message to the logger", 'eip,routing', [
         new PropertyMeta('message', 'Message', "Sets the log message (uses simple language)", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('loggingLevel', 'Logging Level', "Sets the logging level. The default value is INFO", 'string', 'TRACE, DEBUG, INFO, WARN, ERROR, OFF', 'INFO', false, false, false, false, '', ''),
@@ -1990,9 +2203,6 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
-    new ElementMeta('topic', 'TopicLoadBalancerDefinition', 'Topic', "Topic which sends to all destinations.", 'eip,routing', [
-        new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '', false, false, false, false, '', ''),
-    ]),
     new ElementMeta('basicAuth', 'BasicAuthDefinition', 'Basic Auth', "Rest security basic auth definition", 'rest,security,configuration', [
         new PropertyMeta('key', 'Key', "Key used to refer to this security definition", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "A short description for security scheme.", 'string', '', '', false, false, false, false, '', ''),
@@ -2012,6 +2222,10 @@ export const CamelModelMetadata: ElementMeta[] = [
         new PropertyMeta('id', 'Id', "Sets the id of this node", 'string', '', '', false, false, false, false, '', ''),
         new PropertyMeta('description', 'Description', "Sets the description of this node", 'string', '', '', false, false, false, false, '', ''),
     ]),
+    new ElementMeta('templatedRouteParameter', 'TemplatedRouteParameterDefinition', 'Templated Route Parameter', "An input parameter of a route template.", 'configuration', [
+        new PropertyMeta('name', 'Name', "The name of the parameter", 'string', '', '', true, false, false, false, '', ''),
+        new PropertyMeta('value', 'Value', "The value of the parameter.", 'string', '', '', true, false, false, false, '', ''),
+    ]),
     new ElementMeta('setHeader', 'SetHeaderDefinition', 'Set Header', "Sets the value of a message header", 'eip,transformation', [
         new PropertyMeta('name', 'Name', "Name of message header to set a new value The simple language can be used to define a dynamic evaluated header name to be used. Otherwise a constant name will be used.", 'string', '', '', true, false, false, false, '', ''),
         new PropertyMeta('expression', 'Expression', "Expression to return the value of the header", 'ExpressionDefinition', '', '', true, false, false, true, '', ''),
diff --git a/karavan-core/test/demo.yaml b/karavan-core/test/demo.yaml
index c8162124..f13dbfb8 100644
--- a/karavan-core/test/demo.yaml
+++ b/karavan-core/test/demo.yaml
@@ -8,15 +8,15 @@ spec:
         from:
           uri: kamelet:http-secured-source
           steps:
-            - do-try:
+            - doTry:
                 steps:
                   - to: "log:when-a"
                   - to: "log:when-b"
-                do-catch:
+                doCatch:
                   - exception:
                       - "java.io.FileNotFoundException"
                       - "java.io.IOException"
-                    on-when:
+                    onWhen:
                       expression:
                         simple: "${body.size()} == 1"
                     steps:
diff --git a/karavan-core/test/errorHandler1.yaml b/karavan-core/test/errorHandler1.yaml
index 688aee15..4dd8631f 100644
--- a/karavan-core/test/errorHandler1.yaml
+++ b/karavan-core/test/errorHandler1.yaml
@@ -21,7 +21,7 @@
       id: errorHandler-1
       deadLetterChannel:
         deadLetterUri: log:dlq
-        level: TRACE
         useOriginalMessage: true
+        level: TRACE
         id: deadLetterChannel-1
     id: routeConfiguration-1
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
index 8102e5f3..78f0fd6f 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/AbstractGenerator.java
@@ -67,6 +67,8 @@ public class AbstractGenerator {
             className = "toD";
         } else if (className.equals("SamplingDefinition")) {
             className = "sample";
+        } else if (className.equals("BeanPropertiesDefinition")) {
+            className = "properties";
         } else if (className.endsWith("Definition")) {
             className = className.substring(0, className.length() - 10);
         } else if (className.endsWith("DataFormat")){
@@ -373,7 +375,6 @@ public class AbstractGenerator {
     protected Map<String, String> getProcessorStepNameMap() {
         String camelYamlDSL = getCamelYamlDSL();
         JsonObject definitions = new JsonObject(camelYamlDSL);
-
         return new LinkedHashMap<>(getProcessorStepNameMapForObject(null, definitions));
     }
 
diff --git a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
index 1356f269..d1c9e618 100644
--- a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
+++ b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
@@ -150,6 +150,7 @@ public final class CamelMetadataGenerator extends AbstractGenerator {
         code.append(String.format("export const %s: ElementMeta[] = [\n", className));
         classProps.entrySet().stream().filter(entry -> {
             if (entry.getValue() == null) {
+//                System.out.println(entry.getKey());
                 return false;
             } else {
                 return true;
@@ -157,7 +158,7 @@ public final class CamelMetadataGenerator extends AbstractGenerator {
         }).forEach(entry -> {
             String name = entry.getKey();
             JsonObject properties = entry.getValue();
-            String stepName = stepNames.get(name);
+            String stepName = getStepNameForClass(name);
             String json = folder.equals("model") ? getMetaModel(stepName) : (folder.equals("language") ? getMetaLanguage(stepName) : getMetaDataFormat(stepName));
             if (json != null) {
                 JsonObject model = new JsonObject(json).getJsonObject("model");