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

Andrei Leib commented on AVRO-3848:
-----------------------------------

The Avro compiler supports `stringType` property by inserting Java-specific 
annotation `"avro.java.string": "String"` for all string types

In effect this makes the reader schema different from the writer schema. 
Passing the schema without the `avro.java.string` to the decoder is asking Avro 
to use default type for string which is `Utf8`

I modified you example as follows and it passed:
{code:java}
    private RecordWithMapField deserialize(byte[] serialized) {
        MessageDecoder<RecordWithMapField> decoder;
        try {
            Schema schema = RecordWithMapField.getClassSchema();
            decoder = new 
BinaryMessageDecoder<>(SpecificData.getForClass(RecordWithMapField.class), 
schema);
            return decoder.decode(serialized);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    } {code}
The reader schema is now coming from the compiled class.

> MessageDeserializer uses wrong type for map fields
> --------------------------------------------------
>
>                 Key: AVRO-3848
>                 URL: https://issues.apache.org/jira/browse/AVRO-3848
>             Project: Apache Avro
>          Issue Type: Bug
>            Reporter: Eduard Schleining
>            Priority: Major
>
> When using the avro-maven-plugin to generate classes with map fields, the 
> MessageDecoder will disregard the "stringType" setting and always provide a 
> map with entries of type UTF8 instead of String.
> You can see the behavior in the unit test here:
> [https://github.com/eschleining/avroMapDeserialization]
> Expected Behavior:
> The org.apache.avro.message.MessageDecoder should use keys and values of type 
> String for classes with fields of type Map<String,String>.
> Actual Behavior:
> The org.apache.avro.message.MessageDecoder puts Map<Utf8,Utf8> into fields 
> that are generated as Map<String,String>



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

Reply via email to