diff --git a/karavan-core/package-lock.json b/karavan-core/package-lock.json
index dd8f54e..aa3da67 100644
--- a/karavan-core/package-lock.json
+++ b/karavan-core/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "karavan-core",
-  "version": "3.18.0",
+  "version": "3.18.2",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "karavan-core",
-      "version": "3.18.0",
+      "version": "3.18.2",
       "license": "Apache-2.0",
       "dependencies": {
         "@types/js-yaml": "^4.0.5",
diff --git a/karavan-core/src/core/api/CamelDefinitionApiExt.ts b/karavan-core/src/core/api/CamelDefinitionApiExt.ts
index e6d39cf..fcd867f 100644
--- a/karavan-core/src/core/api/CamelDefinitionApiExt.ts
+++ b/karavan-core/src/core/api/CamelDefinitionApiExt.ts
@@ -135,7 +135,7 @@
                         } else {
                             const prop = (step as any)[e.name];
                             if (prop && prop.hasOwnProperty("uuid")) {
-                                result = CamelDefinitionApiExt.findElementInElements([prop], uuid, result, prop.uuid);
+                                result = CamelDefinitionApiExt.findElementInElements([prop], uuid, result, step.uuid);
                             }
                         }
                     })
diff --git a/karavan-core/src/core/api/CamelDefinitionYaml.ts b/karavan-core/src/core/api/CamelDefinitionYaml.ts
index 2abf53b..de4838a 100644
--- a/karavan-core/src/core/api/CamelDefinitionYaml.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYaml.ts
@@ -26,8 +26,8 @@
         const clone: any = CamelUtil.cloneIntegration(integration);
         const flows = integration.spec.flows
         clone.spec.flows = flows?.map((f: any) => CamelDefinitionYaml.cleanupElement(f)).filter(x => Object.keys(x).length !== 0);
-        if (integration.crd) {
-            delete clone.crd
+        if (integration.type === 'crd') {
+            delete clone.type
             const i = JSON.parse(JSON.stringify(clone, null, 3)); // fix undefined in string attributes
             const text = CamelDefinitionYaml.yamlDump(i);
             return text;
@@ -123,6 +123,7 @@
                 || dslName === 'ExpressionDefinition'
                 || dslName?.endsWith('Expression')
                 || stepName === 'otherwise'
+                || stepName === 'doFinally'
                 || key === 'from') {
                 delete newValue.inArray;
                 delete newValue.inSteps;
@@ -135,14 +136,6 @@
                 return xValue;
             }
         } else {
-            if (value?.dslName && value.dslName.endsWith("Trait") && value.dslName !== 'Trait'){
-                delete value.dslName;
-                return {configuration: value};
-            } else if (value?.dslName === 'Trait' && value?.threeScale){
-                delete value.dslName;
-                value["3scale"] = {configuration: value.threeScale};
-                return value;
-            }
             delete value?.dslName;
             return value;
         }
@@ -153,12 +146,12 @@
         const fromYaml: any = yaml.load(text);
         const camelized: any = CamelUtil.camelizeObject(fromYaml);
         if (camelized?.apiVersion && camelized.apiVersion.startsWith('camel.apache.org') && camelized.kind && camelized.kind === 'Integration') {
-            integration.crd = true;
+            integration.type = 'crd';
             if (camelized?.metadata?.name) integration.metadata.name = camelized?.metadata?.name;
             const int: Integration = new Integration({...camelized});
             integration.spec.flows?.push(...this.flowsToCamelElements(int.spec.flows || []));
         } else if (Array.isArray(camelized)) {
-            integration.crd = false;
+            integration.type = 'plain';
             const flows: any[] = camelized;
             integration.spec.flows?.push(...this.flowsToCamelElements(flows));
         }
