From bf504f05309040e2f4d6bc0666fc163d98b7a28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=90=8D?= Date: Tue, 23 Jun 2026 10:18:10 +0800 Subject: [PATCH 1/2] Fix FieldParser empty String clearing Assisted-by: OpenAI Codex --- .../org/apache/pulsar/common/util/FieldParser.java | 2 +- .../apache/pulsar/common/util/FieldParserTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java index cb0b6a5841936..92887951db95c 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java @@ -228,7 +228,7 @@ public static void setEmptyValue(String strValue, Field field, T obj) throw new IllegalArgumentException( format("unsupported field-type %s for %s", field.getType(), field.getName())); } - } else if (Number.class.isAssignableFrom(field.getType()) || fieldType.getClass().equals(String.class)) { + } else if (Number.class.isAssignableFrom(field.getType()) || field.getType().equals(String.class)) { field.set(obj, null); } } diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java index 1f9a1e2688267..89184d5d5f170 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java @@ -107,6 +107,18 @@ public void testMapWithEqualsSignAndEmptyValue() { assertEquals(config.stringStringMap.get("key2"), ""); } + @Test + public void testEmptyValueClearsStringField() { + Map properties = new HashMap<>(); + properties.put("name", ""); + + MyConfig config = new MyConfig(); + config.name = "configured"; + FieldParser.update(properties, config); + + assertNull(config.name); + } + @Test public void testNullStrValue() throws Exception { class TestMap { From 0aaad5476d6ee1b61850ebf2a148cee9fbbca171 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=AE=B6=E5=90=8D?= Date: Thu, 25 Jun 2026 10:59:52 +0800 Subject: [PATCH 2/2] fix(review): preserve empty FieldParser strings on PR #26078 --- .../main/java/org/apache/pulsar/common/util/FieldParser.java | 4 +++- .../java/org/apache/pulsar/common/util/FieldParserTest.java | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java index 92887951db95c..1ebeb5ddf230e 100644 --- a/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java +++ b/pulsar-common/src/main/java/org/apache/pulsar/common/util/FieldParser.java @@ -228,8 +228,10 @@ public static void setEmptyValue(String strValue, Field field, T obj) throw new IllegalArgumentException( format("unsupported field-type %s for %s", field.getType(), field.getName())); } - } else if (Number.class.isAssignableFrom(field.getType()) || field.getType().equals(String.class)) { + } else if (Number.class.isAssignableFrom(field.getType())) { field.set(obj, null); + } else if (String.class.equals(field.getType())) { + field.set(obj, ""); } } diff --git a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java index 89184d5d5f170..efbbf5c5ec216 100644 --- a/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java +++ b/pulsar-common/src/test/java/org/apache/pulsar/common/util/FieldParserTest.java @@ -108,7 +108,7 @@ public void testMapWithEqualsSignAndEmptyValue() { } @Test - public void testEmptyValueClearsStringField() { + public void testEmptyValuePreservesStringFieldAsEmptyString() { Map properties = new HashMap<>(); properties.put("name", ""); @@ -116,7 +116,7 @@ public void testEmptyValueClearsStringField() { config.name = "configured"; FieldParser.update(properties, config); - assertNull(config.name); + assertEquals(config.name, ""); } @Test