This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new b31c5a6a325 [fix][client] Support LocalDateTime Conversion (#18334)
b31c5a6a325 is described below
commit b31c5a6a325728b5dc5faebd1a33386952d733d5
Author: Cong Zhao <[email protected]>
AuthorDate: Wed Nov 9 17:02:07 2022 +0800
[fix][client] Support LocalDateTime Conversion (#18334)
* Support LocalDateTime Conversion
* move `TimestampMicrosConversion` to correct line
---
.../pulsar/client/impl/schema/AvroSchema.java | 4 +++-
.../pulsar/client/impl/schema/AvroSchemaTest.java | 21 +++++++++++++++++++++
2 files changed, 24 insertions(+), 1 deletion(-)
diff --git
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
index d1e9acf7413..d2e994efc53 100644
---
a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
+++
b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/schema/AvroSchema.java
@@ -118,6 +118,8 @@ public class AvroSchema<T> extends AvroBaseStructSchema<T> {
reflectData.addLogicalTypeConversion(new
TimeConversions.DateConversion());
reflectData.addLogicalTypeConversion(new
TimeConversions.TimeMillisConversion());
reflectData.addLogicalTypeConversion(new
TimeConversions.TimeMicrosConversion());
+ reflectData.addLogicalTypeConversion(new
TimeConversions.LocalTimestampMillisConversion());
+ reflectData.addLogicalTypeConversion(new
TimeConversions.LocalTimestampMicrosConversion());
if (jsr310ConversionEnabled) {
// The conversion that is registered first is higher priority than
the registered later.
reflectData.addLogicalTypeConversion(new
TimeConversions.TimestampMillisConversion());
@@ -128,8 +130,8 @@ public class AvroSchema<T> extends AvroBaseStructSchema<T> {
} catch (ClassNotFoundException e) {
// Skip if have not provide joda-time dependency.
}
- reflectData.addLogicalTypeConversion(new
TimeConversions.TimestampMicrosConversion());
}
+ reflectData.addLogicalTypeConversion(new
TimeConversions.TimestampMicrosConversion());
reflectData.addLogicalTypeConversion(new Conversions.UUIDConversion());
}
diff --git
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java
index 9de37ea35b8..2b183edae8e 100644
---
a/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java
+++
b/pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/AvroSchemaTest.java
@@ -32,6 +32,7 @@ import io.netty.buffer.ByteBufAllocator;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
+import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
@@ -543,4 +544,24 @@ public class AvroSchemaTest {
Assert.assertNotEquals(Instant.class,
decodeWithJsonNoClassLoader.getValue().getClass());
}
+ @Data
+ @AllArgsConstructor
+ @NoArgsConstructor
+ private static class LocalDateTimePojo {
+ LocalDateTime value;
+ }
+
+ @Test
+ public void testLocalDateTime() {
+ SchemaDefinition<LocalDateTimePojo> schemaDefinition =
+
SchemaDefinition.<LocalDateTimePojo>builder().withPojo(LocalDateTimePojo.class)
+ .withJSR310ConversionEnabled(true).build();
+
+ AvroSchema<LocalDateTimePojo> avroSchema =
AvroSchema.of(schemaDefinition);
+ LocalDateTime now = LocalDateTime.now();
+ byte[] bytes = avroSchema.encode(new LocalDateTimePojo(now));
+
+ LocalDateTimePojo pojo = avroSchema.decode(bytes);
+ assertEquals(pojo.getValue().truncatedTo(ChronoUnit.MILLIS),
now.truncatedTo(ChronoUnit.MILLIS));
+ }
}