ASF GitHub Bot commented on KAFKA-4183:

GitHub user rhauch opened a pull request:


    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

Alternatively you can review and apply these changes as the patch at:


To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1867
commit c21db21e7b56f7c8ea31fab9852a6852dc038015
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:
>            Reporter: Randall Hauch
>            Assignee: Ewen Cheslack-Postava
> 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

Reply via email to