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

Josh Cooke commented on AVRO-2872:
----------------------------------

I think merging the PR would be a good first step.

{quote}If we don't want to _enforce_ workaround like that, then the generated 
specific record should probably take care of registering all of the custom 
conversions that it uses in it's Schema
{quote}
 This is actually the approach we've taken internally by modifying the 
template. Every one of our generated records includes this block at the top and 
our custom types are registered inside the static method.
{code:java}
  static {
    LogicalTypeRegistry.initialize();
  }  
{code}
 

Interestingly enough, a more robust solution might be the one presented 
[here|https://github.com/apache/avro/pull/885/files] which properly evaluates 
required logical types and explicitly initialises them on the generated records.

> 'conversions' array is not populated for Avro Union Logicaltype fields 
> -----------------------------------------------------------------------
>
>                 Key: AVRO-2872
>                 URL: https://issues.apache.org/jira/browse/AVRO-2872
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: logical types
>    Affects Versions: 1.9.2
>         Environment: * Apache Avro Version [1.9.2]
> * Java Version [11]
>            Reporter: Pádraig de Buitléar
>            Assignee: Josh Cooke
>            Priority: Minor
>             Fix For: 1.11.0
>
>
> Steps to reproduce :
>  # Using the maven/gradle plugin generate code with the following avsc:
>    
> {code:java}
> {
>   "type": "record",
>   "name": "Messages",
>   "namespace": "com.somedomain",
>   "fields": [
>     {
>       "name": "start",
>       "type": {
>         "type": "long",
>         "logicalType": "timestamp-millis"
>       }
>     },
>     {
>       "name": "optional_date",
>       "type": [
>         "null",
>         {
>           "type": "long",
>           "logicalType": "timestamp-millis"
>         }
>       ],
>       "default": null
>     }
>   ]
> }{code}
>  
> *Actual behavior*
>  In the generated code, the return types of the getter methods for both 
> fields are correct, however the conversions array only has an element for the 
> field which isn't a union.
>   
> {code:java}
>   private static final org.apache.avro.Conversion<?>[] conversions =
>       new org.apache.avro.Conversion<?>[] {
>       new org.apache.avro.data.TimeConversions.TimestampMillisConversion(),
>       null,
>       null
>   };
> {code}
>  
> *Expected output:*
>  Based on the above avsc the following is expected.
>   
> {code:java}
>   private static final org.apache.avro.Conversion[] conversions =
>       new org.apache.avro.Conversion[] {
>       new org.apache.avro.data.TimeConversions.TimestampMillisConversion(),
>       new org.apache.avro.data.TimeConversions.TimestampMillisConversion(),
>       null
>   };
> {code}
>  
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to