Merge pull request #15629 from apache/revert-15608-dpcollins-cherry-pick
diff --git a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java
index b236783..8d43fdd 100644
--- a/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java
+++ b/sdks/java/core/src/main/java/org/apache/beam/sdk/coders/AvroCoder.java
@@ -117,9 +117,19 @@
* @param <T> the element type
*/
public static <T> AvroCoder<T> of(TypeDescriptor<T> type) {
+ return of(type, true);
+ }
+
+ /**
+ * Returns an {@code AvroCoder} instance for the provided element type, respecting whether to use
+ * Avro's Reflect* or Specific* suite for encoding and decoding.
+ *
+ * @param <T> the element type
+ */
+ public static <T> AvroCoder<T> of(TypeDescriptor<T> type, boolean useReflectApi) {
@SuppressWarnings("unchecked")
Class<T> clazz = (Class<T>) type.getRawType();
- return of(clazz);
+ return of(clazz, useReflectApi);
}
/**
@@ -128,7 +138,7 @@
* @param <T> the element type
*/
public static <T> AvroCoder<T> of(Class<T> clazz) {
- return of(clazz, false);
+ return of(clazz, true);
}
/**
@@ -140,8 +150,8 @@
}
/**
- * Returns an {@code AvroCoder} instance for the given class using Avro's Reflection API for
- * encoding and decoding.
+ * Returns an {@code AvroCoder} instance for the given class, respecting whether to use Avro's
+ * Reflect* or Specific* suite for encoding and decoding.
*
* @param <T> the element type
*/
@@ -158,12 +168,12 @@
* @param <T> the element type
*/
public static <T> AvroCoder<T> of(Class<T> type, Schema schema) {
- return of(type, schema, false);
+ return of(type, schema, true);
}
/**
- * Returns an {@code AvroCoder} instance for the given class and schema using Avro's Reflection
- * API for encoding and decoding.
+ * Returns an {@code AvroCoder} instance for the given class and schema, respecting whether to use
+ * Avro's Reflect* or Specific* suite for encoding and decoding.
*
* @param <T> the element type
*/
diff --git a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/AvroCoderTest.java b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/AvroCoderTest.java
index d7886c3..9443aad 100644
--- a/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/AvroCoderTest.java
+++ b/sdks/java/core/src/test/java/org/apache/beam/sdk/coders/AvroCoderTest.java
@@ -323,7 +323,8 @@
@Test
public void testSpecificRecordEncoding() throws Exception {
- AvroCoder<TestAvro> coder = AvroCoder.of(TestAvro.class, AVRO_SPECIFIC_RECORD.getSchema());
+ AvroCoder<TestAvro> coder =
+ AvroCoder.of(TestAvro.class, AVRO_SPECIFIC_RECORD.getSchema(), false);
assertTrue(SpecificRecord.class.isAssignableFrom(coder.getType()));
CoderProperties.coderDecodeEncodeEqual(coder, AVRO_SPECIFIC_RECORD);
@@ -415,8 +416,8 @@
}
@Test
- public void testAvroReflectCoderIsSerializable() throws Exception {
- AvroCoder<Pojo> coder = AvroCoder.of(Pojo.class, true);
+ public void testAvroSpecificCoderIsSerializable() throws Exception {
+ AvroCoder<Pojo> coder = AvroCoder.of(Pojo.class, false);
// Check that the coder is serializable using the regular JSON approach.
SerializableUtils.ensureSerializable(coder);