You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kafka.apache.org by "Shikhar Bhushan (JIRA)" <ji...@apache.org> on 2016/09/16 22:53:20 UTC
[jira] [Reopened] (KAFKA-4183) Logical converters in JsonConverter
don't properly handle null values
[ https://issues.apache.org/jira/browse/KAFKA-4183?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Shikhar Bhushan reopened KAFKA-4183:
------------------------------------
Assignee: Shikhar Bhushan (was: Ewen Cheslack-Postava)
[~rhauch] Reopening this, I noticed an issue with handling default values. E.g. this test
{noformat}
@Test
public void timestampToConnectDefval() {
Schema schema = Timestamp.builder().defaultValue(new java.util.Date(42)).schema();
String msg = "{ \"schema\": { \"type\": \"int64\", \"name\": \"org.apache.kafka.connect.data.Timestamp\", \"version\": 1, \"default\": 42 }, \"payload\": null }";
SchemaAndValue schemaAndValue = converter.toConnectData(TOPIC, msg.getBytes());
assertEquals(schema, schemaAndValue.schema());
assertEquals(new java.util.Date(42), schemaAndValue.value());
}
{noformat}
Happy to create a followup PR since I'm poking around with it
> 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)