java .util.set поля сериализации / десериализации с использованием Apache Avro - PullRequest
1 голос
/ 27 января 2020

Я пытаюсь сериализовать пользовательский объект, который имеет поля java .util.set, используя apache avro, используя приведенный ниже код,

        final Schema schemaItemImportSchema = ReflectData.get().getSchema(clazz);
        final DatumWriter<T> writer = new ReflectDatumWriter<>(clazz);
        byte[] data = new byte[0];
        final ByteArrayOutputStream stream = new ByteArrayOutputStream();

        try {
            final Encoder encoder = EncoderFactory.get().jsonEncoder(schema, stream);
            datumWriter.write(data, encoder);
            encoder.flush();
            data = stream.toByteArray();
        } catch (final Exception excp) {
            log.error(excp);
        }

И десериализацию, используя приведенный ниже код,

final Schema schemaItemImportSchema = ReflectData.get().getSchema(clazz);
        final DatumReader<T> reader = new ReflectDatumReader<>(clazz);
Object dataActual = new Object();

        try {
            final Decoder decoder = DecoderFactory.get().jsonDecoder(schema, new String(data));
            dataActual = reader.read(null, decoder);
        } catch (final IOException excp) {
            log.error(excp);
        }

Используя приведенный выше код, я могу успешно сериализовать с установленными полями, но во время десериализации становится ошибка, java .lang.RuntimeException: java .lang.NoSuchMethodException: java .util.Set. ()

Если я использую @AvroIgnore для заданных полей, сериализация и десериализация отлично работает.

Может кто-нибудь помочь мне с сериализацией и десериализацией java .util.set полей

1 Ответ

0 голосов
/ 30 января 2020

Решил эту проблему, изменив тип на HashSet вместо set.

Ссылается https://blog.51cto.com/shadowisper/1947979

...