diff --git a/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/ContextInjectionResolverImpl.java b/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/ContextInjectionResolverImpl.java index ae218b7210..ed11eef017 100644 --- a/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/ContextInjectionResolverImpl.java +++ b/inject/hk2/src/main/java/org/glassfish/jersey/inject/hk2/ContextInjectionResolverImpl.java @@ -16,11 +16,14 @@ package org.glassfish.jersey.inject.hk2; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Type; +import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.function.Function; @@ -194,11 +197,24 @@ public Injectee apply(CacheKey cacheKey) { final Class clazz = f.getType(); if (serviceLocator.getServiceHandle(clazz).getActiveDescriptor().getScopeAnnotation() == RequestScoped.class) { - final AbstractActiveDescriptor descriptor = - BuilderHelper.activeLink(clazz) - .to(clazz) - .in(RequestScoped.class) - .build(); + //to fix proxy issue from Singletons was needed to review if the injecteeClass contains + //Singleton annotation to indicate Singleton scope instead of Request + Optional optAnnotation = + Arrays.stream(injectee.getInjecteeClass().getAnnotations()) + .filter(p -> p.annotationType().getName().equals("jakarta.ejb.Singleton")) + .findFirst(); + AbstractActiveDescriptor descriptor; + if (optAnnotation.isPresent()) { + descriptor = BuilderHelper.activeLink(clazz) + .to(clazz) + .in(Singleton.class) + .build(); + } else { + descriptor = BuilderHelper.activeLink(clazz) + .to(clazz) + .in(RequestScoped.class) + .build(); + } return new DescriptorOverridingInjectee(injectee, descriptor); } }