[
https://issues.apache.org/jira/browse/AVRO-2035?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16052670#comment-16052670
]
radai rosenblatt commented on AVRO-2035:
----------------------------------------
Is there any reason why the schema parser shouldnt validate default values by
default? given that such a schema, if it slips past the parser is not generally
usable (any scenario where the default value come into play results in
explosion) it seems this just leads to issues being discovered very late by
users (as was the case for me).
Also, given that there are probably users out there with such schemas already
out and about (again, me for example) - is there a reason not to at least try
and accommodate and see if the string value happens to be parseable as a
boolean? (maybe not do this by default, but configure the reader somehow ...)
> default value for boolean field cannot be a string
> --------------------------------------------------
>
> Key: AVRO-2035
> URL: https://issues.apache.org/jira/browse/AVRO-2035
> Project: Avro
> Issue Type: Bug
> Components: java
> Affects Versions: 1.8.1
> Reporter: radai rosenblatt
>
> suppose i have the following schema evolution:
> {code}
> {
> "name": "Bob",
> "type": "record",
> "fields": [
> {"name": "f1", "type": "int"}
> ]
> }
> {code}
> and then:
> {code}
> {
> "name": "Bob",
> "type": "record",
> "fields": [
> {"name": "f1", "type": "int"},
> {"name": "f2", "type": "boolean", "default": "true"}
> ]
> }
> {code}
> the default value for "f2" is specified as the _STRING_ "true" (and not the
> literal boolean true).
> if this default value is ever accessed (when reading a gen1-serialized object
> as a gen2) we get this:
> {code}
> org.apache.avro.AvroTypeException: Non-boolean default for boolean: "true"
> at
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.encode(ResolvingGrammarGenerator.java:408)
> at
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.getBinary(ResolvingGrammarGenerator.java:307)
> at
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.resolveRecords(ResolvingGrammarGenerator.java:285)
> at
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.generate(ResolvingGrammarGenerator.java:118)
> at
> org.apache.avro.io.parsing.ResolvingGrammarGenerator.generate(ResolvingGrammarGenerator.java:50)
> at org.apache.avro.io.ResolvingDecoder.resolve(ResolvingDecoder.java:85)
> at org.apache.avro.io.ResolvingDecoder.<init>(ResolvingDecoder.java:49)
> at
> org.apache.avro.io.DecoderFactory.resolvingDecoder(DecoderFactory.java:307)
> at
> org.apache.avro.generic.GenericDatumReader.getResolver(GenericDatumReader.java:127)
> at
> org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:142)
> {code}
> yet Schema.parse() passes for this
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)