Cheng Pan created KAFKA-8713: -------------------------------- Summary: Connect JsonConverter swallow null value on optional filed which has default value Key: KAFKA-8713 URL: https://issues.apache.org/jira/browse/KAFKA-8713 Project: Kafka Issue Type: Bug Components: KafkaConnect Affects Versions: 2.2.1, 2.3.0, 2.2.0, 2.1.0, 2.0.1, 2.0.0 Reporter: Cheng Pan
Class JsonConverter line: 582 {code:java} private static JsonNode convertToJson(Schema schema, Object logicalValue) { if (logicalValue == null) { if (schema == null) // Any schema is valid and we don't have a default, so treat this as an optional schema return null; if (schema.defaultValue() != null) return convertToJson(schema, schema.defaultValue()); if (schema.isOptional()) return JsonNodeFactory.instance.nullNode(); throw new DataException("Conversion error: null value for field that is required and has no default value"); } .... } {code} h1.The Excepted: Value `null` is valid for an optional filed, even through the filed has a default value. Only when field is required, the converter return default value fallback when value is `null`. h1.The Current: Always return default value if `null` was given. h1. Addition: I'm not sure if the current behavior is the exactly expected, but at least on MySQL, a table define as {code:sql} create table t1 { name varchar(40) not null, create_time datetime default '1999-01-01 11:11:11' null, update_time datetime default '1999-01-01 11:11:11' null, } {code} Just insert a record: {code:sql} INSERT INTO `t1` (`name`, `update_time`) VALUES ('kafka', null); {code} The result is: {code:json} { "name": "kafka", "create_time": "1999-01-01 11:11:11", "update_time": null } {code} But when I use debezium pull binlog and send the record to Kafka with JsonConverter, the result changed to: {code:json} { "name": "kafka", "create_time": "1999-01-01 11:11:11", "update_time": "1999-01-01 11:11:11" } {code} -- This message was sent by Atlassian JIRA (v7.6.14#76016)