Prevent registering the default exception mapper in the ExceptionMapperFactory to avoid skipping an other exception mapper for Throwable
diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/ExceptionMapperFactory.java b/core-common/src/main/java/org/glassfish/jersey/internal/ExceptionMapperFactory.java
index b64fef0..7c51af4 100644
--- a/core-common/src/main/java/org/glassfish/jersey/internal/ExceptionMapperFactory.java
+++ b/core-common/src/main/java/org/glassfish/jersey/internal/ExceptionMapperFactory.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010, 2021 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2010, 2022 Oracle and/or its affiliates. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v. 2.0, which is available at
@@ -180,6 +180,11 @@
             for (ServiceHolder<ExceptionMapper> mapperHandle: mapperHandles) {
                 ExceptionMapper mapper = mapperHandle.getInstance();
 
+                // the default exception mapper is processed by the ServerRuntime
+                if ("org.glassfish.jersey.server.DefaultExceptionMapper".equals(mapper.getClass().getName())) {
+                    continue;
+                }
+
                 if (Proxy.isProxyClass(mapper.getClass())) {
                     SortedSet<Class<? extends ExceptionMapper>> mapperTypes =
                             new TreeSet<>((o1, o2) -> o1.isAssignableFrom(o2) ? -1 : 1);
diff --git a/core-server/pom.xml b/core-server/pom.xml
index a5f1d9f..6e909e6 100644
--- a/core-server/pom.xml
+++ b/core-server/pom.xml
@@ -243,6 +243,12 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <profiles>
diff --git a/core-server/src/test/java/org/glassfish/jersey/server/DefaultExceptionMapperTest.java b/core-server/src/test/java/org/glassfish/jersey/server/DefaultExceptionMapperTest.java
index 74b1153..724b3d9 100644
--- a/core-server/src/test/java/org/glassfish/jersey/server/DefaultExceptionMapperTest.java
+++ b/core-server/src/test/java/org/glassfish/jersey/server/DefaultExceptionMapperTest.java
@@ -22,12 +22,15 @@
 import jakarta.ws.rs.container.CompletionCallback;
 import jakarta.ws.rs.container.Suspended;
 import jakarta.ws.rs.core.Response;
+import org.glassfish.jersey.internal.ExceptionMapperFactory;
 import org.junit.Assert;
 import org.junit.Test;
 
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicInteger;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 public class DefaultExceptionMapperTest {
     public static final String MESSAGE = "DefaultExceptionMapperTest I/O Exception";
     @Test
@@ -58,6 +61,17 @@
         Assert.assertEquals(1, counter.get());
     }
 
+    @Test
+    public void testDefaultExceptionMapperNotRegisteredInExceptionMapperFactory() {
+        ResourceConfig resourceConfig = new ResourceConfig();
+        ApplicationHandler applicationHandler = new ApplicationHandler(resourceConfig);
+
+        // use InjectionManager from ApplicationHandler to set up the default bindings
+        ExceptionMapperFactory exceptionMapperFactory = new ExceptionMapperFactory(applicationHandler.getInjectionManager());
+
+        assertThat(exceptionMapperFactory.find(Throwable.class)).isNull();
+    }
+
     @Path("/")
     public static class IOExThrowingResource {
         private final CompletionCallback callback;