[ https://issues.apache.org/jira/browse/KAFKA-4183?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15497623#comment-15497623 ]
ASF GitHub Bot commented on KAFKA-4183: --------------------------------------- GitHub user rhauch opened a pull request: https://github.com/apache/kafka/pull/1871 KAFKA-4183 Corrected Kafka Connect's JSON Converter to properly convert from null to logical values The `JsonConverter` class has `LogicalTypeConverter` implementations for Date, Time, Timestamp, and Decimal, but these implementations fail when the input literal value (deserialized from the message) is null. Test cases were added to check for these cases, and these failed before the `LogicalTypeConverter` implementations were fixed to consider whether the schema has a default value or is optional, similarly to how the `JsonToConnectTypeConverter` implementations do this. Once the fixes were made, the new tests pass. You can merge this pull request into a Git repository by running: $ git pull https://github.com/rhauch/kafka kafka-4183-0.10.0 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/kafka/pull/1871.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 #1871 ---- commit 4ffb9409f5a75345cf53aed0d799e6c694f636ca Author: Randall Hauch <rha...@gmail.com> Date: 2016-09-16T19:05:06Z KAFKA-4183 Corrected Kafka Connect's JSON Converter to properly convert from deserialized null values. ---- > 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: Ewen Cheslack-Postava > 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)