[
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 <[email protected]>
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)