Description
Since Utf8 does not have an Stringable notation, and is not in SpecificData#stringableClasses, ReflectData#isNonStringMap returns true. This also causes ReflectData#isArray to return true for maps with Utf8 keys, and thus GenericData#resolveUnion fails as well. This ultimately causes ReflectData#write to fail for schemas that contain a union that contains a map, where the data uses Utf8 for strings.
This following test case reproduces the issue:
@Test public void testUnionWithMapWithUtf8Keys() { Schema s = new Schema.Parser().parse ("[\"null\", {\"type\":\"map\",\"values\":\"float\"}]"); GenericData data = ReflectData.get(); HashMap<Utf8,Float> map = new HashMap<Utf8,Float>(); map.put(new Utf8("foo"), 1.0f); assertEquals(1, data.resolveUnion(s, map)); }