From 9c36e21adde843dbc78d9fa898adb3067c194d26 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 15:54:53 +0100 Subject: [PATCH] Do not mix mapper types in JsonData serialization (#440) (#442) Co-authored-by: Sylvain Wallez --- .../java/co/elastic/clients/json/JsonDataImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonDataImpl.java b/java-client/src/main/java/co/elastic/clients/json/JsonDataImpl.java index 1150c4ddc..e2a79ec9a 100644 --- a/java-client/src/main/java/co/elastic/clients/json/JsonDataImpl.java +++ b/java-client/src/main/java/co/elastic/clients/json/JsonDataImpl.java @@ -96,9 +96,15 @@ public T deserialize(JsonpDeserializer deserializer, JsonpMapper mapper) public void serialize(JsonGenerator generator, JsonpMapper mapper) { if (value instanceof JsonValue) { generator.write((JsonValue) value); + } else if (this.mapper == null) { + mapper.serialize(value, generator); + } else if (this.mapper.getClass() != mapper.getClass()) { + // Workaround for https://github.com/elastic/elasticsearch-java/issues/424 + // Mappers can require generators to have been created by them (see JacksonJsonpMapper), so use the mapper + // parameter if its class is different from the one passed at construction time. + mapper.serialize(value, generator); } else { - // Mapper provided at creation time has precedence - (this.mapper != null ? this.mapper : mapper).serialize(value, generator); + this.mapper.serialize(value, generator); } }