Skip to content

Commit 21115d4

Browse files
committed
Prevent loading Feature/DynamicFeature services multiple times.
Signed-off-by: jansupol <jan.supol@oracle.com>
1 parent bdb0dd0 commit 21115d4

File tree

3 files changed

+10
-4
lines changed

3 files changed

+10
-4
lines changed

core-common/src/main/java/org/glassfish/jersey/AbstractFeatureConfigurator.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import javax.ws.rs.RuntimeType;
2626
import java.util.ArrayList;
27+
import java.util.Collection;
2728
import java.util.Collections;
2829
import java.util.List;
2930
import java.util.Map;
@@ -62,7 +63,7 @@ protected List<Class<T>> loadImplementations(Map<String, Object> applicationProp
6263
* @param features list of features to be registered
6364
* @param bootstrapBag place where features are being registered
6465
*/
65-
protected void registerFeatures(List<Class<T>> features,
66+
protected void registerFeatures(Collection<Class<T>> features,
6667
BootstrapBag bootstrapBag) {
6768
final List<AutoDiscoverable> autoDiscoverables = new ArrayList<>();
6869

core-common/src/main/java/org/glassfish/jersey/internal/DynamicFeatureConfigurator.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,10 @@
2222

2323
import javax.ws.rs.RuntimeType;
2424
import javax.ws.rs.container.DynamicFeature;
25+
import java.util.HashSet;
2526
import java.util.List;
2627
import java.util.Map;
28+
import java.util.Set;
2729

2830
/**
2931
* Registers JAX-RS {@link DynamicFeature} which are listed as SPIs for registration.
@@ -51,7 +53,8 @@ public DynamicFeatureConfigurator() {
5153
public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
5254
final Map<String, Object> properties = bootstrapBag.getConfiguration().getProperties();
5355
if (PropertiesHelper.isJaxRsServiceLoadingEnabled(properties)) {
54-
final List<Class<DynamicFeature>> dynamicFeatures = loadImplementations(properties);
56+
final Set<Class<DynamicFeature>> dynamicFeatures = new HashSet<>();
57+
dynamicFeatures.addAll(loadImplementations(properties));
5558
dynamicFeatures.addAll(loadImplementations(properties, DynamicFeature.class.getClassLoader()));
5659

5760
registerFeatures(dynamicFeatures, bootstrapBag);

core-common/src/main/java/org/glassfish/jersey/internal/FeatureConfigurator.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222

2323
import javax.ws.rs.RuntimeType;
2424
import javax.ws.rs.core.Feature;
25-
import java.util.List;
25+
import java.util.HashSet;
2626
import java.util.Map;
27+
import java.util.Set;
2728

2829
/**
2930
* Registers JAX-RS {@link Feature} which are listed as SPIs for registration.
@@ -44,7 +45,8 @@ public FeatureConfigurator(RuntimeType runtimeType) {
4445
public void init(InjectionManager injectionManager, BootstrapBag bootstrapBag) {
4546
final Map<String, Object> properties = bootstrapBag.getConfiguration().getProperties();
4647
if (PropertiesHelper.isJaxRsServiceLoadingEnabled(properties)) {
47-
final List<Class<Feature>> features = loadImplementations(properties);
48+
final Set<Class<Feature>> features = new HashSet<>();
49+
features.addAll(loadImplementations(properties));
4850
features.addAll(loadImplementations(properties, Feature.class.getClassLoader()));
4951

5052
registerFeatures(features, bootstrapBag);

0 commit comments

Comments
 (0)