diff --git a/CHANGELOG.md b/CHANGELOG.md index d0ccac007b..03393385ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) ### Removed ### Fixed +- Fixed direct serialization of primitive types in `DEFAULT_JSONP_MAPPER` as used by `toJsonString()` ([#1524](https://github.com/opensearch-project/opensearch-java/pull/1524)) ### Security diff --git a/java-client/src/main/java/org/opensearch/client/json/JsonpUtils.java b/java-client/src/main/java/org/opensearch/client/json/JsonpUtils.java index 8cf51df787..c0d126d0df 100644 --- a/java-client/src/main/java/org/opensearch/client/json/JsonpUtils.java +++ b/java-client/src/main/java/org/opensearch/client/json/JsonpUtils.java @@ -43,6 +43,8 @@ import jakarta.json.stream.JsonParser.Event; import jakarta.json.stream.JsonParsingException; import java.io.StringReader; +import java.math.BigDecimal; +import java.math.BigInteger; import java.util.AbstractMap; import java.util.Map; import java.util.stream.Collectors; @@ -78,11 +80,31 @@ public JsonProvider jsonProvider() { public void serialize(T value, JsonGenerator generator) { if (value instanceof JsonpSerializable) { ((JsonpSerializable) value).serialize(generator, this); - return; + } else if (value instanceof JsonValue) { + generator.write((JsonValue) value); + } else if (value instanceof String) { + generator.write((String) value); + } else if (value instanceof BigDecimal) { + generator.write((BigDecimal) value); + } else if (value instanceof BigInteger) { + generator.write((BigInteger) value); + } else if (value instanceof Short) { + generator.write((Short) value); + } else if (value instanceof Integer) { + generator.write((Integer) value); + } else if (value instanceof Long) { + generator.write((Long) value); + } else if (value instanceof Float) { + generator.write((Float) value); + } else if (value instanceof Double) { + generator.write((Double) value); + } else if (value instanceof Boolean) { + generator.write((Boolean) value); + } else { + throw new JsonException( + "Cannot find a serializer for type " + value.getClass().getName() + ". Consider using a full-featured JsonpMapper." + ); } - throw new JsonException( - "Cannot find a serializer for type " + value.getClass().getName() + ". Consider using a full-featured JsonpMapper." - ); } @Override diff --git a/java-client/src/test/java/org/opensearch/client/opensearch/_types/aggregations/ExtendedBoundsTest.java b/java-client/src/test/java/org/opensearch/client/opensearch/_types/aggregations/ExtendedBoundsTest.java new file mode 100644 index 0000000000..62d5b4b3ab --- /dev/null +++ b/java-client/src/test/java/org/opensearch/client/opensearch/_types/aggregations/ExtendedBoundsTest.java @@ -0,0 +1,21 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * + * The OpenSearch Contributors require contributions made to + * this file be licensed under the Apache-2.0 license or a + * compatible open source license. + */ + +package org.opensearch.client.opensearch._types.aggregations; + +import org.junit.Test; +import org.opensearch.client.opensearch.model.ModelTestCase; + +public class ExtendedBoundsTest extends ModelTestCase { + @Test + public void testToJsonString() { + ExtendedBounds bounds = ExtendedBounds.of(eb -> eb.min(0.0).max(4096.0)); + + assertEquals("{\"max\":4096.0,\"min\":0.0}", bounds.toJsonString()); + } +}