diff --git a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
index 745cc79..26925c4 100644
--- a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
@@ -246,196 +246,452 @@
         
         const def = element ? new ProcessorDefinition({...element}) : new ProcessorDefinition();
         if (element?.idempotentConsumer !== undefined) { 
-            def.idempotentConsumer = CamelDefinitionYamlStep.readIdempotentConsumerDefinition(element.idempotentConsumer); 
+            if (Array.isArray(element.idempotentConsumer)) { 
+               def.idempotentConsumer = CamelDefinitionYamlStep.readIdempotentConsumerDefinition(element.idempotentConsumer[0]); 
+            } else { 
+               def.idempotentConsumer = CamelDefinitionYamlStep.readIdempotentConsumerDefinition(element.idempotentConsumer); 
+            } 
         } 
         if (element?.resumable !== undefined) { 
-            def.resumable = CamelDefinitionYamlStep.readResumableDefinition(element.resumable); 
+            if (Array.isArray(element.resumable)) { 
+               def.resumable = CamelDefinitionYamlStep.readResumableDefinition(element.resumable[0]); 
+            } else { 
+               def.resumable = CamelDefinitionYamlStep.readResumableDefinition(element.resumable); 
+            } 
         } 
         if (element?.doTry !== undefined) { 
-            def.doTry = CamelDefinitionYamlStep.readTryDefinition(element.doTry); 
+            if (Array.isArray(element.doTry)) { 
+               def.doTry = CamelDefinitionYamlStep.readTryDefinition(element.doTry[0]); 
+            } else { 
+               def.doTry = CamelDefinitionYamlStep.readTryDefinition(element.doTry); 
+            } 
         } 
         if (element?.convertBodyTo !== undefined) { 
-            def.convertBodyTo = CamelDefinitionYamlStep.readConvertBodyDefinition(element.convertBodyTo); 
+            if (Array.isArray(element.convertBodyTo)) { 
+               def.convertBodyTo = CamelDefinitionYamlStep.readConvertBodyDefinition(element.convertBodyTo[0]); 
+            } else { 
+               def.convertBodyTo = CamelDefinitionYamlStep.readConvertBodyDefinition(element.convertBodyTo); 
+            } 
         } 
         if (element?.recipientList !== undefined) { 
-            def.recipientList = CamelDefinitionYamlStep.readRecipientListDefinition(element.recipientList); 
+            if (Array.isArray(element.recipientList)) { 
+               def.recipientList = CamelDefinitionYamlStep.readRecipientListDefinition(element.recipientList[0]); 
+            } else { 
+               def.recipientList = CamelDefinitionYamlStep.readRecipientListDefinition(element.recipientList); 
+            } 
         } 
         if (element?.when !== undefined) { 
-            def.when = CamelDefinitionYamlStep.readWhenDefinition(element.when); 
+            if (Array.isArray(element.when)) { 
+               def.when = CamelDefinitionYamlStep.readWhenDefinition(element.when[0]); 
+            } else { 
+               def.when = CamelDefinitionYamlStep.readWhenDefinition(element.when); 
+            } 
         } 
         if (element?.setHeader !== undefined) { 
-            def.setHeader = CamelDefinitionYamlStep.readSetHeaderDefinition(element.setHeader); 
+            if (Array.isArray(element.setHeader)) { 
+               def.setHeader = CamelDefinitionYamlStep.readSetHeaderDefinition(element.setHeader[0]); 
+            } else { 
+               def.setHeader = CamelDefinitionYamlStep.readSetHeaderDefinition(element.setHeader); 
+            } 
         } 
         if (element?.inOnly !== undefined) { 
-            def.inOnly = CamelDefinitionYamlStep.readInOnlyDefinition(element.inOnly); 
+            if (Array.isArray(element.inOnly)) { 
+               def.inOnly = CamelDefinitionYamlStep.readInOnlyDefinition(element.inOnly[0]); 
+            } else { 
+               def.inOnly = CamelDefinitionYamlStep.readInOnlyDefinition(element.inOnly); 
+            } 
         } 
         if (element?.inOut !== undefined) { 
-            def.inOut = CamelDefinitionYamlStep.readInOutDefinition(element.inOut); 
+            if (Array.isArray(element.inOut)) { 
+               def.inOut = CamelDefinitionYamlStep.readInOutDefinition(element.inOut[0]); 
+            } else { 
+               def.inOut = CamelDefinitionYamlStep.readInOutDefinition(element.inOut); 
+            } 
         } 
         if (element?.split !== undefined) { 
-            def.split = CamelDefinitionYamlStep.readSplitDefinition(element.split); 
+            if (Array.isArray(element.split)) { 
+               def.split = CamelDefinitionYamlStep.readSplitDefinition(element.split[0]); 
+            } else { 
+               def.split = CamelDefinitionYamlStep.readSplitDefinition(element.split); 
+            } 
         } 
         if (element?.interceptSendToEndpoint !== undefined) { 
-            def.interceptSendToEndpoint = CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(element.interceptSendToEndpoint); 
+            if (Array.isArray(element.interceptSendToEndpoint)) { 
+               def.interceptSendToEndpoint = CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(element.interceptSendToEndpoint[0]); 
+            } else { 
+               def.interceptSendToEndpoint = CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(element.interceptSendToEndpoint); 
+            } 
         } 
         if (element?.loop !== undefined) { 
-            def.loop = CamelDefinitionYamlStep.readLoopDefinition(element.loop); 
+            if (Array.isArray(element.loop)) { 
+               def.loop = CamelDefinitionYamlStep.readLoopDefinition(element.loop[0]); 
+            } else { 
+               def.loop = CamelDefinitionYamlStep.readLoopDefinition(element.loop); 
+            } 
         } 
         if (element?.setExchangePattern !== undefined) { 
-            def.setExchangePattern = CamelDefinitionYamlStep.readSetExchangePatternDefinition(element.setExchangePattern); 
+            if (Array.isArray(element.setExchangePattern)) { 
+               def.setExchangePattern = CamelDefinitionYamlStep.readSetExchangePatternDefinition(element.setExchangePattern[0]); 
+            } else { 
+               def.setExchangePattern = CamelDefinitionYamlStep.readSetExchangePatternDefinition(element.setExchangePattern); 
+            } 
         } 
         if (element?.marshal !== undefined) { 
-            def.marshal = CamelDefinitionYamlStep.readMarshalDefinition(element.marshal); 
+            if (Array.isArray(element.marshal)) { 
+               def.marshal = CamelDefinitionYamlStep.readMarshalDefinition(element.marshal[0]); 
+            } else { 
+               def.marshal = CamelDefinitionYamlStep.readMarshalDefinition(element.marshal); 
+            } 
         } 
         if (element?.onFallback !== undefined) { 
-            def.onFallback = CamelDefinitionYamlStep.readOnFallbackDefinition(element.onFallback); 
+            if (Array.isArray(element.onFallback)) { 
+               def.onFallback = CamelDefinitionYamlStep.readOnFallbackDefinition(element.onFallback[0]); 
+            } else { 
+               def.onFallback = CamelDefinitionYamlStep.readOnFallbackDefinition(element.onFallback); 
+            } 
         } 
         if (element?.circuitBreaker !== undefined) { 
-            def.circuitBreaker = CamelDefinitionYamlStep.readCircuitBreakerDefinition(element.circuitBreaker); 
+            if (Array.isArray(element.circuitBreaker)) { 
+               def.circuitBreaker = CamelDefinitionYamlStep.readCircuitBreakerDefinition(element.circuitBreaker[0]); 
+            } else { 
+               def.circuitBreaker = CamelDefinitionYamlStep.readCircuitBreakerDefinition(element.circuitBreaker); 
+            } 
         } 
         if (element?.enrich !== undefined) { 
-            def.enrich = CamelDefinitionYamlStep.readEnrichDefinition(element.enrich); 
+            if (Array.isArray(element.enrich)) { 
+               def.enrich = CamelDefinitionYamlStep.readEnrichDefinition(element.enrich[0]); 
+            } else { 
+               def.enrich = CamelDefinitionYamlStep.readEnrichDefinition(element.enrich); 
+            } 
         } 
         if (element?.kamelet !== undefined) { 
-            def.kamelet = CamelDefinitionYamlStep.readKameletDefinition(element.kamelet); 
+            if (Array.isArray(element.kamelet)) { 
+               def.kamelet = CamelDefinitionYamlStep.readKameletDefinition(element.kamelet[0]); 
+            } else { 
+               def.kamelet = CamelDefinitionYamlStep.readKameletDefinition(element.kamelet); 
+            } 
         } 
         if (element?.saga !== undefined) { 
-            def.saga = CamelDefinitionYamlStep.readSagaDefinition(element.saga); 
+            if (Array.isArray(element.saga)) { 
+               def.saga = CamelDefinitionYamlStep.readSagaDefinition(element.saga[0]); 
+            } else { 
+               def.saga = CamelDefinitionYamlStep.readSagaDefinition(element.saga); 
+            } 
         } 
         if (element?.bean !== undefined) { 
-            def.bean = CamelDefinitionYamlStep.readBeanDefinition(element.bean); 
+            if (Array.isArray(element.bean)) { 
+               def.bean = CamelDefinitionYamlStep.readBeanDefinition(element.bean[0]); 
+            } else { 
+               def.bean = CamelDefinitionYamlStep.readBeanDefinition(element.bean); 
+            } 
         } 
         if (element?.otherwise !== undefined) { 
-            def.otherwise = CamelDefinitionYamlStep.readOtherwiseDefinition(element.otherwise); 
+            if (Array.isArray(element.otherwise)) { 
+               def.otherwise = CamelDefinitionYamlStep.readOtherwiseDefinition(element.otherwise[0]); 
+            } else { 
+               def.otherwise = CamelDefinitionYamlStep.readOtherwiseDefinition(element.otherwise); 
+            } 
         } 
         if (element?.sort !== undefined) { 
-            def.sort = CamelDefinitionYamlStep.readSortDefinition(element.sort); 
+            if (Array.isArray(element.sort)) { 
+               def.sort = CamelDefinitionYamlStep.readSortDefinition(element.sort[0]); 
+            } else { 
+               def.sort = CamelDefinitionYamlStep.readSortDefinition(element.sort); 
+            } 
         } 
         if (element?.loadBalance !== undefined) { 
-            def.loadBalance = CamelDefinitionYamlStep.readLoadBalanceDefinition(element.loadBalance); 
+            if (Array.isArray(element.loadBalance)) { 
+               def.loadBalance = CamelDefinitionYamlStep.readLoadBalanceDefinition(element.loadBalance[0]); 
+            } else { 
+               def.loadBalance = CamelDefinitionYamlStep.readLoadBalanceDefinition(element.loadBalance); 
+            } 
         } 
         if (element?.script !== undefined) { 
-            def.script = CamelDefinitionYamlStep.readScriptDefinition(element.script); 
+            if (Array.isArray(element.script)) { 
+               def.script = CamelDefinitionYamlStep.readScriptDefinition(element.script[0]); 
+            } else { 
+               def.script = CamelDefinitionYamlStep.readScriptDefinition(element.script); 
+            } 
         } 
         if (element?.removeHeader !== undefined) { 
-            def.removeHeader = CamelDefinitionYamlStep.readRemoveHeaderDefinition(element.removeHeader); 
+            if (Array.isArray(element.removeHeader)) { 
+               def.removeHeader = CamelDefinitionYamlStep.readRemoveHeaderDefinition(element.removeHeader[0]); 
+            } else { 
+               def.removeHeader = CamelDefinitionYamlStep.readRemoveHeaderDefinition(element.removeHeader); 
+            } 
         } 
         if (element?.delay !== undefined) { 
-            def.delay = CamelDefinitionYamlStep.readDelayDefinition(element.delay); 
+            if (Array.isArray(element.delay)) { 
+               def.delay = CamelDefinitionYamlStep.readDelayDefinition(element.delay[0]); 
+            } else { 
+               def.delay = CamelDefinitionYamlStep.readDelayDefinition(element.delay); 
+            } 
         } 
         if (element?.stop !== undefined) { 
-            def.stop = CamelDefinitionYamlStep.readStopDefinition(element.stop); 
+            if (Array.isArray(element.stop)) { 
+               def.stop = CamelDefinitionYamlStep.readStopDefinition(element.stop[0]); 
+            } else { 
+               def.stop = CamelDefinitionYamlStep.readStopDefinition(element.stop); 
+            } 
         } 
         if (element?.serviceCall !== undefined) { 
-            def.serviceCall = CamelDefinitionYamlStep.readServiceCallDefinition(element.serviceCall); 
+            if (Array.isArray(element.serviceCall)) { 
+               def.serviceCall = CamelDefinitionYamlStep.readServiceCallDefinition(element.serviceCall[0]); 
+            } else { 
+               def.serviceCall = CamelDefinitionYamlStep.readServiceCallDefinition(element.serviceCall); 
+            } 
         } 
         if (element?.intercept !== undefined) { 
-            def.intercept = CamelDefinitionYamlStep.readInterceptDefinition(element.intercept); 
+            if (Array.isArray(element.intercept)) { 
+               def.intercept = CamelDefinitionYamlStep.readInterceptDefinition(element.intercept[0]); 
+            } else { 
+               def.intercept = CamelDefinitionYamlStep.readInterceptDefinition(element.intercept); 
+            } 
         } 
         if (element?.whenSkipSendToEndpoint !== undefined) { 
-            def.whenSkipSendToEndpoint = CamelDefinitionYamlStep.readWhenSkipSendToEndpointDefinition(element.whenSkipSendToEndpoint); 
+            if (Array.isArray(element.whenSkipSendToEndpoint)) { 
+               def.whenSkipSendToEndpoint = CamelDefinitionYamlStep.readWhenSkipSendToEndpointDefinition(element.whenSkipSendToEndpoint[0]); 
+            } else { 
+               def.whenSkipSendToEndpoint = CamelDefinitionYamlStep.readWhenSkipSendToEndpointDefinition(element.whenSkipSendToEndpoint); 
+            } 
         } 
         if (element?.setProperty !== undefined) { 
-            def.setProperty = CamelDefinitionYamlStep.readSetPropertyDefinition(element.setProperty); 
+            if (Array.isArray(element.setProperty)) { 
+               def.setProperty = CamelDefinitionYamlStep.readSetPropertyDefinition(element.setProperty[0]); 
+            } else { 
+               def.setProperty = CamelDefinitionYamlStep.readSetPropertyDefinition(element.setProperty); 
+            } 
         } 
         if (element?.removeProperty !== undefined) { 
-            def.removeProperty = CamelDefinitionYamlStep.readRemovePropertyDefinition(element.removeProperty); 
+            if (Array.isArray(element.removeProperty)) { 
+               def.removeProperty = CamelDefinitionYamlStep.readRemovePropertyDefinition(element.removeProperty[0]); 
+            } else { 
+               def.removeProperty = CamelDefinitionYamlStep.readRemovePropertyDefinition(element.removeProperty); 
+            } 
         } 
         if (element?.interceptFrom !== undefined) { 
-            def.interceptFrom = CamelDefinitionYamlStep.readInterceptFromDefinition(element.interceptFrom); 
+            if (Array.isArray(element.interceptFrom)) { 
+               def.interceptFrom = CamelDefinitionYamlStep.readInterceptFromDefinition(element.interceptFrom[0]); 
+            } else { 
+               def.interceptFrom = CamelDefinitionYamlStep.readInterceptFromDefinition(element.interceptFrom); 
+            } 
         } 
         if (element?.onCompletion !== undefined) { 
-            def.onCompletion = CamelDefinitionYamlStep.readOnCompletionDefinition(element.onCompletion); 
+            if (Array.isArray(element.onCompletion)) { 
+               def.onCompletion = CamelDefinitionYamlStep.readOnCompletionDefinition(element.onCompletion[0]); 
+            } else { 
+               def.onCompletion = CamelDefinitionYamlStep.readOnCompletionDefinition(element.onCompletion); 
+            } 
         } 
         if (element?.pausable !== undefined) { 
-            def.pausable = CamelDefinitionYamlStep.readPausableDefinition(element.pausable); 
+            if (Array.isArray(element.pausable)) { 
+               def.pausable = CamelDefinitionYamlStep.readPausableDefinition(element.pausable[0]); 
+            } else { 
+               def.pausable = CamelDefinitionYamlStep.readPausableDefinition(element.pausable); 
+            } 
         } 
         if (element?.throttle !== undefined) { 
-            def.throttle = CamelDefinitionYamlStep.readThrottleDefinition(element.throttle); 
+            if (Array.isArray(element.throttle)) { 
+               def.throttle = CamelDefinitionYamlStep.readThrottleDefinition(element.throttle[0]); 
+            } else { 
+               def.throttle = CamelDefinitionYamlStep.readThrottleDefinition(element.throttle); 
+            } 
         } 
         if (element?.doFinally !== undefined) { 
-            def.doFinally = CamelDefinitionYamlStep.readFinallyDefinition(element.doFinally); 
+            if (Array.isArray(element.doFinally)) { 
+               def.doFinally = CamelDefinitionYamlStep.readFinallyDefinition(element.doFinally[0]); 
+            } else { 
+               def.doFinally = CamelDefinitionYamlStep.readFinallyDefinition(element.doFinally); 
+            } 
         } 
         if (element?.log !== undefined) { 
-            def.log = CamelDefinitionYamlStep.readLogDefinition(element.log); 
+            if (Array.isArray(element.log)) { 
+               def.log = CamelDefinitionYamlStep.readLogDefinition(element.log[0]); 
+            } else { 
+               def.log = CamelDefinitionYamlStep.readLogDefinition(element.log); 
+            } 
         } 
         if (element?.doCatch !== undefined) { 
-            def.doCatch = CamelDefinitionYamlStep.readCatchDefinition(element.doCatch); 
+            if (Array.isArray(element.doCatch)) { 
+               def.doCatch = CamelDefinitionYamlStep.readCatchDefinition(element.doCatch[0]); 
+            } else { 
+               def.doCatch = CamelDefinitionYamlStep.readCatchDefinition(element.doCatch); 
+            } 
         } 
         if (element?.transacted !== undefined) { 
-            def.transacted = CamelDefinitionYamlStep.readTransactedDefinition(element.transacted); 
+            if (Array.isArray(element.transacted)) { 
+               def.transacted = CamelDefinitionYamlStep.readTransactedDefinition(element.transacted[0]); 
+            } else { 
+               def.transacted = CamelDefinitionYamlStep.readTransactedDefinition(element.transacted); 
+            } 
         } 
         if (element?.claimCheck !== undefined) { 
-            def.claimCheck = CamelDefinitionYamlStep.readClaimCheckDefinition(element.claimCheck); 
+            if (Array.isArray(element.claimCheck)) { 
+               def.claimCheck = CamelDefinitionYamlStep.readClaimCheckDefinition(element.claimCheck[0]); 
+            } else { 
+               def.claimCheck = CamelDefinitionYamlStep.readClaimCheckDefinition(element.claimCheck); 
+            } 
         } 
         if (element?.pollEnrich !== undefined) { 
-            def.pollEnrich = CamelDefinitionYamlStep.readPollEnrichDefinition(element.pollEnrich); 
+            if (Array.isArray(element.pollEnrich)) { 
+               def.pollEnrich = CamelDefinitionYamlStep.readPollEnrichDefinition(element.pollEnrich[0]); 
+            } else { 
+               def.pollEnrich = CamelDefinitionYamlStep.readPollEnrichDefinition(element.pollEnrich); 
+            } 
         } 
         if (element?.removeHeaders !== undefined) { 
-            def.removeHeaders = CamelDefinitionYamlStep.readRemoveHeadersDefinition(element.removeHeaders); 
+            if (Array.isArray(element.removeHeaders)) { 
+               def.removeHeaders = CamelDefinitionYamlStep.readRemoveHeadersDefinition(element.removeHeaders[0]); 
+            } else { 
+               def.removeHeaders = CamelDefinitionYamlStep.readRemoveHeadersDefinition(element.removeHeaders); 
+            } 
         } 
         if (element?.aggregate !== undefined) { 
-            def.aggregate = CamelDefinitionYamlStep.readAggregateDefinition(element.aggregate); 
+            if (Array.isArray(element.aggregate)) { 
+               def.aggregate = CamelDefinitionYamlStep.readAggregateDefinition(element.aggregate[0]); 
+            } else { 
+               def.aggregate = CamelDefinitionYamlStep.readAggregateDefinition(element.aggregate); 
+            } 
         } 
         if (element?.resequence !== undefined) { 
-            def.resequence = CamelDefinitionYamlStep.readResequenceDefinition(element.resequence); 
+            if (Array.isArray(element.resequence)) { 
+               def.resequence = CamelDefinitionYamlStep.readResequenceDefinition(element.resequence[0]); 
+            } else { 
+               def.resequence = CamelDefinitionYamlStep.readResequenceDefinition(element.resequence); 
+            } 
         } 
         if (element?.routingSlip !== undefined) { 
-            def.routingSlip = CamelDefinitionYamlStep.readRoutingSlipDefinition(element.routingSlip); 
+            if (Array.isArray(element.routingSlip)) { 
+               def.routingSlip = CamelDefinitionYamlStep.readRoutingSlipDefinition(element.routingSlip[0]); 
+            } else { 
+               def.routingSlip = CamelDefinitionYamlStep.readRoutingSlipDefinition(element.routingSlip); 
+            } 
         } 
         if (element?.transform !== undefined) { 
-            def.transform = CamelDefinitionYamlStep.readTransformDefinition(element.transform); 
+            if (Array.isArray(element.transform)) { 
+               def.transform = CamelDefinitionYamlStep.readTransformDefinition(element.transform[0]); 
+            } else { 
+               def.transform = CamelDefinitionYamlStep.readTransformDefinition(element.transform); 
+            } 
         } 
         if (element?.removeProperties !== undefined) { 
-            def.removeProperties = CamelDefinitionYamlStep.readRemovePropertiesDefinition(element.removeProperties); 
+            if (Array.isArray(element.removeProperties)) { 
+               def.removeProperties = CamelDefinitionYamlStep.readRemovePropertiesDefinition(element.removeProperties[0]); 
+            } else { 
+               def.removeProperties = CamelDefinitionYamlStep.readRemovePropertiesDefinition(element.removeProperties); 
+            } 
         } 
         if (element?.policy !== undefined) { 
-            def.policy = CamelDefinitionYamlStep.readPolicyDefinition(element.policy); 
+            if (Array.isArray(element.policy)) { 
+               def.policy = CamelDefinitionYamlStep.readPolicyDefinition(element.policy[0]); 
+            } else { 
+               def.policy = CamelDefinitionYamlStep.readPolicyDefinition(element.policy); 
+            } 
         } 
         if (element?.validate !== undefined) { 
-            def.validate = CamelDefinitionYamlStep.readValidateDefinition(element.validate); 
+            if (Array.isArray(element.validate)) { 
+               def.validate = CamelDefinitionYamlStep.readValidateDefinition(element.validate[0]); 
+            } else { 
+               def.validate = CamelDefinitionYamlStep.readValidateDefinition(element.validate); 
+            } 
         } 
         if (element?.rollback !== undefined) { 
-            def.rollback = CamelDefinitionYamlStep.readRollbackDefinition(element.rollback); 
+            if (Array.isArray(element.rollback)) { 
+               def.rollback = CamelDefinitionYamlStep.readRollbackDefinition(element.rollback[0]); 
+            } else { 
+               def.rollback = CamelDefinitionYamlStep.readRollbackDefinition(element.rollback); 
+            } 
         } 
         if (element?.process !== undefined) { 
-            def.process = CamelDefinitionYamlStep.readProcessDefinition(element.process); 
+            if (Array.isArray(element.process)) { 
+               def.process = CamelDefinitionYamlStep.readProcessDefinition(element.process[0]); 
+            } else { 
+               def.process = CamelDefinitionYamlStep.readProcessDefinition(element.process); 
+            } 
         } 
         if (element?.threads !== undefined) { 
-            def.threads = CamelDefinitionYamlStep.readThreadsDefinition(element.threads); 
+            if (Array.isArray(element.threads)) { 
+               def.threads = CamelDefinitionYamlStep.readThreadsDefinition(element.threads[0]); 
+            } else { 
+               def.threads = CamelDefinitionYamlStep.readThreadsDefinition(element.threads); 
+            } 
         } 
         if (element?.setBody !== undefined) { 
-            def.setBody = CamelDefinitionYamlStep.readSetBodyDefinition(element.setBody); 
+            if (Array.isArray(element.setBody)) { 
+               def.setBody = CamelDefinitionYamlStep.readSetBodyDefinition(element.setBody[0]); 
+            } else { 
+               def.setBody = CamelDefinitionYamlStep.readSetBodyDefinition(element.setBody); 
+            } 
         } 
         if (element?.sample !== undefined) { 
-            def.sample = CamelDefinitionYamlStep.readSamplingDefinition(element.sample); 
+            if (Array.isArray(element.sample)) { 
+               def.sample = CamelDefinitionYamlStep.readSamplingDefinition(element.sample[0]); 
+            } else { 
+               def.sample = CamelDefinitionYamlStep.readSamplingDefinition(element.sample); 
+            } 
         } 
         if (element?.throwException !== undefined) { 
-            def.throwException = CamelDefinitionYamlStep.readThrowExceptionDefinition(element.throwException); 
+            if (Array.isArray(element.throwException)) { 
+               def.throwException = CamelDefinitionYamlStep.readThrowExceptionDefinition(element.throwException[0]); 
+            } else { 
+               def.throwException = CamelDefinitionYamlStep.readThrowExceptionDefinition(element.throwException); 
+            } 
         } 
         if (element?.dynamicRouter !== undefined) { 
-            def.dynamicRouter = CamelDefinitionYamlStep.readDynamicRouterDefinition(element.dynamicRouter); 
+            if (Array.isArray(element.dynamicRouter)) { 
+               def.dynamicRouter = CamelDefinitionYamlStep.readDynamicRouterDefinition(element.dynamicRouter[0]); 
+            } else { 
+               def.dynamicRouter = CamelDefinitionYamlStep.readDynamicRouterDefinition(element.dynamicRouter); 
+            } 
         } 
         if (element?.multicast !== undefined) { 
-            def.multicast = CamelDefinitionYamlStep.readMulticastDefinition(element.multicast); 
+            if (Array.isArray(element.multicast)) { 
+               def.multicast = CamelDefinitionYamlStep.readMulticastDefinition(element.multicast[0]); 
+            } else { 
+               def.multicast = CamelDefinitionYamlStep.readMulticastDefinition(element.multicast); 
+            } 
         } 
         if (element?.filter !== undefined) { 
-            def.filter = CamelDefinitionYamlStep.readFilterDefinition(element.filter); 
+            if (Array.isArray(element.filter)) { 
+               def.filter = CamelDefinitionYamlStep.readFilterDefinition(element.filter[0]); 
+            } else { 
+               def.filter = CamelDefinitionYamlStep.readFilterDefinition(element.filter); 
+            } 
         } 
         if (element?.pipeline !== undefined) { 
-            def.pipeline = CamelDefinitionYamlStep.readPipelineDefinition(element.pipeline); 
+            if (Array.isArray(element.pipeline)) { 
+               def.pipeline = CamelDefinitionYamlStep.readPipelineDefinition(element.pipeline[0]); 
+            } else { 
+               def.pipeline = CamelDefinitionYamlStep.readPipelineDefinition(element.pipeline); 
+            } 
         } 
         if (element?.unmarshal !== undefined) { 
-            def.unmarshal = CamelDefinitionYamlStep.readUnmarshalDefinition(element.unmarshal); 
+            if (Array.isArray(element.unmarshal)) { 
+               def.unmarshal = CamelDefinitionYamlStep.readUnmarshalDefinition(element.unmarshal[0]); 
+            } else { 
+               def.unmarshal = CamelDefinitionYamlStep.readUnmarshalDefinition(element.unmarshal); 
+            } 
         } 
         if (element?.wireTap !== undefined) { 
-            def.wireTap = CamelDefinitionYamlStep.readWireTapDefinition(element.wireTap); 
+            if (Array.isArray(element.wireTap)) { 
+               def.wireTap = CamelDefinitionYamlStep.readWireTapDefinition(element.wireTap[0]); 
+            } else { 
+               def.wireTap = CamelDefinitionYamlStep.readWireTapDefinition(element.wireTap); 
+            } 
         } 
         if (element?.step !== undefined) { 
-            def.step = CamelDefinitionYamlStep.readStepDefinition(element.step); 
+            if (Array.isArray(element.step)) { 
+               def.step = CamelDefinitionYamlStep.readStepDefinition(element.step[0]); 
+            } else { 
+               def.step = CamelDefinitionYamlStep.readStepDefinition(element.step); 
+            } 
         } 
         if (element?.choice !== undefined) { 
-            def.choice = CamelDefinitionYamlStep.readChoiceDefinition(element.choice); 
+            if (Array.isArray(element.choice)) { 
+               def.choice = CamelDefinitionYamlStep.readChoiceDefinition(element.choice[0]); 
+            } else { 
+               def.choice = CamelDefinitionYamlStep.readChoiceDefinition(element.choice); 
+            } 
         } 
 
         return def;
@@ -452,13 +708,25 @@
         
         const def = element ? new ErrorHandlerBuilderDeserializer({...element}) : new ErrorHandlerBuilderDeserializer();
         if (element?.deadLetterChannel !== undefined) { 
-            def.deadLetterChannel = CamelDefinitionYamlStep.readDeadLetterChannelDefinition(element.deadLetterChannel); 
+            if (Array.isArray(element.deadLetterChannel)) { 
+               def.deadLetterChannel = CamelDefinitionYamlStep.readDeadLetterChannelDefinition(element.deadLetterChannel[0]); 
+            } else { 
+               def.deadLetterChannel = CamelDefinitionYamlStep.readDeadLetterChannelDefinition(element.deadLetterChannel); 
+            } 
         } 
         if (element?.log !== undefined) { 
-            def.log = CamelDefinitionYamlStep.readDefaultErrorHandlerDefinition(element.log); 
+            if (Array.isArray(element.log)) { 
+               def.log = CamelDefinitionYamlStep.readDefaultErrorHandlerDefinition(element.log[0]); 
+            } else { 
+               def.log = CamelDefinitionYamlStep.readDefaultErrorHandlerDefinition(element.log); 
+            } 
         } 
         if (element?.none !== undefined) { 
-            def.none = CamelDefinitionYamlStep.readNoErrorHandlerDefinition(element.none); 
+            if (Array.isArray(element.none)) { 
+               def.none = CamelDefinitionYamlStep.readNoErrorHandlerDefinition(element.none[0]); 
+            } else { 
+               def.none = CamelDefinitionYamlStep.readNoErrorHandlerDefinition(element.none); 
+            } 
         } 
 
         return def;
