Merge master into jakartified.m3
diff --git a/bom/pom.xml b/bom/pom.xml
index 9522a38..069a15e 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -387,6 +387,7 @@
             <plugin>
                 <groupId>org.glassfish.copyright</groupId>
                 <artifactId>glassfish-copyright-maven-plugin</artifactId>
+                <version>2.0</version>
                 <inherited>true</inherited>
             </plugin>
             <plugin>
diff --git a/bundles/jaxrs-ri/pom.xml b/bundles/jaxrs-ri/pom.xml
index 6d5f596..fece7be 100644
--- a/bundles/jaxrs-ri/pom.xml
+++ b/bundles/jaxrs-ri/pom.xml
@@ -373,10 +373,10 @@
                         <phase>package</phase>
                         <configuration>
                             <tasks>
-                                <jar destfile="${project.build.directory}/${artifactId}.jar" update="true">
+                                <jar destfile="${project.build.directory}/${project.artifactId}.jar" update="true">
                                     <zipfileset dir="../.." includes="NOTICE.md" prefix="META-INF" />
                                 </jar>
-                                <jar destfile="${project.build.directory}/${artifactId}-sources.jar" update="true">
+                                <jar destfile="${project.build.directory}/${project.artifactId}-sources.jar" update="true">
                                     <zipfileset dir="../.." includes="NOTICE.md" prefix="META-INF" />
                                 </jar>
                             </tasks>
diff --git a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java
index 107e749..d5c2ff8 100644
--- a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java
+++ b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheClientProperties.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013, 2019 Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2013, 2020 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
@@ -166,6 +166,20 @@
     public static final String CONNECTION_CLOSING_STRATEGY = "jersey.config.apache.client.connectionClosingStrategy";
 
     /**
+     * A value of {@code false} indicates the client will use default ApacheConnector params. A value
+     * of {@code true} will cause the client to take into account the system properties
+     * {@code https.protocols}, {@code https.cipherSuites}, {@code http.keepAlive},
+     * {@code http.maxConnections}.
+     * <p/>
+     * The value MUST be an instance of {@link java.lang.Boolean}.
+     * <p/>
+     * The default value is {@code false}.
+     * <p/>
+     * The name of the configuration property is <tt>{@value}</tt>.
+     */
+    public static final String USE_SYSTEM_PROPERTIES = "jersey.config.apache.client.useSystemProperties";
+
+    /**
      * Get the value of the specified property.
      *
      * If the property is not set or the actual property value type is not compatible with the specified type, the method will
diff --git a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java
index 4b02ffd..a2a8f9d 100644
--- a/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java
+++ b/connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java
@@ -357,12 +357,15 @@
             }
         }
 
+        final boolean useSystemProperties =
+            PropertiesHelper.isProperty(config.getProperties(), ApacheClientProperties.USE_SYSTEM_PROPERTIES);
+
         // Create custom connection manager.
         return createConnectionManager(
                 client,
                 config,
                 sslContext,
-                false);
+            useSystemProperties);
     }
 
     private HttpClientConnectionManager createConnectionManager(
diff --git a/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java b/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java
index 6c2c1cb..5f34d07 100644
--- a/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java
+++ b/core-client/src/main/java/org/glassfish/jersey/client/JerseyInvocation.java
@@ -1001,4 +1001,9 @@
     ClientRequest request() {
         return requestContext;
     }
+
+    @Override
+    public String toString() {
+        return "JerseyInvocation [" + request().getMethod() + ' ' + request().getUri() + "]";
+    }
 }
diff --git a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
index 55540bc..6a645d2 100644
--- a/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
+++ b/core-common/src/main/java/org/glassfish/jersey/message/internal/MessagingBinders.java
@@ -22,6 +22,7 @@
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.logging.Logger;
 
 import jakarta.ws.rs.RuntimeType;
 import jakarta.ws.rs.ext.MessageBodyReader;
@@ -30,6 +31,7 @@
 import jakarta.inject.Singleton;
 
 import org.glassfish.jersey.CommonProperties;
+import org.glassfish.jersey.internal.LocalizationMessages;
 import org.glassfish.jersey.internal.ServiceFinderBinder;
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.internal.util.ReflectionHelper;
@@ -45,6 +47,8 @@
  */
 public final class MessagingBinders {
 
+    private static final Logger LOGGER = Logger.getLogger(MessagingBinders.class.getName());
+
     /**
      * Prevents instantiation.
      */
@@ -213,6 +217,22 @@
                             break;
                     }
                     providerBinder.bind(binder, provider);
+                } else {
+                    switch (provider) {
+                        case DOMSOURCE:
+                        case SAXSOURCE:
+                        case STREAMSOURCE:
+                            LOGGER.warning(LocalizationMessages.DEPENDENT_CLASS_OF_DEFAULT_PROVIDER_NOT_FOUND(provider.className,
+                                    "MessageBodyReader<" + provider.className + ">")
+                            );
+                            break;
+                        case RENDEREDIMAGE:
+                        case SOURCE:
+                            LOGGER.warning(LocalizationMessages.DEPENDENT_CLASS_OF_DEFAULT_PROVIDER_NOT_FOUND(provider.className,
+                                    "MessageBodyWriter<" + provider.className + ">")
+                            );
+                            break;
+                    }
                 }
             }
         }
@@ -226,14 +246,14 @@
             void bind(AbstractBinder binder, Provider provider);
         }
 
