This is an automated email from the ASF dual-hosted git repository.
marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git
The following commit(s) were added to refs/heads/main by this push:
new 9a9f84e4 Fix #1465
9a9f84e4 is described below
commit 9a9f84e4ea99e7f8ced25d6111d7283c1d8cca66
Author: Marat Gubaidullin <[email protected]>
AuthorDate: Thu Dec 5 15:08:09 2024 -0500
Fix #1465
---
karavan-core/src/core/api/CamelDefinitionYaml.ts | 5 ++
.../src/core/api/CamelDefinitionYamlStep.ts | 5 +-
karavan-core/src/core/model/CamelMetadata.ts | 2 +-
karavan-core/test/yamDataFormat.camel.yaml | 14 +++++
karavan-core/test/yamDataFormat.spec.ts | 60 ++++++++++++++++++++++
karavan-core/test/yamDataFormat1.camel.yaml | 12 +++++
karavan-core/test/yamDataFormat2.camel.yaml | 13 +++++
.../CamelDefinitionYamlStepGenerator.java | 10 +++-
.../karavan/generator/CamelMetadataGenerator.java | 3 +-
9 files changed, 119 insertions(+), 5 deletions(-)
diff --git a/karavan-core/src/core/api/CamelDefinitionYaml.ts
b/karavan-core/src/core/api/CamelDefinitionYaml.ts
index 93ca86f3..1023edda 100644
--- a/karavan-core/src/core/api/CamelDefinitionYaml.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYaml.ts
@@ -240,6 +240,11 @@ export class CamelDefinitionYaml {
return xValue;
}
} else {
+ if (value.dslName === 'YAMLDataFormat') { // YAMLDataFormat
constructor field
+ value.constructor = value._constructor;
+ delete value._constructor;
+ return value;
+ }
delete value?.dslName;
return value;
}
diff --git a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
index b0351ddd..89a066d3 100644
--- a/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
+++ b/karavan-core/src/core/api/CamelDefinitionYamlStep.ts
@@ -3519,7 +3519,10 @@ export class CamelDefinitionYamlStep {
let def = element ? new YAMLDataFormat({...element}) : new
YAMLDataFormat();
def.typeFilter = element && element?.typeFilter ?
element?.typeFilter.map((x:any) =>
CamelDefinitionYamlStep.readYAMLTypeFilterDefinition(x)) :[];
-
+ if (element.constructor !== undefined) {
+ def._constructor = element.constructor;
+ delete (def as any).constructor;
+ }
return def;
}
diff --git a/karavan-core/src/core/model/CamelMetadata.ts
b/karavan-core/src/core/model/CamelMetadata.ts
index 1f639628..e9b1b864 100644
--- a/karavan-core/src/core/model/CamelMetadata.ts
+++ b/karavan-core/src/core/model/CamelMetadata.ts
@@ -697,7 +697,7 @@ export const CamelDataFormatMetadata: ElementMeta[] = [
new PropertyMeta('id', 'Id', "The id of this node", 'string', '', '',
false, false, false, false, '', ''),
new PropertyMeta('library', 'Library', "Which yaml library to use. By
default it is SnakeYAML", 'string', 'SnakeYAML', 'SnakeYAML', false, false,
false, false, '', ''),
new PropertyMeta('unmarshalType', 'Unmarshal Type', "Class name of the
java type to use when unmarshalling", 'string', '', '', false, false, false,
false, '', ''),
- new PropertyMeta('constructor', 'Constructor', "BaseConstructor to
construct incoming documents.", 'string', '', '', false, false, false, false,
'advanced', ''),
+ new PropertyMeta('_constructor', 'Constructor', "BaseConstructor to
construct incoming documents.", 'string', '', '', false, false, false, false,
'advanced', ''),
new PropertyMeta('representer', 'Representer', "Representer to emit
outgoing objects.", 'string', '', '', false, false, false, false, 'advanced',
''),
new PropertyMeta('dumperOptions', 'Dumper Options', "DumperOptions to
configure outgoing objects.", 'string', '', '', false, false, false, false,
'advanced', ''),
new PropertyMeta('resolver', 'Resolver', "Resolver to detect implicit
type", 'string', '', '', false, false, false, false, 'advanced', ''),
diff --git a/karavan-core/test/yamDataFormat.camel.yaml
b/karavan-core/test/yamDataFormat.camel.yaml
new file mode 100644
index 00000000..641909ae
--- /dev/null
+++ b/karavan-core/test/yamDataFormat.camel.yaml
@@ -0,0 +1,14 @@
+- route:
+ id: route-7447
+ from:
+ id: from-875e
+ uri: direct1
+ steps:
+ - marshal:
+ id: marshal-7abc
+ yaml:
+ dslName: YAMLDataFormat
+ id: yaml-b347
+ library: hello
+ constructor: any-constructor
+
diff --git a/karavan-core/test/yamDataFormat.spec.ts
b/karavan-core/test/yamDataFormat.spec.ts
new file mode 100644
index 00000000..5a3bbb39
--- /dev/null
+++ b/karavan-core/test/yamDataFormat.spec.ts
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {expect} from 'chai';
+import 'mocha';
+import {
+ FromDefinition,
+ LogDefinition,
+ WhenDefinition,
+ ChoiceDefinition,
+ MulticastDefinition,
+ ExpressionDefinition,
+ RouteDefinition, TryDefinition,CatchDefinition
+} from "../src/core/model/CamelDefinition";
+import {CamelDefinitionApiExt} from "../src/core/api/CamelDefinitionApiExt";
+import {CamelDefinitionYaml} from "../src/core/api/CamelDefinitionYaml";
+import {SimpleExpression} from "../src/core/model/CamelDefinition";
+import {Integration} from "../src/core/model/IntegrationDefinition";
+import * as fs from 'fs';
+import { MarshalDefinition, YAMLDataFormat } from
'../lib/model/CamelDefinition';
+
+describe('YAML Data Format', () => {
+
+ it('Write', () => {
+ const text1 =
fs.readFileSync('test/yamDataFormat1.camel.yaml',{encoding:'utf8', flag:'r'});
+ const text2 =
fs.readFileSync('test/yamDataFormat2.camel.yaml',{encoding:'utf8', flag:'r'});
+ const i =
CamelDefinitionYaml.yamlToIntegration("yamDataFormat1.camel.yaml", text1);
+
+ if (i.spec.flows?.[0].from?.steps?.[0].yaml) {
+ const yaml = i.spec.flows[0].from.steps[0].yaml;
+ if (typeof yaml === 'object' && yaml !== null) {
+ yaml._constructor = 'test';
+ }
+ }
+
+ const text3 = CamelDefinitionYaml.integrationToYaml(i);
+ expect(text3).to.equal(text2);
+ });
+
+ it('Read', () => {
+ const text =
fs.readFileSync('test/yamDataFormat2.camel.yaml',{encoding:'utf8', flag:'r'});
+ const i =
CamelDefinitionYaml.yamlToIntegration("yamDataFormat2.camel.yaml", text);
+
+
expect(i.spec.flows?.[0].from?.steps?.[0].yaml._constructor).to.equal('test');
+ });
+
+});
diff --git a/karavan-core/test/yamDataFormat1.camel.yaml
b/karavan-core/test/yamDataFormat1.camel.yaml
new file mode 100644
index 00000000..dfd3ca68
--- /dev/null
+++ b/karavan-core/test/yamDataFormat1.camel.yaml
@@ -0,0 +1,12 @@
+- route:
+ id: route-7447
+ from:
+ id: from-875e
+ uri: direct1
+ steps:
+ - marshal:
+ id: marshal-7abc
+ yaml:
+ dslName: YAMLDataFormat
+ id: yaml-b347
+ library: hello
diff --git a/karavan-core/test/yamDataFormat2.camel.yaml
b/karavan-core/test/yamDataFormat2.camel.yaml
new file mode 100644
index 00000000..4b8e8d09
--- /dev/null
+++ b/karavan-core/test/yamDataFormat2.camel.yaml
@@ -0,0 +1,13 @@
+- route:
+ id: route-7447
+ from:
+ id: from-875e
+ uri: direct1
+ steps:
+ - marshal:
+ id: marshal-7abc
+ yaml:
+ dslName: YAMLDataFormat
+ id: yaml-b347
+ library: hello
+ constructor: test
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 d3334a6a..1c618c89 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
@@ -152,10 +152,16 @@ public final class CamelDefinitionYamlStepGenerator
extends AbstractGenerator {
, aName, getAttributeClass(aValue));
attrs.put(aName, code);
}
- } else {
-
+ } else if ("YAMLDataFormat".equals(className) &&
"constructor".equals(aName)) {
+ String yamlConstructor =
+ " if (element.constructor !== undefined) {\n" +
+ " def._constructor =
element.constructor;\n" +
+ " delete (def as any).constructor;\n" +
+ " }";
+ attrs.put(aName, yamlConstructor);
}
});
+
return String.format(readFileText(modelTemplate), className, s1, s3,
attrs.values().stream().collect(Collectors.joining("")));
}
diff --git
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
index 018cf957..2a0c4beb 100644
---
a/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
+++
b/karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java
@@ -215,9 +215,10 @@ public final class CamelMetadataGenerator extends
AbstractGenerator {
pm.type = "string";
}
if (!getDeprecatedClasses().contains(pm.type)) {
+ var propertyName = "constructor".equals(pname) ?
"_constructor" : pname;
code.append(String.format(
" new PropertyMeta('%s', '%s',
\"%s\", '%s', '%s', '%s', %b, %b, %b, %b, '%s', '%s'),\n",
- pname, displayName, desc, pm.type, en,
defaultValue, required, secret, pm.isArray, (pm.isArray ? pm.type :
pm.isObject), labels, javaType));
+ propertyName, displayName, desc, pm.type,
en, defaultValue, required, secret, pm.isArray, (pm.isArray ? pm.type :
pm.isObject), labels, javaType));
}
}
});