@@ -483,20 +751,40 @@
         
         const def = element ? new AggregateDefinition({...element}) : new AggregateDefinition();
         if (element?.completionTimeoutExpression !== undefined) { 
-            def.completionTimeoutExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionTimeoutExpression); 
+            if (Array.isArray(element.completionTimeoutExpression)) { 
+               def.completionTimeoutExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionTimeoutExpression[0]); 
+            } else { 
+               def.completionTimeoutExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionTimeoutExpression); 
+            } 
         } 
         if (element?.correlationExpression !== undefined) { 
-            def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression); 
+            if (Array.isArray(element.correlationExpression)) { 
+               def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression[0]); 
+            } else { 
+               def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression); 
+            } 
         } 
         if (element?.completionPredicate !== undefined) { 
-            def.completionPredicate = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionPredicate); 
+            if (Array.isArray(element.completionPredicate)) { 
+               def.completionPredicate = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionPredicate[0]); 
+            } else { 
+               def.completionPredicate = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionPredicate); 
+            } 
         } 
         if (element?.optimisticLockRetryPolicy !== undefined) { 
-            def.optimisticLockRetryPolicy = CamelDefinitionYamlStep.readOptimisticLockRetryPolicyDefinition(element.optimisticLockRetryPolicy); 
+            if (Array.isArray(element.optimisticLockRetryPolicy)) { 
+               def.optimisticLockRetryPolicy = CamelDefinitionYamlStep.readOptimisticLockRetryPolicyDefinition(element.optimisticLockRetryPolicy[0]); 
+            } else { 
+               def.optimisticLockRetryPolicy = CamelDefinitionYamlStep.readOptimisticLockRetryPolicyDefinition(element.optimisticLockRetryPolicy); 
+            } 
         } 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
         if (element?.completionSizeExpression !== undefined) { 
-            def.completionSizeExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionSizeExpression); 
+            if (Array.isArray(element.completionSizeExpression)) { 
+               def.completionSizeExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionSizeExpression[0]); 
+            } else { 
+               def.completionSizeExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.completionSizeExpression); 
+            } 
         } 
 
         return def;
@@ -513,7 +801,11 @@
         
         const def = element ? new CatchDefinition({...element}) : new CatchDefinition();
         if (element?.onWhen !== undefined) { 
-            def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen); 
+            if (Array.isArray(element.onWhen)) { 
+               def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen[0]); 
+            } else { 
+               def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen); 
+            } 
         } 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
 
@@ -524,7 +816,11 @@
         
         const def = element ? new ChoiceDefinition({...element}) : new ChoiceDefinition();
         if (element?.otherwise !== undefined) { 
-            def.otherwise = CamelDefinitionYamlStep.readOtherwiseDefinition(element.otherwise); 
+            if (Array.isArray(element.otherwise)) { 
+               def.otherwise = CamelDefinitionYamlStep.readOtherwiseDefinition(element.otherwise[0]); 
+            } else { 
+               def.otherwise = CamelDefinitionYamlStep.readOtherwiseDefinition(element.otherwise); 
+            } 
         } 
         def.when = element && element?.when ? element?.when.map((x:any) => CamelDefinitionYamlStep.readWhenDefinition(x)) :[]; 
 
@@ -535,13 +831,25 @@
         
         const def = element ? new CircuitBreakerDefinition({...element}) : new CircuitBreakerDefinition();
         if (element?.faultToleranceConfiguration !== undefined) { 
-            def.faultToleranceConfiguration = CamelDefinitionYamlStep.readFaultToleranceConfigurationDefinition(element.faultToleranceConfiguration); 
+            if (Array.isArray(element.faultToleranceConfiguration)) { 
+               def.faultToleranceConfiguration = CamelDefinitionYamlStep.readFaultToleranceConfigurationDefinition(element.faultToleranceConfiguration[0]); 
+            } else { 
+               def.faultToleranceConfiguration = CamelDefinitionYamlStep.readFaultToleranceConfigurationDefinition(element.faultToleranceConfiguration); 
+            } 
         } 
         if (element?.resilience4jConfiguration !== undefined) { 
-            def.resilience4jConfiguration = CamelDefinitionYamlStep.readResilience4jConfigurationDefinition(element.resilience4jConfiguration); 
+            if (Array.isArray(element.resilience4jConfiguration)) { 
+               def.resilience4jConfiguration = CamelDefinitionYamlStep.readResilience4jConfigurationDefinition(element.resilience4jConfiguration[0]); 
+            } else { 
+               def.resilience4jConfiguration = CamelDefinitionYamlStep.readResilience4jConfigurationDefinition(element.resilience4jConfiguration); 
+            } 
         } 
         if (element?.onFallback !== undefined) { 
-            def.onFallback = CamelDefinitionYamlStep.readOnFallbackDefinition(element.onFallback); 
+            if (Array.isArray(element.onFallback)) { 
+               def.onFallback = CamelDefinitionYamlStep.readOnFallbackDefinition(element.onFallback[0]); 
+            } else { 
+               def.onFallback = CamelDefinitionYamlStep.readOnFallbackDefinition(element.onFallback); 
+            } 
         } 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
 
@@ -641,19 +949,39 @@
         
         const def = element ? new ErrorHandlerDefinition({...element}) : new ErrorHandlerDefinition();
         if (element?.deadLetterChannel !== undefined) { 
-            def.deadLetterChannel = CamelDefinitionYamlStep.readDeadLetterChannelDefinition(element.deadLetterChannel); 
+            if (Array.isArray(element.deadLetterChannel)) { 
+               def.deadLetterChannel = CamelDefinitionYamlStep.readDeadLetterChannelDefinition(element.deadLetterChannel[0]); 
+            } else { 
+               def.deadLetterChannel = CamelDefinitionYamlStep.readDeadLetterChannelDefinition(element.deadLetterChannel); 
+            } 
         } 
         if (element?.noErrorHandler !== undefined) { 
-            def.noErrorHandler = CamelDefinitionYamlStep.readNoErrorHandlerDefinition(element.noErrorHandler); 
+            if (Array.isArray(element.noErrorHandler)) { 
+               def.noErrorHandler = CamelDefinitionYamlStep.readNoErrorHandlerDefinition(element.noErrorHandler[0]); 
+            } else { 
+               def.noErrorHandler = CamelDefinitionYamlStep.readNoErrorHandlerDefinition(element.noErrorHandler); 
+            } 
         } 
         if (element?.jtaTransactionErrorHandler !== undefined) { 
-            def.jtaTransactionErrorHandler = CamelDefinitionYamlStep.readJtaTransactionErrorHandlerDefinition(element.jtaTransactionErrorHandler); 
+            if (Array.isArray(element.jtaTransactionErrorHandler)) { 
+               def.jtaTransactionErrorHandler = CamelDefinitionYamlStep.readJtaTransactionErrorHandlerDefinition(element.jtaTransactionErrorHandler[0]); 
+            } else { 
+               def.jtaTransactionErrorHandler = CamelDefinitionYamlStep.readJtaTransactionErrorHandlerDefinition(element.jtaTransactionErrorHandler); 
+            } 
         } 
         if (element?.defaultErrorHandler !== undefined) { 
-            def.defaultErrorHandler = CamelDefinitionYamlStep.readDefaultErrorHandlerDefinition(element.defaultErrorHandler); 
+            if (Array.isArray(element.defaultErrorHandler)) { 
+               def.defaultErrorHandler = CamelDefinitionYamlStep.readDefaultErrorHandlerDefinition(element.defaultErrorHandler[0]); 
+            } else { 
+               def.defaultErrorHandler = CamelDefinitionYamlStep.readDefaultErrorHandlerDefinition(element.defaultErrorHandler); 
+            } 
         } 
         if (element?.springTransactionErrorHandler !== undefined) { 
-            def.springTransactionErrorHandler = CamelDefinitionYamlStep.readSpringTransactionErrorHandlerDefinition(element.springTransactionErrorHandler); 
+            if (Array.isArray(element.springTransactionErrorHandler)) { 
+               def.springTransactionErrorHandler = CamelDefinitionYamlStep.readSpringTransactionErrorHandlerDefinition(element.springTransactionErrorHandler[0]); 
+            } else { 
+               def.springTransactionErrorHandler = CamelDefinitionYamlStep.readSpringTransactionErrorHandlerDefinition(element.springTransactionErrorHandler); 
+            } 
         } 
 
         return def;
@@ -663,67 +991,151 @@
         
         const def = element ? new ExpressionSubElementDefinition({...element}) : new ExpressionSubElementDefinition();
         if (element?.ognl !== undefined) { 
-            def.ognl = CamelDefinitionYamlStep.readOgnlExpression(element.ognl); 
+            if (Array.isArray(element.ognl)) { 
+               def.ognl = CamelDefinitionYamlStep.readOgnlExpression(element.ognl[0]); 
+            } else { 
+               def.ognl = CamelDefinitionYamlStep.readOgnlExpression(element.ognl); 
+            } 
         } 
         if (element?.constant !== undefined) { 
-            def.constant = CamelDefinitionYamlStep.readConstantExpression(element.constant); 
+            if (Array.isArray(element.constant)) { 
+               def.constant = CamelDefinitionYamlStep.readConstantExpression(element.constant[0]); 
+            } else { 
+               def.constant = CamelDefinitionYamlStep.readConstantExpression(element.constant); 
+            } 
         } 
         if (element?.mvel !== undefined) { 
-            def.mvel = CamelDefinitionYamlStep.readMvelExpression(element.mvel); 
+            if (Array.isArray(element.mvel)) { 
+               def.mvel = CamelDefinitionYamlStep.readMvelExpression(element.mvel[0]); 
+            } else { 
+               def.mvel = CamelDefinitionYamlStep.readMvelExpression(element.mvel); 
+            } 
         } 
         if (element?.method !== undefined) { 
-            def.method = CamelDefinitionYamlStep.readMethodCallExpression(element.method); 
+            if (Array.isArray(element.method)) { 
+               def.method = CamelDefinitionYamlStep.readMethodCallExpression(element.method[0]); 
+            } else { 
+               def.method = CamelDefinitionYamlStep.readMethodCallExpression(element.method); 
+            } 
         } 
         if (element?.xquery !== undefined) { 
-            def.xquery = CamelDefinitionYamlStep.readXQueryExpression(element.xquery); 
+            if (Array.isArray(element.xquery)) { 
+               def.xquery = CamelDefinitionYamlStep.readXQueryExpression(element.xquery[0]); 
+            } else { 
+               def.xquery = CamelDefinitionYamlStep.readXQueryExpression(element.xquery); 
+            } 
         } 
         if (element?.datasonnet !== undefined) { 
-            def.datasonnet = CamelDefinitionYamlStep.readDatasonnetExpression(element.datasonnet); 
+            if (Array.isArray(element.datasonnet)) { 
+               def.datasonnet = CamelDefinitionYamlStep.readDatasonnetExpression(element.datasonnet[0]); 
+            } else { 
+               def.datasonnet = CamelDefinitionYamlStep.readDatasonnetExpression(element.datasonnet); 
+            } 
         } 
         if (element?.jq !== undefined) { 
-            def.jq = CamelDefinitionYamlStep.readJqExpression(element.jq); 
+            if (Array.isArray(element.jq)) { 
+               def.jq = CamelDefinitionYamlStep.readJqExpression(element.jq[0]); 
+            } else { 
+               def.jq = CamelDefinitionYamlStep.readJqExpression(element.jq); 
+            } 
         } 
         if (element?.language !== undefined) { 
-            def.language = CamelDefinitionYamlStep.readLanguageExpression(element.language); 
+            if (Array.isArray(element.language)) { 
+               def.language = CamelDefinitionYamlStep.readLanguageExpression(element.language[0]); 
+            } else { 
+               def.language = CamelDefinitionYamlStep.readLanguageExpression(element.language); 
+            } 
         } 
         if (element?.simple !== undefined) { 
-            def.simple = CamelDefinitionYamlStep.readSimpleExpression(element.simple); 
+            if (Array.isArray(element.simple)) { 
+               def.simple = CamelDefinitionYamlStep.readSimpleExpression(element.simple[0]); 
+            } else { 
+               def.simple = CamelDefinitionYamlStep.readSimpleExpression(element.simple); 
+            } 
         } 
         if (element?.hl7terser !== undefined) { 
-            def.hl7terser = CamelDefinitionYamlStep.readHl7TerserExpression(element.hl7terser); 
+            if (Array.isArray(element.hl7terser)) { 
+               def.hl7terser = CamelDefinitionYamlStep.readHl7TerserExpression(element.hl7terser[0]); 
+            } else { 
+               def.hl7terser = CamelDefinitionYamlStep.readHl7TerserExpression(element.hl7terser); 
+            } 
         } 
         if (element?.tokenize !== undefined) { 
-            def.tokenize = CamelDefinitionYamlStep.readTokenizerExpression(element.tokenize); 
+            if (Array.isArray(element.tokenize)) { 
+               def.tokenize = CamelDefinitionYamlStep.readTokenizerExpression(element.tokenize[0]); 
+            } else { 
+               def.tokenize = CamelDefinitionYamlStep.readTokenizerExpression(element.tokenize); 
+            } 
         } 
         if (element?.spel !== undefined) { 
-            def.spel = CamelDefinitionYamlStep.readSpELExpression(element.spel); 
+            if (Array.isArray(element.spel)) { 
+               def.spel = CamelDefinitionYamlStep.readSpELExpression(element.spel[0]); 
+            } else { 
+               def.spel = CamelDefinitionYamlStep.readSpELExpression(element.spel); 
+            } 
         } 
         if (element?.ref !== undefined) { 
-            def.ref = CamelDefinitionYamlStep.readRefExpression(element.ref); 
+            if (Array.isArray(element.ref)) { 
+               def.ref = CamelDefinitionYamlStep.readRefExpression(element.ref[0]); 
+            } else { 
+               def.ref = CamelDefinitionYamlStep.readRefExpression(element.ref); 
+            } 
         } 
         if (element?.xpath !== undefined) { 
-            def.xpath = CamelDefinitionYamlStep.readXPathExpression(element.xpath); 
+            if (Array.isArray(element.xpath)) { 
+               def.xpath = CamelDefinitionYamlStep.readXPathExpression(element.xpath[0]); 
+            } else { 
+               def.xpath = CamelDefinitionYamlStep.readXPathExpression(element.xpath); 
+            } 
         } 
         if (element?.groovy !== undefined) { 
-            def.groovy = CamelDefinitionYamlStep.readGroovyExpression(element.groovy); 
+            if (Array.isArray(element.groovy)) { 
+               def.groovy = CamelDefinitionYamlStep.readGroovyExpression(element.groovy[0]); 
+            } else { 
+               def.groovy = CamelDefinitionYamlStep.readGroovyExpression(element.groovy); 
+            } 
         } 
         if (element?.csimple !== undefined) { 
-            def.csimple = CamelDefinitionYamlStep.readCSimpleExpression(element.csimple); 
+            if (Array.isArray(element.csimple)) { 
+               def.csimple = CamelDefinitionYamlStep.readCSimpleExpression(element.csimple[0]); 
+            } else { 
+               def.csimple = CamelDefinitionYamlStep.readCSimpleExpression(element.csimple); 
+            } 
         } 
         if (element?.exchangeProperty !== undefined) { 
-            def.exchangeProperty = CamelDefinitionYamlStep.readExchangePropertyExpression(element.exchangeProperty); 
+            if (Array.isArray(element.exchangeProperty)) { 
+               def.exchangeProperty = CamelDefinitionYamlStep.readExchangePropertyExpression(element.exchangeProperty[0]); 
+            } else { 
+               def.exchangeProperty = CamelDefinitionYamlStep.readExchangePropertyExpression(element.exchangeProperty); 
+            } 
         } 
         if (element?.jsonpath !== undefined) { 
-            def.jsonpath = CamelDefinitionYamlStep.readJsonPathExpression(element.jsonpath); 
+            if (Array.isArray(element.jsonpath)) { 
+               def.jsonpath = CamelDefinitionYamlStep.readJsonPathExpression(element.jsonpath[0]); 
+            } else { 
+               def.jsonpath = CamelDefinitionYamlStep.readJsonPathExpression(element.jsonpath); 
+            } 
         } 
         if (element?.header !== undefined) { 
-            def.header = CamelDefinitionYamlStep.readHeaderExpression(element.header); 
+            if (Array.isArray(element.header)) { 
+               def.header = CamelDefinitionYamlStep.readHeaderExpression(element.header[0]); 
+            } else { 
+               def.header = CamelDefinitionYamlStep.readHeaderExpression(element.header); 
+            } 
         } 
         if (element?.joor !== undefined) { 
-            def.joor = CamelDefinitionYamlStep.readJoorExpression(element.joor); 
+            if (Array.isArray(element.joor)) { 
+               def.joor = CamelDefinitionYamlStep.readJoorExpression(element.joor[0]); 
+            } else { 
+               def.joor = CamelDefinitionYamlStep.readJoorExpression(element.joor); 
+            } 
         } 
         if (element?.xtokenize !== undefined) { 
-            def.xtokenize = CamelDefinitionYamlStep.readXMLTokenizerExpression(element.xtokenize); 
+            if (Array.isArray(element.xtokenize)) { 
+               def.xtokenize = CamelDefinitionYamlStep.readXMLTokenizerExpression(element.xtokenize[0]); 
+            } else { 
+               def.xtokenize = CamelDefinitionYamlStep.readXMLTokenizerExpression(element.xtokenize); 
+            } 
         } 
 
         return def;
