Vijaya
Vijaya

Reputation: 167

java.util.set fields serialization/deSerialization using Apache Avro

I am trying to serialize custom object which has java.util.set fields using Apache Avro using below code:

        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);
        }

And deSerialization using below code,

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);
        }

Using above code I am able to serialize successfully with set fields but during de-serialization getting below error,

java.lang.RuntimeException: java.lang.NoSuchMethodException: java.util.Set.<init>()

If I use @AvroIgnore for set fields, both serialization and de-serialization works perfectly.

How can I serialize and deserialize java.util.set fields?

Upvotes: 1

Views: 1375

Answers (1)

Vijaya
Vijaya

Reputation: 167

Resolved this issue by changing type to HashSet instead of set.

Referred https://blog.51cto.com/shadowisper/1947979

Upvotes: 2

Related Questions