You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@avro.apache.org by "Andrei Leib (Jira)" <ji...@apache.org> on 2023/09/06 23:51:00 UTC
[jira] [Commented] (AVRO-3848) MessageDeserializer uses wrong type for map fields
[ 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)