@@ -861,26 +1273,54 @@
         
         const def = element ? new LoadBalanceDefinition({...element}) : new LoadBalanceDefinition();
         if (element?.random !== undefined) { 
-            def.random = CamelDefinitionYamlStep.readRandomLoadBalancerDefinition(element.random); 
+            if (Array.isArray(element.random)) { 
+               def.random = CamelDefinitionYamlStep.readRandomLoadBalancerDefinition(element.random[0]); 
+            } else { 
+               def.random = CamelDefinitionYamlStep.readRandomLoadBalancerDefinition(element.random); 
+            } 
         } 
         if (element?.customLoadBalancer !== undefined) { 
-            def.customLoadBalancer = CamelDefinitionYamlStep.readCustomLoadBalancerDefinition(element.customLoadBalancer); 
+            if (Array.isArray(element.customLoadBalancer)) { 
+               def.customLoadBalancer = CamelDefinitionYamlStep.readCustomLoadBalancerDefinition(element.customLoadBalancer[0]); 
+            } else { 
+               def.customLoadBalancer = CamelDefinitionYamlStep.readCustomLoadBalancerDefinition(element.customLoadBalancer); 
+            } 
         } 
         if (element?.failover !== undefined) { 
-            def.failover = CamelDefinitionYamlStep.readFailoverLoadBalancerDefinition(element.failover); 
+            if (Array.isArray(element.failover)) { 
+               def.failover = CamelDefinitionYamlStep.readFailoverLoadBalancerDefinition(element.failover[0]); 
+            } else { 
+               def.failover = CamelDefinitionYamlStep.readFailoverLoadBalancerDefinition(element.failover); 
+            } 
         } 
         if (element?.sticky !== undefined) { 
-            def.sticky = CamelDefinitionYamlStep.readStickyLoadBalancerDefinition(element.sticky); 
+            if (Array.isArray(element.sticky)) { 
+               def.sticky = CamelDefinitionYamlStep.readStickyLoadBalancerDefinition(element.sticky[0]); 
+            } else { 
+               def.sticky = CamelDefinitionYamlStep.readStickyLoadBalancerDefinition(element.sticky); 
+            } 
         } 
         if (element?.topic !== undefined) { 
-            def.topic = CamelDefinitionYamlStep.readTopicLoadBalancerDefinition(element.topic); 
+            if (Array.isArray(element.topic)) { 
+               def.topic = CamelDefinitionYamlStep.readTopicLoadBalancerDefinition(element.topic[0]); 
+            } else { 
+               def.topic = CamelDefinitionYamlStep.readTopicLoadBalancerDefinition(element.topic); 
+            } 
         } 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
         if (element?.weighted !== undefined) { 
-            def.weighted = CamelDefinitionYamlStep.readWeightedLoadBalancerDefinition(element.weighted); 
+            if (Array.isArray(element.weighted)) { 
+               def.weighted = CamelDefinitionYamlStep.readWeightedLoadBalancerDefinition(element.weighted[0]); 
+            } else { 
+               def.weighted = CamelDefinitionYamlStep.readWeightedLoadBalancerDefinition(element.weighted); 
+            } 
         } 
         if (element?.roundRobin !== undefined) { 
-            def.roundRobin = CamelDefinitionYamlStep.readRoundRobinLoadBalancerDefinition(element.roundRobin); 
+            if (Array.isArray(element.roundRobin)) { 
+               def.roundRobin = CamelDefinitionYamlStep.readRoundRobinLoadBalancerDefinition(element.roundRobin[0]); 
+            } else { 
+               def.roundRobin = CamelDefinitionYamlStep.readRoundRobinLoadBalancerDefinition(element.roundRobin); 
+            } 
         } 
 
         return def;
@@ -916,121 +1356,277 @@
         
         const def = element ? new MarshalDefinition({...element}) : new MarshalDefinition();
         if (element?.univocityCsv !== undefined) { 
-            def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            if (Array.isArray(element.univocityCsv)) { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv[0]); 
+            } else { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            } 
         } 
         if (element?.protobuf !== undefined) { 
-            def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            if (Array.isArray(element.protobuf)) { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf[0]); 
+            } else { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            } 
         } 
         if (element?.tarFile !== undefined) { 
-            def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            if (Array.isArray(element.tarFile)) { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile[0]); 
+            } else { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            } 
         } 
         if (element?.tidyMarkup !== undefined) { 
-            def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            if (Array.isArray(element.tidyMarkup)) { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup[0]); 
+            } else { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            } 
         } 
         if (element?.csv !== undefined) { 
-            def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            if (Array.isArray(element.csv)) { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv[0]); 
+            } else { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            } 
         } 
         if (element?.base64 !== undefined) { 
-            def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            if (Array.isArray(element.base64)) { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64[0]); 
+            } else { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            } 
         } 
         if (element?.zipDeflater !== undefined) { 
-            def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            if (Array.isArray(element.zipDeflater)) { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater[0]); 
+            } else { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            } 
         } 
         if (element?.bindy !== undefined) { 
-            def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            if (Array.isArray(element.bindy)) { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy[0]); 
+            } else { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            } 
         } 
         if (element?.syslog !== undefined) { 
-            def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            if (Array.isArray(element.syslog)) { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog[0]); 
+            } else { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            } 
         } 
         if (element?.zipFile !== undefined) { 
-            def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            if (Array.isArray(element.zipFile)) { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile[0]); 
+            } else { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            } 
         } 
         if (element?.jaxb !== undefined) { 
-            def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            if (Array.isArray(element.jaxb)) { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb[0]); 
+            } else { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            } 
         } 
         if (element?.rss !== undefined) { 
-            def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            if (Array.isArray(element.rss)) { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss[0]); 
+            } else { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            } 
         } 
         if (element?.mimeMultipart !== undefined) { 
-            def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            if (Array.isArray(element.mimeMultipart)) { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart[0]); 
+            } else { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            } 
         } 
         if (element?.asn1 !== undefined) { 
-            def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            if (Array.isArray(element.asn1)) { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1[0]); 
+            } else { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            } 
         } 
         if (element?.pgp !== undefined) { 
-            def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            if (Array.isArray(element.pgp)) { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp[0]); 
+            } else { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            } 
         } 
         if (element?.thrift !== undefined) { 
-            def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            if (Array.isArray(element.thrift)) { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift[0]); 
+            } else { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            } 
         } 
         if (element?.json !== undefined) { 
-            def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            if (Array.isArray(element.json)) { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json[0]); 
+            } else { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            } 
         } 
         if (element?.lzf !== undefined) { 
-            def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            if (Array.isArray(element.lzf)) { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf[0]); 
+            } else { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            } 
         } 
         if (element?.fhirXml !== undefined) { 
-            def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            if (Array.isArray(element.fhirXml)) { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml[0]); 
+            } else { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            } 
         } 
         if (element?.barcode !== undefined) { 
-            def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            if (Array.isArray(element.barcode)) { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode[0]); 
+            } else { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            } 
         } 
         if (element?.avro !== undefined) { 
-            def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            if (Array.isArray(element.avro)) { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro[0]); 
+            } else { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            } 
         } 
         if (element?.yaml !== undefined) { 
-            def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            if (Array.isArray(element.yaml)) { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml[0]); 
+            } else { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            } 
         } 
         if (element?.fhirJson !== undefined) { 
-            def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            if (Array.isArray(element.fhirJson)) { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson[0]); 
+            } else { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            } 
         } 
         if (element?.any23 !== undefined) { 
-            def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            if (Array.isArray(element.any23)) { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23[0]); 
+            } else { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            } 
         } 
         if (element?.custom !== undefined) { 
-            def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            if (Array.isArray(element.custom)) { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom[0]); 
+            } else { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            } 
         } 
         if (element?.flatpack !== undefined) { 
-            def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            if (Array.isArray(element.flatpack)) { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack[0]); 
+            } else { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            } 
         } 
         if (element?.cbor !== undefined) { 
-            def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            if (Array.isArray(element.cbor)) { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor[0]); 
+            } else { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            } 
         } 
         if (element?.crypto !== undefined) { 
-            def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            if (Array.isArray(element.crypto)) { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto[0]); 
+            } else { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            } 
         } 
         if (element?.univocityTsv !== undefined) { 
-            def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            if (Array.isArray(element.univocityTsv)) { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv[0]); 
+            } else { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            } 
         } 
         if (element?.hl7 !== undefined) { 
-            def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            if (Array.isArray(element.hl7)) { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7[0]); 
+            } else { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            } 
         } 
         if (element?.jsonApi !== undefined) { 
-            def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            if (Array.isArray(element.jsonApi)) { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi[0]); 
+            } else { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            } 
         } 
         if (element?.xmlSecurity !== undefined) { 
-            def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            if (Array.isArray(element.xmlSecurity)) { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity[0]); 
+            } else { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            } 
         } 
         if (element?.ical !== undefined) { 
-            def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            if (Array.isArray(element.ical)) { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical[0]); 
+            } else { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            } 
         } 
         if (element?.univocityFixed !== undefined) { 
-            def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            if (Array.isArray(element.univocityFixed)) { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed[0]); 
+            } else { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            } 
         } 
         if (element?.jacksonXml !== undefined) { 
-            def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            if (Array.isArray(element.jacksonXml)) { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml[0]); 
+            } else { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            } 
         } 
         if (element?.grok !== undefined) { 
-            def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            if (Array.isArray(element.grok)) { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok[0]); 
+            } else { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            } 
         } 
         if (element?.xstream !== undefined) { 
-            def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            if (Array.isArray(element.xstream)) { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream[0]); 
+            } else { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            } 
         } 
         if (element?.gzipDeflater !== undefined) { 
-            def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            if (Array.isArray(element.gzipDeflater)) { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater[0]); 
+            } else { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            } 
         } 
         if (element?.soap !== undefined) { 
-            def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            if (Array.isArray(element.soap)) { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap[0]); 
+            } else { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            } 
         } 
 
         return def;
@@ -1048,7 +1644,11 @@
         
         const def = element ? new OnCompletionDefinition({...element}) : new OnCompletionDefinition();
         if (element?.onWhen !== undefined) { 
-            def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen); 
+            if (Array.isArray(element.onWhen)) { 
+               def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen[0]); 
+            } else { 
+               def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen); 
+            } 
         } 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
 
@@ -1059,19 +1659,39 @@
         
         const def = element ? new OnExceptionDefinition({...element}) : new OnExceptionDefinition();
         if (element?.retryWhile !== undefined) { 
-            def.retryWhile = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.retryWhile); 
+            if (Array.isArray(element.retryWhile)) { 
+               def.retryWhile = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.retryWhile[0]); 
+            } else { 
+               def.retryWhile = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.retryWhile); 
+            } 
         } 
         if (element?.redeliveryPolicy !== undefined) { 
-            def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            if (Array.isArray(element.redeliveryPolicy)) { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy[0]); 
+            } else { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            } 
         } 
         if (element?.handled !== undefined) { 
-            def.handled = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.handled); 
+            if (Array.isArray(element.handled)) { 
+               def.handled = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.handled[0]); 
+            } else { 
+               def.handled = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.handled); 
+            } 
         } 
         if (element?.onWhen !== undefined) { 
-            def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen); 
+            if (Array.isArray(element.onWhen)) { 
+               def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen[0]); 
+            } else { 
+               def.onWhen = CamelDefinitionYamlStep.readWhenDefinition(element.onWhen); 
+            } 
         } 
         if (element?.continued !== undefined) { 
-            def.continued = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.continued); 
+            if (Array.isArray(element.continued)) { 
+               def.continued = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.continued[0]); 
+            } else { 
+               def.continued = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.continued); 
+            } 
         } 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
 
@@ -1253,7 +1873,11 @@
         
         const def = element ? new ResequenceDefinition({...element}) : new ResequenceDefinition();
         if (element?.streamConfig !== undefined) { 
-            def.streamConfig = CamelDefinitionYamlStep.readStreamResequencerConfig(element.streamConfig); 
+            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); 
@@ -1268,7 +1892,11 @@
         }
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
         if (element?.batchConfig !== undefined) { 
-            def.batchConfig = CamelDefinitionYamlStep.readBatchResequencerConfig(element.batchConfig); 
+            if (Array.isArray(element.batchConfig)) { 
+               def.batchConfig = CamelDefinitionYamlStep.readBatchResequencerConfig(element.batchConfig[0]); 
+            } else { 
+               def.batchConfig = CamelDefinitionYamlStep.readBatchResequencerConfig(element.batchConfig); 
+            } 
         } 
 
         return def;
@@ -1323,7 +1951,11 @@
         def.interceptSendToEndpoint = element && element?.interceptSendToEndpoint ? element?.interceptSendToEndpoint.map((x:any) => CamelDefinitionYamlStep.readInterceptSendToEndpointDefinition(x)) :[]; 
         def.intercept = element && element?.intercept ? element?.intercept.map((x:any) => CamelDefinitionYamlStep.readInterceptDefinition(x)) :[]; 
         if (element?.errorHandler !== undefined) { 
-            def.errorHandler = CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler); 
+            if (Array.isArray(element.errorHandler)) { 
+               def.errorHandler = CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler[0]); 
+            } else { 
+               def.errorHandler = CamelDefinitionYamlStep.readErrorHandlerDefinition(element.errorHandler); 
+            } 
         } 
         def.onException = element && element?.onException ? element?.onException.map((x:any) => CamelDefinitionYamlStep.readOnExceptionDefinition(x)) :[]; 
         def.interceptFrom = element && element?.interceptFrom ? element?.interceptFrom.map((x:any) => CamelDefinitionYamlStep.readInterceptFromDefinition(x)) :[]; 
@@ -1342,7 +1974,11 @@
         
         const def = element ? new RouteDefinition({...element}) : new RouteDefinition();
         if (element?.from !== undefined) { 
-            def.from = CamelDefinitionYamlStep.readFromDefinition(element.from); 
+            if (Array.isArray(element.from)) { 
+               def.from = CamelDefinitionYamlStep.readFromDefinition(element.from[0]); 
+            } else { 
+               def.from = CamelDefinitionYamlStep.readFromDefinition(element.from); 
+            } 
         } 
 
         return def;
@@ -1361,7 +1997,11 @@
         const def = element ? new RouteTemplateDefinition({...element}) : new RouteTemplateDefinition();
         def.beans = element && element?.beans ? element?.beans.map((x:any) => CamelDefinitionYamlStep.readNamedBeanDefinition(x)) :[]; 
         if (element?.from !== undefined) { 
-            def.from = CamelDefinitionYamlStep.readFromDefinition(element.from); 
+            if (Array.isArray(element.from)) { 
+               def.from = CamelDefinitionYamlStep.readFromDefinition(element.from[0]); 
+            } else { 
+               def.from = CamelDefinitionYamlStep.readFromDefinition(element.from); 
+            } 
         } 
         def.parameters = element && element?.parameters ? element?.parameters.map((x:any) => CamelDefinitionYamlStep.readRouteTemplateParameterDefinition(x)) :[]; 
 
@@ -1600,7 +2240,11 @@
             }
         }
         if (element?.correlationExpression !== undefined) { 
-            def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression); 
+            if (Array.isArray(element.correlationExpression)) { 
+               def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression[0]); 
+            } else { 
+               def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression); 
+            } 
         } 
 
         return def;
@@ -1657,7 +2301,11 @@
         
         const def = element ? new TryDefinition({...element}) : new TryDefinition();
         if (element?.doFinally !== undefined) { 
-            def.doFinally = CamelDefinitionYamlStep.readFinallyDefinition(element.doFinally); 
+            if (Array.isArray(element.doFinally)) { 
+               def.doFinally = CamelDefinitionYamlStep.readFinallyDefinition(element.doFinally[0]); 
+            } else { 
+               def.doFinally = CamelDefinitionYamlStep.readFinallyDefinition(element.doFinally); 
+            } 
         } 
         def.doCatch = element && element?.doCatch ? element?.doCatch.map((x:any) => CamelDefinitionYamlStep.readCatchDefinition(x)) :[]; 
         def.steps = CamelDefinitionYamlStep.readSteps(element?.steps);
