Lydie created AVRO-2160:
---------------------------

             Summary: Json to Avro with non required value and union schema 
failing
                 Key: AVRO-2160
                 URL: https://issues.apache.org/jira/browse/AVRO-2160
             Project: Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.8.2
            Reporter: Lydie


I am trying to convert this string:

str str4

using this schema:

{"type":"record", 
"namespace":"foo","name":"Person","fields":[\{"name":"lastname","type": 
["null","string"], 
"default":null},\{"name":"firstname","type":"string"},\{"name":"age","type":["null","int"],
 "default":null}]}

I get this error 

{color:#FF0000}com.syapse.messagePublisher.publisher.AvroEncodeException: 
Expected field name not found: 
lastnamein\{"firstname":"John","age":{"int":35}}{color}at 
com.syapse.messagePublisher.publisher.AvroEncoder.convertJsonToAvro(AvroEncoder.java:78)

 

Although this should me the correct syntax for a non required filed.

Note that it works for 

{"lastname":\{"string" : "Doe"},"firstname":"John","age":\{"int":36}}

 

What am I missing ( using Abro 1.8.2)

here is my code:

 
{code:java}
public static byte[] convertJsonToAvro(byte[] data, String schemaStr) throws 
AvroEncodeException {

InputStream input = null;

DataFileWriter<GenericRecord> writer = null;

ByteArrayOutputStream output = null;

try {
Schema schema = new Schema.Parser().parse(schemaStr);
DatumReader<GenericRecord> reader = new 
GenericDatumReader<GenericRecord>(schema);
input = new ByteArrayInputStream(data);
DataInputStream din = new DataInputStream(input);
output = new ByteArrayOutputStream();
writer = new DataFileWriter<GenericRecord>(new 
GenericDatumWriter<GenericRecord>());
writer.create(schema, output);
Decoder decoder = DecoderFactory.get().jsonDecoder(schema, din);
GenericRecord datum = null;
while (true) {
try {
datum = reader.read(null, decoder);
} catch (EOFException eofe) {
break;
}
writer.append(datum);
}
writer.flush();
writer.close();
return output.toByteArray();
} catch (AvroTypeException e) {
throw new AvroEncodeException(e.getMessage() + "in" + new String(data));
} catch (IOException e1) {
throw new AvroEncodeException("Error decoding Json " + e1.getMessage());
} finally {
try {
input.close();
} catch (Exception e) {
}
}

}
{code}
 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to