This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 5a793c143af0 CAMEL-25054: camel-jackson3 - enable/disable features in
a qualified manner (#26937)
5a793c143af0 is described below
commit 5a793c143af074c7db2c7f515e2857606b138f75
Author: Benjamin Graf <[email protected]>
AuthorDate: Wed Sep 30 18:55:25 2026 +0200
CAMEL-25054: camel-jackson3 - enable/disable features in a qualified manner
(#26937)
Follow up to CAMEL-24620. Jackson 3 split its features across several enum
types with overlapping names, so the enableFeatures/disableFeatures options of
the JSON data format now accept features qualified by their enum type, allowing
an unambiguous choice. Includes tests and regenerated model, catalog and DSL
metadata.
Closes #26937
---
.../apache/camel/catalog/dataformats/jackson.json | 4 +-
.../org/apache/camel/catalog/models/json.json | 4 +-
.../apache/camel/catalog/schemas/camel-spring.xsd | 6 +-
.../apache/camel/catalog/schemas/camel-xml-io.xsd | 6 +-
.../camel/catalog/schemas/camelYamlDsl-model.json | 4 +-
.../apache/camel/component/jackson/jackson.json | 4 +-
.../apache/camel/component/jackson3/jackson.json | 4 +-
.../jackson3/AbstractJacksonDataFormat.java | 328 ++++++++++++---------
.../component/jackson3/JacksonFeaturesTest.java | 63 ++++
.../org/apache/camel/model/dataformat/json.json | 4 +-
.../camel/model/dataformat/JsonDataFormat.java | 6 +-
.../dsl/yaml/deserializers/ModelDeserializers.java | 4 +-
.../resources/schema/camelYamlDsl-canonical.json | 4 +-
.../resources/schema/camelYamlDsl-model.json | 4 +-
.../generated/resources/schema/camelYamlDsl.json | 4 +-
15 files changed, 287 insertions(+), 162 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/jackson.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/jackson.json
index eb263c4bf7ee..945a08984b3b 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/jackson.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/jackson.json
@@ -30,8 +30,8 @@
"useList": { "index": 11, "kind": "attribute", "displayName": "Use List",
"group": "common", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "To unmarshal to a List of Map or a List
of Pojo." },
"moduleClassNames": { "index": 12, "kind": "attribute", "displayName":
"Module Class Names", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "To use custom Jackson
modules com.fasterxml.jackson.databind.Module specified as a String with FQN
class names. Multiple classes can be separated by comma." },
"moduleRefs": { "index": 13, "kind": "attribute", "displayName": "Module
Refs", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "To use custom Jackson modules referred
from the Camel registry. Multiple modules can be separated by comma." },
- "enableFeatures": { "index": 14, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
- "disableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
+ "enableFeatures": { "index": 14, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. Seri [...]
+ "disableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. S [...]
"allowUnmarshallType": { "index": 16, "kind": "attribute", "displayName":
"Allow Unmarshall Type", "group": "common", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header
during the unmarshalling. This should only be enabled when desired to be used."
},
"timezone": { "index": 17, "kind": "attribute", "displayName": "Timezone",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "If set then Jackson will use the Timezone when
marshalling\/unmarshalling." },
"schemaResolver": { "index": 18, "kind": "attribute", "displayName":
"Schema Resolver", "group": "advanced", "label": "advanced", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.jackson.SchemaResolver", "deprecated": false,
"autowired": false, "secret": false, "description": "Optional schema resolver
used to lookup schemas for the data in transit." },
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/json.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/json.json
index f42ba35001f4..ebabe678aede 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/json.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/json.json
@@ -27,8 +27,8 @@
"useList": { "index": 12, "kind": "attribute", "displayName": "Use List",
"group": "common", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "To unmarshal to a List of Map or a List
of Pojo." },
"moduleClassNames": { "index": 13, "kind": "attribute", "displayName":
"Module Class Names", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "To use custom Jackson
modules com.fasterxml.jackson.databind.Module specified as a String with FQN
class names. Multiple classes can be separated by comma." },
"moduleRefs": { "index": 14, "kind": "attribute", "displayName": "Module
Refs", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "To use custom Jackson modules referred
from the Camel registry. Multiple modules can be separated by comma." },
- "enableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
- "disableFeatures": { "index": 16, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
+ "enableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. Seri [...]
+ "disableFeatures": { "index": 16, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. S [...]
"allowUnmarshallType": { "index": 17, "kind": "attribute", "displayName":
"Allow Unmarshall Type", "group": "common", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header
during the unmarshalling. This should only be enabled when desired to be used."
},
"timezone": { "index": 18, "kind": "attribute", "displayName": "Timezone",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "If set then Jackson will use the Timezone when
marshalling\/unmarshalling." },
"schemaResolver": { "index": 19, "kind": "attribute", "displayName":
"Schema Resolver", "group": "advanced", "label": "advanced", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.jackson.SchemaResolver", "deprecated": false,
"autowired": false, "secret": false, "description": "Optional schema resolver
used to lookup schemas for the data in transit." },
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index 8a2094f0800b..d253e483968d 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -9327,7 +9327,8 @@ To use custom Jackson modules referred from the Camel
registry. Multiple modules
<xs:documentation xml:lang="en">
<![CDATA[
Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
-by comma.
+by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g.
+SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with the same
name.
]]>
</xs:documentation>
</xs:annotation>
@@ -9337,7 +9338,8 @@ by comma.
<xs:documentation xml:lang="en">
<![CDATA[
Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be
-separated by comma.
+separated by comma. When using Jackson 3, a feature can be qualified with its
enum class name (e.g.
+SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with the same
name.
]]>
</xs:documentation>
</xs:annotation>
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
index d925ea5aeaee..f67bb6ff9ca6 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd
@@ -8449,7 +8449,8 @@ To use custom Jackson modules referred from the Camel
registry. Multiple modules
<xs:documentation xml:lang="en">
<![CDATA[
Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
-by comma.
+by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g.
+SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with the same
name.
]]>
</xs:documentation>
</xs:annotation>
@@ -8459,7 +8460,8 @@ by comma.
<xs:documentation xml:lang="en">
<![CDATA[
Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be
-separated by comma.
+separated by comma. When using Jackson 3, a feature can be qualified with its
enum class name (e.g.
+SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with the same
name.
]]>
</xs:documentation>
</xs:annotation>
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
index d14e31756b49..320e9d67ea9f 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camelYamlDsl-model.json
@@ -12677,7 +12677,7 @@
}, {
"name" : "enableFeatures",
"type" : "string",
- "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.",
+ "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name.",
"title" : "Enable Features",
"displayName" : "Enable Features",
"kind" : "attribute",
@@ -12687,7 +12687,7 @@
}, {
"name" : "disableFeatures",
"type" : "string",
- "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.",
+ "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name.",
"title" : "Disable Features",
"displayName" : "Disable Features",
"kind" : "attribute",
diff --git
a/components/camel-jackson/src/generated/resources/META-INF/org/apache/camel/component/jackson/jackson.json
b/components/camel-jackson/src/generated/resources/META-INF/org/apache/camel/component/jackson/jackson.json
index eb263c4bf7ee..945a08984b3b 100644
---
a/components/camel-jackson/src/generated/resources/META-INF/org/apache/camel/component/jackson/jackson.json
+++
b/components/camel-jackson/src/generated/resources/META-INF/org/apache/camel/component/jackson/jackson.json
@@ -30,8 +30,8 @@
"useList": { "index": 11, "kind": "attribute", "displayName": "Use List",
"group": "common", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "To unmarshal to a List of Map or a List
of Pojo." },
"moduleClassNames": { "index": 12, "kind": "attribute", "displayName":
"Module Class Names", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "To use custom Jackson
modules com.fasterxml.jackson.databind.Module specified as a String with FQN
class names. Multiple classes can be separated by comma." },
"moduleRefs": { "index": 13, "kind": "attribute", "displayName": "Module
Refs", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "To use custom Jackson modules referred
from the Camel registry. Multiple modules can be separated by comma." },
- "enableFeatures": { "index": 14, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
- "disableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
+ "enableFeatures": { "index": 14, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. Seri [...]
+ "disableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. S [...]
"allowUnmarshallType": { "index": 16, "kind": "attribute", "displayName":
"Allow Unmarshall Type", "group": "common", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header
during the unmarshalling. This should only be enabled when desired to be used."
},
"timezone": { "index": 17, "kind": "attribute", "displayName": "Timezone",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "If set then Jackson will use the Timezone when
marshalling\/unmarshalling." },
"schemaResolver": { "index": 18, "kind": "attribute", "displayName":
"Schema Resolver", "group": "advanced", "label": "advanced", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.jackson.SchemaResolver", "deprecated": false,
"autowired": false, "secret": false, "description": "Optional schema resolver
used to lookup schemas for the data in transit." },
diff --git
a/components/camel-jackson3/src/generated/resources/META-INF/org/apache/camel/component/jackson3/jackson.json
b/components/camel-jackson3/src/generated/resources/META-INF/org/apache/camel/component/jackson3/jackson.json
index 501ba1bfef33..ba1d41ca01f0 100644
---
a/components/camel-jackson3/src/generated/resources/META-INF/org/apache/camel/component/jackson3/jackson.json
+++
b/components/camel-jackson3/src/generated/resources/META-INF/org/apache/camel/component/jackson3/jackson.json
@@ -30,8 +30,8 @@
"useList": { "index": 11, "kind": "attribute", "displayName": "Use List",
"group": "common", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "To unmarshal to a List of Map or a List
of Pojo." },
"moduleClassNames": { "index": 12, "kind": "attribute", "displayName":
"Module Class Names", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "To use custom Jackson
modules com.fasterxml.jackson.databind.Module specified as a String with FQN
class names. Multiple classes can be separated by comma." },
"moduleRefs": { "index": 13, "kind": "attribute", "displayName": "Module
Refs", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "To use custom Jackson modules referred
from the Camel registry. Multiple modules can be separated by comma." },
- "enableFeatures": { "index": 14, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
- "disableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
+ "enableFeatures": { "index": 14, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. Seri [...]
+ "disableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. S [...]
"allowUnmarshallType": { "index": 16, "kind": "attribute", "displayName":
"Allow Unmarshall Type", "group": "common", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header
during the unmarshalling. This should only be enabled when desired to be used."
},
"timezone": { "index": 17, "kind": "attribute", "displayName": "Timezone",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "If set then Jackson will use the Timezone when
marshalling\/unmarshalling." },
"schemaResolver": { "index": 18, "kind": "attribute", "displayName":
"Schema Resolver", "group": "advanced", "label": "advanced", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.jackson.SchemaResolver", "deprecated": false,
"autowired": false, "secret": false, "description": "Optional schema resolver
used to lookup schemas for the data in transit." },
diff --git
a/components/camel-jackson3/src/main/java/org/apache/camel/component/jackson3/AbstractJacksonDataFormat.java
b/components/camel-jackson3/src/main/java/org/apache/camel/component/jackson3/AbstractJacksonDataFormat.java
index e726d00c91a8..3735892fee59 100644
---
a/components/camel-jackson3/src/main/java/org/apache/camel/component/jackson3/AbstractJacksonDataFormat.java
+++
b/components/camel-jackson3/src/main/java/org/apache/camel/component/jackson3/AbstractJacksonDataFormat.java
@@ -417,7 +417,7 @@ public abstract class AbstractJacksonDataFormat extends
ServiceSupport
* Allows jackson to use the <tt>JMSType</tt> header as an indicator what
the classname is for unmarshaling content
* to POJO
* <p/>
- * By default this option is <tt>false</tt>.
+ * By default, this option is <tt>false</tt>.
*/
public void setAllowJmsType(boolean allowJmsType) {
this.allowJmsType = allowJmsType;
@@ -541,97 +541,97 @@ public abstract class AbstractJacksonDataFormat extends
ServiceSupport
public void enableFeature(SerializationFeature feature) {
if (enableFeatures == null) {
- enableFeatures = feature.name();
+ enableFeatures = feature.getDeclaringClass().getSimpleName() + "."
+ feature.name();
} else {
- enableFeatures += "," + feature.name();
+ enableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void enableFeature(DeserializationFeature feature) {
if (enableFeatures == null) {
- enableFeatures = feature.name();
+ enableFeatures = feature.getDeclaringClass().getSimpleName() + "."
+ feature.name();
} else {
- enableFeatures += "," + feature.name();
+ enableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void enableFeature(MapperFeature feature) {
if (enableFeatures == null) {
- enableFeatures = feature.name();
+ enableFeatures = feature.getDeclaringClass().getSimpleName() + "."
+ feature.name();
} else {
- enableFeatures += "," + feature.name();
+ enableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void enableFeature(Enum<? extends DatatypeFeature> feature) {
if (enableFeatures == null) {
- enableFeatures = feature.name();
+ enableFeatures = feature.getDeclaringClass().getSimpleName() + "."
+ feature.name();
} else {
- enableFeatures += "," + feature.name();
+ enableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void enableFeature(StreamReadFeature feature) {
if (enableFeatures == null) {
- enableFeatures = feature.name();
+ enableFeatures = feature.getDeclaringClass().getSimpleName() + "."
+ feature.name();
} else {
- enableFeatures += "," + feature.name();
+ enableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void enableFeature(StreamWriteFeature feature) {
if (enableFeatures == null) {
- enableFeatures = feature.name();
+ enableFeatures = feature.getDeclaringClass().getSimpleName() + "."
+ feature.name();
} else {
- enableFeatures += "," + feature.name();
+ enableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void disableFeature(SerializationFeature feature) {
if (disableFeatures == null) {
- disableFeatures = feature.name();
+ disableFeatures = feature.getDeclaringClass().getSimpleName() +
"." + feature.name();
} else {
- disableFeatures += "," + feature.name();
+ disableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void disableFeature(DeserializationFeature feature) {
if (disableFeatures == null) {
- disableFeatures = feature.name();
+ disableFeatures = feature.getDeclaringClass().getSimpleName() +
"." + feature.name();
} else {
- disableFeatures += "," + feature.name();
+ disableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void disableFeature(MapperFeature feature) {
if (disableFeatures == null) {
- disableFeatures = feature.name();
+ disableFeatures = feature.getDeclaringClass().getSimpleName() +
"." + feature.name();
} else {
- disableFeatures += "," + feature.name();
+ disableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void disableFeature(Enum<? extends DatatypeFeature> feature) {
if (disableFeatures == null) {
- disableFeatures = feature.name();
+ disableFeatures = feature.getDeclaringClass().getSimpleName() +
"." + feature.name();
} else {
- disableFeatures += "," + feature.name();
+ disableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void disableFeature(StreamReadFeature feature) {
if (disableFeatures == null) {
- disableFeatures = feature.name();
+ disableFeatures = feature.getDeclaringClass().getSimpleName() +
"." + feature.name();
} else {
- disableFeatures += "," + feature.name();
+ disableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
public void disableFeature(StreamWriteFeature feature) {
if (disableFeatures == null) {
- disableFeatures = feature.name();
+ disableFeatures = feature.getDeclaringClass().getSimpleName() +
"." + feature.name();
} else {
- disableFeatures += "," + feature.name();
+ disableFeatures += "," +
feature.getDeclaringClass().getSimpleName() + "." + feature.name();
}
}
@@ -675,7 +675,7 @@ public abstract class AbstractJacksonDataFormat extends
ServiceSupport
}
if (enableFeatures != null) {
- doEnableFeaures();
+ doEnableFeatures();
}
if (disableFeatures != null) {
doDisableFeatures();
@@ -737,64 +737,181 @@ public abstract class AbstractJacksonDataFormat extends
ServiceSupport
return objectMapperFoundRegistry;
}
- private void doEnableFeaures() {
+ private boolean trySetSerializationFeature(String featureValueName,
boolean state) {
+ SerializationFeature feature
+ =
getCamelContext().getTypeConverter().tryConvertTo(SerializationFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetDeserializationFeature(String featureValueName,
boolean state) {
+ DeserializationFeature feature
+ =
getCamelContext().getTypeConverter().tryConvertTo(DeserializationFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetMapperFeature(String featureValueName, boolean
state) {
+ MapperFeature feature =
getCamelContext().getTypeConverter().tryConvertTo(MapperFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetDateTimeFeature(String featureValueName, boolean
state) {
+ DateTimeFeature feature =
getCamelContext().getTypeConverter().tryConvertTo(DateTimeFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetEnumFeature(String featureValueName, boolean state) {
+ EnumFeature feature =
getCamelContext().getTypeConverter().tryConvertTo(EnumFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetJsonNodeFeature(String featureValueName, boolean
state) {
+ JsonNodeFeature feature =
getCamelContext().getTypeConverter().tryConvertTo(JsonNodeFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetStreamReadFeature(String featureValueName, boolean
state) {
+ StreamReadFeature feature
+ =
getCamelContext().getTypeConverter().tryConvertTo(StreamReadFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private boolean trySetStreamWriteFeature(String featureValueName, boolean
state) {
+ StreamWriteFeature feature
+ =
getCamelContext().getTypeConverter().tryConvertTo(StreamWriteFeature.class,
featureValueName);
+ if (feature == null) {
+ return false;
+ }
+ setObjectMapper(objectMapper.rebuild().configure(feature,
state).build());
+ return true;
+ }
+
+ private void doEnableFeatures() {
Iterator<?> it = ObjectHelper.createIterator(enableFeatures);
while (it.hasNext()) {
String enable = it.next().toString();
- // it can be different kind
- SerializationFeature sf
- =
getCamelContext().getTypeConverter().tryConvertTo(SerializationFeature.class,
enable);
- if (sf != null) {
- ObjectMapper om = objectMapper.rebuild().enable(sf).build();
- setObjectMapper(om);
- continue;
- }
- DeserializationFeature df
- =
getCamelContext().getTypeConverter().tryConvertTo(DeserializationFeature.class,
enable);
- if (df != null) {
- ObjectMapper om = objectMapper.rebuild().enable(df).build();
- setObjectMapper(om);
- continue;
- }
- MapperFeature mf =
getCamelContext().getTypeConverter().tryConvertTo(MapperFeature.class, enable);
- if (mf != null) {
- ObjectMapper om = objectMapper.rebuild().enable(mf).build();
- setObjectMapper(om);
- continue;
+ long dotCount = enable.chars().filter(ch -> ch == '.').count();
+ if (dotCount > 1) {
+ throw new IllegalArgumentException("Enable feature: " + enable
+ " cannot contain more than one '.'");
}
- DateTimeFeature dtf =
getCamelContext().getTypeConverter().tryConvertTo(DateTimeFeature.class,
enable);
- if (dtf != null) {
- ObjectMapper om = objectMapper.rebuild().enable(dtf).build();
- setObjectMapper(om);
- continue;
+
+ String featureClassName = null;
+ String featureValueName = enable;
+
+ if (dotCount == 1) {
+ String[] parts = enable.split("\\.", 2);
+ featureClassName = parts[0];
+ featureValueName = parts[1];
}
- EnumFeature ef =
getCamelContext().getTypeConverter().tryConvertTo(EnumFeature.class, enable);
- if (ef != null) {
- ObjectMapper om = objectMapper.rebuild().enable(ef).build();
- setObjectMapper(om);
- continue;
+
+ if (featureClassName != null) {
+ if (!switch (featureClassName) {
+ case "SerializationFeature" ->
trySetSerializationFeature(featureValueName, true);
+ case "DeserializationFeature" ->
trySetDeserializationFeature(featureValueName, true);
+ case "MapperFeature" ->
trySetMapperFeature(featureValueName, true);
+ case "DateTimeFeature" ->
trySetDateTimeFeature(featureValueName, true);
+ case "EnumFeature" -> trySetEnumFeature(featureValueName,
true);
+ case "JsonNodeFeature" ->
trySetJsonNodeFeature(featureValueName, true);
+ case "StreamReadFeature" ->
trySetStreamReadFeature(featureValueName, true);
+ case "StreamWriteFeature" ->
trySetStreamWriteFeature(featureValueName, true);
+ default -> false;
+ }) {
+ throw new IllegalArgumentException(
+ "Enable feature: " + enable
+ + " cannot be converted
to an accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]");
+ }
+ } else {
+ if (!trySetSerializationFeature(featureValueName, true)
+ && !trySetDeserializationFeature(featureValueName,
true)
+ && !trySetMapperFeature(featureValueName, true)
+ && !trySetDateTimeFeature(featureValueName, true)
+ && !trySetEnumFeature(featureValueName, true)
+ && !trySetJsonNodeFeature(featureValueName, true)
+ && !trySetStreamReadFeature(featureValueName, true)
+ && !trySetStreamWriteFeature(featureValueName, true)) {
+ throw new IllegalArgumentException(
+ "Enable feature: " + featureValueName
+ + " cannot be converted
to an accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]");
+ }
}
- JsonNodeFeature jnf =
getCamelContext().getTypeConverter().tryConvertTo(JsonNodeFeature.class,
enable);
- if (jnf != null) {
- ObjectMapper om = objectMapper.rebuild().enable(jnf).build();
- setObjectMapper(om);
- continue;
+ }
+ }
+
+ private void doDisableFeatures() {
+ Iterator<?> it = ObjectHelper.createIterator(disableFeatures);
+ while (it.hasNext()) {
+ String disable = it.next().toString();
+ long dotCount = disable.chars().filter(ch -> ch == '.').count();
+ if (dotCount > 1) {
+ throw new IllegalArgumentException("Disable feature: " +
disable + " cannot contain more than one '.'");
}
- StreamReadFeature srf =
getCamelContext().getTypeConverter().tryConvertTo(StreamReadFeature.class,
enable);
- if (srf != null) {
- ObjectMapper om = objectMapper.rebuild().enable(srf).build();
- setObjectMapper(om);
- continue;
+
+ String featureClassName = null;
+ String featureValueName = disable;
+
+ if (dotCount == 1) {
+ String[] parts = disable.split("\\.", 2);
+ featureClassName = parts[0];
+ featureValueName = parts[1];
}
- StreamWriteFeature swf =
getCamelContext().getTypeConverter().tryConvertTo(StreamWriteFeature.class,
enable);
- if (swf != null) {
- ObjectMapper om = objectMapper.rebuild().enable(swf).build();
- setObjectMapper(om);
- continue;
+
+ if (featureClassName != null) {
+ if (!switch (featureClassName) {
+ case "SerializationFeature" ->
trySetSerializationFeature(featureValueName, false);
+ case "DeserializationFeature" ->
trySetDeserializationFeature(featureValueName, false);
+ case "MapperFeature" ->
trySetMapperFeature(featureValueName, false);
+ case "DateTimeFeature" ->
trySetDateTimeFeature(featureValueName, false);
+ case "EnumFeature" -> trySetEnumFeature(featureValueName,
false);
+ case "JsonNodeFeature" ->
trySetJsonNodeFeature(featureValueName, false);
+ case "StreamReadFeature" ->
trySetStreamReadFeature(featureValueName, false);
+ case "StreamWriteFeature" ->
trySetStreamWriteFeature(featureValueName, false);
+ default -> false;
+ }) {
+ throw new IllegalArgumentException(
+ "Disable feature: " + disable
+ + " cannot be converted
to an accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]");
+ }
+ } else {
+ if (!trySetSerializationFeature(featureValueName, false)
+ && !trySetDeserializationFeature(featureValueName,
false)
+ && !trySetMapperFeature(featureValueName, false)
+ && !trySetDateTimeFeature(featureValueName, false)
+ && !trySetEnumFeature(featureValueName, false)
+ && !trySetJsonNodeFeature(featureValueName, false)
+ && !trySetStreamReadFeature(featureValueName, false)
+ && !trySetStreamWriteFeature(featureValueName, false))
{
+ throw new IllegalArgumentException(
+ "Disable feature: " + featureValueName
+ + " cannot be converted
to an accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]");
+ }
}
- throw new IllegalArgumentException(
- "Enable feature: " + enable
- + " cannot be converted to an
accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]");
}
}
@@ -868,67 +985,6 @@ public abstract class AbstractJacksonDataFormat extends
ServiceSupport
}
}
- private void doDisableFeatures() {
- Iterator<?> it = ObjectHelper.createIterator(disableFeatures);
- while (it.hasNext()) {
- String disable = it.next().toString();
- // it can be different kind
- SerializationFeature sf
- =
getCamelContext().getTypeConverter().tryConvertTo(SerializationFeature.class,
disable);
- if (sf != null) {
- ObjectMapper om = objectMapper.rebuild().disable(sf).build();
- setObjectMapper(om);
- continue;
- }
- DeserializationFeature df
- =
getCamelContext().getTypeConverter().tryConvertTo(DeserializationFeature.class,
disable);
- if (df != null) {
- ObjectMapper om = objectMapper.rebuild().disable(df).build();
- setObjectMapper(om);
- continue;
- }
- MapperFeature mf =
getCamelContext().getTypeConverter().tryConvertTo(MapperFeature.class, disable);
- if (mf != null) {
- ObjectMapper om = objectMapper.rebuild().disable(mf).build();
- setObjectMapper(om);
- continue;
- }
- DateTimeFeature dtf =
getCamelContext().getTypeConverter().tryConvertTo(DateTimeFeature.class,
disable);
- if (dtf != null) {
- ObjectMapper om = objectMapper.rebuild().disable(dtf).build();
- setObjectMapper(om);
- continue;
- }
- EnumFeature ef =
getCamelContext().getTypeConverter().tryConvertTo(EnumFeature.class, disable);
- if (ef != null) {
- ObjectMapper om = objectMapper.rebuild().disable(ef).build();
- setObjectMapper(om);
- continue;
- }
- JsonNodeFeature jnf =
getCamelContext().getTypeConverter().tryConvertTo(JsonNodeFeature.class,
disable);
- if (jnf != null) {
- ObjectMapper om = objectMapper.rebuild().disable(jnf).build();
- setObjectMapper(om);
- continue;
- }
- StreamReadFeature srf =
getCamelContext().getTypeConverter().tryConvertTo(StreamReadFeature.class,
disable);
- if (srf != null) {
- ObjectMapper om = objectMapper.rebuild().disable(srf).build();
- setObjectMapper(om);
- continue;
- }
- StreamWriteFeature swf =
getCamelContext().getTypeConverter().tryConvertTo(StreamWriteFeature.class,
disable);
- if (swf != null) {
- ObjectMapper om = objectMapper.rebuild().disable(swf).build();
- setObjectMapper(om);
- continue;
- }
- throw new IllegalArgumentException(
- "Disable feature: " + disable
- + " cannot be converted to an
accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]");
- }
- }
-
private PropertyNamingStrategy determineNamingStrategy(String
namingStrategy) {
PropertyNamingStrategy strategy = null;
switch (namingStrategy) {
diff --git
a/components/camel-jackson3/src/test/java/org/apache/camel/component/jackson3/JacksonFeaturesTest.java
b/components/camel-jackson3/src/test/java/org/apache/camel/component/jackson3/JacksonFeaturesTest.java
index 93c6846cc5b2..c35f75ca987e 100644
---
a/components/camel-jackson3/src/test/java/org/apache/camel/component/jackson3/JacksonFeaturesTest.java
+++
b/components/camel-jackson3/src/test/java/org/apache/camel/component/jackson3/JacksonFeaturesTest.java
@@ -23,14 +23,77 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit6.CamelTestSupport;
import org.junit.jupiter.api.Test;
+import tools.jackson.core.StreamReadFeature;
import tools.jackson.core.StreamWriteFeature;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.MapperFeature;
import tools.jackson.databind.SerializationFeature;
import tools.jackson.databind.cfg.DateTimeFeature;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
public class JacksonFeaturesTest extends CamelTestSupport {
+ @Test
+ public void testEnableWrongSyntaxOfFeature() throws Exception {
+ JacksonDataFormat format = new JacksonDataFormat();
+ format.setEnableFeatures("Package.Enum.FEATURE");
+ format.setCamelContext(context());
+ IllegalArgumentException ex =
assertThrows(IllegalArgumentException.class, () -> format.doStart());
+ assertEquals("Enable feature: Package.Enum.FEATURE cannot contain more
than one '.'", ex.getMessage());
+ }
+
+ @Test
+ public void testEnableWrongTypedFeatureWithClassName() throws Exception {
+ JacksonDataFormat format = new JacksonDataFormat();
+ format.setEnableFeatures("Enum.FEATURE");
+ format.setCamelContext(context());
+ IllegalArgumentException ex =
assertThrows(IllegalArgumentException.class, () -> format.doStart());
+ assertEquals(
+ "Enable feature: Enum.FEATURE cannot be converted to an
accepted enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]",
+ ex.getMessage());
+ }
+
+ @Test
+ public void testEnableWrongTypedFeatureWithoutClassName() throws Exception
{
+ JacksonDataFormat format = new JacksonDataFormat();
+ format.setEnableFeatures("FEATURE");
+ format.setCamelContext(context());
+ IllegalArgumentException ex =
assertThrows(IllegalArgumentException.class, () -> format.doStart());
+ assertEquals(
+ "Enable feature: FEATURE cannot be converted to an accepted
enum of types
[SerializationFeature,DeserializationFeature,MapperFeature,DateTimeFeature,EnumFeature,JsonNodeFeature,StreamReadFeature,StreamWriteFeature]",
+ ex.getMessage());
+ }
+
+ @Test
+ public void testEnableStrictDuplicateDetectionFromDifferentFeatures()
throws Exception {
+ // Initialization by implementation order (StreamReadFeature before
StreamWriteFeature)
+ JacksonDataFormat format1 = new JacksonDataFormat();
+ format1.setEnableFeatures("STRICT_DUPLICATE_DETECTION");
+ format1.setCamelContext(context());
+ format1.doStart();
+
assertTrue(format1.getObjectMapper().isEnabled(StreamReadFeature.STRICT_DUPLICATE_DETECTION));
+
assertFalse(format1.getObjectMapper().isEnabled(StreamWriteFeature.STRICT_DUPLICATE_DETECTION));
+
+ // Explicit declaration of implementing feature set
+ JacksonDataFormat format2 = new JacksonDataFormat();
+
format2.setEnableFeatures("StreamReadFeature.STRICT_DUPLICATE_DETECTION");
+ format2.setCamelContext(context());
+ format2.doStart();
+
assertTrue(format2.getObjectMapper().isEnabled(StreamReadFeature.STRICT_DUPLICATE_DETECTION));
+
assertFalse(format2.getObjectMapper().isEnabled(StreamWriteFeature.STRICT_DUPLICATE_DETECTION));
+
+ JacksonDataFormat format3 = new JacksonDataFormat();
+
format3.setEnableFeatures("StreamWriteFeature.STRICT_DUPLICATE_DETECTION");
+ format3.setCamelContext(context());
+ format3.doStart();
+
assertFalse(format3.getObjectMapper().isEnabled(StreamReadFeature.STRICT_DUPLICATE_DETECTION));
+
assertTrue(format3.getObjectMapper().isEnabled(StreamWriteFeature.STRICT_DUPLICATE_DETECTION));
+ }
+
@Test
public void testEnableDeserializationFeature() throws Exception {
MockEndpoint mock = getMockEndpoint("mock:result");
diff --git
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/json.json
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/json.json
index f42ba35001f4..ebabe678aede 100644
---
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/json.json
+++
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/json.json
@@ -27,8 +27,8 @@
"useList": { "index": 12, "kind": "attribute", "displayName": "Use List",
"group": "common", "required": false, "type": "boolean", "javaType":
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false,
"defaultValue": false, "description": "To unmarshal to a List of Map or a List
of Pojo." },
"moduleClassNames": { "index": 13, "kind": "attribute", "displayName":
"Module Class Names", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "To use custom Jackson
modules com.fasterxml.jackson.databind.Module specified as a String with FQN
class names. Multiple classes can be separated by comma." },
"moduleRefs": { "index": 14, "kind": "attribute", "displayName": "Module
Refs", "group": "advanced", "label": "advanced", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "To use custom Jackson modules referred
from the Camel registry. Multiple modules can be separated by comma." },
- "enableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
- "disableFeatures": { "index": 16, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma." },
+ "enableFeatures": { "index": 15, "kind": "attribute", "displayName":
"Enable Features", "group": "advanced", "label": "advanced", "required": false,
"type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to enable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. Seri [...]
+ "disableFeatures": { "index": 16, "kind": "attribute", "displayName":
"Disable Features", "group": "advanced", "label": "advanced", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Set of features to disable
on the Jackson com.fasterxml.jackson.databind.ObjectMapper. Multiple features
can be separated by comma. When using Jackson 3, a feature can be qualified
with its enum class name (e.g. S [...]
"allowUnmarshallType": { "index": 17, "kind": "attribute", "displayName":
"Allow Unmarshall Type", "group": "common", "required": false, "type":
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired":
false, "secret": false, "defaultValue": false, "description": "If enabled then
Jackson is allowed to attempt to use the CamelJacksonUnmarshalType header
during the unmarshalling. This should only be enabled when desired to be used."
},
"timezone": { "index": 18, "kind": "attribute", "displayName": "Timezone",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "If set then Jackson will use the Timezone when
marshalling\/unmarshalling." },
"schemaResolver": { "index": 19, "kind": "attribute", "displayName":
"Schema Resolver", "group": "advanced", "label": "advanced", "required": false,
"type": "object", "javaType":
"org.apache.camel.component.jackson.SchemaResolver", "deprecated": false,
"autowired": false, "secret": false, "description": "Optional schema resolver
used to lookup schemas for the data in transit." },
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
index addd9ccd0c67..76a92bbb0b45 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/JsonDataFormat.java
@@ -100,11 +100,13 @@ public class JsonDataFormat extends DataFormatDefinition
implements ContentTypeH
private String moduleRefs;
@XmlAttribute
@Metadata(label = "advanced",
- description = "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.")
+ description = "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma."
+ + " When using Jackson 3, a feature can be
qualified with its enum class name (e.g. SerializationFeature.WRAP_ROOT_VALUE)
to tell apart features with the same name.")
private String enableFeatures;
@XmlAttribute
@Metadata(label = "advanced",
- description = "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.")
+ description = "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma."
+ + " When using Jackson 3, a feature can be
qualified with its enum class name (e.g. SerializationFeature.WRAP_ROOT_VALUE)
to tell apart features with the same name.")
private String disableFeatures;
@XmlAttribute
@Metadata(javaType = "java.lang.Boolean",
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index 883bd2d30b8d..6601855fc940 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -8198,8 +8198,8 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
@YamlProperty(name = "combineUnicodeSurrogates", type =
"boolean", defaultValue = "false", description = "Force generator that outputs
JSON content to combine surrogate pairs (if any) into 4-byte characters. This
should be preferred when using 4-byte characters such as Japanese.",
displayName = "Combine Unicode Surrogates"),
@YamlProperty(name = "contentTypeHeader", type =
"boolean", defaultValue = "true", description = "Whether the data format should
set the Content-Type header with the type from the data format. For example
application/xml for data formats marshalling to XML, or application/json for
data formats marshalling to JSON", displayName = "Content Type Header"),
@YamlProperty(name = "dateFormatPattern", type = "string",
description = "To configure the date format while marshall or unmarshall Date
fields in JSON using Gson", displayName = "Date Format Pattern"),
- @YamlProperty(name = "disableFeatures", type = "string",
description = "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.", displayName = "Disable Features"),
- @YamlProperty(name = "enableFeatures", type = "string",
description = "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.", displayName = "Enable Features"),
+ @YamlProperty(name = "disableFeatures", type = "string",
description = "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name.", displayName = "Disable Features"),
+ @YamlProperty(name = "enableFeatures", type = "string",
description = "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name.", displayName = "Enable Features"),
@YamlProperty(name = "id", type = "string", description =
"The id of this node", displayName = "Id"),
@YamlProperty(name = "include", type = "string",
description = "If you want to marshal a POJO to JSON, and the POJO has some
fields with null values. And you want to skip these null values, you can set
this option to NON_NULL.", displayName = "Include"),
@YamlProperty(name = "jsonView", type = "string",
description = "When marshalling a POJO to JSON you might want to exclude
certain fields from the JSON output. With Jackson you can use JSON views to
accomplish this. This option is to refer to the class which has JsonView
annotations.", displayName = "Json View"),
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
index 1e6fd6f8c93d..86b49fb70073 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-canonical.json
@@ -7951,12 +7951,12 @@
"disableFeatures" : {
"type" : "string",
"title" : "Disable Features",
- "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma."
+ "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name."
},
"enableFeatures" : {
"type" : "string",
"title" : "Enable Features",
- "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma."
+ "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name."
},
"id" : {
"type" : "string",
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
index d14e31756b49..320e9d67ea9f 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl-model.json
@@ -12677,7 +12677,7 @@
}, {
"name" : "enableFeatures",
"type" : "string",
- "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.",
+ "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name.",
"title" : "Enable Features",
"displayName" : "Enable Features",
"kind" : "attribute",
@@ -12687,7 +12687,7 @@
}, {
"name" : "disableFeatures",
"type" : "string",
- "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma.",
+ "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name.",
"title" : "Disable Features",
"displayName" : "Disable Features",
"kind" : "attribute",
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 b998d8b107b7..8561e8fbf1b5 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
@@ -10138,12 +10138,12 @@
"disableFeatures" : {
"type" : "string",
"title" : "Disable Features",
- "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma."
+ "description" : "Set of features to disable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name."
},
"enableFeatures" : {
"type" : "string",
"title" : "Enable Features",
- "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma."
+ "description" : "Set of features to enable on the Jackson
com.fasterxml.jackson.databind.ObjectMapper. Multiple features can be separated
by comma. When using Jackson 3, a feature can be qualified with its enum class
name (e.g. SerializationFeature.WRAP_ROOT_VALUE) to tell apart features with
the same name."
},
"id" : {
"type" : "string",