@@ -1669,121 +2317,277 @@
         
         const def = element ? new UnmarshalDefinition({...element}) : new UnmarshalDefinition();
         if (element?.univocityCsv !== undefined) { 
-            def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            if (Array.isArray(element.univocityCsv)) { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv[0]); 
+            } else { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            } 
         } 
         if (element?.protobuf !== undefined) { 
-            def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            if (Array.isArray(element.protobuf)) { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf[0]); 
+            } else { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            } 
         } 
         if (element?.tarFile !== undefined) { 
-            def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            if (Array.isArray(element.tarFile)) { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile[0]); 
+            } else { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            } 
         } 
         if (element?.tidyMarkup !== undefined) { 
-            def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            if (Array.isArray(element.tidyMarkup)) { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup[0]); 
+            } else { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            } 
         } 
         if (element?.csv !== undefined) { 
-            def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            if (Array.isArray(element.csv)) { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv[0]); 
+            } else { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            } 
         } 
         if (element?.base64 !== undefined) { 
-            def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            if (Array.isArray(element.base64)) { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64[0]); 
+            } else { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            } 
         } 
         if (element?.zipDeflater !== undefined) { 
-            def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            if (Array.isArray(element.zipDeflater)) { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater[0]); 
+            } else { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            } 
         } 
         if (element?.bindy !== undefined) { 
-            def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            if (Array.isArray(element.bindy)) { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy[0]); 
+            } else { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            } 
         } 
         if (element?.syslog !== undefined) { 
-            def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            if (Array.isArray(element.syslog)) { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog[0]); 
+            } else { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            } 
         } 
         if (element?.zipFile !== undefined) { 
-            def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            if (Array.isArray(element.zipFile)) { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile[0]); 
+            } else { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            } 
         } 
         if (element?.jaxb !== undefined) { 
-            def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            if (Array.isArray(element.jaxb)) { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb[0]); 
+            } else { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            } 
         } 
         if (element?.rss !== undefined) { 
-            def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            if (Array.isArray(element.rss)) { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss[0]); 
+            } else { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            } 
         } 
         if (element?.mimeMultipart !== undefined) { 
-            def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            if (Array.isArray(element.mimeMultipart)) { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart[0]); 
+            } else { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            } 
         } 
         if (element?.asn1 !== undefined) { 
-            def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            if (Array.isArray(element.asn1)) { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1[0]); 
+            } else { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            } 
         } 
         if (element?.pgp !== undefined) { 
-            def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            if (Array.isArray(element.pgp)) { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp[0]); 
+            } else { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            } 
         } 
         if (element?.thrift !== undefined) { 
-            def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            if (Array.isArray(element.thrift)) { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift[0]); 
+            } else { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            } 
         } 
         if (element?.json !== undefined) { 
-            def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            if (Array.isArray(element.json)) { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json[0]); 
+            } else { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            } 
         } 
         if (element?.lzf !== undefined) { 
-            def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            if (Array.isArray(element.lzf)) { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf[0]); 
+            } else { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            } 
         } 
         if (element?.fhirXml !== undefined) { 
-            def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            if (Array.isArray(element.fhirXml)) { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml[0]); 
+            } else { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            } 
         } 
         if (element?.barcode !== undefined) { 
-            def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            if (Array.isArray(element.barcode)) { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode[0]); 
+            } else { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            } 
         } 
         if (element?.avro !== undefined) { 
-            def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            if (Array.isArray(element.avro)) { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro[0]); 
+            } else { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            } 
         } 
         if (element?.yaml !== undefined) { 
-            def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            if (Array.isArray(element.yaml)) { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml[0]); 
+            } else { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            } 
         } 
         if (element?.fhirJson !== undefined) { 
-            def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            if (Array.isArray(element.fhirJson)) { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson[0]); 
+            } else { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            } 
         } 
         if (element?.any23 !== undefined) { 
-            def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            if (Array.isArray(element.any23)) { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23[0]); 
+            } else { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            } 
         } 
         if (element?.custom !== undefined) { 
-            def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            if (Array.isArray(element.custom)) { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom[0]); 
+            } else { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            } 
         } 
         if (element?.flatpack !== undefined) { 
-            def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            if (Array.isArray(element.flatpack)) { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack[0]); 
+            } else { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            } 
         } 
         if (element?.cbor !== undefined) { 
-            def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            if (Array.isArray(element.cbor)) { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor[0]); 
+            } else { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            } 
         } 
         if (element?.crypto !== undefined) { 
-            def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            if (Array.isArray(element.crypto)) { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto[0]); 
+            } else { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            } 
         } 
         if (element?.univocityTsv !== undefined) { 
-            def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            if (Array.isArray(element.univocityTsv)) { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv[0]); 
+            } else { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            } 
         } 
         if (element?.hl7 !== undefined) { 
-            def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            if (Array.isArray(element.hl7)) { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7[0]); 
+            } else { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            } 
         } 
         if (element?.jsonApi !== undefined) { 
-            def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            if (Array.isArray(element.jsonApi)) { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi[0]); 
+            } else { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            } 
         } 
         if (element?.xmlSecurity !== undefined) { 
-            def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            if (Array.isArray(element.xmlSecurity)) { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity[0]); 
+            } else { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            } 
         } 
         if (element?.ical !== undefined) { 
-            def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            if (Array.isArray(element.ical)) { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical[0]); 
+            } else { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            } 
         } 
         if (element?.univocityFixed !== undefined) { 
-            def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            if (Array.isArray(element.univocityFixed)) { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed[0]); 
+            } else { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            } 
         } 
         if (element?.jacksonXml !== undefined) { 
-            def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            if (Array.isArray(element.jacksonXml)) { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml[0]); 
+            } else { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            } 
         } 
         if (element?.grok !== undefined) { 
-            def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            if (Array.isArray(element.grok)) { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok[0]); 
+            } else { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            } 
         } 
         if (element?.xstream !== undefined) { 
-            def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            if (Array.isArray(element.xstream)) { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream[0]); 
+            } else { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            } 
         } 
         if (element?.gzipDeflater !== undefined) { 
-            def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            if (Array.isArray(element.gzipDeflater)) { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater[0]); 
+            } else { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            } 
         } 
         if (element?.soap !== undefined) { 
-            def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            if (Array.isArray(element.soap)) { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap[0]); 
+            } else { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            } 
         } 
 
         return def;
@@ -1864,19 +2668,39 @@
         
         const def = element ? new CachingServiceCallServiceDiscoveryConfiguration({...element}) : new CachingServiceCallServiceDiscoveryConfiguration();
         if (element?.dnsServiceDiscovery !== undefined) { 
-            def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            if (Array.isArray(element.dnsServiceDiscovery)) { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery[0]); 
+            } else { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            } 
         } 
         if (element?.kubernetesServiceDiscovery !== undefined) { 
-            def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            if (Array.isArray(element.kubernetesServiceDiscovery)) { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery[0]); 
+            } else { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            } 
         } 
         if (element?.consulServiceDiscovery !== undefined) { 
-            def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            if (Array.isArray(element.consulServiceDiscovery)) { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery[0]); 
+            } else { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            } 
         } 
         if (element?.staticServiceDiscovery !== undefined) { 
-            def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            if (Array.isArray(element.staticServiceDiscovery)) { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery[0]); 
+            } else { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            } 
         } 
         if (element?.combinedServiceDiscovery !== undefined) { 
-            def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+            if (Array.isArray(element.combinedServiceDiscovery)) { 
+               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery[0]); 
+            } else { 
+               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+            } 
         } 
         def.properties = element && element?.properties ? element?.properties.map((x:any) => CamelDefinitionYamlStep.readPropertyDefinition(x)) :[]; 
 
@@ -1887,19 +2711,39 @@
         
         const def = element ? new CombinedServiceCallServiceDiscoveryConfiguration({...element}) : new CombinedServiceCallServiceDiscoveryConfiguration();
         if (element?.cachingServiceDiscovery !== undefined) { 
-            def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
+            if (Array.isArray(element.cachingServiceDiscovery)) { 
+               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery[0]); 
+            } else { 
+               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
+            } 
         } 
         if (element?.dnsServiceDiscovery !== undefined) { 
-            def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            if (Array.isArray(element.dnsServiceDiscovery)) { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery[0]); 
+            } else { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            } 
         } 
         if (element?.kubernetesServiceDiscovery !== undefined) { 
-            def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            if (Array.isArray(element.kubernetesServiceDiscovery)) { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery[0]); 
+            } else { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            } 
         } 
         if (element?.consulServiceDiscovery !== undefined) { 
-            def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            if (Array.isArray(element.consulServiceDiscovery)) { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery[0]); 
+            } else { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            } 
         } 
         if (element?.staticServiceDiscovery !== undefined) { 
-            def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            if (Array.isArray(element.staticServiceDiscovery)) { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery[0]); 
+            } else { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            } 
         } 
         def.properties = element && element?.properties ? element?.properties.map((x:any) => CamelDefinitionYamlStep.readPropertyDefinition(x)) :[]; 
 
@@ -1910,16 +2754,32 @@
         
         const def = element ? new CombinedServiceCallServiceFilterConfiguration({...element}) : new CombinedServiceCallServiceFilterConfiguration();
         if (element?.blacklistServiceFilter !== undefined) { 
-            def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
+            if (Array.isArray(element.blacklistServiceFilter)) { 
+               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter[0]); 
+            } else { 
+               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
+            } 
         } 
         if (element?.passThroughServiceFilter !== undefined) { 
-            def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
+            if (Array.isArray(element.passThroughServiceFilter)) { 
+               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter[0]); 
+            } else { 
+               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
+            } 
         } 
         if (element?.healthyServiceFilter !== undefined) { 
-            def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
+            if (Array.isArray(element.healthyServiceFilter)) { 
+               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter[0]); 
+            } else { 
+               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
+            } 
         } 
         if (element?.customServiceFilter !== undefined) { 
-            def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
+            if (Array.isArray(element.customServiceFilter)) { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter[0]); 
+            } else { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
+            } 
         } 
         def.properties = element && element?.properties ? element?.properties.map((x:any) => CamelDefinitionYamlStep.readPropertyDefinition(x)) :[]; 
 
@@ -1986,46 +2846,102 @@
         
         const def = element ? new ServiceCallConfigurationDefinition({...element}) : new ServiceCallConfigurationDefinition();
         if (element?.defaultLoadBalancer !== undefined) { 
-            def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
+            if (Array.isArray(element.defaultLoadBalancer)) { 
+               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer[0]); 
+            } else { 
+               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
+            } 
         } 
         if (element?.expression !== undefined) { 
-            def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression); 
+            if (Array.isArray(element.expression)) { 
+               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression[0]); 
+            } else { 
+               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression); 
+            } 
         } 
         if (element?.kubernetesServiceDiscovery !== undefined) { 
-            def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            if (Array.isArray(element.kubernetesServiceDiscovery)) { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery[0]); 
+            } else { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            } 
         } 
         if (element?.customServiceFilter !== undefined) { 
-            def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
+            if (Array.isArray(element.customServiceFilter)) { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter[0]); 
+            } else { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
+            } 
         } 
         if (element?.zookeeperServiceDiscovery !== undefined) { 
-            def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
+            if (Array.isArray(element.zookeeperServiceDiscovery)) { 
+               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery[0]); 
+            } else { 
+               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
+            } 
         } 
         if (element?.blacklistServiceFilter !== undefined) { 
-            def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
+            if (Array.isArray(element.blacklistServiceFilter)) { 
+               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter[0]); 
+            } else { 
+               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
+            } 
         } 
         if (element?.passThroughServiceFilter !== undefined) { 
-            def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
+            if (Array.isArray(element.passThroughServiceFilter)) { 
+               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter[0]); 
+            } else { 
+               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
+            } 
         } 
         if (element?.cachingServiceDiscovery !== undefined) { 
-            def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
+            if (Array.isArray(element.cachingServiceDiscovery)) { 
+               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery[0]); 
+            } else { 
+               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
+            } 
         } 
         if (element?.dnsServiceDiscovery !== undefined) { 
-            def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            if (Array.isArray(element.dnsServiceDiscovery)) { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery[0]); 
+            } else { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            } 
         } 
         if (element?.healthyServiceFilter !== undefined) { 
-            def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
+            if (Array.isArray(element.healthyServiceFilter)) { 
+               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter[0]); 
+            } else { 
+               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
+            } 
         } 
         if (element?.combinedServiceFilter !== undefined) { 
-            def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
+            if (Array.isArray(element.combinedServiceFilter)) { 
+               def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter[0]); 
+            } else { 
+               def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
+            } 
         } 
         if (element?.consulServiceDiscovery !== undefined) { 
-            def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            if (Array.isArray(element.consulServiceDiscovery)) { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery[0]); 
+            } else { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            } 
         } 
         if (element?.staticServiceDiscovery !== undefined) { 
-            def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            if (Array.isArray(element.staticServiceDiscovery)) { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery[0]); 
+            } else { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            } 
         } 
         if (element?.combinedServiceDiscovery !== undefined) { 
-            def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+            if (Array.isArray(element.combinedServiceDiscovery)) { 
+               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery[0]); 
+            } else { 
+               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+            } 
         } 
 
         return def;
@@ -2035,46 +2951,102 @@
         if (element && typeof element === 'string') element = {name: element};
         const def = element ? new ServiceCallDefinition({...element}) : new ServiceCallDefinition();
         if (element?.defaultLoadBalancer !== undefined) { 
-            def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
+            if (Array.isArray(element.defaultLoadBalancer)) { 
+               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer[0]); 
+            } else { 
+               def.defaultLoadBalancer = CamelDefinitionYamlStep.readDefaultServiceCallServiceLoadBalancerConfiguration(element.defaultLoadBalancer); 
+            } 
         } 
         if (element?.expression !== undefined) { 
-            def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression); 
+            if (Array.isArray(element.expression)) { 
+               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression[0]); 
+            } else { 
+               def.expression = CamelDefinitionYamlStep.readServiceCallExpressionConfiguration(element.expression); 
+            } 
         } 
         if (element?.kubernetesServiceDiscovery !== undefined) { 
-            def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            if (Array.isArray(element.kubernetesServiceDiscovery)) { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery[0]); 
+            } else { 
+               def.kubernetesServiceDiscovery = CamelDefinitionYamlStep.readKubernetesServiceCallServiceDiscoveryConfiguration(element.kubernetesServiceDiscovery); 
+            } 
         } 
         if (element?.customServiceFilter !== undefined) { 
-            def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
+            if (Array.isArray(element.customServiceFilter)) { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter[0]); 
+            } else { 
+               def.customServiceFilter = CamelDefinitionYamlStep.readCustomServiceCallServiceFilterConfiguration(element.customServiceFilter); 
+            } 
         } 
         if (element?.zookeeperServiceDiscovery !== undefined) { 
-            def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
+            if (Array.isArray(element.zookeeperServiceDiscovery)) { 
+               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery[0]); 
+            } else { 
+               def.zookeeperServiceDiscovery = CamelDefinitionYamlStep.readZooKeeperServiceCallServiceDiscoveryConfiguration(element.zookeeperServiceDiscovery); 
+            } 
         } 
         if (element?.blacklistServiceFilter !== undefined) { 
-            def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
+            if (Array.isArray(element.blacklistServiceFilter)) { 
+               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter[0]); 
+            } else { 
+               def.blacklistServiceFilter = CamelDefinitionYamlStep.readBlacklistServiceCallServiceFilterConfiguration(element.blacklistServiceFilter); 
+            } 
         } 
         if (element?.passThroughServiceFilter !== undefined) { 
-            def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
+            if (Array.isArray(element.passThroughServiceFilter)) { 
+               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter[0]); 
+            } else { 
+               def.passThroughServiceFilter = CamelDefinitionYamlStep.readPassThroughServiceCallServiceFilterConfiguration(element.passThroughServiceFilter); 
+            } 
         } 
         if (element?.cachingServiceDiscovery !== undefined) { 
-            def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
+            if (Array.isArray(element.cachingServiceDiscovery)) { 
+               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery[0]); 
+            } else { 
+               def.cachingServiceDiscovery = CamelDefinitionYamlStep.readCachingServiceCallServiceDiscoveryConfiguration(element.cachingServiceDiscovery); 
+            } 
         } 
         if (element?.dnsServiceDiscovery !== undefined) { 
-            def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            if (Array.isArray(element.dnsServiceDiscovery)) { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery[0]); 
+            } else { 
+               def.dnsServiceDiscovery = CamelDefinitionYamlStep.readDnsServiceCallServiceDiscoveryConfiguration(element.dnsServiceDiscovery); 
+            } 
         } 
         if (element?.healthyServiceFilter !== undefined) { 
-            def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
+            if (Array.isArray(element.healthyServiceFilter)) { 
+               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter[0]); 
+            } else { 
+               def.healthyServiceFilter = CamelDefinitionYamlStep.readHealthyServiceCallServiceFilterConfiguration(element.healthyServiceFilter); 
+            } 
         } 
         if (element?.combinedServiceFilter !== undefined) { 
-            def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
+            if (Array.isArray(element.combinedServiceFilter)) { 
+               def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter[0]); 
+            } else { 
+               def.combinedServiceFilter = CamelDefinitionYamlStep.readCombinedServiceCallServiceFilterConfiguration(element.combinedServiceFilter); 
+            } 
         } 
         if (element?.consulServiceDiscovery !== undefined) { 
-            def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            if (Array.isArray(element.consulServiceDiscovery)) { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery[0]); 
+            } else { 
+               def.consulServiceDiscovery = CamelDefinitionYamlStep.readConsulServiceCallServiceDiscoveryConfiguration(element.consulServiceDiscovery); 
+            } 
         } 
         if (element?.staticServiceDiscovery !== undefined) { 
-            def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            if (Array.isArray(element.staticServiceDiscovery)) { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery[0]); 
+            } else { 
+               def.staticServiceDiscovery = CamelDefinitionYamlStep.readStaticServiceCallServiceDiscoveryConfiguration(element.staticServiceDiscovery); 
+            } 
         } 
         if (element?.combinedServiceDiscovery !== undefined) { 
-            def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+            if (Array.isArray(element.combinedServiceDiscovery)) { 
+               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery[0]); 
+            } else { 
+               def.combinedServiceDiscovery = CamelDefinitionYamlStep.readCombinedServiceCallServiceDiscoveryConfiguration(element.combinedServiceDiscovery); 
+            } 
         } 
 
         return def;
