Maciej Noszczyński created AVRO-4234:
----------------------------------------

             Summary: Byte array JSON serialization in IdlUtils doesn't work at 
all
                 Key: AVRO-4234
                 URL: https://issues.apache.org/jira/browse/AVRO-4234
             Project: Apache Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.12.1
            Reporter: Maciej Noszczyński


The IdlUtils class used to generate Avro IDL text from e.g. a Schema object, 
doesn't work correctly for byte array (default) values. No string literal gets 
emitted in this case.

The problematic code:
{code:java}
    module.addSerializer(new StdSerializer<byte[]>(byte[].class) {
      @Override
      public void serialize(byte[] value, JsonGenerator gen, SerializerProvider 
provider) throws IOException {
        MAPPER.writeValueAsString(new String(value, 
StandardCharsets.ISO_8859_1));
      }
    });
{code}
Here, the `MAPPER` gets called instead of `gen`, (so without the side effect of 
actually storing the generated text in the current ObjectMapper call output), 
and the result of the call gets immediately discarded.

Corrected:
{code:java}
    module.addSerializer(new StdSerializer<byte[]>(byte[].class) {
      @Override
      public void serialize(byte[] value, JsonGenerator gen, SerializerProvider 
provider) throws IOException {
        gen.writeString(new String(value, StandardCharsets.ISO_8859_1));
      }
    });
{code}
There is a test called `IdlUtilsTest`, but looking at the contents, it is not 
possible, that it runs successfully with the current code. The build still 
works, which is mysterious. Is it possible, that the test is disabled for some 
reason or even by mistake?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to