This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch camel-4.22.x
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.22.x by this push:
new a70d0fa8ff36 [backport camel-4.22.x] CAMEL-24479: camel-yaml-dsl -
Restore additionalProperties:false for explicit expression/inline-hosted
definitions
a70d0fa8ff36 is described below
commit a70d0fa8ff368a7b5f3d8a5194bb793b71a0aafc
Author: Claus Ibsen <[email protected]>
AuthorDate: Fri Aug 28 08:20:32 2026 +0200
[backport camel-4.22.x] CAMEL-24479: camel-yaml-dsl - Restore
additionalProperties:false for explicit expression/inline-hosted definitions
Cherry-pick of #25841 onto camel-4.22.x.
Co-authored-by: Claude Sonnet 5 <[email protected]>
---
.../maven/dsl/yaml/GenerateYamlSchemaMojo.java | 40 ++-
.../dsl/yaml/validator/YamlValidatorTest.java | 22 ++
.../src/test/resources/CAMEL-24479.yaml | 49 +++
.../test/resources/inline-expression-object.yaml | 26 ++
.../generated/resources/schema/camelYamlDsl.json | 347 +++++++++++++++++++--
5 files changed, 451 insertions(+), 33 deletions(-)
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
index 2fd42f59817f..e00456472f88 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
@@ -610,11 +610,25 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
* @param inlineDefinitions The name of the definitions that has inline
option enabled
*/
private void postProcessInheritance(Set<String> inheritedDefinitions,
Set<String> inlineDefinitions) {
- // additionalProperties=false prevents inheritance with
allOf/anyOf/oneOf
- // Remove it to be true by default
+ // additionalProperties=false prevents inheritance with
allOf/anyOf/oneOf, so it needs to be removed
+ // to allow a type such as ExpressionDefinition to be inlined directly
onto a host's own closed schema
+ // (e.g. filter: { simple: "...", steps: [...] } merges
ExpressionDefinition's properties onto
+ // FilterDefinition). But the very same type is also used standalone,
referenced by its own named
+ // property (e.g. the explicit filter: { expression: { simple: "..." }
} form) - if additionalProperties
+ // is removed from the shared definition itself, that explicit,
non-inlined usage loses its closedness
+ // too and silently accepts unknown/duplicate properties (CAMEL-24479).
+ //
+ // Clone the definition instead of mutating it in place: the open
clone is only substituted into the
+ // bare $ref oneOf/anyOf branches used for inlining, while the
original definition - referenced by
+ // every named property - stays closed.
+ Map<String, String> inlineClones = new HashMap<>();
for (String inherited : inheritedDefinitions) {
- ObjectNode node = definitions.withObject("/" + inherited);
- node.remove("additionalProperties");
+ ObjectNode original = definitions.withObject("/" + inherited);
+ String cloneName = inherited + "$Inline";
+ ObjectNode clone = original.deepCopy();
+ clone.remove("additionalProperties");
+ definitions.set(cloneName, clone);
+ inlineClones.put(inherited, cloneName);
}
// Redeclare the inherited properties
@@ -630,9 +644,9 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
if (temp.has("anyOf")) {
final var definition = temp;
StreamSupport.stream(temp.withArray("anyOf").spliterator(),
false)
- .forEach(group -> postProcessComposition(name,
definition, group, inheritedDefinitions));
+ .forEach(group -> postProcessComposition(name,
definition, group, inheritedDefinitions, inlineClones));
} else {
- postProcessComposition(name, temp, temp, inheritedDefinitions);
+ postProcessComposition(name, temp, temp, inheritedDefinitions,
inlineClones);
}
});
}
@@ -650,7 +664,8 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
}
private void postProcessComposition(
- String name, JsonNode definition, JsonNode inherited, Set<String>
inheritedDefinitions) {
+ String name, JsonNode definition, JsonNode inherited, Set<String>
inheritedDefinitions,
+ Map<String, String> inlineClones) {
ArrayNode composition = extractComposition(inherited);
if (composition == null) {
return;
@@ -674,7 +689,7 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
.filter(prop ->
!definition.withObject("/properties").has(prop.getKey()))
.forEach(prop ->
definition.withObject("/properties").putObject(prop.getKey()));
}
- postProcessComposition(name, definition, compositionEntry,
inheritedDefinitions);
+ postProcessComposition(name, definition, compositionEntry,
inheritedDefinitions, inlineClones);
if (!compositionEntry.has("$ref")) {
continue;
@@ -683,8 +698,13 @@ public class GenerateYamlSchemaMojo extends
GenerateYamlSupportMojo {
if (!inheritedDefinitions.contains(parentName)) {
continue;
}
- JsonNode parent = definitions.withObject("/" + parentName);
- postProcessComposition(parentName, definition, parent,
inheritedDefinitions);
+ // This is a bare $ref composition branch (no wrapping
"properties"), i.e. the type is being
+ // inlined directly onto the host's own schema - repoint it to the
open clone so the host's
+ // sibling properties aren't rejected, without touching the
original (still closed) definition.
+ String cloneName = inlineClones.get(parentName);
+ ((ObjectNode) compositionEntry).put("$ref", "#/items/definitions/"
+ cloneName);
+ JsonNode parent = definitions.withObject("/" + cloneName);
+ postProcessComposition(parentName, definition, parent,
inheritedDefinitions, inlineClones);
parent
.withObject("/properties")
.properties()
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorTest.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorTest.java
index fb8ade0b0537..bc828f50c412 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorTest.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/java/org/apache/camel/dsl/yaml/validator/YamlValidatorTest.java
@@ -86,4 +86,26 @@ public class YamlValidatorTest {
Assertions.assertFalse(report.isEmpty());
Assertions.assertTrue(report.stream().anyMatch(error ->
error.getMessage().contains("parserStep")));
}
+
+ @Test
+ public void testInlineExpressionObjectFormStillValidates() throws
Exception {
+ // Guards the fix for CAMEL-24479: restoring
additionalProperties:false on ExpressionDefinition
+ // must not break the inline shorthand merge (filter: { groovy: {...}
} without an "expression:"
+ // wrapper), which relies on ExpressionDefinition's properties being
redeclared onto FilterDefinition.
+ var report = validator.validate(new
File("src/test/resources/inline-expression-object.yaml"));
+ Assertions.assertTrue(report.isEmpty(), "Inline expression object form
should still pass validation but got: "
+ + report.stream().map(e ->
e.getMessage()).toList());
+ }
+
+ @Test
+ public void testUnknownPropertyInExpressionBlockFailsValidation() throws
Exception {
+ // CAMEL-24479: an explicit "expression: {...}" wrapper block with an
unknown property (hello) must
+ // be rejected. Before the fix, ExpressionDefinition's schema had lost
its additionalProperties:false
+ // as a side effect of also supporting inline expression shorthands
(e.g. filter: { simple: "..." }),
+ // so unknown/duplicate properties were silently accepted whenever any
single valid language was present.
+ var report = validator.validate(new
File("src/test/resources/CAMEL-24479.yaml"));
+ Assertions.assertFalse(report.isEmpty(), "Unknown property 'hello' in
the expression block should be reported");
+ Assertions.assertTrue(report.stream().anyMatch(e ->
e.getMessage().contains("hello")),
+ "Should identify the unknown property 'hello', got: " +
report.stream().map(e -> e.getMessage()).toList());
+ }
}
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/CAMEL-24479.yaml
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/CAMEL-24479.yaml
new file mode 100644
index 000000000000..a825b4324bf7
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/CAMEL-24479.yaml
@@ -0,0 +1,49 @@
+#
+# 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.
+#
+
+- route:
+ id: route-from-jb
+ description: On message
+ nodePrefixId: route-from-jb
+ from:
+ id: from-e92e
+ description: From JB
+ uri: vertx
+ variableReceive: message
+ parameters:
+ address: EVENTS_FROM_JB
+ pubSub: true
+ steps:
+ - choice:
+ id: choice-5f68
+ when:
+ - id: when-8c1e
+ expression:
+ groovy:
+ id: simple-4df51
+ expression: ${variable.message[messageType]} == "ACK"
+ simple: {}
+ hello: world2
+ steps:
+ - setVariable:
+ id: setVariable-7f68
+ description: Set Ack
+ name: ack
+ expression:
+ groovy:
+ id: groovy-e040
+ expression: '"hello"'
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/inline-expression-object.yaml
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/inline-expression-object.yaml
new file mode 100644
index 000000000000..8a1a57c41f2e
--- /dev/null
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-validator/src/test/resources/inline-expression-object.yaml
@@ -0,0 +1,26 @@
+#
+# 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.
+#
+
+- route:
+ from:
+ uri: direct:start
+ steps:
+ - filter:
+ groovy:
+ expression: "true"
+ steps:
+ - to: mock:result
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 76a9d85c2cd9..2735998defd3 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -307,6 +307,7 @@
},
"org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition" : {
"type" : "object",
+ "additionalProperties" : false,
"properties" : {
"description" : {
"type" : "string"
@@ -1158,7 +1159,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -1307,7 +1308,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -1461,7 +1462,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -2131,7 +2132,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -2375,7 +2376,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -2942,7 +2943,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -3988,7 +3989,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -4446,7 +4447,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -4692,7 +4693,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -4807,7 +4808,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -5391,7 +5392,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -6132,7 +6133,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -6408,7 +6409,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -6540,7 +6541,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -6712,7 +6713,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -6887,7 +6888,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -7025,7 +7026,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -7200,7 +7201,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -7337,7 +7338,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -7845,7 +7846,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -8386,7 +8387,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -9046,7 +9047,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -9200,7 +9201,7 @@
"additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
- "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition"
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExpressionDefinition$Inline"
}, {
"not" : {
"anyOf" : [ {
@@ -13133,6 +13134,7 @@
},
"org.apache.camel.model.language.ExpressionDefinition" : {
"type" : "object",
+ "additionalProperties" : false,
"anyOf" : [ {
"oneOf" : [ {
"type" : "object",
@@ -17368,6 +17370,305 @@
"$ref" :
"#/items/definitions/org.apache.camel.model.validator.PredicateValidatorDefinition"
}
}
+ },
+
"org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition$Inline" : {
+ "type" : "object",
+ "properties" : {
+ "description" : {
+ "type" : "string"
+ },
+ "id" : {
+ "type" : "string"
+ },
+ "note" : {
+ "type" : "string"
+ },
+ "parameters" : {
+ "type" : "object"
+ },
+ "steps" : {
+ "type" : "array",
+ "items" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.ProcessorDefinition"
+ }
+ },
+ "uri" : {
+ "type" : "string"
+ },
+ "variableReceive" : {
+ "type" : "string"
+ }
+ },
+ "required" : [ "steps", "uri" ]
+ },
+ "org.apache.camel.model.language.ExpressionDefinition$Inline" : {
+ "type" : "object",
+ "anyOf" : [ {
+ "oneOf" : [ {
+ "type" : "object",
+ "required" : [ "constant" ],
+ "properties" : {
+ "constant" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ConstantExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "csimple" ],
+ "properties" : {
+ "csimple" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.CSimpleExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "datasonnet" ],
+ "properties" : {
+ "datasonnet" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.DatasonnetExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "exchangeProperty" ],
+ "properties" : {
+ "exchangeProperty" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.ExchangePropertyExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "groovy" ],
+ "properties" : {
+ "groovy" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.GroovyExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "header" ],
+ "properties" : {
+ "header" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.HeaderExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "hl7terser" ],
+ "properties" : {
+ "hl7terser" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.Hl7TerserExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "jactl" ],
+ "properties" : {
+ "jactl" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.JactlExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "java" ],
+ "properties" : {
+ "java" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.JavaExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "joor" ],
+ "properties" : {
+ "joor" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.JoorExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "jq" ],
+ "properties" : {
+ "jq" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.JqExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "js" ],
+ "properties" : {
+ "js" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.JavaScriptExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "jsonpath" ],
+ "properties" : {
+ "jsonpath" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.JsonPathExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "language" ],
+ "properties" : {
+ "language" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.LanguageExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "method" ],
+ "properties" : {
+ "method" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.MethodCallExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "mvel" ],
+ "properties" : {
+ "mvel" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.MvelExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "ognl" ],
+ "properties" : {
+ "ognl" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.OgnlExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "python" ],
+ "properties" : {
+ "python" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.PythonExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "python3" ],
+ "properties" : {
+ "python3" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.Python3Expression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "quickjs" ],
+ "properties" : {
+ "quickjs" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.QuickjsExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "ref" ],
+ "properties" : {
+ "ref" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.RefExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "simple" ],
+ "properties" : {
+ "simple" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.SimpleExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "spel" ],
+ "properties" : {
+ "spel" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.SpELExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "tokenize" ],
+ "properties" : {
+ "tokenize" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.TokenizerExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "variable" ],
+ "properties" : {
+ "variable" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.VariableExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "wasm" ],
+ "properties" : {
+ "wasm" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.WasmExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "xpath" ],
+ "properties" : {
+ "xpath" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.XPathExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "xquery" ],
+ "properties" : {
+ "xquery" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.XQueryExpression"
+ }
+ }
+ }, {
+ "type" : "object",
+ "required" : [ "xtokenize" ],
+ "properties" : {
+ "xtokenize" : {
+ "$ref" :
"#/items/definitions/org.apache.camel.model.language.XMLTokenizerExpression"
+ }
+ }
+ } ]
+ } ],
+ "properties" : {
+ "constant" : { },
+ "csimple" : { },
+ "datasonnet" : { },
+ "exchangeProperty" : { },
+ "groovy" : { },
+ "header" : { },
+ "hl7terser" : { },
+ "jactl" : { },
+ "java" : { },
+ "joor" : { },
+ "jq" : { },
+ "js" : { },
+ "jsonpath" : { },
+ "language" : { },
+ "method" : { },
+ "mvel" : { },
+ "ognl" : { },
+ "python" : { },
+ "python3" : { },
+ "quickjs" : { },
+ "ref" : { },
+ "simple" : { },
+ "spel" : { },
+ "tokenize" : { },
+ "variable" : { },
+ "wasm" : { },
+ "xpath" : { },
+ "xquery" : { },
+ "xtokenize" : { }
+ }
}
},
"properties" : {