karavan-core 4.8.0 → 99.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of karavan-core might be problematic. Click here for more details.
- package/index.js +3 -0
- package/package.json +8 -58
- package/.bebelrc +0 -3
- package/.mocharc.json +0 -11
- package/.prettierignore +0 -9
- package/.prettierrc +0 -14
- package/src/core/api/CamelDefinitionApi.ts +0 -3271
- package/src/core/api/CamelDefinitionApiExt.ts +0 -757
- package/src/core/api/CamelDefinitionYaml.ts +0 -412
- package/src/core/api/CamelDefinitionYamlStep.ts +0 -4733
- package/src/core/api/CamelDisplayUtil.ts +0 -143
- package/src/core/api/CamelUtil.ts +0 -360
- package/src/core/api/ComponentApi.ts +0 -368
- package/src/core/api/KameletApi.ts +0 -147
- package/src/core/api/MainConfigurationApi.ts +0 -47
- package/src/core/api/ProjectModelApi.ts +0 -75
- package/src/core/api/SpiBeanApi.ts +0 -104
- package/src/core/api/TemplateApi.ts +0 -58
- package/src/core/api/TopologyUtils.ts +0 -392
- package/src/core/api/VariableUtil.ts +0 -104
- package/src/core/model/CamelDefinition.ts +0 -3783
- package/src/core/model/CamelMetadata.ts +0 -2714
- package/src/core/model/ComponentModels.ts +0 -106
- package/src/core/model/IntegrationDefinition.ts +0 -188
- package/src/core/model/KameletModels.ts +0 -223
- package/src/core/model/MainConfigurationModel.ts +0 -37
- package/src/core/model/ProjectModel.ts +0 -43
- package/src/core/model/SpiBeanModels.ts +0 -53
- package/src/core/model/TopologyDefinition.ts +0 -117
- package/test/addStep.spec.ts +0 -124
- package/test/addStep1.yaml +0 -27
- package/test/allowableValues.camel.yaml +0 -19
- package/test/allowableValues.spec.ts +0 -30
- package/test/avro-serialize-action.kamelet.yaml +0 -70
- package/test/beans.spec.ts +0 -92
- package/test/beans1.yaml +0 -36
- package/test/beans2.yaml +0 -42
- package/test/beans3.yaml +0 -7
- package/test/checkRequired.spec.ts +0 -53
- package/test/circuitBreaker.spec.ts +0 -57
- package/test/circuitBreaker.yaml +0 -19
- package/test/cloneDefinition.spec.ts +0 -106
- package/test/createKamelet.spec.ts +0 -38
- package/test/cxf.json +0 -615
- package/test/cxf.spec.ts +0 -44
- package/test/cxf.yaml +0 -15
- package/test/deleteStep.spec.ts +0 -74
- package/test/demo.spec.ts +0 -49
- package/test/demo.yaml +0 -32
- package/test/doCatchOnWhen.camel.yaml +0 -20
- package/test/doCatchOnWhen.spec.ts +0 -36
- package/test/errorHandler.spec.ts +0 -38
- package/test/errorHandler1.yaml +0 -27
- package/test/expression.spec.ts +0 -55
- package/test/findStep.spec.ts +0 -112
- package/test/findStep.yaml +0 -65
- package/test/getElementProperties.spec.ts +0 -32
- package/test/getElementPropertiesByName.spec.ts +0 -31
- package/test/getExpressionLanguage.spec.ts +0 -40
- package/test/hasElementWithId.camel.yaml +0 -98
- package/test/hasElementWithId.spec.ts +0 -57
- package/test/hasElementWithId1.camel.yaml +0 -16
- package/test/hasElementWithIdError.camel.yaml +0 -98
- package/test/integration.spec.ts +0 -60
- package/test/integration1.yaml +0 -24
- package/test/integration2.yaml +0 -23
- package/test/integrationToYaml.spec.ts +0 -51
- package/test/intercept.spec.ts +0 -62
- package/test/intercept.yaml +0 -19
- package/test/is-not-integration.yaml +0 -5114
- package/test/isIntegration.spec.ts +0 -45
- package/test/kamelet.spec.ts +0 -61
- package/test/metadata/components.json +0 -697
- package/test/metadata/kamelets.yaml +0 -23414
- package/test/metadata/spiBeans.json +0 -3094
- package/test/multiObjectProperties.spec.ts +0 -46
- package/test/multiObjectProperties1.yaml +0 -19
- package/test/multiple.spec.ts +0 -38
- package/test/multiple.yaml +0 -29
- package/test/openapi.spec.ts +0 -48
- package/test/openapi.yaml +0 -7
- package/test/placeholder.spec.ts +0 -32
- package/test/placeholder.yaml +0 -133
- package/test/plain-try-catch.yaml +0 -31
- package/test/plain.spec.ts +0 -72
- package/test/plain1.yaml +0 -22
- package/test/plain2.yaml +0 -13
- package/test/plain3.yaml +0 -5
- package/test/plain4.yaml +0 -5
- package/test/postgresql-source.kamelet.yaml +0 -113
- package/test/restConfigDsl.yaml +0 -15
- package/test/restDsl.spec.ts +0 -83
- package/test/restDsl.yaml +0 -29
- package/test/routes.spec.ts +0 -37
- package/test/routes1.yaml +0 -31
- package/test/supported-components.json +0 -1221
- package/test/supportedComponents.spec.ts +0 -34
- package/test/template1.AggregationStrategy.java +0 -21
- package/test/template1.Processor.java +0 -13
- package/test/template2.AggregationStrategy.java +0 -21
- package/test/template2.Processor.java +0 -13
- package/test/templateApi.spec.ts +0 -45
- package/test/timer-source.kamelet.yaml +0 -75
- package/test/tod.spec.ts +0 -31
- package/test/tod.yaml +0 -9
- package/test/topology.spec.ts +0 -51
- package/test/topology1.camel.yaml +0 -56
- package/test/topology2.camel.yaml +0 -44
- package/test/topology3.camel.yaml +0 -27
- package/test/tsconfig.testing.json +0 -14
- package/test/updateStep.spec.ts +0 -72
- package/test/variable1.camel.yaml +0 -42
- package/test/variable2.camel.yaml +0 -42
- package/test/variables.spec.ts +0 -34
- package/tsconfig.json +0 -34
@@ -1,117 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
-
* contributor license agreements. See the NOTICE file distributed with
|
4
|
-
* this work for additional information regarding copyright ownership.
|
5
|
-
* The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
-
* (the "License"); you may not use this file except in compliance with
|
7
|
-
* the License. You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
|
18
|
-
import { CamelElement } from './IntegrationDefinition';
|
19
|
-
import { FromDefinition, RestDefinition, RouteConfigurationDefinition, RouteDefinition } from './CamelDefinition';
|
20
|
-
|
21
|
-
export class TopologyRestNode {
|
22
|
-
path: string;
|
23
|
-
id: string;
|
24
|
-
uris: string[];
|
25
|
-
title: string;
|
26
|
-
fileName: string;
|
27
|
-
rest: RestDefinition;
|
28
|
-
|
29
|
-
constructor(path: string, id: string, uris: string[], title: string, fileName: string, rest: RestDefinition) {
|
30
|
-
this.path = path;
|
31
|
-
this.id = id;
|
32
|
-
this.uris = uris;
|
33
|
-
this.title = title;
|
34
|
-
this.fileName = fileName;
|
35
|
-
this.rest = rest;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
|
39
|
-
export class TopologyIncomingNode {
|
40
|
-
id: string;
|
41
|
-
type: 'internal' | 'external';
|
42
|
-
connectorType: 'component' | 'kamelet';
|
43
|
-
routeId: string;
|
44
|
-
title: string;
|
45
|
-
fileName: string;
|
46
|
-
from: FromDefinition;
|
47
|
-
uniqueUri?: string;
|
48
|
-
|
49
|
-
|
50
|
-
constructor(id: string, type: "internal" | "external", connectorType: "component" | "kamelet", routeId: string, title: string, fileName: string, from: FromDefinition, uniqueUri: string) {
|
51
|
-
this.id = id;
|
52
|
-
this.type = type;
|
53
|
-
this.connectorType = connectorType;
|
54
|
-
this.routeId = routeId;
|
55
|
-
this.title = title;
|
56
|
-
this.fileName = fileName;
|
57
|
-
this.from = from;
|
58
|
-
this.uniqueUri = uniqueUri;
|
59
|
-
}
|
60
|
-
}
|
61
|
-
|
62
|
-
export class TopologyRouteNode {
|
63
|
-
id: string;
|
64
|
-
routeId: string;
|
65
|
-
title: string;
|
66
|
-
fileName: string;
|
67
|
-
from: FromDefinition;
|
68
|
-
route: RouteDefinition
|
69
|
-
|
70
|
-
constructor(id: string, routeId: string, title: string, fileName: string, from: FromDefinition, route: RouteDefinition) {
|
71
|
-
this.id = id;
|
72
|
-
this.routeId = routeId;
|
73
|
-
this.title = title;
|
74
|
-
this.fileName = fileName;
|
75
|
-
this.from = from;
|
76
|
-
this.route = route;
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
export class TopologyRouteConfigurationNode {
|
81
|
-
id: string;
|
82
|
-
routeConfigurationId: string;
|
83
|
-
title: string;
|
84
|
-
fileName: string;
|
85
|
-
routeConfiguration: RouteConfigurationDefinition
|
86
|
-
|
87
|
-
constructor(id: string, routeConfigurationId: string, title: string, fileName: string, routeConfiguration: RouteConfigurationDefinition) {
|
88
|
-
this.id = id;
|
89
|
-
this.routeConfigurationId = routeConfigurationId;
|
90
|
-
this.title = title;
|
91
|
-
this.fileName = fileName;
|
92
|
-
this.routeConfiguration = routeConfiguration;
|
93
|
-
}
|
94
|
-
}
|
95
|
-
|
96
|
-
export class TopologyOutgoingNode {
|
97
|
-
id: string;
|
98
|
-
type: 'internal' | 'external';
|
99
|
-
connectorType: 'component' | 'kamelet';
|
100
|
-
routeId: string;
|
101
|
-
title: string;
|
102
|
-
fileName: string;
|
103
|
-
step: CamelElement;
|
104
|
-
uniqueUri?: string;
|
105
|
-
|
106
|
-
|
107
|
-
constructor(id: string, type: "internal" | "external", connectorType: "component" | "kamelet", routeId: string, title: string, fileName: string, step: CamelElement, uniqueUri: string) {
|
108
|
-
this.id = id;
|
109
|
-
this.type = type;
|
110
|
-
this.connectorType = connectorType;
|
111
|
-
this.routeId = routeId;
|
112
|
-
this.title = title;
|
113
|
-
this.fileName = fileName;
|
114
|
-
this.step = step;
|
115
|
-
this.uniqueUri = uniqueUri;
|
116
|
-
}
|
117
|
-
}
|
package/test/addStep.spec.ts
DELETED
@@ -1,124 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
-
* contributor license agreements. See the NOTICE file distributed with
|
4
|
-
* this work for additional information regarding copyright ownership.
|
5
|
-
* The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
-
* (the "License"); you may not use this file except in compliance with
|
7
|
-
* the License. You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
import {expect} from 'chai';
|
18
|
-
import 'mocha';
|
19
|
-
import {
|
20
|
-
FromDefinition,
|
21
|
-
LogDefinition,
|
22
|
-
WhenDefinition,
|
23
|
-
ChoiceDefinition,
|
24
|
-
MulticastDefinition,
|
25
|
-
ExpressionDefinition,
|
26
|
-
RouteDefinition, TryDefinition,CatchDefinition
|
27
|
-
} from "../src/core/model/CamelDefinition";
|
28
|
-
import {CamelDefinitionApiExt} from "../src/core/api/CamelDefinitionApiExt";
|
29
|
-
import {CamelDefinitionYaml} from "../src/core/api/CamelDefinitionYaml";
|
30
|
-
import {SimpleExpression} from "../src/core/model/CamelDefinition";
|
31
|
-
import {Integration} from "../src/core/model/IntegrationDefinition";
|
32
|
-
import * as fs from 'fs';
|
33
|
-
|
34
|
-
describe('Add Step', () => {
|
35
|
-
|
36
|
-
it('Add Step', () => {
|
37
|
-
const i = Integration.createNew("test")
|
38
|
-
|
39
|
-
const when1 = new WhenDefinition({
|
40
|
-
expression: new ExpressionDefinition({simple: '$[body} != null'}),
|
41
|
-
steps: [new LogDefinition({logName: 'log11', message: "hello11"})]
|
42
|
-
})
|
43
|
-
const choice = new ChoiceDefinition({when: [when1]})
|
44
|
-
const flow1 = new FromDefinition({uri: "direct1"});
|
45
|
-
|
46
|
-
flow1.steps?.push(choice);
|
47
|
-
i.spec.flows?.push(new RouteDefinition({from:flow1}));
|
48
|
-
|
49
|
-
const when2 = new WhenDefinition({
|
50
|
-
expression: new ExpressionDefinition({simple: '$[body} != "null"'}),
|
51
|
-
steps: [new LogDefinition({logName: 'log22', message: "hello22"})]
|
52
|
-
})
|
53
|
-
const i2 = CamelDefinitionApiExt.addStepToIntegration(i, when2, choice.uuid);
|
54
|
-
|
55
|
-
if (i2.spec.flows && i2.spec.flows.length > 0) {
|
56
|
-
const f: FromDefinition = i2.spec.flows[0].from;
|
57
|
-
const c: ChoiceDefinition = f.steps ? f.steps[0] : new ChoiceDefinition();
|
58
|
-
const w = c.when ? c.when[1] : undefined;
|
59
|
-
expect(c?.when?.length).to.equal(2);
|
60
|
-
}
|
61
|
-
});
|
62
|
-
|
63
|
-
it('Add step to Otherwise', () => {
|
64
|
-
const yaml = fs.readFileSync('test/addStep1.yaml',{encoding:'utf8', flag:'r'});
|
65
|
-
const i1 = CamelDefinitionYaml.yamlToIntegration("test1.yaml", yaml);
|
66
|
-
|
67
|
-
if (i1.spec.flows && i1.spec.flows.length > 0) {
|
68
|
-
const r: RouteDefinition = i1.spec.flows[0];
|
69
|
-
const c: ChoiceDefinition = r ? r.from?.steps[1] : new ChoiceDefinition();
|
70
|
-
const parentUuid = c.otherwise?.uuid || "";
|
71
|
-
|
72
|
-
const step: MulticastDefinition = new MulticastDefinition();
|
73
|
-
const i2 = CamelDefinitionApiExt.addStepToIntegration(i1, step, parentUuid);
|
74
|
-
|
75
|
-
if (i2.spec.flows) {
|
76
|
-
expect(i2.spec.flows[0].from.steps[1].otherwise.steps.length).to.equal(1);
|
77
|
-
}
|
78
|
-
}
|
79
|
-
});
|
80
|
-
|
81
|
-
it('Add step to Catch', () => {
|
82
|
-
const yaml = fs.readFileSync('test/addStep1.yaml',{encoding:'utf8', flag:'r'});
|
83
|
-
const i1 = CamelDefinitionYaml.yamlToIntegration("test1.yaml", yaml);
|
84
|
-
|
85
|
-
if (i1.spec.flows && i1.spec.flows.length > 0) {
|
86
|
-
const r: RouteDefinition = i1.spec.flows[0];
|
87
|
-
const t: TryDefinition = r ? r.from?.steps[0] : new TryDefinition();
|
88
|
-
const c: CatchDefinition = t.doCatch ? t.doCatch[0] : new CatchDefinition();
|
89
|
-
const parentUuid = c.uuid || "";
|
90
|
-
|
91
|
-
const w: WhenDefinition = new WhenDefinition({expression: new ExpressionDefinition({simple: new SimpleExpression({expression:"${body} != null"})})});
|
92
|
-
const i2 = CamelDefinitionApiExt.addStepToIntegration(i1, w, parentUuid);
|
93
|
-
|
94
|
-
if (i2.spec.flows) {
|
95
|
-
expect(i2.spec.flows[0].from.steps[0].doCatch[0].onWhen.expression.simple.expression).to.equal("${body} != null");
|
96
|
-
}
|
97
|
-
}
|
98
|
-
});
|
99
|
-
|
100
|
-
it('Add Step to position', () => {
|
101
|
-
const i = Integration.createNew("test")
|
102
|
-
|
103
|
-
const log1 =new LogDefinition({logName: 'log11', message: "hello11"});
|
104
|
-
const log2 =new LogDefinition({logName: 'log11', message: "hello22"});
|
105
|
-
const log3 =new LogDefinition({logName: 'log11', message: "hello33"});
|
106
|
-
|
107
|
-
const from = new FromDefinition({uri: "direct1"});
|
108
|
-
from.steps?.push(log1);
|
109
|
-
from.steps?.push(log2);
|
110
|
-
from.steps?.push(log3);
|
111
|
-
i.spec.flows?.push(new RouteDefinition({from:from}));
|
112
|
-
|
113
|
-
const choice = new ChoiceDefinition({})
|
114
|
-
const i2 = CamelDefinitionApiExt.addStepToIntegration(i, choice, from.uuid, 2);
|
115
|
-
|
116
|
-
if (i2.spec.flows && i2.spec.flows.length > 0) {
|
117
|
-
const f: FromDefinition = i2.spec.flows[0].from;
|
118
|
-
const c: ChoiceDefinition = f.steps[2];
|
119
|
-
expect(c?.dslName).to.equal('ChoiceDefinition');
|
120
|
-
|
121
|
-
}
|
122
|
-
});
|
123
|
-
|
124
|
-
});
|
package/test/addStep1.yaml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
apiVersion: camel.apache.org/v1
|
2
|
-
kind: Integration
|
3
|
-
metadata:
|
4
|
-
name: ''
|
5
|
-
spec:
|
6
|
-
flows:
|
7
|
-
- from:
|
8
|
-
uri: kamelet:http-secured-source
|
9
|
-
steps:
|
10
|
-
- do-try:
|
11
|
-
steps:
|
12
|
-
- to: "log:when-a"
|
13
|
-
- to: "log:when-b"
|
14
|
-
do-catch:
|
15
|
-
- exception:
|
16
|
-
- "java.io.FileNotFoundException"
|
17
|
-
- "java.io.IOException"
|
18
|
-
on-when:
|
19
|
-
simple: "${body.size()} == 1"
|
20
|
-
steps:
|
21
|
-
- to: "log:io-error"
|
22
|
-
- choice:
|
23
|
-
when:
|
24
|
-
- expression: {}
|
25
|
-
steps:
|
26
|
-
- tod: {}
|
27
|
-
otherwise: {}
|
@@ -1,19 +0,0 @@
|
|
1
|
-
- rest:
|
2
|
-
id: rest-b536
|
3
|
-
get:
|
4
|
-
- id: metadata
|
5
|
-
path: /metadata
|
6
|
-
to: direct:metadata
|
7
|
-
param:
|
8
|
-
- description: Requests the server to return a designated subset of the resource
|
9
|
-
name: _summary
|
10
|
-
type: query
|
11
|
-
required: false
|
12
|
-
collectionFormat: multi
|
13
|
-
dataType: string
|
14
|
-
allowableValues:
|
15
|
-
- "true"
|
16
|
-
- text
|
17
|
-
- data
|
18
|
-
- count
|
19
|
-
- "false"
|
@@ -1,30 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
-
* contributor license agreements. See the NOTICE file distributed with
|
4
|
-
* this work for additional information regarding copyright ownership.
|
5
|
-
* The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
-
* (the "License"); you may not use this file except in compliance with
|
7
|
-
* the License. You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
import {expect} from 'chai';
|
18
|
-
import 'mocha';
|
19
|
-
import {CamelDefinitionYaml} from "../src/core/api/CamelDefinitionYaml";
|
20
|
-
import * as fs from 'fs';
|
21
|
-
|
22
|
-
describe('Array of string', () => {
|
23
|
-
|
24
|
-
it('Array of string', () => {
|
25
|
-
const yaml = fs.readFileSync('test/allowableValues.camel.yaml', { encoding: 'utf8', flag: 'r' });
|
26
|
-
const i = CamelDefinitionYaml.yamlToIntegration('allowableValues.camel.yaml', yaml);
|
27
|
-
const yaml2 = CamelDefinitionYaml.integrationToYaml(i);
|
28
|
-
expect(yaml2).to.equal(yaml);
|
29
|
-
});
|
30
|
-
});
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# ---------------------------------------------------------------------------
|
2
|
-
# Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
-
# contributor license agreements. See the NOTICE file distributed with
|
4
|
-
# this work for additional information regarding copyright ownership.
|
5
|
-
# The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
-
# (the "License"); you may not use this file except in compliance with
|
7
|
-
# the License. You may obtain a copy of the License at
|
8
|
-
#
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
#
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
# See the License for the specific language governing permissions and
|
15
|
-
# limitations under the License.
|
16
|
-
# ---------------------------------------------------------------------------
|
17
|
-
|
18
|
-
apiVersion: camel.apache.org/v1
|
19
|
-
kind: Kamelet
|
20
|
-
metadata:
|
21
|
-
name: avro-serialize-action
|
22
|
-
annotations:
|
23
|
-
camel.apache.org/kamelet.support.level: "Stable"
|
24
|
-
camel.apache.org/catalog.version: "4.6.0-SNAPSHOT"
|
25
|
-
camel.apache.org/kamelet.icon: "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICB4bWxuczpjYz0iaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbnMjIgogICB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgdmlld0JveD0iMCAtMjU2IDE3OTIgMTc5MiIKICAgaWQ9InN2ZzMwMjUiCiAgIHZlcnNpb249IjEuMSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMC40OC4zLjEgcjk4ODYiCiAgIHdpZHRoPSIxMDAlIgogICBoZWlnaHQ9IjEwMCUiCiAgIHNvZGlwb2RpOmRvY25hbWU9ImNvZ19mb250X2F3ZXNvbWUuc3ZnIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGEzMDM1Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+CiAgICAgICAgPGRjOnR5cGUKICAgICAgICAgICByZGY6cmVzb3VyY2U9Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS9TdGlsbEltYWdlIiAvPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KICA8ZGVmcwogICAgIGlkPSJkZWZzMzAzMyIgLz4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgcGFnZWNvbG9yPSIjZmZmZmZmIgogICAgIGJvcmRlcmNvbG9yPSIjNjY2NjY2IgogICAgIGJvcmRlcm9wYWNpdHk9IjEiCiAgICAgb2JqZWN0dG9sZXJhbmNlPSIxMCIKICAgICBncmlkdG9sZXJhbmNlPSIxMCIKICAgICBndWlkZXRvbGVyYW5jZT0iMTAiCiAgICAgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTp3aW5kb3ctd2lkdGg9IjY0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI0ODAiCiAgICAgaWQ9Im5hbWVkdmlldzMwMzEiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMTMxNjk2NDMiCiAgICAgaW5rc2NhcGU6Y3g9Ijg5NiIKICAgICBpbmtzY2FwZTpjeT0iODk2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIyNSIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIwIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzMwMjUiIC8+CiAgPGcKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLDAsMCwtMSwxMjEuNDkxNTMsMTI4NS40MjM3KSIKICAgICBpZD0iZzMwMjciPgogICAgPHBhdGgKICAgICAgIGQ9Im0gMTAyNCw2NDAgcSAwLDEwNiAtNzUsMTgxIC03NSw3NSAtMTgxLDc1IC0xMDYsMCAtMTgxLC03NSAtNzUsLTc1IC03NSwtMTgxIDAsLTEwNiA3NSwtMTgxIDc1LC03NSAxODEsLTc1IDEwNiwwIDE4MSw3NSA3NSw3NSA3NSwxODEgeiBtIDUxMiwxMDkgViA1MjcgcSAwLC0xMiAtOCwtMjMgLTgsLTExIC0yMCwtMTMgbCAtMTg1LC0yOCBxIC0xOSwtNTQgLTM5LC05MSAzNSwtNTAgMTA3LC0xMzggMTAsLTEyIDEwLC0yNSAwLC0xMyAtOSwtMjMgLTI3LC0zNyAtOTksLTEwOCAtNzIsLTcxIC05NCwtNzEgLTEyLDAgLTI2LDkgbCAtMTM4LDEwOCBxIC00NCwtMjMgLTkxLC0zOCAtMTYsLTEzNiAtMjksLTE4NiAtNywtMjggLTM2LC0yOCBIIDY1NyBxIC0xNCwwIC0yNC41LDguNSBRIDYyMiwtMTExIDYyMSwtOTggTCA1OTMsODYgcSAtNDksMTYgLTkwLDM3IEwgMzYyLDE2IFEgMzUyLDcgMzM3LDcgMzIzLDcgMzEyLDE4IDE4NiwxMzIgMTQ3LDE4NiBxIC03LDEwIC03LDIzIDAsMTIgOCwyMyAxNSwyMSA1MSw2Ni41IDM2LDQ1LjUgNTQsNzAuNSAtMjcsNTAgLTQxLDk5IEwgMjksNDk1IFEgMTYsNDk3IDgsNTA3LjUgMCw1MTggMCw1MzEgdiAyMjIgcSAwLDEyIDgsMjMgOCwxMSAxOSwxMyBsIDE4NiwyOCBxIDE0LDQ2IDM5LDkyIC00MCw1NyAtMTA3LDEzOCAtMTAsMTIgLTEwLDI0IDAsMTAgOSwyMyAyNiwzNiA5OC41LDEwNy41IDcyLjUsNzEuNSA5NC41LDcxLjUgMTMsMCAyNiwtMTAgbCAxMzgsLTEwNyBxIDQ0LDIzIDkxLDM4IDE2LDEzNiAyOSwxODYgNywyOCAzNiwyOCBoIDIyMiBxIDE0LDAgMjQuNSwtOC41IFEgOTE0LDEzOTEgOTE1LDEzNzggbCAyOCwtMTg0IHEgNDksLTE2IDkwLC0zNyBsIDE0MiwxMDcgcSA5LDkgMjQsOSAxMywwIDI1LC0xMCAxMjksLTExOSAxNjUsLTE3MCA3LC04IDcsLTIyIDAsLTEyIC04LC0yMyAtMTUsLTIxIC01MSwtNjYuNSAtMzYsLTQ1LjUgLTU0LC03MC41IDI2LC01MCA0MSwtOTggbCAxODMsLTI4IHEgMTMsLTIgMjEsLTEyLjUgOCwtMTAuNSA4LC0yMy41IHoiCiAgICAgICBpZD0icGF0aDMwMjkiCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6Y3VycmVudENvbG9yIiAvPgogIDwvZz4KPC9zdmc+Cg=="
|
26
|
-
camel.apache.org/provider: "Apache Software Foundation"
|
27
|
-
camel.apache.org/kamelet.group: "Actions"
|
28
|
-
camel.apache.org/kamelet.namespace: "Transformation"
|
29
|
-
labels:
|
30
|
-
camel.apache.org/kamelet.type: "action"
|
31
|
-
spec:
|
32
|
-
definition:
|
33
|
-
title: "Avro Serialize Action"
|
34
|
-
description: "Serialize payload to Avro"
|
35
|
-
type: object
|
36
|
-
properties:
|
37
|
-
schema:
|
38
|
-
title: Schema
|
39
|
-
description: The Avro schema to use during serialization (as single-line, using JSON format)
|
40
|
-
type: string
|
41
|
-
example: '{"type": "record", "namespace": "com.example", "name": "FullName", "fields": [{"name": "first", "type": "string"},{"name": "last", "type": "string"}]}'
|
42
|
-
validate:
|
43
|
-
title: Validate
|
44
|
-
description: Indicates if the content must be validated against the schema
|
45
|
-
type: boolean
|
46
|
-
default: true
|
47
|
-
dependencies:
|
48
|
-
- "camel:kamelet"
|
49
|
-
- "camel:core"
|
50
|
-
- "camel:jackson-avro"
|
51
|
-
template:
|
52
|
-
beans:
|
53
|
-
- name: schemaResolver
|
54
|
-
type: "#class:org.apache.camel.component.jackson.avro.transform.AvroSchemaResolver"
|
55
|
-
property:
|
56
|
-
- key: validate
|
57
|
-
value: '{{validate}}'
|
58
|
-
- key: schema
|
59
|
-
value: '{{schema:}}'
|
60
|
-
from:
|
61
|
-
uri: kamelet:source
|
62
|
-
steps:
|
63
|
-
- marshal:
|
64
|
-
avro:
|
65
|
-
library: Jackson
|
66
|
-
unmarshalType: com.fasterxml.jackson.databind.JsonNode
|
67
|
-
schemaResolver: "#bean:{{schemaResolver}}"
|
68
|
-
- setHeader:
|
69
|
-
name: "Content-Type"
|
70
|
-
constant: "application/avro"
|
package/test/beans.spec.ts
DELETED
@@ -1,92 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
-
* contributor license agreements. See the NOTICE file distributed with
|
4
|
-
* this work for additional information regarding copyright ownership.
|
5
|
-
* The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
-
* (the "License"); you may not use this file except in compliance with
|
7
|
-
* the License. You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
import { expect } from 'chai';
|
18
|
-
import * as fs from 'fs';
|
19
|
-
import 'mocha';
|
20
|
-
import { CamelDefinitionYaml } from '../src/core/api/CamelDefinitionYaml';
|
21
|
-
import { Beans, Integration } from '../src/core/model/IntegrationDefinition';
|
22
|
-
import { BeanFactoryDefinition } from '../src/core/model/CamelDefinition';
|
23
|
-
|
24
|
-
describe('bean configuration', () => {
|
25
|
-
|
26
|
-
it('Read beans from plain YAML', () => {
|
27
|
-
const yaml = fs.readFileSync('test/beans1.yaml', { encoding: 'utf8', flag: 'r' });
|
28
|
-
const i = CamelDefinitionYaml.yamlToIntegration('beans.yaml', yaml);
|
29
|
-
expect(i.metadata.name).to.equal('beans.yaml');
|
30
|
-
expect(i.kind).to.equal('Integration');
|
31
|
-
expect(i.spec.flows?.length).to.equal(3);
|
32
|
-
expect(i.type).to.equal('plain');
|
33
|
-
if (i.spec.flows) {
|
34
|
-
expect(i.spec.flows[2].beans[0].name).to.equal('myNested');
|
35
|
-
expect(i.spec.flows[2].beans[0].type).to.equal('${MyBean.class.name}');
|
36
|
-
expect(i.spec.flows[2].beans[0].properties['nested.foo']).to.equal('valueFoo');
|
37
|
-
expect(i.spec.flows[2].beans[1].name).to.equal('myProps');
|
38
|
-
}
|
39
|
-
CamelDefinitionYaml.integrationToYaml(i)
|
40
|
-
});
|
41
|
-
|
42
|
-
it('Read beans from Integration', () => {
|
43
|
-
const yaml = fs.readFileSync('test/beans2.yaml', { encoding: 'utf8', flag: 'r' });
|
44
|
-
const i = CamelDefinitionYaml.yamlToIntegration('beans.yaml', yaml);
|
45
|
-
expect(i.metadata.name).to.equal('Beans');
|
46
|
-
expect(i.kind).to.equal('Integration');
|
47
|
-
expect(i.spec.flows?.length).to.equal(3);
|
48
|
-
expect(i.type).to.equal('crd');
|
49
|
-
if (i.spec.flows) {
|
50
|
-
expect(i.spec.flows[2].beans[0].name).to.equal('myNested');
|
51
|
-
expect(i.spec.flows[2].beans[0].type).to.equal('${MyBean.class.name}');
|
52
|
-
expect(i.spec.flows[2].beans[0].properties['nested.foo']).to.equal('valueFoo');
|
53
|
-
expect(i.spec.flows[2].beans[1].name).to.equal('myProps');
|
54
|
-
}
|
55
|
-
});
|
56
|
-
|
57
|
-
function countSubstring(str: string, search: string): number {
|
58
|
-
if (search.length === 0) {
|
59
|
-
return 0; // Avoid infinite loops for empty search strings
|
60
|
-
}
|
61
|
-
|
62
|
-
let count = 0;
|
63
|
-
let pos = 0;
|
64
|
-
|
65
|
-
// Loop to find all occurrences of 'search'
|
66
|
-
while ((pos = str.indexOf(search, pos)) !== -1) {
|
67
|
-
count++; // Increment count for each occurrence found
|
68
|
-
pos += search.length; // Move past the last found substring to find next
|
69
|
-
}
|
70
|
-
|
71
|
-
return count;
|
72
|
-
}
|
73
|
-
|
74
|
-
it('Bean constructor', () => {
|
75
|
-
const text = fs.readFileSync('test/beans3.yaml', { encoding: 'utf8', flag: 'r' });
|
76
|
-
const i = CamelDefinitionYaml.yamlToIntegration('beans.yaml', text);
|
77
|
-
|
78
|
-
const b = Integration.createNew('beans');
|
79
|
-
const bean1 = new BeanFactoryDefinition({
|
80
|
-
name: 'Name1', type: 'Type', constructors: {
|
81
|
-
0: 'zero',
|
82
|
-
1: 'one',
|
83
|
-
2: 'two',
|
84
|
-
}
|
85
|
-
});
|
86
|
-
const bean2 = new BeanFactoryDefinition({ name: 'Name2', type: 'Type'});
|
87
|
-
b.spec.flows?.push(new Beans({beans: [bean1, bean2]}));
|
88
|
-
const yaml = CamelDefinitionYaml.integrationToYaml(b);
|
89
|
-
expect(countSubstring(yaml, 'constructors')).to.equal(1);
|
90
|
-
});
|
91
|
-
|
92
|
-
});
|
package/test/beans1.yaml
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
- beans:
|
2
|
-
- name: myNested
|
3
|
-
type: ${MyBean.class.name}
|
4
|
-
properties:
|
5
|
-
field1: 'value1'
|
6
|
-
field2: 'value2'
|
7
|
-
nested:
|
8
|
-
foo: 'valueFoo'
|
9
|
-
bar: 'valueBar'
|
10
|
-
- name: myProps
|
11
|
-
type: ${MyBean.class.name}
|
12
|
-
properties:
|
13
|
-
field1: 'f1_p'
|
14
|
-
field2: 'f2_p'
|
15
|
-
nested.foo: 'nf1_p'
|
16
|
-
nested.bar: 'nf2_p'
|
17
|
-
- from:
|
18
|
-
uri: "direct:route"
|
19
|
-
steps:
|
20
|
-
- aggregate:
|
21
|
-
strategy-ref: "myAggregatorStrategy"
|
22
|
-
completion-size: 2
|
23
|
-
correlation-expression:
|
24
|
-
simple: "${header.StockSymbol}"
|
25
|
-
steps:
|
26
|
-
- to: "mock:route"
|
27
|
-
- from:
|
28
|
-
uri: "direct:route"
|
29
|
-
steps:
|
30
|
-
- aggregate:
|
31
|
-
strategy-ref: "myAggregatorStrategy"
|
32
|
-
completion-size: 2
|
33
|
-
correlation-expression:
|
34
|
-
simple: "${header.StockSymbol}"
|
35
|
-
steps:
|
36
|
-
- to: "mock:route"
|
package/test/beans2.yaml
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
apiVersion: camel.apache.org/v1
|
2
|
-
kind: Integration
|
3
|
-
metadata:
|
4
|
-
name: Beans
|
5
|
-
spec:
|
6
|
-
flows:
|
7
|
-
- beans:
|
8
|
-
- name: myNested
|
9
|
-
type: ${MyBean.class.name}
|
10
|
-
properties:
|
11
|
-
field1: 'value1'
|
12
|
-
field2: 'value2'
|
13
|
-
nested:
|
14
|
-
foo: 'valueFoo'
|
15
|
-
bar: 'valueBar'
|
16
|
-
- name: myProps
|
17
|
-
type: ${MyBean.class.name}
|
18
|
-
properties:
|
19
|
-
field1: 'f1_p'
|
20
|
-
field2: 'f2_p'
|
21
|
-
nested.foo: 'nf1_p'
|
22
|
-
nested.bar: 'nf2_p'
|
23
|
-
- from:
|
24
|
-
uri: "direct:route"
|
25
|
-
steps:
|
26
|
-
- aggregate:
|
27
|
-
strategy-ref: "myAggregatorStrategy"
|
28
|
-
completion-size: 2
|
29
|
-
correlation-expression:
|
30
|
-
simple: "${header.StockSymbol}"
|
31
|
-
steps:
|
32
|
-
- to: "mock:route"
|
33
|
-
- from:
|
34
|
-
uri: "direct:route"
|
35
|
-
steps:
|
36
|
-
- aggregate:
|
37
|
-
strategy-ref: "myAggregatorStrategy"
|
38
|
-
completion-size: 2
|
39
|
-
correlation-expression:
|
40
|
-
simple: "${header.StockSymbol}"
|
41
|
-
steps:
|
42
|
-
- to: "mock:route"
|
package/test/beans3.yaml
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
* Licensed to the Apache Software Foundation (ASF) under one or more
|
3
|
-
* contributor license agreements. See the NOTICE file distributed with
|
4
|
-
* this work for additional information regarding copyright ownership.
|
5
|
-
* The ASF licenses this file to You under the Apache License, Version 2.0
|
6
|
-
* (the "License"); you may not use this file except in compliance with
|
7
|
-
* the License. You may obtain a copy of the License at
|
8
|
-
*
|
9
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
10
|
-
*
|
11
|
-
* Unless required by applicable law or agreed to in writing, software
|
12
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
-
* See the License for the specific language governing permissions and
|
15
|
-
* limitations under the License.
|
16
|
-
*/
|
17
|
-
import {expect} from 'chai';
|
18
|
-
import 'mocha';
|
19
|
-
import {
|
20
|
-
LogDefinition, ExpressionDefinition, SplitDefinition, SimpleExpression
|
21
|
-
} from "../src/core/model/CamelDefinition";
|
22
|
-
import {CamelDefinitionApi} from "../src/core/api/CamelDefinitionApi";
|
23
|
-
import {CamelUtil} from "../src/core/api/CamelUtil";
|
24
|
-
import { SetHeaderDefinition } from '../src/core/model/CamelDefinition';
|
25
|
-
|
26
|
-
describe('Check required properties', () => {
|
27
|
-
|
28
|
-
it('Check Log DSL', () => {
|
29
|
-
const log: LogDefinition = CamelDefinitionApi.createLogDefinition({});
|
30
|
-
expect(CamelUtil.checkRequired(log)[0]).to.equal(false);
|
31
|
-
log.message = '${body}'
|
32
|
-
expect(CamelUtil.checkRequired(log)[0]).to.equal(true);
|
33
|
-
});
|
34
|
-
|
35
|
-
it('Check SetHeader DSL', () => {
|
36
|
-
const setHeader: SetHeaderDefinition = CamelDefinitionApi.createSetHeaderDefinition({});
|
37
|
-
setHeader.expression = new ExpressionDefinition({simple: new SimpleExpression({expression: '${body}'})})
|
38
|
-
const check = CamelUtil.checkRequired(setHeader);
|
39
|
-
expect(check[0]).to.equal(false);
|
40
|
-
setHeader.name = 'header1'
|
41
|
-
expect(CamelUtil.checkRequired(setHeader)[0]).to.equal(true);
|
42
|
-
});
|
43
|
-
|
44
|
-
it('Check Split DSL', () => {
|
45
|
-
const split: SplitDefinition = CamelDefinitionApi.createSplitDefinition({});
|
46
|
-
expect(CamelUtil.checkRequired(split)[0]).to.equal(false);
|
47
|
-
split.expression = new ExpressionDefinition({simple: new SimpleExpression()})
|
48
|
-
expect(CamelUtil.checkRequired(split)[0]).to.equal(false);
|
49
|
-
split.expression = new ExpressionDefinition({simple: new SimpleExpression({expression: "${body} !== null"})})
|
50
|
-
expect(CamelUtil.checkRequired(split)[0]).to.equal(true);
|
51
|
-
});
|
52
|
-
|
53
|
-
});
|