Skip to content

Commit 23e0c53

Browse files
authored
Replace Class.forName with Module Check and Direct Load (#675)
* Replace Class.forName with moduleCheck and direct load * Update DHttpClientBuilder.java * optimize * Update DHttpClientBuilder.java
1 parent 2acfc9e commit 23e0c53

File tree

2 files changed

+25
-24
lines changed

2 files changed

+25
-24
lines changed

http-client/src/main/java/io/avaje/http/client/DHttpClientBuilder.java

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -144,29 +144,30 @@ private static ExecutorService virtualThreadExecutor() {
144144
* Create a reasonable default BodyAdapter if avaje-jsonb or Jackson are present.
145145
*/
146146
private BodyAdapter defaultBodyAdapter() {
147-
if (detectJsonb()) {
148-
bodyAdapter = new JsonbBodyAdapter();
149-
} else if (detectJackson()) {
150-
bodyAdapter = new JacksonBodyAdapter();
151-
}
152-
return bodyAdapter;
153-
}
154-
155-
private boolean detectJsonb() {
156-
return detectTypeExists("io.avaje.jsonb.Jsonb");
157-
}
158-
159-
private boolean detectJackson() {
160-
return detectTypeExists("com.fasterxml.jackson.databind.ObjectMapper");
161-
}
162-
163-
private boolean detectTypeExists(String className) {
164-
try {
165-
Class.forName(className);
166-
return true;
167-
} catch (ClassNotFoundException | IllegalAccessError e) {
168-
return false;
169-
}
147+
ModuleLayer bootLayer = ModuleLayer.boot();
148+
return bootLayer
149+
.findModule("io.avaje.http.client")
150+
.map(m -> {
151+
if (bootLayer.findModule("io.avaje.jsonb").isPresent()) {
152+
return new JsonbBodyAdapter();
153+
}
154+
if (bootLayer.findModule("com.fasterxml.jackson.databind").isPresent()) {
155+
return new JacksonBodyAdapter();
156+
}
157+
return bodyAdapter;
158+
})
159+
.orElseGet(() -> {
160+
try {
161+
return new JsonbBodyAdapter();
162+
} catch (NoClassDefFoundError e) {
163+
// I guess it don't exist
164+
}
165+
try {
166+
return new JacksonBodyAdapter();
167+
} catch (NoClassDefFoundError e) {
168+
return bodyAdapter;
169+
}
170+
});
170171
}
171172

172173
private DHttpClientContext buildClient() {

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<swagger.version>2.2.41</swagger.version>
2424
<jackson.version>2.14.2</jackson.version>
2525
<jex.version>3.0-RC10</jex.version>
26-
<avaje.prisms.version>1.43</avaje.prisms.version>
26+
<avaje.prisms.version>1.44-RC4</avaje.prisms.version>
2727
<project.build.outputTimestamp>2025-11-17T18:50:39Z</project.build.outputTimestamp>
2828
<module-info.shade>${project.build.directory}${file.separator}module-info.shade</module-info.shade>
2929
</properties>

0 commit comments

Comments
 (0)