Description
An IDL construct such as ...
Foo.idl
protocol MyService {
record Bar {
int count;
string message;
}
map<Bar> getBars();
}
generates run-time errors because of this code in SpecificData.java
SpecificData.java lines 189-196
} else if (Map.class.isAssignableFrom(raw)) { // map java.lang.reflect.Type key = params[0]; java.lang.reflect.Type value = params[1]; if (!(type instanceof Class && CharSequence.class.isAssignableFrom((Class)type))) throw new AvroTypeException("Map key class not CharSequence: "+key); return Schema.createMap(createSchema(value, names)); } else {
the issue is that CharSequence.class.isAssignableFrom((Class)type)) should really be CharSequence.class.isAssignableFrom((Class)key))