[
https://issues.apache.org/jira/browse/AVRO-3848?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17762519#comment-17762519
]
Andrei Leib edited comment on AVRO-3848 at 9/6/23 11:52 PM:
------------------------------------------------------------
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 your 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.
was (Author: JIRAUSER296032):
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)