This is an automated email from the ASF dual-hosted git repository.

yuzelin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new f08861706 [flink] Unified use of JsonSerdeUtil (#2747)
f08861706 is described below

commit f0886170601a7af2de5a933c56bfa68be4341bd7
Author: monster <[email protected]>
AuthorDate: Tue Jan 23 10:31:20 2024 +0800

    [flink] Unified use of JsonSerdeUtil (#2747)
---
 .../src/main/java/org/apache/paimon/utils/JsonSerdeUtil.java   |  8 ++++++++
 .../apache/paimon/flink/action/cdc/format/RecordParser.java    | 10 +++-------
 .../flink/action/cdc/format/canal/CanalRecordParser.java       |  5 +++--
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/utils/JsonSerdeUtil.java 
b/paimon-core/src/main/java/org/apache/paimon/utils/JsonSerdeUtil.java
index 19a57ac58..d45a93368 100644
--- a/paimon-core/src/main/java/org/apache/paimon/utils/JsonSerdeUtil.java
+++ b/paimon-core/src/main/java/org/apache/paimon/utils/JsonSerdeUtil.java
@@ -233,6 +233,14 @@ public class JsonSerdeUtil {
         return true;
     }
 
+    public static <T> T convertValue(Object fromValue, TypeReference<T> 
toValueTypeRef) {
+        return OBJECT_MAPPER_INSTANCE.convertValue(fromValue, toValueTypeRef);
+    }
+
+    public static String writeValueAsString(Object value) throws 
JsonProcessingException {
+        return OBJECT_MAPPER_INSTANCE.writer().writeValueAsString(value);
+    }
+
     public static boolean isNull(JsonNode jsonNode) {
         return jsonNode == null || jsonNode.isNull();
     }
diff --git 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/RecordParser.java
 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/RecordParser.java
index 6903a6707..66d313135 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/RecordParser.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/RecordParser.java
@@ -32,7 +32,6 @@ import org.apache.paimon.utils.TypeUtils;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.core.JsonProcessingException;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.core.type.TypeReference;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.JsonNode;
-import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.ObjectMapper;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.node.ArrayNode;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.node.ObjectNode;
 
@@ -73,8 +72,6 @@ public abstract class RecordParser implements 
FlatMapFunction<String, RichCdcMul
 
     protected static final String FIELD_TABLE = "table";
     protected static final String FIELD_DATABASE = "database";
-    protected static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
-
     private final boolean caseSensitive;
     protected final TypeMapping typeMapping;
     protected final List<ComputedColumn> computedColumns;
@@ -143,7 +140,7 @@ public abstract class RecordParser implements 
FlatMapFunction<String, RichCdcMul
             JsonNode record, LinkedHashMap<String, DataType> paimonFieldTypes) 
{
         paimonFieldTypes.putAll(fillDefaultStringTypes(record));
         Map<String, Object> recordMap =
-                OBJECT_MAPPER.convertValue(record, new 
TypeReference<Map<String, Object>>() {});
+                JsonSerdeUtil.convertValue(record, new 
TypeReference<Map<String, Object>>() {});
         Map<String, String> rowData =
                 recordMap.entrySet().stream()
                         .collect(
@@ -153,9 +150,8 @@ public abstract class RecordParser implements 
FlatMapFunction<String, RichCdcMul
                                             if 
(Objects.nonNull(entry.getValue())
                                                     && 
!TypeUtils.isBasicType(entry.getValue())) {
                                                 try {
-                                                    return OBJECT_MAPPER
-                                                            .writer()
-                                                            
.writeValueAsString(entry.getValue());
+                                                    return 
JsonSerdeUtil.writeValueAsString(
+                                                            entry.getValue());
                                                 } catch 
(JsonProcessingException e) {
                                                     LOG.error("Failed to 
deserialize record.", e);
                                                     return 
Objects.toString(entry.getValue());
diff --git 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/canal/CanalRecordParser.java
 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/canal/CanalRecordParser.java
index 3ea979a8f..2877b0ed3 100644
--- 
a/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/canal/CanalRecordParser.java
+++ 
b/paimon-flink/paimon-flink-cdc/src/main/java/org/apache/paimon/flink/action/cdc/format/canal/CanalRecordParser.java
@@ -25,6 +25,7 @@ import 
org.apache.paimon.flink.action.cdc.mysql.MySqlTypeUtils;
 import org.apache.paimon.flink.sink.cdc.RichCdcMultiplexRecord;
 import org.apache.paimon.types.DataType;
 import org.apache.paimon.types.RowKind;
+import org.apache.paimon.utils.JsonSerdeUtil;
 
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.core.type.TypeReference;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.JsonNode;
@@ -135,7 +136,7 @@ public class CanalRecordParser extends RecordParser {
             return null;
         }
 
-        return OBJECT_MAPPER.convertValue(
+        return JsonSerdeUtil.convertValue(
                 schema, new TypeReference<LinkedHashMap<String, String>>() {});
     }
 
@@ -163,7 +164,7 @@ public class CanalRecordParser extends RecordParser {
             JsonNode record, LinkedHashMap<String, DataType> paimonFieldTypes) 
{
         LinkedHashMap<String, String> originalFieldTypes = 
tryExtractOriginalFieldTypes();
         Map<String, Object> recordMap =
-                OBJECT_MAPPER.convertValue(record, new 
TypeReference<Map<String, Object>>() {});
+                JsonSerdeUtil.convertValue(record, new 
TypeReference<Map<String, Object>>() {});
         Map<String, String> rowData = new HashMap<>();
 
         if (originalFieldTypes != null) {

Reply via email to