From 585471740c575a4b1c5cafcdddd6bb60478b994f Mon Sep 17 00:00:00 2001 From: seethinajayadileep Date: Fri, 6 Mar 2026 23:48:30 +0530 Subject: [PATCH 1/2] Fix duplicate field name handling in InstanceCoercer#getFieldWriters --- java/src/org/openqa/selenium/json/InstanceCoercer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/src/org/openqa/selenium/json/InstanceCoercer.java b/java/src/org/openqa/selenium/json/InstanceCoercer.java index f0f43a2943c38..588f7718088dd 100644 --- a/java/src/org/openqa/selenium/json/InstanceCoercer.java +++ b/java/src/org/openqa/selenium/json/InstanceCoercer.java @@ -126,7 +126,9 @@ private Map getFieldWriters(Constructor constructor) { } }; return new TypeAndWriter(type, writer); - })); + }, + (existing, ignored) -> existing, + java.util.LinkedHashMap::new)); } private Map getBeanWriters(Constructor constructor) { From 79b40cdce5a006cf2da22d684934074cf69092b8 Mon Sep 17 00:00:00 2001 From: seethinajayadileep Date: Sat, 7 Mar 2026 18:11:17 +0530 Subject: [PATCH 2/2] added unit testcase --- .../openqa/selenium/json/InstanceCoercer.java | 6 ++++-- .../org/openqa/selenium/json/JsonTest.java | 20 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/java/src/org/openqa/selenium/json/InstanceCoercer.java b/java/src/org/openqa/selenium/json/InstanceCoercer.java index 588f7718088dd..87aa260e81ac2 100644 --- a/java/src/org/openqa/selenium/json/InstanceCoercer.java +++ b/java/src/org/openqa/selenium/json/InstanceCoercer.java @@ -127,8 +127,10 @@ private Map getFieldWriters(Constructor constructor) { }; return new TypeAndWriter(type, writer); }, - (existing, ignored) -> existing, - java.util.LinkedHashMap::new)); + (existing, replacement) -> { + throw new JsonException( + "Duplicate JSON field name detected while collecting field writers"); + })); } private Map getBeanWriters(Constructor constructor) { diff --git a/java/test/org/openqa/selenium/json/JsonTest.java b/java/test/org/openqa/selenium/json/JsonTest.java index a8470b722f51b..762e50fefe303 100644 --- a/java/test/org/openqa/selenium/json/JsonTest.java +++ b/java/test/org/openqa/selenium/json/JsonTest.java @@ -132,6 +132,18 @@ void shouldAllowUserToPopulateFieldsDirectly() { assertThat(seen.theName).isEqualTo("fishy"); } + @Test + void shouldThrowWhenDuplicateFieldNamesExistWithFieldSetting() { + String raw = "{\"value\": \"test\"}"; + + assertThatThrownBy(() -> new Json().toType(raw, ChildFieldBean.class, BY_FIELD)) + .isInstanceOf(JsonException.class) + .hasMessageStartingWith("Unable to parse: " + raw) + .cause() + .isInstanceOf(JsonException.class) + .hasMessage("Duplicate JSON field name detected while collecting field writers"); + } + @Test void settingFinalFieldsShouldWork() { Map map = Map.of("theName", "fishy"); @@ -661,6 +673,14 @@ public void setBean(SimpleBean bean) { } } + public static class ParentFieldBean { + String value; + } + + public static class ChildFieldBean extends ParentFieldBean { + String value; + } + public static class JsonAware { private final String convertedValue;