@@ -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 () {
0 commit comments