This is an automated email from the ASF dual-hosted git repository.
bogong pushed a commit to branch branch-2.9
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/branch-2.9 by this push:
new 6cf312c5ae5 [fix][client] Support LocalDateTime Conversion (#18334)
6cf312c5ae5 is described below
commit 6cf312c5ae543c7c54f33cc8529e6867a3ab2393
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
(cherry picked from commit b31c5a6a325728b5dc5faebd1a33386952d733d5)
---
.../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 a5dda082e7c..8bb2ebeee0a 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
@@ -120,6 +120,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());
@@ -130,8 +132,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 2a5040d7815..ed2c8597ded 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;
@@ -549,4 +550,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));
+ }
}