From cb7024de10e9fba2a9ac6ab505587878f3bd08d2 Mon Sep 17 00:00:00 2001 From: Sylvain Wallez Date: Mon, 7 Nov 2022 15:53:20 +0100 Subject: [PATCH] Do not mix mapper types in JsonData serialization (#440) --- .../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 ee1745aed..0697fb3d7 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 @@ -108,9 +108,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); } }