[ 
https://issues.apache.org/jira/browse/AVRO-2418?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nandor Kollar resolved AVRO-2418.
---------------------------------
    Resolution: Duplicate

Issue addressed in AVRO-2415.

> BUG in schema resolver, when resolving map<> to union {null, map<>}
> -------------------------------------------------------------------
>
>                 Key: AVRO-2418
>                 URL: https://issues.apache.org/jira/browse/AVRO-2418
>             Project: Apache Avro
>          Issue Type: Bug
>    Affects Versions: 1.9.0
>            Reporter: Zoltan Farkas
>            Priority: Major
>
> Here is unit test to reproduce the issue:
> {code}
> package org.apache.avro.io.parsing;
> import java.io.ByteArrayInputStream;
> import java.io.ByteArrayOutputStream;
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.OutputStream;
> import java.util.HashMap;
> import java.util.Map;
> import org.junit.Assert;
> import org.apache.avro.Schema;
> import org.apache.avro.SchemaBuilder;
> import org.apache.avro.generic.GenericData;
> import org.apache.avro.generic.GenericDatumReader;
> import org.apache.avro.generic.GenericDatumWriter;
> import org.apache.avro.generic.GenericRecord;
> import org.apache.avro.generic.GenericRecordBuilder;
> import org.apache.avro.io.DatumReader;
> import org.apache.avro.io.DatumWriter;
> import org.apache.avro.io.Decoder;
> import org.apache.avro.io.DecoderFactory;
> import org.apache.avro.io.Encoder;
> import org.apache.avro.io.EncoderFactory;
> import org.apache.avro.util.Utf8;
> import org.junit.Test;
> /**
>  *
>  * @author Zoltan Farkas
>  */
> public class TestUnionPromotion {
>   @Test
>   public void testUnionPromotionCollection() throws Exception {
>     Schema directFieldSchema = 
> SchemaBuilder.record("MyRecord").namespace("ns").fields().name("field1").type().map()
>         .values().stringType().noDefault().endRecord();
>     Schema schemaWithField = 
> SchemaBuilder.record("MyRecord").namespace("ns").fields().name("field1").type().nullable()
>         .map().values().stringType().noDefault().endRecord();
>     Map<String, String> data = new HashMap<>();
>     data.put("a", "someValue");
>     GenericData.Record record = new 
> GenericRecordBuilder(directFieldSchema).set("field1", data).build();
>     ByteArrayOutputStream bos = new ByteArrayOutputStream();
>     writeAvroBin(bos, record);
>     Object read = readAvroBin(new ByteArrayInputStream(bos.toByteArray()), 
> directFieldSchema, schemaWithField);
>     Map name = (Map) ((GenericRecord) read).get("field1");
>     Assert.assertEquals("someValue", name.get(new Utf8("a")).toString());
>   }
>   private static Object readAvroBin(final InputStream input, final Schema 
> writerSchema, final Schema readerSchema)
>       throws IOException {
>     DatumReader reader = new GenericDatumReader(writerSchema, readerSchema);
>     DecoderFactory decoderFactory = DecoderFactory.get();
>     Decoder decoder = decoderFactory.binaryDecoder(input, null);
>     return reader.read(null, decoder);
>   }
>   private static void writeAvroBin(final OutputStream out, final 
> GenericRecord req) throws IOException {
>     @SuppressWarnings("unchecked")
>     DatumWriter writer = new GenericDatumWriter(req.getSchema());
>     Encoder encoder = EncoderFactory.get().binaryEncoder(out, null);
>     writer.write(req, encoder);
>     encoder.flush();
>   }
> }
> {code}



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

Reply via email to