Hi All,

I'm not sure if this is the proper channel, but here is my question.
We are trying to use JSON serialization, but there are some troubles when using 
double values.
If we try to serialize Double.NaN, Double.POSITIVE_INFINITY or 
Double.NEGATIVE_INFINITY to JSON with JsonEncoder and read them back with 
JsonDecoder, we get an AvroTypeException.
If we do the same thing with BinaryEncoder and BinaryDecoder, it works fine.

Is this a known bug?

As a maven dependency I am using:
    <groupId>org.apache.avro</groupId>
    <artifactId>avro</artifactId>
    <version>1.8.1</version>

Here is the code to reproduce the issue:
    @Test
    public void test() throws Exception {
        Schema schema = SchemaBuilder.builder()
                .record("record")
                .fields()
                    .optionalDouble("number1")
                    .optionalDouble("number2")
                    .optionalDouble("number3")
                .endRecord();
        GenericData.Record record = new GenericData.Record(schema);
        record.put("number1", Double.NaN);
        record.put("number2", Double.POSITIVE_INFINITY);
        record.put("number3", Double.NEGATIVE_INFINITY);

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        JsonEncoder encoder = EncoderFactory.get().jsonEncoder(schema, out);
        new GenericDatumWriter<GenericRecord>(schema).write(record, encoder);
        encoder.flush();
        System.out.println(out);

        Decoder decoder = DecoderFactory.get().jsonDecoder(schema, 
out.toString());
        GenericData.Record deserialized = new GenericData.Record(schema);
        new GenericDatumReader<GenericRecord>(schema).read(deserialized, 
decoder);
    }

Output of the test():
  
{"number1":{"double":"NaN"},"number2":{"double":"Infinity"},"number3":{"double":"-Infinity"}}
  org.apache.avro.AvroTypeException: Expected double. Got VALUE_STRING
   ...


Kind regards,
Pieter Dekinder

Reply via email to