2
Apache Avro可以在序列化期间处理参数化类型吗?Apache Avro框架可以在序列化期间处理参数化类型吗?
我看到这个异常从Avro的框架抛出,当我试图序列使用泛型实例 -
org.apache.avro.AvroTypeException: Unknown type: T
at org.apache.avro.specific.SpecificData.createSchema(SpecificData.java:255)
at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:514)
at org.apache.avro.reflect.ReflectData.createFieldSchema(ReflectData.java:593)
at org.apache.avro.reflect.ReflectData$AllowNull.createFieldSchema(ReflectData.java:75)
at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:472)
at org.apache.avro.specific.SpecificData.getSchema(SpecificData.java:189)
类我试图序列看起来像这样
public class Property<T> {
private T propertyValue;
}
我想基于传入的POJO实例即时生成模式。我的序列化代码看起来是这样的 -
ByteArrayOutputStream os = new ByteArrayOutputStream();
ReflectData reflectData = ReflectData.AllowNull.get();
Schema schema = reflectData.getSchema(propertyValue.getClass());
DatumWriter<T> writer = new ReflectDatumWriter<T>(schema);
Encoder encoder = EncoderFactory.get().jsonEncoder(schema, os);
writer.write(propertyValue, encoder);
线在我的代码触发异常:
Schema schema = reflectData.getSchema(propertyValue.getClass());
相同的代码工作正常,没有参数化类型的类。