-        private class DomSourceBinder implements ProviderBinder {
+        private static class DomSourceBinder implements ProviderBinder {
             @Override
             public void bind(AbstractBinder binder, Provider provider) {
                 binder.bind(SourceProvider.DomSourceReader.class).to(MessageBodyReader.class).in(Singleton.class);
             }
         }
 
-        private class RenderedImageBinder implements ProviderBinder {
+        private static class RenderedImageBinder implements ProviderBinder {
             @Override
             public void bind(AbstractBinder binder, Provider provider) {
                 binder.bind(RenderedImageProvider.class)
@@ -241,21 +261,21 @@
             }
         }
 
-        private class SaxSourceBinder implements ProviderBinder {
+        private static class SaxSourceBinder implements ProviderBinder {
             @Override
             public void bind(AbstractBinder binder, Provider provider) {
                 binder.bind(SourceProvider.SaxSourceReader.class).to(MessageBodyReader.class).in(Singleton.class);
             }
         }
 
-        private class SourceBinder implements ProviderBinder {
+        private static class SourceBinder implements ProviderBinder {
             @Override
             public void bind(AbstractBinder binder, Provider provider) {
                 binder.bind(SourceProvider.SourceWriter.class).to(MessageBodyWriter.class).in(Singleton.class);
             }
         }
 
-        private class StreamSourceBinder implements ProviderBinder {
+        private static class StreamSourceBinder implements ProviderBinder {
             @Override
             public void bind(AbstractBinder binder, Provider provider) {
                 binder.bind(SourceProvider.StreamSourceReader.class).to(MessageBodyReader.class).in(Singleton.class);
diff --git a/core-common/src/main/resources/org/glassfish/jersey/internal/localization.properties b/core-common/src/main/resources/org/glassfish/jersey/internal/localization.properties
index 6b56cf5..285b9de 100644
--- a/core-common/src/main/resources/org/glassfish/jersey/internal/localization.properties
+++ b/core-common/src/main/resources/org/glassfish/jersey/internal/localization.properties
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2019 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2020 Oracle and/or its affiliates. All rights reserved.
 # Copyright (c) 2018 Payara Foundation and/or its affiliates.
 #
 # This program and the accompanying materials are made available under the
@@ -32,6 +32,7 @@
 date.is.null=Date is null.
 dependent.class.of.provider.format.error={0}. A dependent class of the class {1} implementing the provider {2} is malformed. The provider implementation is ignored. Check if the malformed class is part of a stubbed jar that used for compiling only.
 dependent.class.of.provider.not.found=A dependent class, {0}, of the class {1} implementing the provider {2} is not found. The provider implementation is ignored.
+dependent.class.of.default.provider.not.found=A class {0} for a default provider {1} was not found. The provider is not available.
 entity.tag.is.null=Entity tag is null.
 error.caught.while.loading.spi.providers=Error caught while loading SPI providers.
 error.entity.stream.closed=Entity input stream has already been closed.
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/wadl/WadlFeature.java b/core-server/src/main/java/org/glassfish/jersey/server/wadl/WadlFeature.java
index 5b62cae..f875838 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/wadl/WadlFeature.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/wadl/WadlFeature.java
@@ -20,14 +20,19 @@
 import jakarta.ws.rs.core.FeatureContext;
 
 import jakarta.inject.Singleton;
+import jakarta.xml.bind.JAXBException;
 
 import org.glassfish.jersey.internal.inject.AbstractBinder;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
 import org.glassfish.jersey.server.ServerProperties;
+import org.glassfish.jersey.server.internal.LocalizationMessages;
 import org.glassfish.jersey.server.model.ModelProcessor;
 import org.glassfish.jersey.server.wadl.internal.WadlApplicationContextImpl;
+import org.glassfish.jersey.server.wadl.internal.generators.WadlGeneratorJAXBGrammarGenerator;
 import org.glassfish.jersey.server.wadl.processor.WadlModelProcessor;
 
+import java.util.logging.Logger;
+
 
 /**
  * Feature enabling WADL processing. The feature registers providers and binders needed to enable wadl in the
@@ -38,6 +43,8 @@
  */
 public class WadlFeature implements Feature {
 
+    private static final Logger LOGGER = Logger.getLogger(WadlFeature.class.getName());
+
     @Override
     public boolean configure(FeatureContext context) {
         final boolean disabled = PropertiesHelper.isProperty(context.getConfiguration().getProperty(ServerProperties
@@ -46,6 +53,11 @@
             return false;
         }
 
+        if (!isJaxB()) {
+            LOGGER.warning(LocalizationMessages.WADL_FEATURE_DISABLED());
+            return false;
+        }
+
         context.register(WadlModelProcessor.class);
         context.register(new AbstractBinder() {
             @Override
@@ -56,4 +68,12 @@
 
         return true;
     }
+
+    private static boolean isJaxB() {
+        try {
+            return null != WadlApplicationContextImpl.getJAXBContextFromWadlGenerator(new WadlGeneratorJAXBGrammarGenerator());
+        } catch (JAXBException je) {
+            return false;
+        }
+    }
 }
diff --git a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlApplicationContextImpl.java b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlApplicationContextImpl.java
index f5e5023..bca2405 100644
--- a/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlApplicationContextImpl.java
+++ b/core-server/src/main/java/org/glassfish/jersey/server/wadl/internal/WadlApplicationContextImpl.java
@@ -94,7 +94,15 @@
         // create a temporary generator just to do this one task
         final WadlGenerator wadlGenerator = wadlGeneratorConfig.createWadlGenerator(injectionManager);
 
-        JAXBContext jaxbContextCandidate;
+        try {
+            jaxbContext = getJAXBContextFromWadlGenerator(wadlGenerator);
+        } catch (JAXBException ex) {
+            throw new ProcessingException(LocalizationMessages.ERROR_WADL_JAXB_CONTEXT(), ex);
+        }
+    }
+
+    public static JAXBContext getJAXBContextFromWadlGenerator(WadlGenerator wadlGenerator) throws JAXBException {
+        JAXBContext jaxbContextCandidate = null;
 
         final ClassLoader contextClassLoader = AccessController.doPrivileged(ReflectionHelper.getContextClassLoaderPA());
         try {
@@ -117,13 +125,13 @@
                 LOGGER.log(Level.FINE, LocalizationMessages.WADL_JAXB_CONTEXT_FALLBACK(), ex);
                 jaxbContextCandidate = JAXBContext.newInstance(wadlGenerator.getRequiredJaxbContextPath());
             } catch (final JAXBException innerEx) {
-                throw new ProcessingException(LocalizationMessages.ERROR_WADL_JAXB_CONTEXT(), ex);
+               throw ex;
             }
         } finally {
             AccessController.doPrivileged(ReflectionHelper.setContextClassLoaderPA(contextClassLoader));
         }
 
-        jaxbContext = jaxbContextCandidate;
+        return jaxbContextCandidate;
     }
 
     @Override
diff --git a/core-server/src/main/resources/org/glassfish/jersey/server/internal/localization.properties b/core-server/src/main/resources/org/glassfish/jersey/server/internal/localization.properties
index 1c125a7..8629298 100644
--- a/core-server/src/main/resources/org/glassfish/jersey/server/internal/localization.properties
+++ b/core-server/src/main/resources/org/glassfish/jersey/server/internal/localization.properties
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2012, 2018 Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2012, 2020 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
@@ -185,6 +185,7 @@
 user.not.authorized=User not authorized.
 wadl.doc.extended.wadl=This is full WADL including extended resources. To get simplified WADL with users resources only do not use the query parameter {0}. Link: {1}
 wadl.doc.simple.wadl=This is simplified WADL with user and core resources only. To get full WADL with extended resources use the query parameter {0}. Link: {1}
+wadl.feature.disabled=JAXBContext implementation could not be found. WADL feature is disabled.
 wadl.jaxb.context.fallback=Error creating a JAXBContext for wadl serialization. Trying a fallback solution for osgi environments.
 wadl.resourcedoc.ambiguous.method.entries=Ambiguous resource documentation detected: \
   Unique resource method documentation cannot be found for method %{0}.%{1}%{2}. \
diff --git a/examples/cdi-webapp/pom.xml b/examples/cdi-webapp/pom.xml
index f04ad98..0805e13 100644
--- a/examples/cdi-webapp/pom.xml
+++ b/examples/cdi-webapp/pom.xml
@@ -71,6 +71,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-cdi1x</artifactId>
             <version>${project.version}</version>
diff --git a/examples/extended-wadl-webapp/pom.xml b/examples/extended-wadl-webapp/pom.xml
index b098b47..a5b5a79 100644
--- a/examples/extended-wadl-webapp/pom.xml
+++ b/examples/extended-wadl-webapp/pom.xml
@@ -235,24 +235,16 @@
 
     <profiles>
         <profile>
-            <id>testsSkipJdk11</id>
+            <id>testsJdk11</id>
             <activation>
                 <jdk>[11,)</jdk>
             </activation>
-            <build>
-                <plugins>
-                    <plugin>
-                        <groupId>org.apache.maven.plugins</groupId>
-                        <artifactId>maven-surefire-plugin</artifactId>
-                        <configuration>
-                            <!-- Exclude unit tests on jdk 11 for now -->
-                            <excludes>
-                                <exclude>**/ExtendedWadlWebappOsgiTest.java</exclude>
-                            </excludes>
-                        </configuration>
-                    </plugin>
-                </plugins>
-            </build>
+            <dependencies>
+                <dependency>
+                    <groupId>com.sun.activation</groupId>
+                    <artifactId>jakarta.activation</artifactId>
+                </dependency>
+            </dependencies>
         </profile>
         <profile>
             <id>pre-release</id>
diff --git a/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java b/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java
index d74d079..0dfe63d 100644
--- a/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java
+++ b/examples/extended-wadl-webapp/src/test/java/org/glassfish/jersey/examples/extendedwadl/ExtendedWadlWebappOsgiTest.java
@@ -36,6 +36,7 @@
 import org.glassfish.jersey.examples.extendedwadl.resources.MyApplication;
 import org.glassfish.jersey.examples.extendedwadl.util.Examples;
 import org.glassfish.jersey.grizzly2.httpserver.GrizzlyHttpServerFactory;
+import org.glassfish.jersey.internal.util.JdkVersion;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
 import org.glassfish.jersey.internal.util.SimpleNamespaceResolver;
 import org.glassfish.jersey.message.internal.MediaTypes;
@@ -133,6 +134,7 @@
 
                 //SUN JAXB IMPL OSGI
                 mavenBundle().groupId("com.sun.xml.bind").artifactId("jaxb-osgi").versionAsInProject().versionAsInProject(),
+                getActivationBundle(),
                 systemPackage("com.sun.source.tree"),
                 systemPackage("com.sun.source.util"),
 
@@ -184,6 +186,12 @@
         return options.toArray(new Option[options.size()]);
     }
 
+    private static Option getActivationBundle() {
+        return JdkVersion.getJdkVersion().getMajor() > 8
+                ? mavenBundle().groupId("com.sun.activation").artifactId("jakarta.activation").versionAsInProject()
+                : null;
+    }
+
     private ResourceConfig createResourceConfig() {
         final ResourceConfig resourceConfig = new ResourceConfig(new MyApplication().getClasses());
         resourceConfig.property(ServerProperties.WADL_GENERATOR_CONFIG, SampleWadlGeneratorConfig.class.getName());
diff --git a/examples/helloworld-cdi2-se/pom.xml b/examples/helloworld-cdi2-se/pom.xml
index d8e73eb..59acca3 100644
--- a/examples/helloworld-cdi2-se/pom.xml
+++ b/examples/helloworld-cdi2-se/pom.xml
@@ -80,6 +80,20 @@
                 </plugins>
             </build>
         </profile>
+
+        <profile>
+            <id>jdk11</id>
+            <activation>
+                <jdk>[11,)</jdk>
+            </activation>
+            <dependencies>
+                <dependency>
+                    <groupId>org.jboss.weld.se</groupId>
+                    <artifactId>weld-se-core</artifactId>
+                    <version>3.1.1.Final</version>
+                </dependency>
+            </dependencies>
+        </profile>
     </profiles>
 
 </project>
diff --git a/examples/helloworld-pure-jax-rs/src/main/java/org/glassfish/jersey/examples/helloworld/jaxrs/App.java b/examples/helloworld-pure-jax-rs/src/main/java/org/glassfish/jersey/examples/helloworld/jaxrs/App.java
index 0fbd635..81cb3c0 100644
--- a/examples/helloworld-pure-jax-rs/src/main/java/org/glassfish/jersey/examples/helloworld/jaxrs/App.java
+++ b/examples/helloworld-pure-jax-rs/src/main/java/org/glassfish/jersey/examples/helloworld/jaxrs/App.java
@@ -62,7 +62,7 @@
 
         System.out.println("Application started.\n"
                 + "Try accessing " + getBaseURI() + "helloworld in the browser.\n"
-                + "Hit enter to stop the application...");
+                + "CTRL + C to stop the application...\n");
 
         Thread.currentThread().join();
     }
diff --git a/examples/helloworld-spring-annotations/pom.xml b/examples/helloworld-spring-annotations/pom.xml
index ed23deb..d5fd11c 100644
--- a/examples/helloworld-spring-annotations/pom.xml
+++ b/examples/helloworld-spring-annotations/pom.xml
@@ -51,6 +51,11 @@
             <artifactId>jersey-test-framework-provider-inmemory</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/examples/helloworld-weld/README.MD b/examples/helloworld-weld/README.MD
index e139e21..b7d157a 100644
--- a/examples/helloworld-weld/README.MD
+++ b/examples/helloworld-weld/README.MD
@@ -1,4 +1,4 @@
-[//]: # " Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. "
+[//]: # " Copyright (c) 2015, 2020 Oracle and/or its affiliates. All rights reserved. "
 [//]: # " "
 [//]: # " This program and the accompanying materials are made available under the "
 [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at "
@@ -37,4 +37,4 @@
 
 This deploys the example using [Grizzly](http://grizzly.java.net/) container. You can access the application at:
 
-- <http://localhost:8080/weld>
\ No newline at end of file
+- <http://localhost:8080/weld/application.wadl>
\ No newline at end of file
diff --git a/examples/helloworld-weld/pom.xml b/examples/helloworld-weld/pom.xml
index 038909a..bbfbac3 100644
--- a/examples/helloworld-weld/pom.xml
+++ b/examples/helloworld-weld/pom.xml
@@ -54,9 +54,25 @@
         </dependency>
 
         <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+        </dependency>
+
+        <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-cdi1x</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.istack</groupId>
+            <artifactId>istack-commons-runtime</artifactId>
+            <version>${istack.commons.runtime.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/examples/http-patch/pom.xml b/examples/http-patch/pom.xml
index 06195ae..919fdd4 100644
--- a/examples/http-patch/pom.xml
+++ b/examples/http-patch/pom.xml
@@ -67,6 +67,15 @@
             <artifactId>jersey-grizzly-connector</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.sun.istack</groupId>
+            <artifactId>istack-commons-runtime</artifactId>
+            <version>${istack.commons.runtime.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/examples/json-jettison/pom.xml b/examples/json-jettison/pom.xml
index ee79ab6..7b8e563 100644
--- a/examples/json-jettison/pom.xml
+++ b/examples/json-jettison/pom.xml
@@ -72,6 +72,17 @@
                     <artifactId>jaxb-osgi</artifactId>
                     <scope>test</scope>
                 </dependency>
+
+                <dependency>
+                    <groupId>com.sun.xml.bind</groupId>
+                    <artifactId>jaxb-impl</artifactId>
+                </dependency>
+
+                <dependency>
+                    <groupId>com.sun.istack</groupId>
+                    <artifactId>istack-commons-runtime</artifactId>
+                    <version>${istack.commons.runtime.version}</version>
+                </dependency>
             </dependencies>
         </profile>
         <profile>
diff --git a/examples/json-moxy/pom.xml b/examples/json-moxy/pom.xml
index f0754ef..e312fac 100644
--- a/examples/json-moxy/pom.xml
+++ b/examples/json-moxy/pom.xml
@@ -46,6 +46,17 @@
             <type>pom</type>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>com.sun.xml.bind</groupId>
+            <artifactId>jaxb-impl</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.sun.istack</groupId>
+            <artifactId>istack-commons-runtime</artifactId>
+            <version>${istack.commons.runtime.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/examples/osgi-helloworld-webapp/functional-test/src/test/resources/felix.policy b/examples/osgi-helloworld-webapp/functional-test/src/test/resources/felix.policy
index 103cc52..d8348f9 100644
--- a/examples/osgi-helloworld-webapp/functional-test/src/test/resources/felix.policy
+++ b/examples/osgi-helloworld-webapp/functional-test/src/test/resources/felix.policy
@@ -1,5 +1,5 @@
 //
-// Copyright (c) 2014, 2018 Oracle and/or its affiliates. All rights reserved.
+// Copyright (c) 2014, 2020 Oracle and/or its affiliates. All rights reserved.
 //
 // This program and the accompanying materials are made available under the
 // terms of the Eclipse Distribution License v. 1.0, which is available at
@@ -13,6 +13,7 @@
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*additional-bundle*"] (java.security.AllPermission) } "allToAdditional";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*javassist*"] (java.security.AllPermission) } "allToJavassist";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jakarta.ws.rs*"] (java.security.AllPermission) } "allToJavaxWsRs";
+allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jakarta.xml.bind*"] (java.security.AllPermission) } "allToJaxB";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jetty*"] (java.security.AllPermission) } "allToJetty";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*hk2*"] (java.security.AllPermission) } "allToHk2";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*osgi*"] (java.security.AllPermission) } "allToOsgi";
@@ -36,6 +37,7 @@
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-common*"] (java.lang.RuntimePermission "accessClassInPackage.sun.misc") } "accessClassInPackageSunMisc";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-common*"] (java.lang.RuntimePermission "getClassLoader") } "getCLToJerseyCommon";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-common*"] (java.lang.RuntimePermission "modifyThread") } "modifyThreadToJerseyCommon";
+allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-common*"] (java.lang.RuntimePermission "setContextClassLoader") } "setContextCLToJerseyCommon";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-common*"] (java.util.PropertyPermission "*" "read") } "propReadToJerseyCommon";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-common*"] (java.io.FilePermission "<<ALL FILES>>" "read,write") } "fileReadToJerseyCommon";
 allow { [org.osgi.service.condpermadmin.BundleLocationCondition "*jersey-client*"] (java.security.AllPermission) } "allToJerseyClient";
diff --git a/examples/server-sent-events-jaxrs/pom.xml b/examples/server-sent-events-jaxrs/pom.xml
index b93a17b..4f0d592 100644
--- a/examples/server-sent-events-jaxrs/pom.xml
+++ b/examples/server-sent-events-jaxrs/pom.xml
@@ -54,7 +54,7 @@
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
                 <configuration>
-                    <mainClass>App</mainClass>
+                    <mainClass>org.glassfish.jersey.examples.sse.jaxrs.App</mainClass>
                 </configuration>
             </plugin>
         </plugins>
diff --git a/examples/server-sent-events-jersey/pom.xml b/examples/server-sent-events-jersey/pom.xml
index fc8d86a..586202a 100644
--- a/examples/server-sent-events-jersey/pom.xml
+++ b/examples/server-sent-events-jersey/pom.xml
@@ -54,7 +54,7 @@
                 <groupId>org.codehaus.mojo</groupId>
                 <artifactId>exec-maven-plugin</artifactId>
                 <configuration>
-                    <mainClass>App</mainClass>
+                    <mainClass>org.glassfish.jersey.examples.sse.jersey.App</mainClass>
                 </configuration>
             </plugin>
         </plugins>
diff --git a/ext/bean-validation/pom.xml b/ext/bean-validation/pom.xml
index 94549b8..9c80e93 100644
--- a/ext/bean-validation/pom.xml
+++ b/ext/bean-validation/pom.xml
@@ -100,6 +100,18 @@
                 </exclusion>
             </exclusions>
         </dependency>
+        <dependency>
+            <groupId>javax.enterprise</groupId>
+            <artifactId>cdi-api</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.ext.cdi</groupId>
+            <artifactId>jersey-cdi1x</artifactId>
+            <version>${project.version}</version>
+            <optional>true</optional>
+        </dependency>
+
 
         <!-- java-el related dependencies are in scope "provided" in hibernate-validator -->
         <dependency>
diff --git a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/CompositeInjectingConstraintValidatorFactory.java b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/CompositeInjectingConstraintValidatorFactory.java
new file mode 100644
index 0000000..271015d
--- /dev/null
+++ b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/CompositeInjectingConstraintValidatorFactory.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2018 Payara Foundation  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
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+package org.glassfish.jersey.server.validation.internal;
+
+import javax.annotation.PostConstruct;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
+import javax.ws.rs.container.ResourceContext;
+import javax.ws.rs.core.Context;
+
+/**
+ * {@link ConstraintValidatorFactory} implementation that uses {@link InjectingConstraintValidatorFactory}
+ * by default and fallbacks to {@link HibernateInjectingConstraintValidatorFactory} when the resource
+ * cannot be found in resource context of Jersey.
+ *
+ * @author Mert Caliskan
+ */
+public class CompositeInjectingConstraintValidatorFactory implements ConstraintValidatorFactory {
+
+    @Context
+    private ResourceContext resourceContext;
+
+    private InjectingConstraintValidatorFactory jerseyVF;
+    private HibernateInjectingConstraintValidatorFactory hibernateVF;
+
+    @PostConstruct
+    void postConstruct() {
+        jerseyVF = resourceContext.getResource(InjectingConstraintValidatorFactory.class);
+        hibernateVF = resourceContext.getResource(HibernateInjectingConstraintValidatorFactory.class);
+    }
+
+    @Override
+    public <T extends ConstraintValidator<?, ?>> T getInstance(final Class<T> key) {
+        T jerseyInstance = jerseyVF.getInstance(key);
+        if (jerseyInstance == null) {
+            return hibernateVF.getInstance(key);
+        }
+        return jerseyInstance;
+    }
+
+    @Override
+    public void releaseInstance(final ConstraintValidator<?, ?> instance) {
+        // NOOP
+    }
+}
\ No newline at end of file
diff --git a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/DestructibleBeanInstance.java b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/DestructibleBeanInstance.java
new file mode 100644
index 0000000..136a007
--- /dev/null
+++ b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/DestructibleBeanInstance.java
@@ -0,0 +1,63 @@
+/*
+ * Hibernate Validator, declare and validate application constraints
+ *
+ * License: Apache License, Version 2.0
+ * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
+ */
+// Portions Copyright [2018] [Payara Foundation and/or its affiliates]
+
+package org.glassfish.jersey.server.validation.internal;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionTarget;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class DestructibleBeanInstance<T> {
+    private final T instance;
+    private final InjectionTarget<T> injectionTarget;
+
+    public DestructibleBeanInstance(BeanManager beanManager, Class<T> key) {
+        this.injectionTarget = createInjectionTarget(beanManager, key);
+        this.instance = createAndInjectBeans(beanManager, injectionTarget);
+    }
+
+    @SuppressWarnings("unchecked")
+    public DestructibleBeanInstance(BeanManager beanManager, T instance) {
+        this.injectionTarget = createInjectionTarget(beanManager, (Class<T>) instance.getClass());
+        injectBeans(beanManager, beanManager.createCreationalContext(null), injectionTarget, instance);
+        this.instance = instance;
+    }
+
+    public T getInstance() {
+        return instance;
+    }
+
+    public void destroy() {
+        injectionTarget.preDestroy(instance);
+        injectionTarget.dispose(instance);
+    }
+
+    private InjectionTarget<T> createInjectionTarget(BeanManager beanManager, Class<T> type) {
+        AnnotatedType<T> annotatedType = beanManager.createAnnotatedType(type);
+        return beanManager.createInjectionTarget(annotatedType);
+    }
+
+    private static <T> T createAndInjectBeans(BeanManager beanManager, InjectionTarget<T> injectionTarget) {
+        CreationalContext<T> creationalContext = beanManager.createCreationalContext(null);
+
+        T instance = injectionTarget.produce(creationalContext);
+        injectBeans(beanManager, creationalContext, injectionTarget, instance);
+
+        return instance;
+    }
+
+    private static <T> void injectBeans(BeanManager beanManager, CreationalContext<T> creationalContext,
+                                        InjectionTarget<T> injectionTarget, T instance) {
+        injectionTarget.inject(instance, creationalContext);
+        injectionTarget.postConstruct(instance);
+    }
+}
\ No newline at end of file
diff --git a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/HibernateInjectingConstraintValidatorFactory.java b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/HibernateInjectingConstraintValidatorFactory.java
new file mode 100644
index 0000000..d0ad811
--- /dev/null
+++ b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/HibernateInjectingConstraintValidatorFactory.java
@@ -0,0 +1,52 @@
+/*
+ * Hibernate Validator, declare and validate application constraints
+ *
+ * License: Apache License, Version 2.0
+ * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>.
+ */
+// Portions Copyright [2018] [Payara Foundation and/or its affiliates]
+
+package org.glassfish.jersey.server.validation.internal;
+
+import org.glassfish.jersey.ext.cdi1x.internal.CdiUtil;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
+import java.util.Collections;
+import java.util.IdentityHashMap;
+import java.util.Map;
+
+public class HibernateInjectingConstraintValidatorFactory implements ConstraintValidatorFactory {
+    // TODO look for something with better performance (HF)
+    private final Map<Object, DestructibleBeanInstance<?>> constraintValidatorMap =
+            Collections.synchronizedMap(new IdentityHashMap<Object, DestructibleBeanInstance<?>>());
+
+    private BeanManager beanManager;
+
+    @PostConstruct
+    void postConstruct() {
+        this.beanManager = CdiUtil.getBeanManager();
+    }
+
+    @Override
+    public <T extends ConstraintValidator<?, ?>> T getInstance(Class<T> key) {
+        DestructibleBeanInstance<T> destructibleBeanInstance = new DestructibleBeanInstance<T>(beanManager, key);
+        constraintValidatorMap.put(destructibleBeanInstance.getInstance(), destructibleBeanInstance);
+        return destructibleBeanInstance.getInstance();
+    }
+
+    @Override
+    public void releaseInstance(ConstraintValidator<?, ?> instance) {
+        DestructibleBeanInstance<?> destructibleBeanInstance = constraintValidatorMap.remove(instance);
+        // HV-865 (Cleanup is multi threaded and instances can be removed by multiple threads.
+        // Explicit null check is needed)
+        if (destructibleBeanInstance != null) {
+            destructibleBeanInstance.destroy();
+        }
+    }
+}
+
+
+
diff --git a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java
index 67756fc..933c030 100644
--- a/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java
+++ b/ext/bean-validation/src/main/java/org/glassfish/jersey/server/validation/internal/ValidationBinder.java
@@ -16,6 +16,8 @@
 
 package org.glassfish.jersey.server.validation.internal;
 
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.WeakHashMap;
@@ -256,8 +258,17 @@
         private ValidatorContext getDefaultValidatorContext(final ValidateOnExecutionHandler handler) {
             final ValidatorContext context = factory.usingContext();
 
-            // Default Configuration.
-            context.constraintValidatorFactory(resourceContext.getResource(InjectingConstraintValidatorFactory.class));
+            // if CDI is available use composite factiry
+            if (AccessController.doPrivileged(
+                    ReflectionHelper.classForNamePA("javax.enterprise.inject.spi.BeanManager")) != null) {
+                // Composite Configuration - due to PAYARA-2491
+                // https://github.com/payara/Payara/issues/2245
+                context.constraintValidatorFactory(resourceContext.getResource(
+                        CompositeInjectingConstraintValidatorFactory.class));
+            } else {
+                // Default Configuration.
+                context.constraintValidatorFactory(resourceContext.getResource(InjectingConstraintValidatorFactory.class));
+            }
 
             // Traversable Resolver.
             context.traversableResolver(getTraversableResolver(factory.getTraversableResolver(), handler));
diff --git a/ext/cdi/jersey-weld2-se/pom.xml b/ext/cdi/jersey-weld2-se/pom.xml
index e8fec6e..acb966a 100644
--- a/ext/cdi/jersey-weld2-se/pom.xml
+++ b/ext/cdi/jersey-weld2-se/pom.xml
@@ -36,6 +36,7 @@
         <dependency>
             <groupId>org.jboss.weld.se</groupId>
             <artifactId>weld-se-core</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.glassfish.jersey.core</groupId>
diff --git a/ext/microprofile/mp-config/pom.xml b/ext/microprofile/mp-config/pom.xml
index b4553e5..01267f4 100644
--- a/ext/microprofile/mp-config/pom.xml
+++ b/ext/microprofile/mp-config/pom.xml
@@ -76,13 +76,6 @@
         </dependency>
 
         <dependency>
-            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
-            <artifactId>jersey-test-framework-provider-jetty</artifactId>
-            <version>${project.version}</version>
-            <scope>test</scope>
-        </dependency>
-
-        <dependency>
             <groupId>io.helidon.microprofile.config</groupId>
             <artifactId>helidon-microprofile-config</artifactId>
             <version>${helidon.version}</version>
diff --git a/media/json-jackson/pom.xml b/media/json-jackson/pom.xml
index eb5d899..8080813 100644
--- a/media/json-jackson/pom.xml
+++ b/media/json-jackson/pom.xml
@@ -123,5 +123,18 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.glassfish.jersey.test-framework.providers</groupId>
+            <artifactId>jersey-test-framework-provider-bundle</artifactId>
+            <version>${project.version}</version>
+            <type>pom</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.fasterxml.jackson.datatype</groupId>
+            <artifactId>jackson-datatype-jdk8</artifactId>
+            <version>2.11.0</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/JacksonFeature.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/JacksonFeature.java
index bda2f2f..71e62ff 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/JacksonFeature.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/JacksonFeature.java
@@ -25,6 +25,7 @@
 import org.glassfish.jersey.CommonProperties;
 import org.glassfish.jersey.internal.InternalProperties;
 import org.glassfish.jersey.internal.util.PropertiesHelper;
+import org.glassfish.jersey.jackson.internal.DefaultJacksonJaxbJsonProvider;
 import org.glassfish.jersey.jackson.internal.FilteringJacksonJaxbJsonProvider;
 import org.glassfish.jersey.jackson.internal.JacksonFilteringFeature;
 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.base.JsonMappingExceptionMapper;
@@ -103,7 +104,7 @@
                 context.register(JacksonFilteringFeature.class);
                 context.register(FilteringJacksonJaxbJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class);
             } else {
-                context.register(JacksonJaxbJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class);
+                context.register(DefaultJacksonJaxbJsonProvider.class, MessageBodyReader.class, MessageBodyWriter.class);
             }
         }
 
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java
new file mode 100644
index 0000000..8b4ce1c
--- /dev/null
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProvider.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2020 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
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.jackson.internal;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg.Annotations;
+import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
+
+import java.util.Objects;
+import javax.inject.Singleton;
+
+/**
+ * Entity Data provider based on Jackson JSON provider.
+ */
+@Singleton
+public class DefaultJacksonJaxbJsonProvider extends JacksonJaxbJsonProvider {
+
+    public DefaultJacksonJaxbJsonProvider() {
+        findAndRegisterModules();
+    }
+
+    public DefaultJacksonJaxbJsonProvider(final Annotations... annotationsToUse) {
+        super(annotationsToUse);
+        findAndRegisterModules();
+    }
+
+    private void findAndRegisterModules() {
+        final ObjectMapper defaultMapper = _mapperConfig.getDefaultMapper();
+        if (Objects.nonNull(defaultMapper)) {
+            defaultMapper.findAndRegisterModules();
+        }
+
+        final ObjectMapper mapper = _mapperConfig.getConfiguredMapper();
+        if (Objects.nonNull(mapper)) {
+            mapper.findAndRegisterModules();
+        }
+    }
+}
diff --git a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/FilteringJacksonJaxbJsonProvider.java b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/FilteringJacksonJaxbJsonProvider.java
index 42021e5..815b45e 100644
--- a/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/FilteringJacksonJaxbJsonProvider.java
+++ b/media/json-jackson/src/main/java/org/glassfish/jersey/jackson/internal/FilteringJacksonJaxbJsonProvider.java
@@ -33,7 +33,6 @@
 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg.EndpointConfigBase;
 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg.ObjectWriterInjector;
 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.cfg.ObjectWriterModifier;
-import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JacksonJaxbJsonProvider;
 import org.glassfish.jersey.jackson.internal.jackson.jaxrs.json.JsonEndpointConfig;
 import org.glassfish.jersey.message.filtering.spi.ObjectProvider;
 
@@ -56,7 +55,7 @@
  * @author Michal Gajdos
  */
 @Singleton
-public final class FilteringJacksonJaxbJsonProvider extends JacksonJaxbJsonProvider {
+public final class FilteringJacksonJaxbJsonProvider extends DefaultJacksonJaxbJsonProvider {
 
     @Inject
     private Provider<ObjectProvider<FilterProvider>> provider;
diff --git a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java
new file mode 100644
index 0000000..281d4c4
--- /dev/null
+++ b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/DefaultJacksonJaxbJsonProviderTest.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2020 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
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.jackson.internal;
+
+import org.glassfish.jersey.jackson.internal.model.ServiceTest;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.Test;
+
+import javax.ws.rs.core.Application;
+
+import static junit.framework.TestCase.assertEquals;
+
+public final class DefaultJacksonJaxbJsonProviderTest extends JerseyTest {
+
+    @Override
+    protected final Application configure() {
+        return new ResourceConfig(ServiceTest.class);
+    }
+
+    @Test
+    public final void testJavaOptional() {
+        final String response = target("entity/simple").request().get(String.class);
+        assertEquals("{\"name\":\"Hello\",\"value\":\"World\"}", response);
+    }
+}
diff --git a/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/model/ServiceTest.java b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/model/ServiceTest.java
new file mode 100644
index 0000000..027064b
--- /dev/null
+++ b/media/json-jackson/src/test/java/org/glassfish/jersey/jackson/internal/model/ServiceTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2020 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
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.jackson.internal.model;
+
+import com.fasterxml.jackson.annotation.JsonGetter;
+
+import java.util.Optional;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("/entity/")
+public final class ServiceTest {
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    @Path("/simple")
+    public final EntityTest simple() {
+        return new EntityTest("Hello", "World");
+    }
+
+    private static final class EntityTest {
+
+        private final String name;
+
+        private final String value;
+
+        EntityTest(final String name, final String value) {
+            this.name = name;
+            this.value = value;
+        }
+
+        @JsonGetter("name")
+        public final String getName() {
+            return name;
+        }
+
+        @JsonGetter("value")
+        public final Optional<String> getValue() {
+            return Optional.ofNullable(value);
+        }
+    }
+}
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java
index 03bcd2d..882b505 100644
--- a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/common/LoggingFeatureTest.java
@@ -44,6 +44,7 @@
 
 import org.glassfish.jersey.logging.LoggingFeature;
 import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.server.ServerProperties;
 import org.glassfish.jersey.test.JerseyTest;
 import org.glassfish.jersey.test.TestProperties;
 
@@ -399,6 +400,7 @@
             return new ResourceConfig(MyResource.class)
                     .property(LoggingFeature.LOGGING_FEATURE_LOGGER_NAME, LOGGER_NAME)
                     .property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL, "INFO")
+                    .property(ServerProperties.WADL_FEATURE_DISABLE, true)
                     .register(CustomFilter.class);
         }
 
diff --git a/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
new file mode 100644
index 0000000..18fdcb9
--- /dev/null
+++ b/tests/e2e/src/test/java/org/glassfish/jersey/tests/e2e/server/wadl/NoJAXBNoWadlTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2020 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
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * This Source Code may also be made available under the following Secondary
+ * Licenses when the conditions for such availability set forth in the
+ * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
+ * version 2 with the GNU Classpath Exception, which is available at
+ * https://www.gnu.org/software/classpath/license.html.
+ *
+ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
+ */
+
+package org.glassfish.jersey.tests.e2e.server.wadl;
+
+import org.glassfish.jersey.internal.ServiceFinder;
+import org.glassfish.jersey.internal.util.JdkVersion;
+import org.glassfish.jersey.message.internal.MediaTypes;
+import org.glassfish.jersey.server.ResourceConfig;
+import org.glassfish.jersey.server.internal.LocalizationMessages;
+import org.glassfish.jersey.test.JerseyTest;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import javax.ws.rs.PUT;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.Response;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.io.PrintStream;
+
+public class NoJAXBNoWadlTest extends JerseyTest {
+
+    private static PrintStream errorStream;
+    private static OutputStream readableStream = new ByteArrayOutputStream(800);
+
+    @BeforeClass
+    public static void before() {
+        errorStream = System.err;
+        System.setErr(new PrintStream(readableStream));
+    }
+
+    @AfterClass
+    public static void after() {
+        System.setErr(errorStream);
+    }
+
+    @Path("dummy")
+    public static class NoJAXBNoWadlDummyResource {
+        @PUT
+        public String put(String put) {
+            return "OK";
+        }
+    }
+
+    @Override
+    protected Application configure() {
+        return new ResourceConfig(NoJAXBNoWadlDummyResource.class);
+    }
+
+    @Test
+    public void testOptionsNoWadl() {
+        final boolean shouldHaveJaxb = JdkVersion.getJdkVersion().getMajor() == 1;
+
+        // Make sure the test does not have JAX-B on a classpath
+        Assert.assertFalse(ServiceFinder.find("javax.xml.bind.JAXBContext").iterator().hasNext());
+
+        try (Response r = target("dummy").request(MediaTypes.WADL_TYPE).options()) {
+            String headers = r.getHeaderString(HttpHeaders.ALLOW);
+            Assert.assertEquals("OPTIONS,PUT", headers);
+        }
+        System.out.println(readableStream.toString());
+        Assert.assertEquals(!shouldHaveJaxb, readableStream.toString().contains(LocalizationMessages.WADL_FEATURE_DISABLED()));
+    }
+}
diff --git a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml
index c56548d..656ee89 100644
--- a/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-beanvalidation-webapp/pom.xml
@@ -71,6 +71,11 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-cdi1x</artifactId>
             <version>${project.version}</version>
diff --git a/tests/integration/cdi-integration/cdi-log-check/pom.xml b/tests/integration/cdi-integration/cdi-log-check/pom.xml
index 7b2ffe0..74c0bf2 100644
--- a/tests/integration/cdi-integration/cdi-log-check/pom.xml
+++ b/tests/integration/cdi-integration/cdi-log-check/pom.xml
@@ -70,6 +70,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-cdi1x</artifactId>
             <version>${project.version}</version>
diff --git a/tests/integration/cdi-integration/cdi-test-webapp/pom.xml b/tests/integration/cdi-integration/cdi-test-webapp/pom.xml
index 3f7141d..569d2aa 100644
--- a/tests/integration/cdi-integration/cdi-test-webapp/pom.xml
+++ b/tests/integration/cdi-integration/cdi-test-webapp/pom.xml
@@ -58,6 +58,11 @@
             <artifactId>jersey-weld2-se</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/tests/integration/j-376/pom.xml b/tests/integration/j-376/pom.xml
index 4dcbbf1..445152c 100644
--- a/tests/integration/j-376/pom.xml
+++ b/tests/integration/j-376/pom.xml
@@ -73,6 +73,11 @@
             <scope>compile</scope>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.ext.cdi</groupId>
             <artifactId>jersey-cdi1x</artifactId>
             <version>${project.version}</version>
diff --git a/tests/integration/jersey-2031/pom.xml b/tests/integration/jersey-2031/pom.xml
index 652bab8..076635b 100644
--- a/tests/integration/jersey-2031/pom.xml
+++ b/tests/integration/jersey-2031/pom.xml
@@ -17,7 +17,9 @@
 
 -->
 
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
     <parent>
@@ -41,13 +43,12 @@
             <groupId>org.glassfish.jersey.ext</groupId>
             <artifactId>jersey-mvc-jsp</artifactId>
         </dependency>
-
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>servlet-api</artifactId>
             <version>${servlet2.version}</version>
+            <scope>provided</scope>
         </dependency>
-
         <dependency>
             <groupId>org.glassfish.jersey.test-framework.providers</groupId>
             <artifactId>jersey-test-framework-provider-external</artifactId>
@@ -69,6 +70,36 @@
                 <groupId>org.eclipse.jetty</groupId>
                 <artifactId>jetty-maven-plugin</artifactId>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-tld</id>
+                        <phase>test</phase>
+                        <configuration>
+                            <target>
+                                <copy file="../../../ext/mvc-jsp/src/main/resources/META-INF/taglib.tld" todir="src/main/webapp/WEB-INF"/>
+                            </target>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>delete-tld</id>
+                        <phase>post-integration-test</phase>
+                        <configuration>
+                            <target>
+                                <delete file="src/main/webapp/WEB-INF/taglib.tld"/>
+                            </target>
+                        </configuration>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 
diff --git a/tests/integration/jersey-2031/src/main/webapp/WEB-INF/web.xml b/tests/integration/jersey-2031/src/main/webapp/WEB-INF/web.xml
index 270d212..3426090 100644
--- a/tests/integration/jersey-2031/src/main/webapp/WEB-INF/web.xml
+++ b/tests/integration/jersey-2031/src/main/webapp/WEB-INF/web.xml
@@ -31,12 +31,4 @@
         <filter-name>jersey2031</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
-    <jsp-config>
-        <taglib>
-            <taglib-uri>urn:org:glassfish:jersey:servlet:mvc</taglib-uri>
-            <taglib-location>
-                /WEB-INF/lib/jersey-mvc-jsp-2.29-SNAPSHOT.jar
-            </taglib-location>
-        </taglib>
-    </jsp-config>
 </web-app>
diff --git a/tests/integration/jersey-3992/pom.xml b/tests/integration/jersey-3992/pom.xml
index 186bc6c..2e6a71e 100644
--- a/tests/integration/jersey-3992/pom.xml
+++ b/tests/integration/jersey-3992/pom.xml
@@ -59,6 +59,11 @@
             <artifactId>jersey-weld2-se</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/tests/integration/jersey-4099/pom.xml b/tests/integration/jersey-4099/pom.xml
index 5ab2b05..56b5959 100644
--- a/tests/integration/jersey-4099/pom.xml
+++ b/tests/integration/jersey-4099/pom.xml
@@ -1,7 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
 
-    Copyright (c) 2019, 2020 Christian Kaltepoth. All rights reserved.
+    Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
+    Copyright (c) 2019 Christian Kaltepoth. 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
@@ -57,6 +58,10 @@
             <artifactId>jersey-weld2-se</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.jboss.weld.se</groupId>
+            <artifactId>weld-se-core</artifactId>
+        </dependency>
+        <dependency>
             <groupId>org.glassfish.jersey.inject</groupId>
             <artifactId>jersey-hk2</artifactId>
         </dependency>
diff --git a/tests/integration/pom.xml b/tests/integration/pom.xml
index 3da31ce..7437e75 100644
--- a/tests/integration/pom.xml
+++ b/tests/integration/pom.xml
@@ -53,7 +53,7 @@
         <module>jersey-1928</module>
         <module>jersey-1960</module>
         <module>jersey-1964</module>
-        <!--<module>jersey-2031</module>-->
+        <module>jersey-2031</module>
         <module>jersey-2136</module>
         <module>jersey-2137</module>
         <module>jersey-2154</module>
diff --git a/tests/jmockit/pom.xml b/tests/jmockit/pom.xml
index e6934b3..fbadeef 100644
--- a/tests/jmockit/pom.xml
+++ b/tests/jmockit/pom.xml
@@ -69,11 +69,6 @@
             <scope>test</scope>
         </dependency>
         <dependency>
-            <groupId>org.glassfish.jersey.media</groupId>
-            <artifactId>jersey-media-multipart</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
             <groupId>org.glassfish.jersey.test-framework</groupId>
             <artifactId>jersey-test-framework-core</artifactId>
             <scope>test</scope>
@@ -96,4 +91,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/tests/osgi/functional/pom.xml b/tests/osgi/functional/pom.xml
index 6fbe70d..ae4d984 100644
--- a/tests/osgi/functional/pom.xml
+++ b/tests/osgi/functional/pom.xml
@@ -414,7 +414,7 @@
             </build>
         </profile>
         <profile>
-            <id>testsSkipJdk11</id>
+            <id>jdk11dependency</id>
             <activation>
                 <jdk>[11,)</jdk>
             </activation>
diff --git a/tests/performance/runners/jersey-grizzly-runner/pom.xml b/tests/performance/runners/jersey-grizzly-runner/pom.xml
index d4d372b..9132f63 100644
--- a/tests/performance/runners/jersey-grizzly-runner/pom.xml
+++ b/tests/performance/runners/jersey-grizzly-runner/pom.xml
@@ -82,8 +82,7 @@
                         <phase>package</phase>
                         <!-- append to the packaging phase. -->
                         <goals>
-                            <goal>attached</goal>
-                            <!-- goals == mojos -->
+                            <goal>single</goal>
                         </goals>
                     </execution>
                 </executions>