Skip to content

Commit 7d57881

Browse files
committed
Fix direct serialization of primitive types in DEFAULT_JSONP_MAPPER
Signed-off-by: Thomas Farr <tsfarr@amazon.com>
1 parent e797ffd commit 7d57881

2 files changed

Lines changed: 32 additions & 4 deletions

File tree

java-client/src/main/java/org/opensearch/client/json/JsonpUtils.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import jakarta.json.stream.JsonParser.Event;
4444
import jakarta.json.stream.JsonParsingException;
4545
import java.io.StringReader;
46+
import java.math.BigDecimal;
47+
import java.math.BigInteger;
4648
import java.util.AbstractMap;
4749
import java.util.Map;
4850
import java.util.stream.Collectors;
@@ -78,11 +80,31 @@ public JsonProvider jsonProvider() {
7880
public <T> void serialize(T value, JsonGenerator generator) {
7981
if (value instanceof JsonpSerializable) {
8082
((JsonpSerializable) value).serialize(generator, this);
81-
return;
83+
} else if (value instanceof JsonValue) {
84+
generator.write((JsonValue) value);
85+
} else if (value instanceof String) {
86+
generator.write((String) value);
87+
} else if (value instanceof BigDecimal) {
88+
generator.write((BigDecimal) value);
89+
} else if (value instanceof BigInteger) {
90+
generator.write((BigInteger) value);
91+
} else if (value instanceof Short) {
92+
generator.write((Short) value);
93+
} else if (value instanceof Integer) {
94+
generator.write((Integer) value);
95+
} else if (value instanceof Long) {
96+
generator.write((Long) value);
97+
} else if (value instanceof Float) {
98+
generator.write((Float) value);
99+
} else if (value instanceof Double) {
100+
generator.write((Double) value);
101+
} else if (value instanceof Boolean) {
102+
generator.write((Boolean) value);
103+
} else {
104+
throw new JsonException(
105+
"Cannot find a serializer for type " + value.getClass().getName() + ". Consider using a full-featured JsonpMapper."
106+
);
82107
}
83-
throw new JsonException(
84-
"Cannot find a serializer for type " + value.getClass().getName() + ". Consider using a full-featured JsonpMapper."
85-
);
86108
}
87109

88110
@Override

java-client/src/test/java/org/opensearch/client/opensearch/core/IndexRequestTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,10 @@ static class MyDoc {
2828
this.key = key;
2929
}
3030
}
31+
32+
@Test
33+
public void indexRequestToJson() {
34+
IndexRequest<Object> indexRequest = IndexRequest.of(i -> i.index("index").document("document"));
35+
assertNotNull(indexRequest.toJsonString());
36+
}
3137
}

0 commit comments

Comments
 (0)