Я написал Kafka Avro Deserializer, используя файл схемы Avro с сгенерированным исходным кодом Java. Требование не использовать POJO. Как я могу сделать приведенный ниже код, чтобы не использовать POJO и преобразование общей схемы.
import java.util.Arrays;
import java.util.Map;
import org.apache.avro.generic.GenericDatumReader;
import org.apache.avro.generic.GenericRecord;
import org.apache.avro.io.DatumReader;
import org.apache.avro.io.Decoder;
import org.apache.avro.io.DecoderFactory;
import org.apache.kafka.common.errors.SerializationException;
import org.apache.kafka.common.serialization.Deserializer;
import com.example.org.model.Person;
public class AvroDeserializer implements Deserializer<GenericRecord> {
@Override
public void close() {
}
@Override
public void configure(Map<String, ?> configs, boolean isKey) {
}
@Override
public GenericRecord deserialize(String topic, byte[] data) {
try {
GenericRecord result = null;
if (data != null) {
DatumReader<Person> reader = new SpecificDatumReader<>
(Person.getSchema());
Decoder decoder = DecoderFactory.get().binaryDecoder(data, null);
result = (GenericRecord) reader.read(null, decoder);
}
return result;
} catch (Exception ex) {
throw new SerializationException(
"Can't deserialize data '" + Arrays.toString(data) + "' from topic '" + topic + "'", ex);
}
}
}
Как сделать так, чтобы этот код не использовал POJO.