@@ -2236,121 +3208,277 @@
         
         const def = element ? new DataFormatsDefinition({...element}) : new DataFormatsDefinition();
         if (element?.univocityCsv !== undefined) { 
-            def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            if (Array.isArray(element.univocityCsv)) { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv[0]); 
+            } else { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            } 
         } 
         if (element?.protobuf !== undefined) { 
-            def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            if (Array.isArray(element.protobuf)) { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf[0]); 
+            } else { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            } 
         } 
         if (element?.tarFile !== undefined) { 
-            def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            if (Array.isArray(element.tarFile)) { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile[0]); 
+            } else { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            } 
         } 
         if (element?.tidyMarkup !== undefined) { 
-            def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            if (Array.isArray(element.tidyMarkup)) { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup[0]); 
+            } else { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            } 
         } 
         if (element?.csv !== undefined) { 
-            def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            if (Array.isArray(element.csv)) { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv[0]); 
+            } else { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            } 
         } 
         if (element?.base64 !== undefined) { 
-            def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            if (Array.isArray(element.base64)) { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64[0]); 
+            } else { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            } 
         } 
         if (element?.zipDeflater !== undefined) { 
-            def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            if (Array.isArray(element.zipDeflater)) { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater[0]); 
+            } else { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            } 
         } 
         if (element?.bindy !== undefined) { 
-            def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            if (Array.isArray(element.bindy)) { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy[0]); 
+            } else { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            } 
         } 
         if (element?.syslog !== undefined) { 
-            def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            if (Array.isArray(element.syslog)) { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog[0]); 
+            } else { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            } 
         } 
         if (element?.zipFile !== undefined) { 
-            def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            if (Array.isArray(element.zipFile)) { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile[0]); 
+            } else { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            } 
         } 
         if (element?.jaxb !== undefined) { 
-            def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            if (Array.isArray(element.jaxb)) { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb[0]); 
+            } else { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            } 
         } 
         if (element?.rss !== undefined) { 
-            def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            if (Array.isArray(element.rss)) { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss[0]); 
+            } else { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            } 
         } 
         if (element?.mimeMultipart !== undefined) { 
-            def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            if (Array.isArray(element.mimeMultipart)) { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart[0]); 
+            } else { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            } 
         } 
         if (element?.asn1 !== undefined) { 
-            def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            if (Array.isArray(element.asn1)) { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1[0]); 
+            } else { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            } 
         } 
         if (element?.pgp !== undefined) { 
-            def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            if (Array.isArray(element.pgp)) { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp[0]); 
+            } else { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            } 
         } 
         if (element?.thrift !== undefined) { 
-            def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            if (Array.isArray(element.thrift)) { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift[0]); 
+            } else { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            } 
         } 
         if (element?.json !== undefined) { 
-            def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            if (Array.isArray(element.json)) { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json[0]); 
+            } else { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            } 
         } 
         if (element?.lzf !== undefined) { 
-            def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            if (Array.isArray(element.lzf)) { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf[0]); 
+            } else { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            } 
         } 
         if (element?.fhirXml !== undefined) { 
-            def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            if (Array.isArray(element.fhirXml)) { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml[0]); 
+            } else { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            } 
         } 
         if (element?.barcode !== undefined) { 
-            def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            if (Array.isArray(element.barcode)) { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode[0]); 
+            } else { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            } 
         } 
         if (element?.avro !== undefined) { 
-            def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            if (Array.isArray(element.avro)) { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro[0]); 
+            } else { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            } 
         } 
         if (element?.yaml !== undefined) { 
-            def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            if (Array.isArray(element.yaml)) { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml[0]); 
+            } else { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            } 
         } 
         if (element?.fhirJson !== undefined) { 
-            def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            if (Array.isArray(element.fhirJson)) { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson[0]); 
+            } else { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            } 
         } 
         if (element?.any23 !== undefined) { 
-            def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            if (Array.isArray(element.any23)) { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23[0]); 
+            } else { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            } 
         } 
         if (element?.custom !== undefined) { 
-            def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            if (Array.isArray(element.custom)) { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom[0]); 
+            } else { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            } 
         } 
         if (element?.flatpack !== undefined) { 
-            def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            if (Array.isArray(element.flatpack)) { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack[0]); 
+            } else { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            } 
         } 
         if (element?.cbor !== undefined) { 
-            def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            if (Array.isArray(element.cbor)) { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor[0]); 
+            } else { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            } 
         } 
         if (element?.crypto !== undefined) { 
-            def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            if (Array.isArray(element.crypto)) { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto[0]); 
+            } else { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            } 
         } 
         if (element?.univocityTsv !== undefined) { 
-            def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            if (Array.isArray(element.univocityTsv)) { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv[0]); 
+            } else { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            } 
         } 
         if (element?.hl7 !== undefined) { 
-            def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            if (Array.isArray(element.hl7)) { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7[0]); 
+            } else { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            } 
         } 
         if (element?.jsonApi !== undefined) { 
-            def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            if (Array.isArray(element.jsonApi)) { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi[0]); 
+            } else { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            } 
         } 
         if (element?.xmlSecurity !== undefined) { 
-            def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            if (Array.isArray(element.xmlSecurity)) { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity[0]); 
+            } else { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            } 
         } 
         if (element?.ical !== undefined) { 
-            def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            if (Array.isArray(element.ical)) { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical[0]); 
+            } else { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            } 
         } 
         if (element?.univocityFixed !== undefined) { 
-            def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            if (Array.isArray(element.univocityFixed)) { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed[0]); 
+            } else { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            } 
         } 
         if (element?.jacksonXml !== undefined) { 
-            def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            if (Array.isArray(element.jacksonXml)) { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml[0]); 
+            } else { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            } 
         } 
         if (element?.grok !== undefined) { 
-            def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            if (Array.isArray(element.grok)) { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok[0]); 
+            } else { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            } 
         } 
         if (element?.xstream !== undefined) { 
-            def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            if (Array.isArray(element.xstream)) { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream[0]); 
+            } else { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            } 
         } 
         if (element?.gzipDeflater !== undefined) { 
-            def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            if (Array.isArray(element.gzipDeflater)) { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater[0]); 
+            } else { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            } 
         } 
         if (element?.soap !== undefined) { 
-            def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            if (Array.isArray(element.soap)) { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap[0]); 
+            } else { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            } 
         } 
 
         return def;
@@ -2585,7 +3713,11 @@
         
         const def = element ? new DeadLetterChannelDefinition({...element}) : new DeadLetterChannelDefinition();
         if (element?.redeliveryPolicy !== undefined) { 
-            def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            if (Array.isArray(element.redeliveryPolicy)) { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy[0]); 
+            } else { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            } 
         } 
 
         return def;
@@ -2595,7 +3727,11 @@
         
         const def = element ? new DefaultErrorHandlerDefinition({...element}) : new DefaultErrorHandlerDefinition();
         if (element?.redeliveryPolicy !== undefined) { 
-            def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            if (Array.isArray(element.redeliveryPolicy)) { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy[0]); 
+            } else { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            } 
         } 
 
         return def;
@@ -2612,7 +3748,11 @@
         
         const def = element ? new JtaTransactionErrorHandlerDefinition({...element}) : new JtaTransactionErrorHandlerDefinition();
         if (element?.redeliveryPolicy !== undefined) { 
-            def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            if (Array.isArray(element.redeliveryPolicy)) { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy[0]); 
+            } else { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            } 
         } 
 
         return def;
@@ -2629,7 +3769,11 @@
         
         const def = element ? new SpringTransactionErrorHandlerDefinition({...element}) : new SpringTransactionErrorHandlerDefinition();
         if (element?.redeliveryPolicy !== undefined) { 
-            def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            if (Array.isArray(element.redeliveryPolicy)) { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy[0]); 
+            } else { 
+               def.redeliveryPolicy = CamelDefinitionYamlStep.readRedeliveryPolicyDefinition(element.redeliveryPolicy); 
+            } 
         } 
 
         return def;
@@ -2667,67 +3811,151 @@
         
         const def = element ? new ExpressionDefinition({...element}) : new ExpressionDefinition();
         if (element?.ognl !== undefined) { 
-            def.ognl = CamelDefinitionYamlStep.readOgnlExpression(element.ognl); 
+            if (Array.isArray(element.ognl)) { 
+               def.ognl = CamelDefinitionYamlStep.readOgnlExpression(element.ognl[0]); 
+            } else { 
+               def.ognl = CamelDefinitionYamlStep.readOgnlExpression(element.ognl); 
+            } 
         } 
         if (element?.constant !== undefined) { 
-            def.constant = CamelDefinitionYamlStep.readConstantExpression(element.constant); 
+            if (Array.isArray(element.constant)) { 
+               def.constant = CamelDefinitionYamlStep.readConstantExpression(element.constant[0]); 
+            } else { 
+               def.constant = CamelDefinitionYamlStep.readConstantExpression(element.constant); 
+            } 
         } 
         if (element?.mvel !== undefined) { 
-            def.mvel = CamelDefinitionYamlStep.readMvelExpression(element.mvel); 
+            if (Array.isArray(element.mvel)) { 
+               def.mvel = CamelDefinitionYamlStep.readMvelExpression(element.mvel[0]); 
+            } else { 
+               def.mvel = CamelDefinitionYamlStep.readMvelExpression(element.mvel); 
+            } 
         } 
         if (element?.method !== undefined) { 
-            def.method = CamelDefinitionYamlStep.readMethodCallExpression(element.method); 
+            if (Array.isArray(element.method)) { 
+               def.method = CamelDefinitionYamlStep.readMethodCallExpression(element.method[0]); 
+            } else { 
+               def.method = CamelDefinitionYamlStep.readMethodCallExpression(element.method); 
+            } 
         } 
         if (element?.xquery !== undefined) { 
-            def.xquery = CamelDefinitionYamlStep.readXQueryExpression(element.xquery); 
+            if (Array.isArray(element.xquery)) { 
+               def.xquery = CamelDefinitionYamlStep.readXQueryExpression(element.xquery[0]); 
+            } else { 
+               def.xquery = CamelDefinitionYamlStep.readXQueryExpression(element.xquery); 
+            } 
         } 
         if (element?.datasonnet !== undefined) { 
-            def.datasonnet = CamelDefinitionYamlStep.readDatasonnetExpression(element.datasonnet); 
+            if (Array.isArray(element.datasonnet)) { 
+               def.datasonnet = CamelDefinitionYamlStep.readDatasonnetExpression(element.datasonnet[0]); 
+            } else { 
+               def.datasonnet = CamelDefinitionYamlStep.readDatasonnetExpression(element.datasonnet); 
+            } 
         } 
         if (element?.jq !== undefined) { 
-            def.jq = CamelDefinitionYamlStep.readJqExpression(element.jq); 
+            if (Array.isArray(element.jq)) { 
+               def.jq = CamelDefinitionYamlStep.readJqExpression(element.jq[0]); 
+            } else { 
+               def.jq = CamelDefinitionYamlStep.readJqExpression(element.jq); 
+            } 
         } 
         if (element?.language !== undefined) { 
-            def.language = CamelDefinitionYamlStep.readLanguageExpression(element.language); 
+            if (Array.isArray(element.language)) { 
+               def.language = CamelDefinitionYamlStep.readLanguageExpression(element.language[0]); 
+            } else { 
+               def.language = CamelDefinitionYamlStep.readLanguageExpression(element.language); 
+            } 
         } 
         if (element?.simple !== undefined) { 
-            def.simple = CamelDefinitionYamlStep.readSimpleExpression(element.simple); 
+            if (Array.isArray(element.simple)) { 
+               def.simple = CamelDefinitionYamlStep.readSimpleExpression(element.simple[0]); 
+            } else { 
+               def.simple = CamelDefinitionYamlStep.readSimpleExpression(element.simple); 
+            } 
         } 
         if (element?.hl7terser !== undefined) { 
-            def.hl7terser = CamelDefinitionYamlStep.readHl7TerserExpression(element.hl7terser); 
+            if (Array.isArray(element.hl7terser)) { 
+               def.hl7terser = CamelDefinitionYamlStep.readHl7TerserExpression(element.hl7terser[0]); 
+            } else { 
+               def.hl7terser = CamelDefinitionYamlStep.readHl7TerserExpression(element.hl7terser); 
+            } 
         } 
         if (element?.tokenize !== undefined) { 
-            def.tokenize = CamelDefinitionYamlStep.readTokenizerExpression(element.tokenize); 
+            if (Array.isArray(element.tokenize)) { 
+               def.tokenize = CamelDefinitionYamlStep.readTokenizerExpression(element.tokenize[0]); 
+            } else { 
+               def.tokenize = CamelDefinitionYamlStep.readTokenizerExpression(element.tokenize); 
+            } 
         } 
         if (element?.spel !== undefined) { 
-            def.spel = CamelDefinitionYamlStep.readSpELExpression(element.spel); 
+            if (Array.isArray(element.spel)) { 
+               def.spel = CamelDefinitionYamlStep.readSpELExpression(element.spel[0]); 
+            } else { 
+               def.spel = CamelDefinitionYamlStep.readSpELExpression(element.spel); 
+            } 
         } 
         if (element?.ref !== undefined) { 
-            def.ref = CamelDefinitionYamlStep.readRefExpression(element.ref); 
+            if (Array.isArray(element.ref)) { 
+               def.ref = CamelDefinitionYamlStep.readRefExpression(element.ref[0]); 
+            } else { 
+               def.ref = CamelDefinitionYamlStep.readRefExpression(element.ref); 
+            } 
         } 
         if (element?.xpath !== undefined) { 
-            def.xpath = CamelDefinitionYamlStep.readXPathExpression(element.xpath); 
+            if (Array.isArray(element.xpath)) { 
+               def.xpath = CamelDefinitionYamlStep.readXPathExpression(element.xpath[0]); 
+            } else { 
+               def.xpath = CamelDefinitionYamlStep.readXPathExpression(element.xpath); 
+            } 
         } 
         if (element?.groovy !== undefined) { 
-            def.groovy = CamelDefinitionYamlStep.readGroovyExpression(element.groovy); 
+            if (Array.isArray(element.groovy)) { 
+               def.groovy = CamelDefinitionYamlStep.readGroovyExpression(element.groovy[0]); 
+            } else { 
+               def.groovy = CamelDefinitionYamlStep.readGroovyExpression(element.groovy); 
+            } 
         } 
         if (element?.csimple !== undefined) { 
-            def.csimple = CamelDefinitionYamlStep.readCSimpleExpression(element.csimple); 
+            if (Array.isArray(element.csimple)) { 
+               def.csimple = CamelDefinitionYamlStep.readCSimpleExpression(element.csimple[0]); 
+            } else { 
+               def.csimple = CamelDefinitionYamlStep.readCSimpleExpression(element.csimple); 
+            } 
         } 
         if (element?.exchangeProperty !== undefined) { 
-            def.exchangeProperty = CamelDefinitionYamlStep.readExchangePropertyExpression(element.exchangeProperty); 
+            if (Array.isArray(element.exchangeProperty)) { 
+               def.exchangeProperty = CamelDefinitionYamlStep.readExchangePropertyExpression(element.exchangeProperty[0]); 
+            } else { 
+               def.exchangeProperty = CamelDefinitionYamlStep.readExchangePropertyExpression(element.exchangeProperty); 
+            } 
         } 
         if (element?.jsonpath !== undefined) { 
-            def.jsonpath = CamelDefinitionYamlStep.readJsonPathExpression(element.jsonpath); 
+            if (Array.isArray(element.jsonpath)) { 
+               def.jsonpath = CamelDefinitionYamlStep.readJsonPathExpression(element.jsonpath[0]); 
+            } else { 
+               def.jsonpath = CamelDefinitionYamlStep.readJsonPathExpression(element.jsonpath); 
+            } 
         } 
         if (element?.header !== undefined) { 
-            def.header = CamelDefinitionYamlStep.readHeaderExpression(element.header); 
+            if (Array.isArray(element.header)) { 
+               def.header = CamelDefinitionYamlStep.readHeaderExpression(element.header[0]); 
+            } else { 
+               def.header = CamelDefinitionYamlStep.readHeaderExpression(element.header); 
+            } 
         } 
         if (element?.joor !== undefined) { 
-            def.joor = CamelDefinitionYamlStep.readJoorExpression(element.joor); 
+            if (Array.isArray(element.joor)) { 
+               def.joor = CamelDefinitionYamlStep.readJoorExpression(element.joor[0]); 
+            } else { 
+               def.joor = CamelDefinitionYamlStep.readJoorExpression(element.joor); 
+            } 
         } 
         if (element?.xtokenize !== undefined) { 
-            def.xtokenize = CamelDefinitionYamlStep.readXMLTokenizerExpression(element.xtokenize); 
+            if (Array.isArray(element.xtokenize)) { 
+               def.xtokenize = CamelDefinitionYamlStep.readXMLTokenizerExpression(element.xtokenize[0]); 
+            } else { 
+               def.xtokenize = CamelDefinitionYamlStep.readXMLTokenizerExpression(element.xtokenize); 
+            } 
         } 
 
         return def;
@@ -2887,7 +4115,11 @@
         
         const def = element ? new StickyLoadBalancerDefinition({...element}) : new StickyLoadBalancerDefinition();
         if (element?.correlationExpression !== undefined) { 
-            def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression); 
+            if (Array.isArray(element.correlationExpression)) { 
+               def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression[0]); 
+            } else { 
+               def.correlationExpression = CamelDefinitionYamlStep.readExpressionSubElementDefinition(element.correlationExpression); 
+            } 
         } 
 
         return def;
@@ -3064,7 +4296,11 @@
         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)) :[]; 
         if (element?.securityDefinitions !== undefined) { 
-            def.securityDefinitions = CamelDefinitionYamlStep.readRestSecuritiesDefinition(element.securityDefinitions); 
+            if (Array.isArray(element.securityDefinitions)) { 
+               def.securityDefinitions = CamelDefinitionYamlStep.readRestSecuritiesDefinition(element.securityDefinitions[0]); 
+            } else { 
+               def.securityDefinitions = CamelDefinitionYamlStep.readRestSecuritiesDefinition(element.securityDefinitions); 
+            } 
         } 
         def.put = element && element?.put ? element?.put.map((x:any) => CamelDefinitionYamlStep.readPutDefinition(x)) :[]; 
 
