Skip to content

Commit cb601c0

Browse files
authored
Merge pull request #386 from SentryMan/classloader
Support Custom Classloader
2 parents da0ccf9 + ade50bb commit cb601c0

File tree

3 files changed

+28
-11
lines changed

3 files changed

+28
-11
lines changed

jsonb/src/main/java/io/avaje/jsonb/Jsonb.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
package io.avaje.jsonb;
22

3+
import java.io.InputStream;
4+
import java.io.OutputStream;
5+
import java.io.Reader;
6+
import java.io.Writer;
7+
import java.lang.reflect.Type;
8+
import java.util.function.Supplier;
9+
310
import io.avaje.json.JsonAdapter;
411
import io.avaje.json.JsonReader;
512
import io.avaje.json.JsonWriter;
613
import io.avaje.json.PropertyNames;
7-
import io.avaje.json.stream.*;
14+
import io.avaje.json.stream.BufferRecycleStrategy;
15+
import io.avaje.json.stream.JsonOutput;
16+
import io.avaje.json.stream.JsonStream;
817
import io.avaje.jsonb.core.DefaultBootstrap;
918
import io.avaje.jsonb.spi.JsonStreamFactory;
1019
import io.avaje.jsonb.spi.JsonbComponent;
1120

12-
import java.io.InputStream;
13-
import java.io.OutputStream;
14-
import java.io.Reader;
15-
import java.io.Writer;
16-
import java.lang.reflect.Type;
17-
import java.util.function.Supplier;
18-
1921
/**
2022
* Provides access to json adapters by type.
2123
*
@@ -438,6 +440,13 @@ interface Builder {
438440
*/
439441
Builder add(AdapterFactory factory);
440442

443+
/**
444+
* Set the ClassLoader to use when loading modules.
445+
*
446+
* @param classLoader The ClassLoader to use
447+
*/
448+
Builder classLoader(ClassLoader classLoader);
449+
441450
/**
442451
* Build and return the Jsonb instance with all the given adapters and factories registered.
443452
*/

jsonb/src/main/java/io/avaje/jsonb/core/DJsonb.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ static final class DBuilder implements Jsonb.Builder {
269269
private boolean serializeEmpty = true;
270270
private JsonStream adapter;
271271
private BufferRecycleStrategy strategy = HYBRID_POOL;
272+
private ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
272273

273274
@Override
274275
public Builder serializeNulls(boolean serializeNulls) {
@@ -345,7 +346,14 @@ public Builder add(AdapterFactory factory) {
345346
return this;
346347
}
347348

349+
@Override
350+
public Builder classLoader(ClassLoader classLoader) {
351+
this.classLoader = classLoader;
352+
return this;
353+
}
354+
348355
private void registerComponents() {
356+
ExtensionLoader.init(classLoader);
349357
// first register all user defined JsonbComponent
350358
for (JsonbComponent next : ExtensionLoader.userComponents()) {
351359
next.register(this);

jsonb/src/main/java/io/avaje/jsonb/core/ExtensionLoader.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import java.util.Optional;
66
import java.util.ServiceLoader;
77

8-
import io.avaje.jsonb.spi.JsonStreamFactory;
98
import io.avaje.jsonb.spi.GeneratedComponent;
9+
import io.avaje.jsonb.spi.JsonStreamFactory;
1010
import io.avaje.jsonb.spi.JsonbComponent;
1111
import io.avaje.jsonb.spi.JsonbExtension;
1212

@@ -17,8 +17,8 @@ final class ExtensionLoader {
1717
private static final List<JsonbComponent> userComponents = new ArrayList<>();
1818
private static Optional<JsonStreamFactory> adapterFactory = Optional.empty();
1919

20-
static {
21-
for (var spi : ServiceLoader.load(JsonbExtension.class)) {
20+
static void init(ClassLoader classLoader) {
21+
for (var spi : ServiceLoader.load(JsonbExtension.class, classLoader)) {
2222
if (spi instanceof GeneratedComponent) {
2323
generatedComponents.add((GeneratedComponent) spi);
2424
} else if (spi instanceof JsonbComponent) {

0 commit comments

Comments
 (0)