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

Reply via email to