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

Jan Scheidegger updated AVRO-4245:
----------------------------------
    Description: 
With the switch to FastReader being the default we encountered the following 
error during parsing messages.

 
{code:java}
java.lang.ClassCastException: class org.apache.avro.util.Utf8 cannot be cast to 
class java.lang.String (org.apache.avro.util.Utf8 is in unnamed module of 
loader 'app'; java.lang.String is in module java.base of loader 'bootstrap') 
{code}
Reproducable as a UnitTest:

 
{code:java}
@Test
void testJavaType() {
    // switch this to false to see it work without FastReader
    GenericData model = SpecificData.get().setFastReaderEnabled(true);

    final Schema writeSchema = SchemaBuilder.builder()
            .stringBuilder()
            .prop("java-class", "java.lang.String")
            .endString();
    final byte[] serialized;
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
        Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
        DatumWriter<String> w = new GenericDatumWriter<>(writeSchema, model);
        w.write("hallo", encoder);
        encoder.flush();
        serialized= baos.toByteArray();
    } catch (IOException ioe) {
        throw new RuntimeException((ioe));
    } {code}

  was:
With the switch to FastReader being the default we encountered the following 
error during parsing messages.

```
java.lang.ClassCastException: class org.apache.avro.util.Utf8 cannot be cast to 
class java.lang.String (org.apache.avro.util.Utf8 is in unnamed module of 
loader 'app'; java.lang.String is in module java.base of loader 'bootstrap')
```



Reproducable as a UnitTest:




```
@Test
void testJavaType() {
  // switch this to false to see it work without FastReader
  GenericData model = SpecificData.get().setFastReaderEnabled(true);

  final Schema writeSchema = SchemaBuilder.builder()
    .stringBuilder()
    .prop("java-class", "java.lang.String")
    .endString();
  final byte[] serialized;
  try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
    Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
    DatumWriter<String> w = new GenericDatumWriter<>(writeSchema, model);
    w.write("hallo", encoder);
    encoder.flush();
    serialized= baos.toByteArray();
  } catch (IOException ioe) {
    throw new RuntimeException((ioe));
  }


  final Schema readSchema = SchemaBuilder.builder()
    .stringBuilder()
    .prop("java-class", "java.lang.String")
    .endString();
  final Object deserialized;
  try (ByteArrayInputStream bais = new ByteArrayInputStream(serialized)) {
    Decoder decoder = DecoderFactory.get().directBinaryDecoder(bais, null);
    DatumReader<?> r = new GenericDatumReader<>(writeSchema, readSchema, model);
    deserialized = r.read(null, decoder);
    System.out.println(deserialized.toString());
  } catch (IOException ioe) {
    throw new RuntimeException((ioe));
  }
}
```


> Property java-class is no longer read with FastReader
> -----------------------------------------------------
>
>                 Key: AVRO-4245
>                 URL: https://issues.apache.org/jira/browse/AVRO-4245
>             Project: Apache Avro
>          Issue Type: Bug
>    Affects Versions: 1.12.1
>            Reporter: Jan Scheidegger
>            Priority: Major
>
> With the switch to FastReader being the default we encountered the following 
> error during parsing messages.
>  
> {code:java}
> java.lang.ClassCastException: class org.apache.avro.util.Utf8 cannot be cast 
> to class java.lang.String (org.apache.avro.util.Utf8 is in unnamed module of 
> loader 'app'; java.lang.String is in module java.base of loader 'bootstrap') 
> {code}
> Reproducable as a UnitTest:
>  
> {code:java}
> @Test
> void testJavaType() {
>     // switch this to false to see it work without FastReader
>     GenericData model = SpecificData.get().setFastReaderEnabled(true);
>     final Schema writeSchema = SchemaBuilder.builder()
>             .stringBuilder()
>             .prop("java-class", "java.lang.String")
>             .endString();
>     final byte[] serialized;
>     try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
>         Encoder encoder = EncoderFactory.get().binaryEncoder(baos, null);
>         DatumWriter<String> w = new GenericDatumWriter<>(writeSchema, model);
>         w.write("hallo", encoder);
>         encoder.flush();
>         serialized= baos.toByteArray();
>     } catch (IOException ioe) {
>         throw new RuntimeException((ioe));
>     } {code}



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

Reply via email to