@@ -3082,22 +4318,46 @@
         
         const def = element ? new RestSecuritiesDefinition({...element}) : new RestSecuritiesDefinition();
         if (element?.openIdConnect !== undefined) { 
-            def.openIdConnect = CamelDefinitionYamlStep.readOpenIdConnectDefinition(element.openIdConnect); 
+            if (Array.isArray(element.openIdConnect)) { 
+               def.openIdConnect = CamelDefinitionYamlStep.readOpenIdConnectDefinition(element.openIdConnect[0]); 
+            } else { 
+               def.openIdConnect = CamelDefinitionYamlStep.readOpenIdConnectDefinition(element.openIdConnect); 
+            } 
         } 
         if (element?.apiKey !== undefined) { 
-            def.apiKey = CamelDefinitionYamlStep.readApiKeyDefinition(element.apiKey); 
+            if (Array.isArray(element.apiKey)) { 
+               def.apiKey = CamelDefinitionYamlStep.readApiKeyDefinition(element.apiKey[0]); 
+            } else { 
+               def.apiKey = CamelDefinitionYamlStep.readApiKeyDefinition(element.apiKey); 
+            } 
         } 
         if (element?.basicAuth !== undefined) { 
-            def.basicAuth = CamelDefinitionYamlStep.readBasicAuthDefinition(element.basicAuth); 
+            if (Array.isArray(element.basicAuth)) { 
+               def.basicAuth = CamelDefinitionYamlStep.readBasicAuthDefinition(element.basicAuth[0]); 
+            } else { 
+               def.basicAuth = CamelDefinitionYamlStep.readBasicAuthDefinition(element.basicAuth); 
+            } 
         } 
         if (element?.mutualTls !== undefined) { 
-            def.mutualTls = CamelDefinitionYamlStep.readMutualTLSDefinition(element.mutualTls); 
+            if (Array.isArray(element.mutualTls)) { 
+               def.mutualTls = CamelDefinitionYamlStep.readMutualTLSDefinition(element.mutualTls[0]); 
+            } else { 
+               def.mutualTls = CamelDefinitionYamlStep.readMutualTLSDefinition(element.mutualTls); 
+            } 
         } 
         if (element?.bearer !== undefined) { 
-            def.bearer = CamelDefinitionYamlStep.readBearerTokenDefinition(element.bearer); 
+            if (Array.isArray(element.bearer)) { 
+               def.bearer = CamelDefinitionYamlStep.readBearerTokenDefinition(element.bearer[0]); 
+            } else { 
+               def.bearer = CamelDefinitionYamlStep.readBearerTokenDefinition(element.bearer); 
+            } 
         } 
         if (element?.oauth2 !== undefined) { 
-            def.oauth2 = CamelDefinitionYamlStep.readOAuth2Definition(element.oauth2); 
+            if (Array.isArray(element.oauth2)) { 
+               def.oauth2 = CamelDefinitionYamlStep.readOAuth2Definition(element.oauth2[0]); 
+            } else { 
+               def.oauth2 = CamelDefinitionYamlStep.readOAuth2Definition(element.oauth2); 
+            } 
         } 
 
         return def;
@@ -3129,121 +4389,277 @@
         
         const def = element ? new DataFormatTransformerDefinition({...element}) : new DataFormatTransformerDefinition();
         if (element?.univocityCsv !== undefined) { 
-            def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            if (Array.isArray(element.univocityCsv)) { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv[0]); 
+            } else { 
+               def.univocityCsv = CamelDefinitionYamlStep.readUniVocityCsvDataFormat(element.univocityCsv); 
+            } 
         } 
         if (element?.protobuf !== undefined) { 
-            def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            if (Array.isArray(element.protobuf)) { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf[0]); 
+            } else { 
+               def.protobuf = CamelDefinitionYamlStep.readProtobufDataFormat(element.protobuf); 
+            } 
         } 
         if (element?.tarFile !== undefined) { 
-            def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            if (Array.isArray(element.tarFile)) { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile[0]); 
+            } else { 
+               def.tarFile = CamelDefinitionYamlStep.readTarFileDataFormat(element.tarFile); 
+            } 
         } 
         if (element?.tidyMarkup !== undefined) { 
-            def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            if (Array.isArray(element.tidyMarkup)) { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup[0]); 
+            } else { 
+               def.tidyMarkup = CamelDefinitionYamlStep.readTidyMarkupDataFormat(element.tidyMarkup); 
+            } 
         } 
         if (element?.csv !== undefined) { 
-            def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            if (Array.isArray(element.csv)) { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv[0]); 
+            } else { 
+               def.csv = CamelDefinitionYamlStep.readCsvDataFormat(element.csv); 
+            } 
         } 
         if (element?.base64 !== undefined) { 
-            def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            if (Array.isArray(element.base64)) { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64[0]); 
+            } else { 
+               def.base64 = CamelDefinitionYamlStep.readBase64DataFormat(element.base64); 
+            } 
         } 
         if (element?.zipDeflater !== undefined) { 
-            def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            if (Array.isArray(element.zipDeflater)) { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater[0]); 
+            } else { 
+               def.zipDeflater = CamelDefinitionYamlStep.readZipDeflaterDataFormat(element.zipDeflater); 
+            } 
         } 
         if (element?.bindy !== undefined) { 
-            def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            if (Array.isArray(element.bindy)) { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy[0]); 
+            } else { 
+               def.bindy = CamelDefinitionYamlStep.readBindyDataFormat(element.bindy); 
+            } 
         } 
         if (element?.syslog !== undefined) { 
-            def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            if (Array.isArray(element.syslog)) { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog[0]); 
+            } else { 
+               def.syslog = CamelDefinitionYamlStep.readSyslogDataFormat(element.syslog); 
+            } 
         } 
         if (element?.zipFile !== undefined) { 
-            def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            if (Array.isArray(element.zipFile)) { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile[0]); 
+            } else { 
+               def.zipFile = CamelDefinitionYamlStep.readZipFileDataFormat(element.zipFile); 
+            } 
         } 
         if (element?.jaxb !== undefined) { 
-            def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            if (Array.isArray(element.jaxb)) { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb[0]); 
+            } else { 
+               def.jaxb = CamelDefinitionYamlStep.readJaxbDataFormat(element.jaxb); 
+            } 
         } 
         if (element?.rss !== undefined) { 
-            def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            if (Array.isArray(element.rss)) { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss[0]); 
+            } else { 
+               def.rss = CamelDefinitionYamlStep.readRssDataFormat(element.rss); 
+            } 
         } 
         if (element?.mimeMultipart !== undefined) { 
-            def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            if (Array.isArray(element.mimeMultipart)) { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart[0]); 
+            } else { 
+               def.mimeMultipart = CamelDefinitionYamlStep.readMimeMultipartDataFormat(element.mimeMultipart); 
+            } 
         } 
         if (element?.asn1 !== undefined) { 
-            def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            if (Array.isArray(element.asn1)) { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1[0]); 
+            } else { 
+               def.asn1 = CamelDefinitionYamlStep.readASN1DataFormat(element.asn1); 
+            } 
         } 
         if (element?.pgp !== undefined) { 
-            def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            if (Array.isArray(element.pgp)) { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp[0]); 
+            } else { 
+               def.pgp = CamelDefinitionYamlStep.readPGPDataFormat(element.pgp); 
+            } 
         } 
         if (element?.thrift !== undefined) { 
-            def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            if (Array.isArray(element.thrift)) { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift[0]); 
+            } else { 
+               def.thrift = CamelDefinitionYamlStep.readThriftDataFormat(element.thrift); 
+            } 
         } 
         if (element?.json !== undefined) { 
-            def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            if (Array.isArray(element.json)) { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json[0]); 
+            } else { 
+               def.json = CamelDefinitionYamlStep.readJsonDataFormat(element.json); 
+            } 
         } 
         if (element?.lzf !== undefined) { 
-            def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            if (Array.isArray(element.lzf)) { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf[0]); 
+            } else { 
+               def.lzf = CamelDefinitionYamlStep.readLZFDataFormat(element.lzf); 
+            } 
         } 
         if (element?.fhirXml !== undefined) { 
-            def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            if (Array.isArray(element.fhirXml)) { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml[0]); 
+            } else { 
+               def.fhirXml = CamelDefinitionYamlStep.readFhirXmlDataFormat(element.fhirXml); 
+            } 
         } 
         if (element?.barcode !== undefined) { 
-            def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            if (Array.isArray(element.barcode)) { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode[0]); 
+            } else { 
+               def.barcode = CamelDefinitionYamlStep.readBarcodeDataFormat(element.barcode); 
+            } 
         } 
         if (element?.avro !== undefined) { 
-            def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            if (Array.isArray(element.avro)) { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro[0]); 
+            } else { 
+               def.avro = CamelDefinitionYamlStep.readAvroDataFormat(element.avro); 
+            } 
         } 
         if (element?.yaml !== undefined) { 
-            def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            if (Array.isArray(element.yaml)) { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml[0]); 
+            } else { 
+               def.yaml = CamelDefinitionYamlStep.readYAMLDataFormat(element.yaml); 
+            } 
         } 
         if (element?.fhirJson !== undefined) { 
-            def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            if (Array.isArray(element.fhirJson)) { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson[0]); 
+            } else { 
+               def.fhirJson = CamelDefinitionYamlStep.readFhirJsonDataFormat(element.fhirJson); 
+            } 
         } 
         if (element?.any23 !== undefined) { 
-            def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            if (Array.isArray(element.any23)) { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23[0]); 
+            } else { 
+               def.any23 = CamelDefinitionYamlStep.readAny23DataFormat(element.any23); 
+            } 
         } 
         if (element?.custom !== undefined) { 
-            def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            if (Array.isArray(element.custom)) { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom[0]); 
+            } else { 
+               def.custom = CamelDefinitionYamlStep.readCustomDataFormat(element.custom); 
+            } 
         } 
         if (element?.flatpack !== undefined) { 
-            def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            if (Array.isArray(element.flatpack)) { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack[0]); 
+            } else { 
+               def.flatpack = CamelDefinitionYamlStep.readFlatpackDataFormat(element.flatpack); 
+            } 
         } 
         if (element?.cbor !== undefined) { 
-            def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            if (Array.isArray(element.cbor)) { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor[0]); 
+            } else { 
+               def.cbor = CamelDefinitionYamlStep.readCBORDataFormat(element.cbor); 
+            } 
         } 
         if (element?.crypto !== undefined) { 
-            def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            if (Array.isArray(element.crypto)) { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto[0]); 
+            } else { 
+               def.crypto = CamelDefinitionYamlStep.readCryptoDataFormat(element.crypto); 
+            } 
         } 
         if (element?.univocityTsv !== undefined) { 
-            def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            if (Array.isArray(element.univocityTsv)) { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv[0]); 
+            } else { 
+               def.univocityTsv = CamelDefinitionYamlStep.readUniVocityTsvDataFormat(element.univocityTsv); 
+            } 
         } 
         if (element?.hl7 !== undefined) { 
-            def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            if (Array.isArray(element.hl7)) { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7[0]); 
+            } else { 
+               def.hl7 = CamelDefinitionYamlStep.readHL7DataFormat(element.hl7); 
+            } 
         } 
         if (element?.jsonApi !== undefined) { 
-            def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            if (Array.isArray(element.jsonApi)) { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi[0]); 
+            } else { 
+               def.jsonApi = CamelDefinitionYamlStep.readJsonApiDataFormat(element.jsonApi); 
+            } 
         } 
         if (element?.xmlSecurity !== undefined) { 
-            def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            if (Array.isArray(element.xmlSecurity)) { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity[0]); 
+            } else { 
+               def.xmlSecurity = CamelDefinitionYamlStep.readXMLSecurityDataFormat(element.xmlSecurity); 
+            } 
         } 
         if (element?.ical !== undefined) { 
-            def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            if (Array.isArray(element.ical)) { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical[0]); 
+            } else { 
+               def.ical = CamelDefinitionYamlStep.readIcalDataFormat(element.ical); 
+            } 
         } 
         if (element?.univocityFixed !== undefined) { 
-            def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            if (Array.isArray(element.univocityFixed)) { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed[0]); 
+            } else { 
+               def.univocityFixed = CamelDefinitionYamlStep.readUniVocityFixedDataFormat(element.univocityFixed); 
+            } 
         } 
         if (element?.jacksonXml !== undefined) { 
-            def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            if (Array.isArray(element.jacksonXml)) { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml[0]); 
+            } else { 
+               def.jacksonXml = CamelDefinitionYamlStep.readJacksonXMLDataFormat(element.jacksonXml); 
+            } 
         } 
         if (element?.grok !== undefined) { 
-            def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            if (Array.isArray(element.grok)) { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok[0]); 
+            } else { 
+               def.grok = CamelDefinitionYamlStep.readGrokDataFormat(element.grok); 
+            } 
         } 
         if (element?.xstream !== undefined) { 
-            def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            if (Array.isArray(element.xstream)) { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream[0]); 
+            } else { 
+               def.xstream = CamelDefinitionYamlStep.readXStreamDataFormat(element.xstream); 
+            } 
         } 
         if (element?.gzipDeflater !== undefined) { 
-            def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            if (Array.isArray(element.gzipDeflater)) { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater[0]); 
+            } else { 
+               def.gzipDeflater = CamelDefinitionYamlStep.readGzipDeflaterDataFormat(element.gzipDeflater); 
+            } 
         } 
         if (element?.soap !== undefined) { 
-            def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            if (Array.isArray(element.soap)) { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap[0]); 
+            } else { 
+               def.soap = CamelDefinitionYamlStep.readSoapDataFormat(element.soap); 
+            } 
         } 
 
         return def;
@@ -3260,13 +4676,25 @@
         
         const def = element ? new TransformersDefinition({...element}) : new TransformersDefinition();
         if (element?.endpointTransformer !== undefined) { 
-            def.endpointTransformer = CamelDefinitionYamlStep.readEndpointTransformerDefinition(element.endpointTransformer); 
+            if (Array.isArray(element.endpointTransformer)) { 
+               def.endpointTransformer = CamelDefinitionYamlStep.readEndpointTransformerDefinition(element.endpointTransformer[0]); 
+            } else { 
+               def.endpointTransformer = CamelDefinitionYamlStep.readEndpointTransformerDefinition(element.endpointTransformer); 
+            } 
         } 
         if (element?.customTransformer !== undefined) { 
-            def.customTransformer = CamelDefinitionYamlStep.readCustomTransformerDefinition(element.customTransformer); 
+            if (Array.isArray(element.customTransformer)) { 
+               def.customTransformer = CamelDefinitionYamlStep.readCustomTransformerDefinition(element.customTransformer[0]); 
+            } else { 
+               def.customTransformer = CamelDefinitionYamlStep.readCustomTransformerDefinition(element.customTransformer); 
+            } 
         } 
         if (element?.dataFormatTransformer !== undefined) { 
-            def.dataFormatTransformer = CamelDefinitionYamlStep.readDataFormatTransformerDefinition(element.dataFormatTransformer); 
+            if (Array.isArray(element.dataFormatTransformer)) { 
+               def.dataFormatTransformer = CamelDefinitionYamlStep.readDataFormatTransformerDefinition(element.dataFormatTransformer[0]); 
+            } else { 
+               def.dataFormatTransformer = CamelDefinitionYamlStep.readDataFormatTransformerDefinition(element.dataFormatTransformer); 
+            } 
         } 
 
         return def;
@@ -3308,13 +4736,25 @@
         
         const def = element ? new ValidatorsDefinition({...element}) : new ValidatorsDefinition();
         if (element?.predicateValidator !== undefined) { 
-            def.predicateValidator = CamelDefinitionYamlStep.readPredicateValidatorDefinition(element.predicateValidator); 
+            if (Array.isArray(element.predicateValidator)) { 
+               def.predicateValidator = CamelDefinitionYamlStep.readPredicateValidatorDefinition(element.predicateValidator[0]); 
+            } else { 
+               def.predicateValidator = CamelDefinitionYamlStep.readPredicateValidatorDefinition(element.predicateValidator); 
+            } 
         } 
         if (element?.endpointValidator !== undefined) { 
-            def.endpointValidator = CamelDefinitionYamlStep.readEndpointValidatorDefinition(element.endpointValidator); 
+            if (Array.isArray(element.endpointValidator)) { 
+               def.endpointValidator = CamelDefinitionYamlStep.readEndpointValidatorDefinition(element.endpointValidator[0]); 
+            } else { 
+               def.endpointValidator = CamelDefinitionYamlStep.readEndpointValidatorDefinition(element.endpointValidator); 
+            } 
         } 
         if (element?.customValidator !== undefined) { 
-            def.customValidator = CamelDefinitionYamlStep.readCustomValidatorDefinition(element.customValidator); 
+            if (Array.isArray(element.customValidator)) { 
+               def.customValidator = CamelDefinitionYamlStep.readCustomValidatorDefinition(element.customValidator[0]); 
+            } else { 
+               def.customValidator = CamelDefinitionYamlStep.readCustomValidatorDefinition(element.customValidator); 
+            } 
         } 
 
         return def;
