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..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()) || fieldType.getClass().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 1f9a1e2688267..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 @@ -107,6 +107,18 @@ public void testMapWithEqualsSignAndEmptyValue() { assertEquals(config.stringStringMap.get("key2"), ""); } + @Test + public void testEmptyValuePreservesStringFieldAsEmptyString() { + Map properties = new HashMap<>(); + properties.put("name", ""); + + MyConfig config = new MyConfig(); + config.name = "configured"; + FieldParser.update(properties, config); + + assertEquals(config.name, ""); + } + @Test public void testNullStrValue() throws Exception { class TestMap {