You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Oscar Westra van Holthe - Kind (Jira)" <ji...@apache.org> on 2022/01/05 11:31:00 UTC

[jira] [Commented] (AVRO-3224) Wrong deserialisation when using ReflectData.AllowNull with custom LogicalType conversions

    [ https://issues.apache.org/jira/browse/AVRO-3224?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17469222#comment-17469222 ] 

Oscar Westra van Holthe - Kind commented on AVRO-3224:
------------------------------------------------------

I've reviewed the change, and left a comment. Sorry it took me so long to understand the implications of your change.

The short version: it needs some work, but you've already done the most difficult part.

> Wrong deserialisation when using ReflectData.AllowNull with custom LogicalType conversions
> ------------------------------------------------------------------------------------------
>
>                 Key: AVRO-3224
>                 URL: https://issues.apache.org/jira/browse/AVRO-3224
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.10.2
>            Reporter: Du Liu
>            Priority: Minor
>              Labels: pull-request-available
>         Attachments: ReflectData.AllowNull.get doesnt work.png, ReflectData.get works.png, class_and_conversion.png, tests.txt
>
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> If a class contains both a java.time.LocalDate field and a java.sql.Date field, serialising an instance of the class using ReflectData.*AllowNull* with two conversions that both convert to avro date logical type (e.g. one converts java.time.LocalDate to avro date, the other converts java.sql.Date to avro date) is done correctly, but when deserialising the data back, the LocalDate field of the deserialised instance incorrectly contains a java.sql.Date (or the Date field incorrectly contains a LocalDate depending on which conversions is added last).
> This only happens when using ReflectData.*AllowNull*.get(). ReflectData.get() can correctly deserialised data back. I think this issue affects other types as long as two java types are mapped to the same avro logical type.
> A working example (using ReflectData.get()):
> !ReflectData.get works.png|width=887,height=379!
>  
> A not working example (using ReflectData.AllowNull.get()):
> !ReflectData.AllowNull.get doesnt work.png|width=831,height=469!
> The class and conversion: 
> !class_and_conversion.png|width=798,height=687!
>  
> These tests are included in the attached patch file:  [^tests.txt]



--
This message was sent by Atlassian Jira
(v8.20.1#820001)