From 37ddbb1e71330dbee9e7a770b60e62c8db79735e 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 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); } }