[ 
https://issues.apache.org/jira/browse/AVRO-4039?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

William McNutt updated AVRO-4039:
---------------------------------
    Description: 
With a schema
{code:java}
{"type":"record","name":"Root","fields":[
{"name":"f_date_repeated","type":{"type":"array","items: 
{"type":int",logicalType:"date"}}},
{"name":"f_time_repeated","type":{"type":"array","items":{"type":long",logicalType:"time-micros"}}},
{"name":"f_datetime_repeated","type":{"type":"array","items":{"type":string",logicalType:"datetime"}}}
]}
{code}
and converters added:
{code:java}
static{ 
GenericData.get().addLogicalTypeConversion(new Conversions.DecimalConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.DateConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimeMillisConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimeMicrosConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimestampMillisConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimestampMicrosConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.LocalTimestampMicrosConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.LocalTimestampMillisConversion());
}
{code}
we are get an exception (and similarly Instant cannot be cast to Long)
{code:java}
ava.lang.ClassCastException: class java.time.LocalDate cannot be cast to class 
java.lang.Integer (java.time.LocalDate and java.lang.Integer are in module 
java.base of loader 'bootstrap')
at 
org.apache.avro.generic.PrimitivesArrays$IntArray.add(PrimitivesArrays.java:28)
at java.base/java.util.AbstractList.add(Unknown Source)
at 
org.apache.avro.generic.GenericDatumReader.addToArray(GenericDatumReader.java:333)
at 
org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:294)
at 
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:184)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
at 
org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:260)
at 
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:248)
at 
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:154)
{code}

When the fields are instead an optional or required rather than an array, there 
is no exception thrown.

  was:
With a schema
{code:java}
{"type":"record","name":"Root","fields":[
{"name":"f_date_repeated","type":{"type":"array","items: 
{"type":int",logicalType:"date"}}},
{"name":"f_time_repeated","type":{"type":"array","items":{"type":long",logicalType:"time-micros"}}},
{"name":"f_datetime_repeated","type":{"type":"array","items":{"type":string",logicalType:"datetime"}}}
]}
{code}
and converters added:
{code:java}
static{ 
GenericData.get().addLogicalTypeConversion(new Conversions.DecimalConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.DateConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimeMillisConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimeMicrosConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimestampMillisConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.TimestampMicrosConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.LocalTimestampMicrosConversion());
GenericData.get().addLogicalTypeConversion(new 
TimeConversions.LocalTimestampMillisConversion());
}
{code}
we are get an exception (and similarly Instant cannot be cast to Long)
{code:java}
ava.lang.ClassCastException: class java.time.LocalDate cannot be cast to class 
java.lang.Integer (java.time.LocalDate and java.lang.Integer are in module 
java.base of loader 'bootstrap')
at 
org.apache.avro.generic.PrimitivesArrays$IntArray.add(PrimitivesArrays.java:28)
at java.base/java.util.AbstractList.add(Unknown Source)
at 
org.apache.avro.generic.GenericDatumReader.addToArray(GenericDatumReader.java:333)
at 
org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:294)
at 
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:184)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
at 
org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:260)
at 
org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:248)
at 
org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:154)
{code}


> ClassCastException when deserializing an array of logical types
> ---------------------------------------------------------------
>
>                 Key: AVRO-4039
>                 URL: https://issues.apache.org/jira/browse/AVRO-4039
>             Project: Apache Avro
>          Issue Type: Bug
>          Components: java
>    Affects Versions: 1.12.0
>            Reporter: William McNutt
>            Priority: Major
>
> With a schema
> {code:java}
> {"type":"record","name":"Root","fields":[
> {"name":"f_date_repeated","type":{"type":"array","items: 
> {"type":int",logicalType:"date"}}},
> {"name":"f_time_repeated","type":{"type":"array","items":{"type":long",logicalType:"time-micros"}}},
> {"name":"f_datetime_repeated","type":{"type":"array","items":{"type":string",logicalType:"datetime"}}}
> ]}
> {code}
> and converters added:
> {code:java}
> static{ 
> GenericData.get().addLogicalTypeConversion(new 
> Conversions.DecimalConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.DateConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.TimeMillisConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.TimeMicrosConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.TimestampMillisConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.TimestampMicrosConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.LocalTimestampMicrosConversion());
> GenericData.get().addLogicalTypeConversion(new 
> TimeConversions.LocalTimestampMillisConversion());
> }
> {code}
> we are get an exception (and similarly Instant cannot be cast to Long)
> {code:java}
> ava.lang.ClassCastException: class java.time.LocalDate cannot be cast to 
> class java.lang.Integer (java.time.LocalDate and java.lang.Integer are in 
> module java.base of loader 'bootstrap')
> at 
> org.apache.avro.generic.PrimitivesArrays$IntArray.add(PrimitivesArrays.java:28)
> at java.base/java.util.AbstractList.add(Unknown Source)
> at 
> org.apache.avro.generic.GenericDatumReader.addToArray(GenericDatumReader.java:333)
> at 
> org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:294)
> at 
> org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:184)
> at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
> at 
> org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:260)
> at 
> org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:248)
> at 
> org.apache.avro.generic.GenericDatumReader.readWithoutConversion(GenericDatumReader.java:180)
> at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:161)
> at 
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:154)
> {code}
> When the fields are instead an optional or required rather than an array, 
> there is no exception thrown.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to