Skip to content

Commit 4944fa0

Browse files
committed
Update dependencies, and use Jackson as the default JSONP implementation
1 parent 1d825fe commit 4944fa0

File tree

7 files changed

+62
-38
lines changed

7 files changed

+62
-38
lines changed

java-client/build.gradle.kts

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,16 @@ signing {
198198
}
199199

200200
dependencies {
201-
// Compile and test with the last 7.x version to make sure transition scenarios where
202-
// the Java API client coexists with a 7.x HLRC work fine
201+
// Compile and test with the last 8.x version to make sure transition scenarios where
202+
// the Java API client coexists with a 8.x HLRC work fine
203203
val elasticsearchVersion = "8.17.0"
204-
val jacksonVersion = "2.17.0"
204+
val jacksonVersion = "2.18.3"
205205
val openTelemetryVersion = "1.29.0"
206206

207207
// Apache 2.0
208208
// https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-low.html
209-
api("org.elasticsearch.client", "elasticsearch-rest-client", elasticsearchVersion)
209+
compileOnly("org.elasticsearch.client", "elasticsearch-rest-client", elasticsearchVersion)
210+
testImplementation("org.elasticsearch.client", "elasticsearch-rest-client", elasticsearchVersion)
210211

211212
api("org.apache.httpcomponents.client5","httpclient5","5.4")
212213

@@ -216,38 +217,34 @@ dependencies {
216217

217218
// EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
218219
// https://github.com/eclipse-ee4j/jsonp
219-
api("jakarta.json:jakarta.json-api:2.0.1")
220+
api("jakarta.json:jakarta.json-api:2.1.3")
220221

221222
// Needed even if using Jackson to have an implementation of the Jsonp object model
222223
// EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
223224
// https://github.com/eclipse-ee4j/parsson
224-
api("org.eclipse.parsson:parsson:1.0.5")
225+
api("org.eclipse.parsson:parsson:1.1.7")
225226

226227
// OpenTelemetry API for native instrumentation of the client.
227228
// Apache 2.0
228229
// https://github.com/open-telemetry/opentelemetry-java
229230
implementation("io.opentelemetry", "opentelemetry-api", openTelemetryVersion)
230231
// Use it once it's stable (see Instrumentation.java). Limited to tests for now.
231232
testImplementation("io.opentelemetry", "opentelemetry-semconv", "$openTelemetryVersion-alpha")
233+
testImplementation("io.opentelemetry", "opentelemetry-sdk", openTelemetryVersion)
232234

233235
// EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
234236
// https://github.com/eclipse-ee4j/jsonb-api
235-
compileOnly("jakarta.json.bind", "jakarta.json.bind-api", "2.0.0")
236-
testImplementation("jakarta.json.bind", "jakarta.json.bind-api", "2.0.0")
237+
compileOnly("jakarta.json.bind", "jakarta.json.bind-api", "3.0.1")
238+
testImplementation("jakarta.json.bind", "jakarta.json.bind-api", "3.0.1")
237239

238240
// Apache 2.0
239241
// https://github.com/FasterXML/jackson
240-
compileOnly("com.fasterxml.jackson.core", "jackson-core", jacksonVersion)
241-
compileOnly("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
242-
testImplementation("com.fasterxml.jackson.core", "jackson-core", jacksonVersion)
243-
testImplementation("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
242+
implementation("com.fasterxml.jackson.core", "jackson-core", jacksonVersion)
243+
implementation("com.fasterxml.jackson.core", "jackson-databind", jacksonVersion)
244244

245245
// EPL-2.0 OR BSD-3-Clause
246246
// https://eclipse-ee4j.github.io/yasson/
247-
testImplementation("org.eclipse", "yasson", "2.0.4") {
248-
// Exclude Glassfish as we use Parsson (basically Glassfish renamed in the Jakarta namespace).
249-
exclude(group = "org.glassfish", module = "jakarta.json")
250-
}
247+
testImplementation("org.eclipse", "yasson", "3.0.4")
251248

252249
// Apache-2.0
253250
testImplementation("commons-io:commons-io:2.17.0")
@@ -268,8 +265,6 @@ dependencies {
268265
// updating transitive dependency from testcontainers
269266
testImplementation("org.apache.commons","commons-compress","1.26.1")
270267

271-
testImplementation("io.opentelemetry", "opentelemetry-sdk", openTelemetryVersion)
272-
273268
// Apache-2.0
274269
// https://github.com/awaitility/awaitility
275270
testImplementation("org.awaitility", "awaitility", "4.2.0")

java-client/src/main/java/co/elastic/clients/json/JsonpUtils.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
package co.elastic.clients.json;
2121

22+
import co.elastic.clients.json.jackson.JacksonJsonProvider;
2223
import co.elastic.clients.util.AllowForbiddenApis;
2324
import jakarta.json.JsonException;
2425
import jakarta.json.JsonObject;
@@ -43,23 +44,56 @@
4344
public class JsonpUtils {
4445

4546
private static JsonProvider systemJsonProvider = null;
47+
private static JsonProvider defaultJsonProvider = null;
4648

4749
/**
4850
* Get a <code>JsonProvider</code> instance. This method first calls the standard `JsonProvider.provider()` that is based on
4951
* the current thread's context classloader, and in case of failure tries to find a provider in other classloaders. The
5052
* value is cached for subsequent calls.
5153
*/
5254
public static JsonProvider provider() {
53-
JsonProvider result = systemJsonProvider;
55+
JsonProvider result = defaultJsonProvider;
5456
if (result == null) {
5557
result = findProvider();
58+
defaultJsonProvider = result;
59+
}
60+
return result;
61+
}
62+
63+
/**
64+
* Sets the <code>JsonProvider</code> that will be returned by {@link JsonProvider}.
65+
*/
66+
public static void setProvider(JsonProvider provider) {
67+
defaultJsonProvider = provider;
68+
}
69+
70+
static JsonProvider findProvider() {
71+
try {
72+
// Default to Jackson
73+
return new JacksonJsonProvider();
74+
} catch (NoClassDefFoundError e) {
75+
// Ignore
76+
}
77+
return findSystemProvider();
78+
}
79+
80+
/**
81+
* Get the system's <code>JsonProvider</code> instance return by {@code ServiceLoader}. First calls the standard
82+
* `JsonProvider.provider()` that is based on the current thread's context classloader, and in case of failure tries to
83+
* find a provider in other classloaders. The value is cached for subsequent calls.
84+
*/
85+
public static JsonProvider systemProvider() {
86+
JsonProvider result = systemJsonProvider;
87+
if (result == null) {
88+
result = findSystemProvider();
5689
systemJsonProvider = result;
5790
}
5891
return result;
5992
}
6093

6194
@AllowForbiddenApis("Implementation of the JsonProvider lookup")
62-
static JsonProvider findProvider() {
95+
static JsonProvider findSystemProvider() {
96+
6397
RuntimeException exception;
6498
try {
6599
return JsonProvider.provider();

java-client/src/main/java/co/elastic/clients/json/SimpleJsonpMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ public boolean ignoreUnknownFields() {
9090

9191
@Override
9292
public JsonProvider jsonProvider() {
93-
return JsonpUtils.provider();
93+
return JsonpUtils.systemProvider();
9494
}
9595

9696
@Override

java-client/src/main/java/co/elastic/clients/json/jackson/JacksonJsonProvider.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,15 @@ public JsonParser createParser(InputStream in, Charset charset) {
133133
*/
134134
@Override
135135
public JsonParser createParser(JsonObject obj) {
136-
return JsonpUtils.provider().createParserFactory(null).createParser(obj);
136+
return JsonpUtils.systemProvider().createParserFactory(null).createParser(obj);
137137
}
138138

139139
/**
140140
* Not implemented.
141141
*/
142142
@Override
143143
public JsonParser createParser(JsonArray array) {
144-
return JsonpUtils.provider().createParserFactory(null).createParser(array);
144+
return JsonpUtils.systemProvider().createParserFactory(null).createParser(array);
145145
}
146146

147147
/**

java-client/src/main/java/co/elastic/clients/json/jackson/JsonValueParser.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@
4040
* object (e.g. START_OBJECT, VALUE_NUMBER, etc).
4141
*/
4242
class JsonValueParser {
43-
private final JsonProvider provider = JsonpUtils.provider();
43+
private final JsonProvider systemProvider = JsonpUtils.systemProvider();
4444

4545
public JsonObject parseObject(JsonParser parser) throws IOException {
4646

47-
JsonObjectBuilder ob = provider.createObjectBuilder();
47+
JsonObjectBuilder ob = systemProvider.createObjectBuilder();
4848

4949
JsonToken token;
5050
while((token = parser.nextToken()) != JsonToken.END_OBJECT) {
@@ -59,7 +59,7 @@ public JsonObject parseObject(JsonParser parser) throws IOException {
5959
}
6060

6161
public JsonArray parseArray(JsonParser parser) throws IOException {
62-
JsonArrayBuilder ab = provider.createArrayBuilder();
62+
JsonArrayBuilder ab = systemProvider.createArrayBuilder();
6363

6464
while(parser.nextToken() != JsonToken.END_ARRAY) {
6565
ab.add(parseValue(parser));
@@ -86,23 +86,23 @@ public JsonValue parseValue(JsonParser parser) throws IOException {
8686
return JsonValue.NULL;
8787

8888
case VALUE_STRING:
89-
return provider.createValue(parser.getText());
89+
return systemProvider.createValue(parser.getText());
9090

9191
case VALUE_NUMBER_FLOAT:
9292
case VALUE_NUMBER_INT:
9393
switch(parser.getNumberType()) {
9494
case INT:
95-
return provider.createValue(parser.getIntValue());
95+
return systemProvider.createValue(parser.getIntValue());
9696
case LONG:
97-
return provider.createValue(parser.getLongValue());
97+
return systemProvider.createValue(parser.getLongValue());
9898
case FLOAT:
9999
case DOUBLE:
100100
// Use double also for floats, as JSON-P has no support for float
101101
return new DoubleNumber(parser.getDoubleValue());
102102
case BIG_DECIMAL:
103-
return provider.createValue(parser.getDecimalValue());
103+
return systemProvider.createValue(parser.getDecimalValue());
104104
case BIG_INTEGER:
105-
return provider.createValue(parser.getBigIntegerValue());
105+
return systemProvider.createValue(parser.getBigIntegerValue());
106106
}
107107

108108
default:

java-client/src/main/java/co/elastic/clients/json/jsonb/JsonbJsonpMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public JsonbJsonpMapper(JsonProvider jsonProvider, JsonbProvider jsonbProvider)
5252
}
5353

5454
public JsonbJsonpMapper() {
55-
this(JsonpUtils.provider(), JsonbProvider.provider());
55+
// Use a native JSON-P/JSON-B implementations.
56+
this(JsonpUtils.systemProvider(), JsonbProvider.provider());
5657
}
5758

5859
@Override

java-client/src/test/java/co/elastic/clients/json/JsonpUtilsTest.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,13 +58,7 @@ public Enumeration<URL> getResources(String name) {
5858
ClassLoader savedLoader = Thread.currentThread().getContextClassLoader();
5959
try {
6060
Thread.currentThread().setContextClassLoader(emptyLoader);
61-
62-
assertThrows(JsonException.class, () -> {
63-
assertNotNull(JsonProvider.provider());
64-
});
65-
6661
assertNotNull(JsonpUtils.provider());
67-
6862
} finally {
6963
Thread.currentThread().setContextClassLoader(savedLoader);
7064
}

0 commit comments

Comments
 (0)