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 949378ac8ffb CAMEL-12941: camel-bindy - Add option to use null as
default value for string types (#20607)
949378ac8ffb is described below
commit 949378ac8ffbd14b488ee8efcd68967ead30e27b
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Dec 28 16:29:46 2025 +0100
CAMEL-12941: camel-bindy - Add option to use null as default value for
string types (#20607)
---
.../apache/camel/catalog/dataformats/bindyCsv.json | 7 +-
.../camel/catalog/dataformats/bindyFixed.json | 7 +-
.../apache/camel/catalog/dataformats/bindyKvp.json | 7 +-
.../org/apache/camel/catalog/models/bindy.json | 7 +-
.../apache/camel/catalog/schemas/camel-spring.xsd | 9 +++
.../apache/camel/catalog/schemas/camel-xml-io.xsd | 9 +++
.../bindy/csv/BindyCsvDataFormatConfigurer.java | 7 ++
.../BindyFixedLengthDataFormatConfigurer.java | 7 ++
.../kvp/BindyKeyValuePairDataFormatConfigurer.java | 7 ++
.../camel/dataformat/bindy/csv/bindyCsv.json | 7 +-
.../camel/dataformat/bindy/fixed/bindyFixed.json | 7 +-
.../camel/dataformat/bindy/kvp/bindyKvp.json | 7 +-
.../dataformat/bindy/BindyAbstractDataFormat.java | 9 +++
.../dataformat/bindy/BindyAbstractFactory.java | 13 +++-
.../camel/dataformat/bindy/BindyCsvFactory.java | 3 +-
.../dataformat/bindy/BindyFixedLengthFactory.java | 2 +-
.../dataformat/bindy/BindyKeyValuePairFactory.java | 11 +--
.../dataformat/bindy/csv/BindyCsvDataFormat.java | 2 +
.../bindy/fixed/BindyFixedLengthDataFormat.java | 2 +
.../bindy/kvp/BindyKeyValuePairDataFormat.java | 2 +
.../csv/BindyCsvStringDefaultValueAsNullTest.java | 89 ++++++++++++++++++++++
.../org/apache/camel/model/dataformat/bindy.json | 7 +-
.../camel/model/dataformat/BindyDataFormat.java | 41 ++++++++++
.../reifier/dataformat/BindyDataFormatReifier.java | 1 +
.../java/org/apache/camel/xml/in/ModelParser.java | 1 +
.../java/org/apache/camel/xml/out/ModelWriter.java | 1 +
.../org/apache/camel/yaml/out/ModelWriter.java | 1 +
.../dsl/yaml/deserializers/ModelDeserializers.java | 6 ++
.../generated/resources/schema/camelYamlDsl.json | 6 ++
29 files changed, 252 insertions(+), 33 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyCsv.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyCsv.json
index 3cfd47c433f5..9b38f3e4a6ca 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyCsv.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyCsv.json
@@ -19,8 +19,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "Csv", "description": "Whether to use Csv, Fixed, or KeyValue."
},
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyFixed.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyFixed.json
index ade37abcfd1f..49640bcfde6c 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyFixed.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyFixed.json
@@ -19,8 +19,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "Fixed", "description": "Whether to use Csv, Fixed, or
KeyValue." },
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyKvp.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyKvp.json
index 8c3e6c2546f9..b3990f45eddb 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyKvp.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/dataformats/bindyKvp.json
@@ -19,8 +19,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "KeyValue", "description": "Whether to use Csv, Fixed, or
KeyValue." },
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/bindy.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/bindy.json
index ed8ce02c8bc5..2fada12392f1 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/bindy.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/bindy.json
@@ -16,8 +16,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Whether to use Csv, Fixed, or KeyValue." },
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
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 b3d10e2eb135..fa6796c0b9fa 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
@@ -8070,6 +8070,15 @@ Whether to use Csv, Fixed, or KeyValue.
<xs:documentation xml:lang="en">
<![CDATA[
Name of model class to use.
+]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="defaultValueStringAsNull" type="xs:string">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+<![CDATA[
+To change the default value for string types to be null instead of an empty
string. Default value: false
]]>
</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 d0ea0a2d90bb..03ac2e467303 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
@@ -6743,6 +6743,15 @@ Whether to use Csv, Fixed, or KeyValue.
<xs:documentation xml:lang="en">
<![CDATA[
Name of model class to use.
+]]>
+ </xs:documentation>
+ </xs:annotation>
+ </xs:attribute>
+ <xs:attribute name="defaultValueStringAsNull" type="xs:string">
+ <xs:annotation>
+ <xs:documentation xml:lang="en">
+<![CDATA[
+To change the default value for string types to be null instead of an empty
string. Default value: false
]]>
</xs:documentation>
</xs:annotation>
diff --git
a/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormatConfigurer.java
b/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormatConfigurer.java
index 5bbb3c149039..00d603319d9a 100644
---
a/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormatConfigurer.java
+++
b/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormatConfigurer.java
@@ -24,6 +24,7 @@ public class BindyCsvDataFormatConfigurer extends
org.apache.camel.support.compo
Map<String, Object> map = new CaseInsensitiveMap();
map.put("AllowEmptyStream", boolean.class);
map.put("ClassType", java.lang.Class.class);
+ map.put("DefaultValueStringAsNull", boolean.class);
map.put("Locale", java.lang.String.class);
map.put("UnwrapSingleInstance", boolean.class);
ALL_OPTIONS = map;
@@ -37,6 +38,8 @@ public class BindyCsvDataFormatConfigurer extends
org.apache.camel.support.compo
case "allowEmptyStream":
target.setAllowEmptyStream(property(camelContext, boolean.class, value));
return true;
case "classtype":
case "classType": target.setClassType(property(camelContext,
java.lang.Class.class, value)); return true;
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull":
target.setDefaultValueStringAsNull(property(camelContext, boolean.class,
value)); return true;
case "locale": target.setLocale(property(camelContext,
java.lang.String.class, value)); return true;
case "unwrapsingleinstance":
case "unwrapSingleInstance":
target.setUnwrapSingleInstance(property(camelContext, boolean.class, value));
return true;
@@ -56,6 +59,8 @@ public class BindyCsvDataFormatConfigurer extends
org.apache.camel.support.compo
case "allowEmptyStream": return boolean.class;
case "classtype":
case "classType": return java.lang.Class.class;
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull": return boolean.class;
case "locale": return java.lang.String.class;
case "unwrapsingleinstance":
case "unwrapSingleInstance": return boolean.class;
@@ -71,6 +76,8 @@ public class BindyCsvDataFormatConfigurer extends
org.apache.camel.support.compo
case "allowEmptyStream": return target.isAllowEmptyStream();
case "classtype":
case "classType": return target.getClassType();
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull": return
target.isDefaultValueStringAsNull();
case "locale": return target.getLocale();
case "unwrapsingleinstance":
case "unwrapSingleInstance": return target.isUnwrapSingleInstance();
diff --git
a/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormatConfigurer.java
b/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormatConfigurer.java
index 20c11ef151cc..caa4898e96d4 100644
---
a/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormatConfigurer.java
+++
b/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormatConfigurer.java
@@ -24,6 +24,7 @@ public class BindyFixedLengthDataFormatConfigurer extends
org.apache.camel.suppo
Map<String, Object> map = new CaseInsensitiveMap();
map.put("AllowEmptyStream", boolean.class);
map.put("ClassType", java.lang.Class.class);
+ map.put("DefaultValueStringAsNull", boolean.class);
map.put("Locale", java.lang.String.class);
map.put("UnwrapSingleInstance", boolean.class);
ALL_OPTIONS = map;
@@ -37,6 +38,8 @@ public class BindyFixedLengthDataFormatConfigurer extends
org.apache.camel.suppo
case "allowEmptyStream":
target.setAllowEmptyStream(property(camelContext, boolean.class, value));
return true;
case "classtype":
case "classType": target.setClassType(property(camelContext,
java.lang.Class.class, value)); return true;
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull":
target.setDefaultValueStringAsNull(property(camelContext, boolean.class,
value)); return true;
case "locale": target.setLocale(property(camelContext,
java.lang.String.class, value)); return true;
case "unwrapsingleinstance":
case "unwrapSingleInstance":
target.setUnwrapSingleInstance(property(camelContext, boolean.class, value));
return true;
@@ -56,6 +59,8 @@ public class BindyFixedLengthDataFormatConfigurer extends
org.apache.camel.suppo
case "allowEmptyStream": return boolean.class;
case "classtype":
case "classType": return java.lang.Class.class;
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull": return boolean.class;
case "locale": return java.lang.String.class;
case "unwrapsingleinstance":
case "unwrapSingleInstance": return boolean.class;
@@ -71,6 +76,8 @@ public class BindyFixedLengthDataFormatConfigurer extends
org.apache.camel.suppo
case "allowEmptyStream": return target.isAllowEmptyStream();
case "classtype":
case "classType": return target.getClassType();
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull": return
target.isDefaultValueStringAsNull();
case "locale": return target.getLocale();
case "unwrapsingleinstance":
case "unwrapSingleInstance": return target.isUnwrapSingleInstance();
diff --git
a/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormatConfigurer.java
b/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormatConfigurer.java
index c63dcfd8083f..ab6e2cb7f3e2 100644
---
a/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormatConfigurer.java
+++
b/components/camel-bindy/src/generated/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormatConfigurer.java
@@ -24,6 +24,7 @@ public class BindyKeyValuePairDataFormatConfigurer extends
org.apache.camel.supp
Map<String, Object> map = new CaseInsensitiveMap();
map.put("AllowEmptyStream", boolean.class);
map.put("ClassType", java.lang.Class.class);
+ map.put("DefaultValueStringAsNull", boolean.class);
map.put("Locale", java.lang.String.class);
map.put("UnwrapSingleInstance", boolean.class);
ALL_OPTIONS = map;
@@ -37,6 +38,8 @@ public class BindyKeyValuePairDataFormatConfigurer extends
org.apache.camel.supp
case "allowEmptyStream":
target.setAllowEmptyStream(property(camelContext, boolean.class, value));
return true;
case "classtype":
case "classType": target.setClassType(property(camelContext,
java.lang.Class.class, value)); return true;
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull":
target.setDefaultValueStringAsNull(property(camelContext, boolean.class,
value)); return true;
case "locale": target.setLocale(property(camelContext,
java.lang.String.class, value)); return true;
case "unwrapsingleinstance":
case "unwrapSingleInstance":
target.setUnwrapSingleInstance(property(camelContext, boolean.class, value));
return true;
@@ -56,6 +59,8 @@ public class BindyKeyValuePairDataFormatConfigurer extends
org.apache.camel.supp
case "allowEmptyStream": return boolean.class;
case "classtype":
case "classType": return java.lang.Class.class;
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull": return boolean.class;
case "locale": return java.lang.String.class;
case "unwrapsingleinstance":
case "unwrapSingleInstance": return boolean.class;
@@ -71,6 +76,8 @@ public class BindyKeyValuePairDataFormatConfigurer extends
org.apache.camel.supp
case "allowEmptyStream": return target.isAllowEmptyStream();
case "classtype":
case "classType": return target.getClassType();
+ case "defaultvaluestringasnull":
+ case "defaultValueStringAsNull": return
target.isDefaultValueStringAsNull();
case "locale": return target.getLocale();
case "unwrapsingleinstance":
case "unwrapSingleInstance": return target.isUnwrapSingleInstance();
diff --git
a/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/csv/bindyCsv.json
b/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/csv/bindyCsv.json
index 3cfd47c433f5..9b38f3e4a6ca 100644
---
a/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/csv/bindyCsv.json
+++
b/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/csv/bindyCsv.json
@@ -19,8 +19,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "Csv", "description": "Whether to use Csv, Fixed, or KeyValue."
},
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/fixed/bindyFixed.json
b/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/fixed/bindyFixed.json
index ade37abcfd1f..49640bcfde6c 100644
---
a/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/fixed/bindyFixed.json
+++
b/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/fixed/bindyFixed.json
@@ -19,8 +19,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "Fixed", "description": "Whether to use Csv, Fixed, or
KeyValue." },
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/kvp/bindyKvp.json
b/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/kvp/bindyKvp.json
index 8c3e6c2546f9..b3990f45eddb 100644
---
a/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/kvp/bindyKvp.json
+++
b/components/camel-bindy/src/generated/resources/META-INF/org/apache/camel/dataformat/bindy/kvp/bindyKvp.json
@@ -19,8 +19,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "KeyValue", "description": "Whether to use Csv, Fixed, or
KeyValue." },
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
index 9e39fe187aea..2be9f975da51 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
@@ -51,6 +51,7 @@ public abstract class BindyAbstractDataFormat extends
ServiceSupport implements
private CamelContext camelContext;
private boolean unwrapSingleInstance = true;
private boolean allowEmptyStream;
+ private boolean defaultValueStringAsNull;
protected BindyAbstractDataFormat() {
}
@@ -91,6 +92,14 @@ public abstract class BindyAbstractDataFormat extends
ServiceSupport implements
this.allowEmptyStream = allowEmptyStream;
}
+ public boolean isDefaultValueStringAsNull() {
+ return defaultValueStringAsNull;
+ }
+
+ public void setDefaultValueStringAsNull(boolean defaultValueStringAsNull) {
+ this.defaultValueStringAsNull = defaultValueStringAsNull;
+ }
+
public BindyAbstractFactory getFactory() throws Exception {
if (modelFactory == null) {
FormatFactory formatFactory = createFormatFactory();
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java
index 7821be29b43a..add9f55cffe8 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractFactory.java
@@ -49,6 +49,7 @@ public abstract class BindyAbstractFactory implements
BindyFactory {
private String locale;
private Class<?> type;
+ private boolean defaultValueStringAsNull;
protected BindyAbstractFactory(Class<?> type) throws Exception {
this.type = type;
@@ -214,7 +215,7 @@ public abstract class BindyAbstractFactory implements
BindyFactory {
return nf;
}
- public static Object getDefaultValueForPrimitive(Class<?> clazz) {
+ public static Object getDefaultValueForPrimitive(Class<?> clazz, boolean
defaultValueStringAsNull) {
if (clazz == byte.class) {
return Byte.MIN_VALUE;
} else if (clazz == short.class) {
@@ -232,7 +233,7 @@ public abstract class BindyAbstractFactory implements
BindyFactory {
} else if (clazz == boolean.class) {
return false;
} else if (clazz == String.class) {
- return "";
+ return defaultValueStringAsNull ? null : "";
} else {
return null;
}
@@ -282,4 +283,12 @@ public abstract class BindyAbstractFactory implements
BindyFactory {
public void setFormatFactory(FormatFactory formatFactory) {
this.formatFactory = formatFactory;
}
+
+ public boolean isDefaultValueStringAsNull() {
+ return defaultValueStringAsNull;
+ }
+
+ public void setDefaultValueStringAsNull(boolean defaultValueStringAsNull) {
+ this.defaultValueStringAsNull = defaultValueStringAsNull;
+ }
}
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java
index ab7fc5faa43d..9c095e08402a 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyCsvFactory.java
@@ -270,7 +270,7 @@ public class BindyCsvFactory extends BindyAbstractFactory
implements BindyFactor
if (!dataField.defaultValue().isEmpty()) {
value = format.parse(dataField.defaultValue());
} else {
- value = getDefaultValueForPrimitive(field.getType());
+ value = getDefaultValueForPrimitive(field.getType(),
isDefaultValueStringAsNull());
}
}
@@ -802,4 +802,5 @@ public class BindyCsvFactory extends BindyAbstractFactory
implements BindyFactor
public boolean isTrimLine() {
return trimLine;
}
+
}
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java
index ea9c5efbefda..6524eebf1941 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyFixedLengthFactory.java
@@ -288,7 +288,7 @@ public class BindyFixedLengthFactory extends
BindyAbstractFactory implements Bin
e);
}
} else {
- value = getDefaultValueForPrimitive(field.getType());
+ value = getDefaultValueForPrimitive(field.getType(),
isDefaultValueStringAsNull());
}
if (value != null && !dataField.method().isEmpty()) {
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
index cbba5a2cace1..70d38f0eec27 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
@@ -214,7 +214,7 @@ public class BindyKeyValuePairFactory extends
BindyAbstractFactory implements Bi
throw new IllegalArgumentException("The mandatory
key/tag : " + key + " has not been defined !");
}
- Object result =
getDefaultValueForPrimitive(field.getType());
+ Object result =
getDefaultValueForPrimitive(field.getType(), isDefaultValueStringAsNull());
try {
field.set(obj, result);
@@ -243,7 +243,7 @@ public class BindyKeyValuePairFactory extends
BindyAbstractFactory implements Bi
obj = clazz.newInstance();
}
- Object result =
getDefaultValueForPrimitive(field.getType());
+ Object result =
getDefaultValueForPrimitive(field.getType(), isDefaultValueStringAsNull());
try {
field.set(obj, result);
} catch (Exception e) {
@@ -299,7 +299,7 @@ public class BindyKeyValuePairFactory extends
BindyAbstractFactory implements Bi
LOG.debug("Value formated : {}", result);
} else {
- result =
getDefaultValueForPrimitive(field.getType());
+ result =
getDefaultValueForPrimitive(field.getType(), isDefaultValueStringAsNull());
}
try {
field.set(obj, result);
@@ -344,7 +344,8 @@ public class BindyKeyValuePairFactory extends
BindyAbstractFactory implements Bi
if (value != null) {
field.set(obj, result);
} else {
- field.set(obj,
getDefaultValueForPrimitive(field.getType()));
+ field.set(obj,
+
getDefaultValueForPrimitive(field.getType(), isDefaultValueStringAsNull()));
}
} catch (Exception e) {
throw new IllegalArgumentException(
@@ -376,7 +377,7 @@ public class BindyKeyValuePairFactory extends
BindyAbstractFactory implements Bi
} else {
// No values found from message
- Object result =
getDefaultValueForPrimitive(field.getType());
+ Object result =
getDefaultValueForPrimitive(field.getType(), isDefaultValueStringAsNull());
try {
field.set(obj, result);
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
index 03328b10d089..6c38ec2d92a1 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
@@ -394,6 +394,8 @@ public class BindyCsvDataFormat extends
BindyAbstractDataFormat {
protected BindyAbstractFactory createModelFactory(FormatFactory
formatFactory) throws Exception {
BindyCsvFactory bindyCsvFactory = new BindyCsvFactory(getClassType());
bindyCsvFactory.setFormatFactory(formatFactory);
+
bindyCsvFactory.setDefaultValueStringAsNull(isDefaultValueStringAsNull());
+ bindyCsvFactory.setLocale(getLocale());
return bindyCsvFactory;
}
}
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
index 6bb3fa68b701..51404e36edcd 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
@@ -343,6 +343,8 @@ public class BindyFixedLengthDataFormat extends
BindyAbstractDataFormat {
BindyFixedLengthFactory factory = new
BindyFixedLengthFactory(getClassType());
factory.setFormatFactory(formatFactory);
+ factory.setLocale(getLocale());
+ factory.setDefaultValueStringAsNull(isDefaultValueStringAsNull());
// Optionally initialize the header factory... using header model
classes
if (factory.hasHeader()) {
diff --git
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
index 7134290c6675..25e18bf21cdf 100644
---
a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
+++
b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
@@ -183,6 +183,8 @@ public class BindyKeyValuePairDataFormat extends
BindyAbstractDataFormat {
protected BindyAbstractFactory createModelFactory(FormatFactory
formatFactory) throws Exception {
BindyKeyValuePairFactory bindyKeyValuePairFactory = new
BindyKeyValuePairFactory(getClassType());
bindyKeyValuePairFactory.setFormatFactory(formatFactory);
+ bindyKeyValuePairFactory.setLocale(getLocale());
+
bindyKeyValuePairFactory.setDefaultValueStringAsNull(isDefaultValueStringAsNull());
return bindyKeyValuePairFactory;
}
}
diff --git
a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvStringDefaultValueAsNullTest.java
b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvStringDefaultValueAsNullTest.java
new file mode 100644
index 000000000000..3fe132d0bb06
--- /dev/null
+++
b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/csv/BindyCsvStringDefaultValueAsNullTest.java
@@ -0,0 +1,89 @@
+/*
+ * 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.
+ */
+package org.apache.camel.dataformat.bindy.csv;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.dataformat.bindy.model.csv.MyCsvRecord;
+import org.apache.camel.model.dataformat.BindyType;
+import org.apache.camel.test.junit5.CamelTestSupport;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+public class BindyCsvStringDefaultValueAsNullTest extends CamelTestSupport {
+
+ @Test
+ public void testAsStringDefaultValueAsNullTrue() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ var df =
dataFormat().bindy().defaultValueStringAsNull(true).type(BindyType.Csv).classType(MyCsvRecord.class)
+ .end();
+ from("direct:fromCsv").unmarshal(df).to("mock:result");
+ }
+ });
+
+ MockEndpoint mock = context.getEndpoint("mock:result",
MockEndpoint.class);
+ mock.expectedMessageCount(1);
+
+ String addressLine1 = "8506 SIX FORKS ROAD,";
+ String csvLine = "\"PROBLEM SOLVER\",\"" + addressLine1
+ + "\",\"SUITE 104\",\"RALEIGH\",\"\",\"27615\",\"\"";
+
+ template.sendBody("direct:fromCsv", csvLine.trim());
+
+ mock.assertIsSatisfied();
+
+ MyCsvRecord rec =
mock.getReceivedExchanges().get(0).getMessage().getBody(MyCsvRecord.class);
+ Assertions.assertNotNull(rec);
+ Assertions.assertEquals(addressLine1, rec.getAddressLine1());
+ Assertions.assertNull(rec.getCountry());
+ Assertions.assertNull(rec.getState());
+ Assertions.assertEquals("27615", rec.getZip());
+ }
+
+ @Test
+ public void testAsStringDefaultValueAsNullFalse() throws Exception {
+ context.addRoutes(new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ var df =
dataFormat().bindy().defaultValueStringAsNull(false).type(BindyType.Csv).classType(MyCsvRecord.class)
+ .end();
+ from("direct:fromCsv").unmarshal(df).to("mock:result");
+ }
+ });
+
+ MockEndpoint mock = context.getEndpoint("mock:result",
MockEndpoint.class);
+ mock.expectedMessageCount(1);
+
+ String addressLine1 = "8506 SIX FORKS ROAD,";
+ String csvLine = "\"PROBLEM SOLVER\",\"" + addressLine1
+ + "\",\"SUITE 104\",\"RALEIGH\",\"\",\"27615\",\"\"";
+
+ template.sendBody("direct:fromCsv", csvLine.trim());
+
+ mock.assertIsSatisfied();
+
+ MyCsvRecord rec =
mock.getReceivedExchanges().get(0).getMessage().getBody(MyCsvRecord.class);
+ Assertions.assertNotNull(rec);
+ Assertions.assertEquals(addressLine1, rec.getAddressLine1());
+ Assertions.assertEquals("", rec.getCountry());
+ Assertions.assertEquals("", rec.getState());
+ Assertions.assertEquals("27615", rec.getZip());
+ }
+
+}
diff --git
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/bindy.json
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/bindy.json
index ed8ce02c8bc5..2fada12392f1 100644
---
a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/bindy.json
+++
b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/dataformat/bindy.json
@@ -16,8 +16,9 @@
"id": { "index": 0, "kind": "attribute", "displayName": "Id", "group":
"common", "required": false, "type": "string", "javaType": "java.lang.String",
"deprecated": false, "autowired": false, "secret": false, "description": "The
id of this node" },
"type": { "index": 1, "kind": "attribute", "displayName": "Type", "group":
"common", "required": true, "type": "enum", "javaType":
"org.apache.camel.model.dataformat.BindyType", "enum": [ "Csv", "Fixed",
"KeyValue" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Whether to use Csv, Fixed, or KeyValue." },
"classType": { "index": 2, "kind": "attribute", "displayName": "Class
Type", "group": "common", "required": false, "type": "string", "javaType":
"java.lang.String", "deprecated": false, "autowired": false, "secret": false,
"description": "Name of model class to use." },
- "allowEmptyStream": { "index": 3, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
- "unwrapSingleInstance": { "index": 4, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
- "locale": { "index": 5, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
+ "defaultValueStringAsNull": { "index": 3, "kind": "attribute",
"displayName": "Default Value String As Null", "group": "common", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": false, "description": "To
change the default value for string types to be null instead of an empty
string." },
+ "allowEmptyStream": { "index": 4, "kind": "attribute", "displayName":
"Allow Empty Stream", "group": "common", "required": false, "type": "boolean",
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false,
"secret": false, "defaultValue": false, "description": "Whether to allow empty
streams in the unmarshal process. If true, no exception will be thrown when a
body without records is provided." },
+ "unwrapSingleInstance": { "index": 5, "kind": "attribute", "displayName":
"Unwrap Single Instance", "group": "advanced", "label": "advanced", "required":
false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false,
"autowired": false, "secret": false, "defaultValue": true, "description": "When
unmarshalling should a single instance be unwrapped and returned instead of
wrapped in a java.util.List." },
+ "locale": { "index": 6, "kind": "attribute", "displayName": "Locale",
"group": "advanced", "label": "advanced", "required": false, "type": "string",
"javaType": "java.lang.String", "deprecated": false, "autowired": false,
"secret": false, "description": "To configure a default locale to use, such as
us for united states. To use the JVM platform default locale then use the name
default" }
}
}
diff --git
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
index daf486714c0b..443501733e18 100644
---
a/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
+++
b/core/camel-core-model/src/main/java/org/apache/camel/model/dataformat/BindyDataFormat.java
@@ -45,6 +45,9 @@ public class BindyDataFormat extends DataFormatDefinition {
@XmlAttribute(name = "classType")
private String classTypeAsString;
@XmlAttribute
+ @Metadata(javaType = "java.lang.Boolean")
+ private String defaultValueStringAsNull;
+ @XmlAttribute
@Metadata(javaType = "java.lang.Boolean", defaultValue = "false")
private String allowEmptyStream;
@XmlAttribute
@@ -63,6 +66,7 @@ public class BindyDataFormat extends DataFormatDefinition {
this.classType = source.classType;
this.type = source.type;
this.classTypeAsString = source.classTypeAsString;
+ this.defaultValueStringAsNull = source.defaultValueStringAsNull;
this.allowEmptyStream = source.allowEmptyStream;
this.unwrapSingleInstance = source.unwrapSingleInstance;
this.locale = source.locale;
@@ -73,6 +77,7 @@ public class BindyDataFormat extends DataFormatDefinition {
this.classType = builder.classType;
this.type = builder.type;
this.classTypeAsString = builder.classTypeAsString;
+ this.defaultValueStringAsNull = builder.defaultValueStringAsNull;
this.allowEmptyStream = builder.allowEmptyStream;
this.unwrapSingleInstance = builder.unwrapSingleInstance;
this.locale = builder.locale;
@@ -140,6 +145,17 @@ public class BindyDataFormat extends DataFormatDefinition {
this.locale = locale;
}
+ public String getDefaultValueStringAsNull() {
+ return defaultValueStringAsNull;
+ }
+
+ /**
+ * To change the default value for string types to be null instead of an
empty string.
+ */
+ public void setDefaultValueStringAsNull(String defaultValueStringAsNull) {
+ this.defaultValueStringAsNull = defaultValueStringAsNull;
+ }
+
public String getUnwrapSingleInstance() {
return unwrapSingleInstance;
}
@@ -209,6 +225,15 @@ public class BindyDataFormat extends DataFormatDefinition {
return this;
}
+ public BindyDataFormat defaultValueStringAsNull(boolean
defaultValueStringAsNull) {
+ return
defaultValueStringAsNull(Boolean.toString(defaultValueStringAsNull));
+ }
+
+ public BindyDataFormat defaultValueStringAsNull(String
defaultValueStringAsNull) {
+ this.defaultValueStringAsNull = defaultValueStringAsNull;
+ return this;
+ }
+
public BindyDataFormat unwrapSingleInstance(boolean unwrapSingleInstance) {
return unwrapSingleInstance(Boolean.toString(unwrapSingleInstance));
}
@@ -236,6 +261,7 @@ public class BindyDataFormat extends DataFormatDefinition {
private Class<?> classType;
private String type;
private String classTypeAsString;
+ private String defaultValueStringAsNull;
private String allowEmptyStream;
private String unwrapSingleInstance;
private String locale;
@@ -278,6 +304,21 @@ public class BindyDataFormat extends DataFormatDefinition {
return this;
}
+ /**
+ * To change the default value for string types to be null instead of
an empty string.
+ */
+ public Builder defaultValueStringAsNull(String
defaultValueStringAsNull) {
+ this.defaultValueStringAsNull = defaultValueStringAsNull;
+ return this;
+ }
+
+ /**
+ * To change the default value for string types to be null instead of
an empty string.
+ */
+ public Builder defaultValueStringAsNull(boolean
defaultValueStringAsNull) {
+ return
defaultValueStringAsNull(Boolean.toString(defaultValueStringAsNull));
+ }
+
/**
* When unmarshalling should a single instance be unwrapped and
returned instead of wrapped in a
* <tt>java.util.List</tt>.
diff --git
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/BindyDataFormatReifier.java
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/BindyDataFormatReifier.java
index 20cd6e2544ca..e46b349e1733 100644
---
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/BindyDataFormatReifier.java
+++
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/dataformat/BindyDataFormatReifier.java
@@ -43,6 +43,7 @@ public class BindyDataFormatReifier extends
DataFormatReifier<BindyDataFormat> {
properties.put("classType", or(definition.getClassType(),
definition.getClassTypeAsString()));
properties.put("unwrapSingleInstance",
definition.getUnwrapSingleInstance());
properties.put("allowEmptyStream", definition.getAllowEmptyStream());
+ properties.put("defaultValueStringAsNull",
definition.getDefaultValueStringAsNull());
}
}
diff --git
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index f1ae5797889e..0dab43edf902 100644
---
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -1783,6 +1783,7 @@ public class ModelParser extends BaseParser {
return doParse(new BindyDataFormat(), (def, key, val) -> switch (key) {
case "allowEmptyStream": def.setAllowEmptyStream(val); yield
true;
case "classType": def.setClassTypeAsString(val); yield true;
+ case "defaultValueStringAsNull":
def.setDefaultValueStringAsNull(val); yield true;
case "locale": def.setLocale(val); yield true;
case "type": def.setType(val); yield true;
case "unwrapSingleInstance": def.setUnwrapSingleInstance(val);
yield true;
diff --git
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index 46faea7549b1..416a78326ecd 100644
---
a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++
b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -2462,6 +2462,7 @@ public class ModelWriter extends BaseWriter {
startElement(name);
doWriteIdentifiedTypeAttributes(def);
doWriteAttribute("unwrapSingleInstance",
def.getUnwrapSingleInstance(), "true");
+ doWriteAttribute("defaultValueStringAsNull",
def.getDefaultValueStringAsNull(), null);
doWriteAttribute("classType", def.getClassTypeAsString(), null);
doWriteAttribute("locale", def.getLocale(), null);
doWriteAttribute("type", def.getType(), null);
diff --git
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index 4ab66c4fe127..2addf34bb22d 100644
---
a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++
b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -2462,6 +2462,7 @@ public class ModelWriter extends BaseWriter {
startElement(name);
doWriteIdentifiedTypeAttributes(def);
doWriteAttribute("unwrapSingleInstance",
def.getUnwrapSingleInstance(), "true");
+ doWriteAttribute("defaultValueStringAsNull",
def.getDefaultValueStringAsNull(), null);
doWriteAttribute("classType", def.getClassTypeAsString(), null);
doWriteAttribute("locale", def.getLocale(), null);
doWriteAttribute("type", def.getType(), null);
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 ec0f1da563e7..fb3cf1a11ecc 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
@@ -1527,6 +1527,7 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
properties = {
@YamlProperty(name = "allowEmptyStream", type = "boolean",
defaultValue = "false", description = "Whether to allow empty streams in the
unmarshal process. If true, no exception will be thrown when a body without
records is provided.", displayName = "Allow Empty Stream"),
@YamlProperty(name = "classType", type = "string",
description = "Name of model class to use.", displayName = "Class Type"),
+ @YamlProperty(name = "defaultValueStringAsNull", type =
"boolean", defaultValue = "false", description = "To change the default value
for string types to be null instead of an empty string.", displayName =
"Default Value String As Null"),
@YamlProperty(name = "id", type = "string", description =
"The id of this node", displayName = "Id"),
@YamlProperty(name = "locale", type = "string",
description = "To configure a default locale to use, such as us for united
states. To use the JVM platform default locale then use the name default",
displayName = "Locale"),
@YamlProperty(name = "type", type =
"enum:Csv,Fixed,KeyValue", description = "Whether to use Csv, Fixed, or
KeyValue.", displayName = "Type"),
@@ -1558,6 +1559,11 @@ public final class ModelDeserializers extends
YamlDeserializerSupport {
target.setClassTypeAsString(val);
break;
}
+ case "defaultValueStringAsNull": {
+ String val = asText(node);
+ target.setDefaultValueStringAsNull(val);
+ break;
+ }
case "id": {
String val = asText(node);
target.setId(val);
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 d8175092a74a..9cfed89b85a4 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
@@ -10910,6 +10910,12 @@
"title" : "Class Type",
"description" : "Name of model class to use."
},
+ "defaultValueStringAsNull" : {
+ "type" : "boolean",
+ "title" : "Default Value String As Null",
+ "description" : "To change the default value for string types to
be null instead of an empty string.",
+ "default" : false
+ },
"id" : {
"type" : "string",
"title" : "Id",