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)