diff --git a/karavan-core/src/core/api/CamelDisplayUtil.ts b/karavan-core/src/core/api/CamelDisplayUtil.ts
index d4d31d8..f112b10 100644
--- a/karavan-core/src/core/api/CamelDisplayUtil.ts
+++ b/karavan-core/src/core/api/CamelDisplayUtil.ts
@@ -32,8 +32,10 @@
     static getParentStepDefinitions = (integration: Integration, uuid: string): string[] => {
         const result: string[] = [];
         let meta = CamelDefinitionApiExt.findElementMetaInIntegration(integration, uuid);
+        let i = 0;
         if (meta) {
-            while (meta.step?.dslName !== 'FromDefinition') {
+            while (meta.step?.dslName !== 'FromDefinition' && i < 100) {
+                i++;
                 if (meta.step?.dslName === 'StepDefinition') result.push(meta.step.uuid);
                 if (meta.parentUuid) meta = CamelDefinitionApiExt.findElementMetaInIntegration(integration, meta.parentUuid)
                 else break;
diff --git a/karavan-core/src/core/model/IntegrationDefinition.ts b/karavan-core/src/core/model/IntegrationDefinition.ts
index 87ed6c4..055cc55 100644
--- a/karavan-core/src/core/model/IntegrationDefinition.ts
+++ b/karavan-core/src/core/model/IntegrationDefinition.ts
@@ -35,11 +35,11 @@
 }
 
 export class Integration {
-    apiVersion: string = 'camel.apache.org/v1';
-    kind: string = 'Integration';
+    apiVersion: string = 'camel.apache.org/v1'; // camel.apache.org/v1alpha1
+    kind: string = 'Integration';  // Kamelet
     metadata: Metadata = new Metadata();
     spec: Spec = new Spec();
-    crd: boolean = true;
+    type: 'crd' | 'plain' | 'kamelet' = 'crd';
 
     public constructor(init?: Partial<Integration>) {
         Object.assign(this, init);
diff --git a/karavan-core/test/beans.spec.ts b/karavan-core/test/beans.spec.ts
index 8072cb2..7439976 100644
--- a/karavan-core/test/beans.spec.ts
+++ b/karavan-core/test/beans.spec.ts
@@ -28,7 +28,7 @@
         expect(i.metadata.name).to.equal('beans.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(3);
-        expect(i.crd).to.equal(false);
+        expect(i.type).to.equal('plain');
         if (i.spec.flows) {
             expect(i.spec.flows[2].beans[0].name).to.equal('myNested');
             expect(i.spec.flows[2].beans[0].type).to.equal('${MyBean.class.name}');
@@ -43,7 +43,7 @@
         expect(i.metadata.name).to.equal('Beans');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(3);
-        expect(i.crd).to.equal(true);
+        expect(i.type).to.equal("crd");
         if (i.spec.flows) {
             expect(i.spec.flows[2].beans[0].name).to.equal('myNested');
             expect(i.spec.flows[2].beans[0].type).to.equal('${MyBean.class.name}');
diff --git a/karavan-core/test/findStep.spec.ts b/karavan-core/test/findStep.spec.ts
index a09b017..7358be0 100644
--- a/karavan-core/test/findStep.spec.ts
+++ b/karavan-core/test/findStep.spec.ts
@@ -106,14 +106,14 @@
 
         // i.spec.flows?.[0].from.steps?.forEach((s:any) => console.log(s.uuid, CamelDefinitionApiExt.findElementInIntegration(i, s.uuid)?.dslName));
 
-        console.log('----')
-        CamelDefinitionApiExt.findElementPathUuids(i, log.uuid).forEach(u => console.log(u, CamelDefinitionApiExt.findElementInIntegration(i, u)?.dslName))
+        // console.log('----')
+        // CamelDefinitionApiExt.findElementPathUuids(i, log.uuid).forEach(u => console.log(u, CamelDefinitionApiExt.findElementInIntegration(i, u)?.dslName))
 
-        console.log('----')
-        CamelDefinitionApiExt.findElementPathUuids(i, step.uuid).forEach(u => console.log(u, CamelDefinitionApiExt.findElementInIntegration(i, u)?.dslName))
+        // console.log('----')
+        // CamelDefinitionApiExt.findElementPathUuids(i, step.uuid).forEach(u => console.log(u, CamelDefinitionApiExt.findElementInIntegration(i, u)?.dslName))
 
-        console.log('----')
-        CamelDefinitionApiExt.findElementPathUuids(i, choice.uuid).forEach(u => console.log(u, CamelDefinitionApiExt.findElementInIntegration(i, u)?.dslName))
+        // console.log('----')
+        // CamelDefinitionApiExt.findElementPathUuids(i, choice.uuid).forEach(u => console.log(u, CamelDefinitionApiExt.findElementInIntegration(i, u)?.dslName))
 
     });
 });
\ No newline at end of file
diff --git a/karavan-core/test/integration.spec.ts b/karavan-core/test/integration.spec.ts
index 934f31d..dc455b2 100644
--- a/karavan-core/test/integration.spec.ts
+++ b/karavan-core/test/integration.spec.ts
@@ -32,7 +32,7 @@
         expect(i.metadata.name).to.equal('test1.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(1);
-        expect(i.crd).to.equal(true);
+        expect(i.type).to.equal('crd');
         if (i.spec.flows){
             const f:FilterDefinition = (i.spec.flows[0] as RouteDefinition).from.steps[1];
             const t:ToDefinition = <ToDefinition> (f.steps ? f.steps[0] : undefined);
@@ -47,7 +47,7 @@
         expect(i.metadata.name).to.equal('test1.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(1);
-        expect(i.crd).to.equal(true);
+        expect(i.type).to.equal('crd');
 
         if (i.spec.flows){
             const f:FilterDefinition = (i.spec.flows[0] as RouteDefinition).from.steps[1];
diff --git a/karavan-core/test/multiple.spec.ts b/karavan-core/test/multiple.spec.ts
index 2d4a77d..abc0afb 100644
--- a/karavan-core/test/multiple.spec.ts
+++ b/karavan-core/test/multiple.spec.ts
@@ -28,7 +28,7 @@
         expect(i.metadata.name).to.equal('test1.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(2);
-        expect(i.crd).to.equal(false);
+        expect(i.type).to.equal('plain');
         if (i.spec.flows) {
             expect(i.spec.flows[0].from.uri).to.equal('netty-http:http://localhost:8080/demo');
             expect(i.spec.flows[1].from.uri).to.equal('kamelet:aws-kinesis-source');
diff --git a/karavan-core/test/plain-try-catch.yaml b/karavan-core/test/plain-try-catch.yaml
new file mode 100644
index 0000000..a487f70
--- /dev/null
+++ b/karavan-core/test/plain-try-catch.yaml
@@ -0,0 +1,20 @@
+- route:
+    from:
+      uri: timer:demo
+      steps:
+        - doTry:
+            steps:
+              - setBody:
+                  expression:
+                    groovy:
+                      expression: 1000 / 0
+            doCatch:
+              - steps:
+                  - log:
+                      message: Exception
+                exception:
+                  - java.lang.ArithmeticException
+            doFinally:
+              steps:
+                - log:
+                    message: ${body}
diff --git a/karavan-core/test/plain.spec.ts b/karavan-core/test/plain.spec.ts
index a1753e1..88ea56b 100644
--- a/karavan-core/test/plain.spec.ts
+++ b/karavan-core/test/plain.spec.ts
@@ -19,6 +19,7 @@
 import 'mocha';
 import {CamelDefinitionYaml} from "../src/core/api/CamelDefinitionYaml";
 import {Integration} from "../src/core/model/IntegrationDefinition";
+import {FinallyDefinition} from "../lib/model/CamelDefinition";
 
 
 describe('Plain YAML to integration', () => {
@@ -29,7 +30,7 @@
         expect(i.metadata.name).to.equal('test1.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(1);
-        expect(i.crd).to.equal(false);
+        expect(i.type).to.equal('plain');
         if (i.spec.flows) {
             expect(i.spec.flows[0].from.uri).to.equal('timer:info');
             expect(i.spec.flows[0].from.steps[0].when.length).to.equal(2);
@@ -42,11 +43,23 @@
         expect(i.metadata.name).to.equal('test1.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(1);
-        expect(i.crd).to.equal(false);
+        expect(i.type).to.equal('plain');
         if (i.spec.flows) {
             expect(i.spec.flows[0].from.uri).to.equal('timer:info');
             expect(i.spec.flows[0].from.steps[0].expression.constant.expression).to.equal("Hello Yaml !!!");
         }
     });
 
+    it('YAML <-> Integration', () => {
+        const yaml = fs.readFileSync('test/plain-try-catch.yaml',{encoding:'utf8', flag:'r'});
+        const i = CamelDefinitionYaml.yamlToIntegration("try-catch.yaml", yaml);
+        expect(i.metadata.name).to.equal('try-catch.yaml');
+        expect(i.kind).to.equal('Integration');
+        expect(i.spec.flows?.length).to.equal(1);
+        expect(i.type).to.equal('plain');
+        const f: FinallyDefinition = i.spec.flows?.[0].from?.steps[0].doFinally;
+        const yaml2 = CamelDefinitionYaml.integrationToYaml(i);
+        expect(yaml).to.equal(yaml2);
+    });
+
 });
diff --git a/karavan-core/test/restDsl.spec.ts b/karavan-core/test/restDsl.spec.ts
index 200e763..78471a7 100644
--- a/karavan-core/test/restDsl.spec.ts
+++ b/karavan-core/test/restDsl.spec.ts
@@ -32,7 +32,7 @@
         expect(i.metadata.name).to.equal('RestDsl');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(3);
-        expect(i.crd).to.equal(true);
+        expect(i.type).to.equal('crd');
 
         i.spec.flows?.filter(f => f.dslName === 'RestDefinition').forEach(f => {
             const rest = f as RestDefinition;
diff --git a/karavan-core/test/routes.spec.ts b/karavan-core/test/routes.spec.ts
index e8cb184..4753a33 100644
--- a/karavan-core/test/routes.spec.ts
+++ b/karavan-core/test/routes.spec.ts
@@ -28,7 +28,7 @@
         expect(i.metadata.name).to.equal('test1.yaml');
         expect(i.kind).to.equal('Integration');
         expect(i.spec.flows?.length).to.equal(1);
-        expect(i.crd).to.equal(false);
+        expect(i.type).to.equal('plain');
         if (i.spec.flows) expect(i.spec.flows[0].from.uri).to.equal('timer:info');
         const y = CamelDefinitionYaml.integrationToYaml(i);
         expect(y).to.equal(yaml);
diff --git a/karavan-designer/src/App.tsx b/karavan-designer/src/App.tsx
index f38c00d..8eed496 100644
--- a/karavan-designer/src/App.tsx
+++ b/karavan-designer/src/App.tsx
@@ -51,29 +51,39 @@
             '  flows:\n' +
             '    - route:\n' +
             '        from:\n' +
-            '          uri: kamelet:timer-source\n' +
+            '          uri: timer:demo\n' +
             '          steps:\n' +
-            '            - step:\n' +
+            '            - doTry:\n' +
             '                steps:\n' +
-            '                  - choice: {}\n' +
-            '                  - log: {}\n' +
-            '            - log:\n' +
-            '                message: ${body}\n' +
-            '            - aggregate: {}\n' +
-            '            - choice: {}\n' +
-            '            - split:\n' +
-            '                expression: {}\n' +
-            '            - saga: {}\n' +
-            '            - to:\n' +
-            '                uri: direct:hello-world\n' +
-            '            - to:\n' +
-            '                uri: salesforce:getSObject\n' +
-            '                parameters:\n' +
-            '                  sObjectId: xxx\n' +
-            '                  sObjectClass: Account\n' +
-            '          parameters:\n' +
-            '            period: 2000\n' +
-            '            message: Hello World\n' +
+            '                  - setBody:\n' +
+            '                      expression:\n' +
+            '                        groovy:\n' +
+            '                          expression: 1000 / 0\n' +
+            '                doCatch:\n' +
+            '                  - steps:\n' +
+            '                      - log:\n' +
+            '                          message: Exception\n' +
+            '                    exception:\n' +
+            '                      - java.lang.ArithmeticException\n' +
+            '                doFinally:\n' +
+            '                  steps:\n' +
+            '                    - log:\n' +
+            '                        message: ${body}\n' +
+            // '            - aggregate: {}\n' +
+            // '            - choice: {}\n' +
+            // '            - split:\n' +
+            // '                expression: {}\n' +
+            // '            - saga: {}\n' +
+            // '            - to:\n' +
+            // '                uri: direct:hello-world\n' +
+            // '            - to:\n' +
+            // '                uri: salesforce:getSObject\n' +
+            // '                parameters:\n' +
+            // '                  sObjectId: xxx\n' +
+            // '                  sObjectClass: Account\n' +
+            // '          parameters:\n' +
+            // '            period: 2000\n' +
+            // '            message: Hello World\n' +
             '    - route:\n' +
             '        from:\n' +
             '          uri: direct:hello-world\n' +
diff --git a/karavan-designer/src/designer/route/property/ExpressionField.tsx b/karavan-designer/src/designer/route/property/ExpressionField.tsx
index 2756fcc..adf58f9 100644
--- a/karavan-designer/src/designer/route/property/ExpressionField.tsx
+++ b/karavan-designer/src/designer/route/property/ExpressionField.tsx
@@ -92,7 +92,6 @@
 
     getProps = (): PropertyMeta[] => {
         const dslName = this.getValueClassName();
-        console.log(CamelDefinitionApiExt.getElementProperties(dslName))
         return CamelDefinitionApiExt.getElementProperties(dslName)
             .filter(p => p.name !== 'id')
             .filter(p => !p.isObject || (p.isObject && !CamelUi.dslHasSteps(p.type)) || (dslName === 'CatchDefinition' && p.name === 'onWhen'));
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 b803b14..98dc28b 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
@@ -131,7 +131,11 @@
                             ) {
                     String code = String.format(
                                     "        if (element?.%1$s !== undefined) { \n" +
-                                    "            def.%1$s = CamelDefinitionYamlStep.read%2$s(element.%1$s); \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);
diff --git a/karavan-vscode/src/designerView.ts b/karavan-vscode/src/designerView.ts
index 3744295..942d4a0 100644
--- a/karavan-vscode/src/designerView.ts
+++ b/karavan-vscode/src/designerView.ts
@@ -72,10 +72,10 @@
         }
     }
 
-    createIntegration(crd: boolean, rootPath?: string) {
+    createIntegration(type: 'crd' | 'plain' | 'kamelet', rootPath?: string) {
         window
             .showInputBox({
-                title: crd ? "Create Camel Integration CRD" : "Create Camel Integration YAML",
+                title: type === 'crd' ? "Create Camel Integration CRD" : "Create Camel Integration YAML",
                 ignoreFocusOut: true,
                 prompt: "Integration name",
                 validateInput: (text: string): string | undefined => {
@@ -89,7 +89,7 @@
                 if (value) {
                     const name = utils.nameFromTitle(value);
                     const i = Integration.createNew(name);
-                    i.crd = crd;
+                    i.type = type;
                     const yaml = CamelDefinitionYaml.integrationToYaml(i);
                     const filename = name.toLocaleLowerCase().endsWith('.yaml') ? name : name + '.yaml';
                     const relativePath = (this.rootPath ? rootPath?.replace(this.rootPath, "") : rootPath) + path.sep + filename;
diff --git a/karavan-vscode/src/extension.ts b/karavan-vscode/src/extension.ts
index f4e1173..a61977c 100644
--- a/karavan-vscode/src/extension.ts
+++ b/karavan-vscode/src/extension.ts
@@ -89,13 +89,13 @@
 
     // Create new Integration CRD command
     const createCrd = commands.registerCommand("karavan.create-crd", (...args: any[]) => {
-        if (args.length > 0) designer.createIntegration(true, args[0].fsPath)
-        else designer.createIntegration(true, rootPath)
+        if (args.length > 0) designer.createIntegration("crd", args[0].fsPath)
+        else designer.createIntegration("crd", rootPath)
     });
     context.subscriptions.push(createCrd);
 
     // Create new Integration YAML command
-    const createYaml = commands.registerCommand("karavan.create-yaml", (...args: any[]) => designer.createIntegration(false, args[0]?.fsPath));
+    const createYaml = commands.registerCommand("karavan.create-yaml", (...args: any[]) => designer.createIntegration("plain", args[0]?.fsPath));
     context.subscriptions.push(createYaml);
 
     // Open integration in designer command
diff --git a/karavan-vscode/src/integrationView.ts b/karavan-vscode/src/integrationView.ts
index 356d47d..66b414c 100644
--- a/karavan-vscode/src/integrationView.ts
+++ b/karavan-vscode/src/integrationView.ts
@@ -55,7 +55,7 @@
 			if (!filename.startsWith(dir + path.sep + "target") && CamelDefinitionYaml.yamlIsIntegration(yaml)){
 				const basename = path.basename(filename);
 				const i = CamelDefinitionYaml.yamlToIntegration(basename, yaml);
-				result.push(new IntegrationItem(i.metadata.name, filename, i.crd ? "CRD" : "", i, { command: 'karavan.open', title: '', arguments: [{ fsPath: filename }] }));
+				result.push(new IntegrationItem(i.metadata.name, filename, i.type === 'crd' ? "CRD" : "", i, { command: 'karavan.open', title: '', arguments: [{ fsPath: filename }] }));
 			}
 			
 		}
@@ -81,8 +81,8 @@
 	}
 
 	iconPath = this.integration ? {
-		light: path.join(__filename, '..', '..', 'icons', 'light', this.integration?.crd ? 'crd.svg' : 'karavan.svg'),
-		dark: path.join(__filename, '..', '..', 'icons', 'dark', this.integration?.crd ? 'crd.svg' : 'karavan.svg')
+		light: path.join(__filename, '..', '..', 'icons', 'light', this.integration?.type === 'crd' ? 'crd.svg' : 'karavan.svg'),
+		dark: path.join(__filename, '..', '..', 'icons', 'dark', this.integration?.type === 'crd' ? 'crd.svg' : 'karavan.svg')
 	} : ThemeIcon.File;
 
 	contextValue = this.integration ? 'integration' : "route";
diff --git a/karavan-vscode/src/jbang.ts b/karavan-vscode/src/jbang.ts
index 4bc513e..6f72e89 100644
--- a/karavan-vscode/src/jbang.ts
+++ b/karavan-vscode/src/jbang.ts
@@ -55,7 +55,7 @@
         return CamelDefinitionYaml.integrationToYaml(i);
     } else if (crd === true) {
         const i = CamelDefinitionYaml.yamlToIntegration(filename, restYaml);
-        i.crd = true;
+        i.type = 'crd';
         return CamelDefinitionYaml.integrationToYaml(i);
     } else {
         return restYaml;
