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

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


The following commit(s) were added to refs/heads/master by this push:
     new af23563277 [core] Fix Iceberg metadata parsing error by excluding null 
doc field from JSON serialization (#7099)
af23563277 is described below

commit af23563277f4b0cf196ddd22aec5074570bc37ba
Author: KangJi <[email protected]>
AuthorDate: Thu Jan 22 12:27:20 2026 +0900

    [core] Fix Iceberg metadata parsing error by excluding null doc field from 
JSON serialization (#7099)
---
 .../paimon/iceberg/metadata/IcebergDataField.java  |  2 ++
 .../iceberg/metadata/IcebergDataFieldTest.java     | 36 ++++++++++++++++++++++
 2 files changed, 38 insertions(+)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/iceberg/metadata/IcebergDataField.java
 
b/paimon-core/src/main/java/org/apache/paimon/iceberg/metadata/IcebergDataField.java
index 0facdd47e4..55d67e55ee 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/iceberg/metadata/IcebergDataField.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/iceberg/metadata/IcebergDataField.java
@@ -42,6 +42,7 @@ import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonCre
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonGetter;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonIgnore;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonInclude;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonProperty;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 
@@ -78,6 +79,7 @@ public class IcebergDataField {
     @JsonIgnore private DataType dataType;
 
     @JsonProperty(FIELD_DOC)
+    @JsonInclude(JsonInclude.Include.NON_NULL)
     private final String doc;
 
     public IcebergDataField(DataField dataField) {
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/iceberg/metadata/IcebergDataFieldTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/iceberg/metadata/IcebergDataFieldTest.java
index f4aff2a79b..c00e3a2f5e 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/iceberg/metadata/IcebergDataFieldTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/iceberg/metadata/IcebergDataFieldTest.java
@@ -35,6 +35,7 @@ import org.apache.paimon.types.RowType;
 import org.apache.paimon.types.TimestampType;
 import org.apache.paimon.types.VarBinaryType;
 import org.apache.paimon.types.VarCharType;
+import org.apache.paimon.utils.JsonSerdeUtil;
 
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Test;
@@ -545,4 +546,39 @@ class IcebergDataFieldTest {
         assertThat(icebergStruct.fields().get(0).type()).isEqualTo("int");
         assertThat(icebergStruct.fields().get(1).type()).isEqualTo("string");
     }
+
+    @Test
+    @DisplayName("Test doc field serialization with null value")
+    void testDocFieldSerializationWithNullValue() {
+        // Test doc field is null
+        DataField dataFieldWithoutDoc = new DataField(1, "test_field", new 
IntType(false));
+        IcebergDataField originalField = new 
IcebergDataField(dataFieldWithoutDoc);
+
+        String json = JsonSerdeUtil.toJson(originalField);
+        IcebergDataField deserializedField = JsonSerdeUtil.fromJson(json, 
IcebergDataField.class);
+
+        assertThat(deserializedField.id()).isEqualTo(1);
+        assertThat(deserializedField.name()).isEqualTo("test_field");
+        assertThat(deserializedField.required()).isTrue();
+        assertThat(deserializedField.type()).isEqualTo("int");
+        assertThat(deserializedField.doc()).isNull();
+    }
+
+    @Test
+    @DisplayName("Test doc field serialization with non-null value")
+    void testDocFieldSerializationWithNonNullValue() {
+        // Test doc field is not null
+        DataField dataFieldWithDoc =
+                new DataField(1, "test_field", new IntType(false), "test 
description");
+        IcebergDataField originalField = new 
IcebergDataField(dataFieldWithDoc);
+
+        String json = JsonSerdeUtil.toJson(originalField);
+        IcebergDataField deserializedField = JsonSerdeUtil.fromJson(json, 
IcebergDataField.class);
+
+        assertThat(deserializedField.id()).isEqualTo(1);
+        assertThat(deserializedField.name()).isEqualTo("test_field");
+        assertThat(deserializedField.required()).isTrue();
+        assertThat(deserializedField.type()).isEqualTo("int");
+        assertThat(deserializedField.doc()).isEqualTo("test description");
+    }
 }

Reply via email to