[
https://issues.apache.org/jira/browse/AVRO-2885?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Federico Ragona updated AVRO-2885:
----------------------------------
Affects Version/s: 1.9.2
> It is possible to provide a number with decimal digits in an int field
> ----------------------------------------------------------------------
>
> Key: AVRO-2885
> URL: https://issues.apache.org/jira/browse/AVRO-2885
> Project: Apache Avro
> Issue Type: Bug
> Components: java
> Affects Versions: 1.8.2, 1.9.2
> Reporter: Federico Ragona
> Priority: Major
>
> I defined a schema with an {{int}} field and I'm then using the Java
> {{GenericDatumReader}} to read records: I have noticed that the reader also
> accepts numbers with decimal digits and the resulting record contains the
> same numbers, coerced to integer values. I have observed the same behaviour
> both when decoding from JSON and from binary. Here is a runnable example:
> {code:java}
> import org.apache.avro.Schema;
> import org.apache.avro.SchemaBuilder;
> import org.apache.avro.generic.GenericDatumReader;
> import org.apache.avro.generic.GenericRecord;
> import org.apache.avro.io.Decoder;
> import org.apache.avro.io.DecoderFactory;
> public class AvroIntTest {
> public static GenericRecord readFromJson(Schema schema, String record)
> throws Exception {
> GenericDatumReader<GenericRecord> reader = new
> GenericDatumReader<>(schema, schema);
> Decoder decoder = DecoderFactory.get().jsonDecoder(schema, record);
> return reader.read(null, decoder);
> }
> public static void main(String[] args) throws Exception {
> Schema schema = SchemaBuilder
> .builder("test")
> .record("example")
> .fields()
> .requiredInt("id")
> .endRecord();
> String record = "{ \"id\": -1.2 }";
> System.out.println(readFromJson(schema, record)); // prints: { "id":
> -1 }
> }
> }
> {code}
> The schema generated by the builder looks like this:
> {code}
> {
> "type" : "record",
> "name" : "example",
> "namespace" : "test",
> "fields" : [ {
> "name" : "id",
> "type" : "int"
> } ]
> }
> {code}
> I would expect the reader to fail because the type of the value doesn't match
> the type of the field but it instead "silently" succeeds, converting {{-1.2}}
> to {{-1}}: is this behaviour intended? am I doing something wrong?
--
This message was sent by Atlassian Jira
(v8.3.4#803005)