vincent royer created AVRO-3103:
-----------------------------------

             Summary: Wrong JSON encoding with Schema AllowNull
                 Key: AVRO-3103
                 URL: https://issues.apache.org/jira/browse/AVRO-3103
             Project: Apache Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.10.2
         Environment: Java unit test
            Reporter: vincent royer


The JSON encoding of an AVRO record should be the same when the schema 
AllowNull or not. In following unit test, the JSON encoded record is incorrect 
when the schema Allow null:

AvroJsonAllowNullTests.testAvroToJson:82 expected [\\{"name":"bob"}] but found 
[\{"name":{"*string*":"bob"}}]

 
{code:java}
import org.apache.avro.generic.GenericDatumWriter;
 import org.apache.avro.generic.GenericRecord;
 import org.apache.avro.generic.GenericRecordBuilder;
 import org.apache.avro.io.DatumWriter;
 import org.apache.avro.io.EncoderFactory;
 import org.apache.avro.io.JsonEncoder;
 import org.apache.avro.reflect.ReflectData;
 import org.testng.annotations.Test;
import java.io.ByteArrayOutputStream;
 import java.io.OutputStream;
import static org.testng.Assert.assertEquals;
class AvroJsonAllowNullTests {
public static class User {
 String name;
 public User(String name)
{ this.name = name; }
 public String getName() { return name; }
 public void setName(String name) { this.name = name; }
}
/**

Writes provided {@link org.apache.avro.generic.GenericRecord}
into the provided

{@link OutputStream}
as JSON.
 */
 public static void writeAsJson(org.apache.avro.generic.GenericRecord record, 
OutputStream out) throws Exception

{ DatumWriter<GenericRecord> writer = new 
GenericDatumWriter<GenericRecord>(record.getSchema()); JsonEncoder encoder = 
EncoderFactory.get().jsonEncoder(record.getSchema(), out); writer.write(record, 
encoder); encoder.flush(); }
@Test
 public final void testAvroToJson() throws Exception
{ org.apache.avro.Schema schema = ReflectData.get().getSchema(User.class); 
org.apache.avro.Schema schemaAllowNull = 
ReflectData.AllowNull.get().getSchema(User.class); System.out.println("schema=" 
+ schema); System.out.println("schemaAllowNull=" + schemaAllowNull); 
GenericRecord record = new GenericRecordBuilder(schema) .set("name","bob") 
.build(); GenericRecord recordAllowNull = new 
GenericRecordBuilder(schemaAllowNull) .set("name","bob") .build(); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream 
baosAllowNull = new ByteArrayOutputStream(); writeAsJson(record, baos); 
writeAsJson(recordAllowNull, baosAllowNull); 
System.out.println("record="+baos.toString()); 
System.out.println("recordAllowNull="+baosAllowNull.toString()); 
assertEquals(baosAllowNull.toString(), baos.toString()); }
}
{code}




 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to