diff --git a/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java b/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java
index efec74d70..c10019943 100644
--- a/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java
+++ b/java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java
@@ -42,12 +42,24 @@
public class JsonpUtils {
+ private static JsonProvider systemJsonProvider = null;
+
/**
* Get a JsonProvider
instance. This method first calls the standard `JsonProvider.provider()` that is based on
- * the current thread's context classloader, and in case of failure tries to find a provider in other classloaders.
+ * the current thread's context classloader, and in case of failure tries to find a provider in other classloaders. The
+ * value is cached for subsequent calls.
*/
- @AllowForbiddenApis("Implementation of the JsonProvider lookup")
public static JsonProvider provider() {
+ JsonProvider result = systemJsonProvider;
+ if (result == null) {
+ result = findProvider();
+ systemJsonProvider = result;
+ }
+ return result;
+ }
+
+ @AllowForbiddenApis("Implementation of the JsonProvider lookup")
+ static JsonProvider findProvider() {
RuntimeException exception;
try {
return JsonProvider.provider();
diff --git a/java-client/src/test/java/co/elastic/clients/json/JsonpUtilsTest.java b/java-client/src/test/java/co/elastic/clients/json/JsonpUtilsTest.java
index 893a593cd..c7db13643 100644
--- a/java-client/src/test/java/co/elastic/clients/json/JsonpUtilsTest.java
+++ b/java-client/src/test/java/co/elastic/clients/json/JsonpUtilsTest.java
@@ -69,6 +69,16 @@ public Enumeration getResources(String name) {
}
}
+ @Test
+ @AllowForbiddenApis("Testing JsonpUtil.provider()")
+ public void testProviderCache() {
+ // A new provider at each call
+ assertNotSame(JsonpUtils.findProvider(), JsonpUtils.findProvider());
+
+ // Result is cached
+ assertSame(JsonpUtils.provider(), JsonpUtils.provider());
+ }
+
@Test
public void testObjectToString() {
// Test that we call toString() on application classes.