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:52 UTC

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

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);