diff --git a/core-common/src/main/java/org/glassfish/jersey/AbstractFeatureConfigurator.java b/core-common/src/main/java/org/glassfish/jersey/AbstractFeatureConfigurator.java index 0e4be99039..307f3addc5 100644 --- a/core-common/src/main/java/org/glassfish/jersey/AbstractFeatureConfigurator.java +++ b/core-common/src/main/java/org/glassfish/jersey/AbstractFeatureConfigurator.java @@ -24,6 +24,7 @@ import jakarta.ws.rs.RuntimeType; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; @@ -62,7 +63,7 @@ protected List> loadImplementations(Map applicationProp * @param features list of features to be registered * @param bootstrapBag place where features are being registered */ - protected void registerFeatures(List> features, + protected void registerFeatures(Collection> features, BootstrapBag bootstrapBag) { final List autoDiscoverables = new ArrayList<>(); diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/DynamicFeatureConfigurator.java b/core-common/src/main/java/org/glassfish/jersey/internal/DynamicFeatureConfigurator.java index e17770ed46..295e5e816b 100644 --- a/core-common/src/main/java/org/glassfish/jersey/internal/DynamicFeatureConfigurator.java +++ b/core-common/src/main/java/org/glassfish/jersey/internal/DynamicFeatureConfigurator.java @@ -22,8 +22,9 @@ import jakarta.ws.rs.RuntimeType; import jakarta.ws.rs.container.DynamicFeature; -import java.util.List; +import java.util.HashSet; import java.util.Map; +import java.util.Set; /** * Registers JAX-RS {@link DynamicFeature} which are listed as SPIs for registration. @@ -51,7 +52,8 @@ public DynamicFeatureConfigurator() { public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) { final Map properties = bootstrapBag.getConfiguration().getProperties(); if (PropertiesHelper.isJaxRsServiceLoadingEnabled(properties)) { - final List> dynamicFeatures = loadImplementations(properties); + final Set> dynamicFeatures = new HashSet<>(); + dynamicFeatures.addAll(loadImplementations(properties)); dynamicFeatures.addAll(loadImplementations(properties, DynamicFeature.class.getClassLoader())); registerFeatures(dynamicFeatures, bootstrapBag); diff --git a/core-common/src/main/java/org/glassfish/jersey/internal/FeatureConfigurator.java b/core-common/src/main/java/org/glassfish/jersey/internal/FeatureConfigurator.java index c3cdfc980a..809dc03bf4 100644 --- a/core-common/src/main/java/org/glassfish/jersey/internal/FeatureConfigurator.java +++ b/core-common/src/main/java/org/glassfish/jersey/internal/FeatureConfigurator.java @@ -22,8 +22,9 @@ import jakarta.ws.rs.RuntimeType; import jakarta.ws.rs.core.Feature; -import java.util.List; +import java.util.HashSet; import java.util.Map; +import java.util.Set; /** * Registers JAX-RS {@link Feature} which are listed as SPIs for registration. @@ -44,7 +45,8 @@ public FeatureConfigurator(RuntimeType runtimeType) { public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) { final Map properties = bootstrapBag.getConfiguration().getProperties(); if (PropertiesHelper.isJaxRsServiceLoadingEnabled(properties)) { - final List> features = loadImplementations(properties); + final Set> features = new HashSet<>(); + features.addAll(loadImplementations(properties)); features.addAll(loadImplementations(properties, Feature.class.getClassLoader())); registerFeatures(features, bootstrapBag);