diff --git a/lang/java/avro/src/test/java/org/apache/avro/io/FastReaderBuilderJavaClassTest.java b/lang/java/avro/src/test/java/org/apache/avro/io/FastReaderBuilderJavaClassTest.java index 0cb745d9315..f82b70a7a2a 100644 --- a/lang/java/avro/src/test/java/org/apache/avro/io/FastReaderBuilderJavaClassTest.java +++ b/lang/java/avro/src/test/java/org/apache/avro/io/FastReaderBuilderJavaClassTest.java @@ -29,8 +29,6 @@ import org.apache.avro.Schema; import org.apache.avro.SchemaBuilder; import org.apache.avro.generic.GenericData; -import org.apache.avro.generic.GenericDatumReader; -import org.apache.avro.generic.GenericDatumWriter; import org.apache.avro.generic.GenericRecord; import org.apache.avro.generic.GenericRecordBuilder; import org.apache.avro.specific.SpecificData; @@ -70,20 +68,24 @@ public class FastReaderBuilderJavaClassTest { .set("prices", Map.of("-0.0002", "cheap", "12345.678", "expensive")).build(); /** - * Reusable round-trip logic for a record, using the given model. + * Reusable round-trip logic for a record, using the given model. The reader is + * built via {@link GenericData#createDatumReader(Schema, Schema)} so that + * SpecificData produces a real {@code SpecificDatumReader}, rather than a + * {@code GenericDatumReader} wrapping a SpecificData instance. */ + @SuppressWarnings("unchecked") public static GenericRecord roundTrip(GenericRecord record, GenericData model) throws IOException { byte[] serialized; try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { - GenericDatumWriter writer = new GenericDatumWriter<>(record.getSchema()); + DatumWriter writer = model.createDatumWriter(record.getSchema()); BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(baos, null); writer.write(record, encoder); encoder.flush(); serialized = baos.toByteArray(); } - GenericDatumReader reader = new GenericDatumReader<>(record.getSchema(), record.getSchema(), model); + DatumReader reader = model.createDatumReader(record.getSchema(), record.getSchema()); BinaryDecoder decoder = DecoderFactory.get().binaryDecoder(serialized, null); return reader.read(null, decoder); } diff --git a/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificDatumReader.java b/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificDatumReader.java index 3c10b74cde1..cd4589e4f35 100644 --- a/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificDatumReader.java +++ b/lang/java/avro/src/test/java/org/apache/avro/specific/TestSpecificDatumReader.java @@ -68,6 +68,12 @@ public String getContent() { public static class MyReader extends SpecificDatumReader { + MyReader() { + // Use a new data model instead of the singleton in order to avoid modifying the + // setFastReaderEnabled state for other tests. + super(null, null, new SpecificData()); + } + @Override protected Class findStringClass(Schema schema) { return MyData.class;