[ https://issues.apache.org/jira/browse/KAFKA-4183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15497716#comment-15497716 ]
ASF GitHub Bot commented on KAFKA-4183: --------------------------------------- GitHub user shikhar opened a pull request: https://github.com/apache/kafka/pull/1872 KAFKA-4183: centralize checking for optional and default values to avoid bugs Cleaner to just check once for optional & default value from the `convertToConnect()` function. It also helps address an issue with conversions for logical type schemas that have default values and null as the included value. That test case is _probably_ not an issue in practice, since when using the `JsonConverter` to serialize a missing field with a default value, it will serialize the default value for the field. But in the face of JSON data streaming in from a topic being [generous on input, strict on output](http://tedwise.com/2009/05/27/generous-on-input-strict-on-output) seems best. You can merge this pull request into a Git repository by running: $ git pull https://github.com/shikhar/kafka kafka-4183 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/kafka/pull/1872.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #1872 ---- commit 1e09c6431f11361e7f3a5af4c09a8174c3547669 Author: Shikhar Bhushan <shik...@confluent.io> Date: 2016-09-16T23:17:40Z KAFKA-4183: centralize checking for optional and default values to avoid bugs ---- > Logical converters in JsonConverter don't properly handle null values > --------------------------------------------------------------------- > > Key: KAFKA-4183 > URL: https://issues.apache.org/jira/browse/KAFKA-4183 > Project: Kafka > Issue Type: Bug > Components: KafkaConnect > Affects Versions: 0.10.0.1 > Reporter: Randall Hauch > Assignee: Shikhar Bhushan > Fix For: 0.10.1.0 > > > The {{JsonConverter.TO_CONNECT_LOGICAL_CONVERTERS}} map contains > {{LogicalTypeConverter}} implementations to convert from the raw value into > the corresponding logical type value, and they are used during > deserialization of message keys and/or values. However, these implementations > do not handle the case when the input raw value is null, which can happen > when a key or value has a schema that is or contains a field that is > _optional_. > Consider a Kafka Connect schema of type STRUCT that contains a field "date" > with an optional schema of type {{org.apache.kafka.connect.data.Date}}. When > the key or value with this schema contains a null "date" field and is > serialized, the logical serializer properly will serialize the null value. > However, upon _deserialization_, the > {{JsonConverter.TO_CONNECT_LOGICAL_CONVERTERS}} are used to convert the > literal value (which is null) to a logical value. All of the > {{JsonConverter.TO_CONNECT_LOGICAL_CONVERTERS}} implementations will throw a > NullPointerException when the input value is null. > For example: > {code:java} > java.lang.NullPointerException > at > org.apache.kafka.connect.json.JsonConverter$14.convert(JsonConverter.java:224) > at > org.apache.kafka.connect.json.JsonConverter.convertToConnect(JsonConverter.java:731) > at > org.apache.kafka.connect.json.JsonConverter.access$100(JsonConverter.java:53) > at > org.apache.kafka.connect.json.JsonConverter$12.convert(JsonConverter.java:200) > at > org.apache.kafka.connect.json.JsonConverter.convertToConnect(JsonConverter.java:727) > at > org.apache.kafka.connect.json.JsonConverter.jsonToConnect(JsonConverter.java:354) > at > org.apache.kafka.connect.json.JsonConverter.toConnectData(JsonConverter.java:343) > {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)