[
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)