2017-06-26 1 views
1

J'ai un fournisseur de JAXRS:JavaEE CDI et JAXRS injectent dans @Provider donne UnsatisfiedDependencyException

@Provider 
@Priority(Priorities.AUTHENTICATION) 
public class AuthFilter implements ContainerRequestFilter { 

    @Inject 
    private AuthSecurityContext authSecurityContext; 

    // ... 

} 

Et ma mise en œuvre SecurityContext:

@RequestScoped 
public class AuthSecurityContext implements SecurityContext { 

    // ... 

} 

J'utilise GlassFish comme mon conteneur, mais il est de lancer la exception suivante:

2017-06-26T01:04:49.139+0100|Warning: The following warnings have been detected: WARNING: Unknown HK2 failure detected: 
MultiException stack 1 of 1 
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=AuthSecurityContext,parent=AuthFilter,qualifiers={},position=-1,optional=false,self=false,unqualified=null,2049394753) 

Mes autres grains sont en cours de découverte et d'injection t celui-ci dans le @Provider ne fonctionne pas, qu'est-ce que je manque?

+0

Quel serveur utilisez-vous? – Rouliboy

+0

Assurez-vous que vous utilisez le 'javax.enterprise.context.RequestScoped' et non' javax.faces.bean.RequestScoped' – maress

+0

@Rouliboy J'utilise Glassfish 4.1 comme conteneur. – Neilos

Répondre

1

D'après ce que je comprends le problème était que j'avais bean-discovery-mode="annotated" dans mon beans.xml, JAX-RS classes annotées ne sont pas gérées automatiquement par la mise en œuvre du CDI du conteneur, donc il y avait deux solutions possibles:

Set bean-discovery-mode="all"

OU

Ajout l'annotation javax.enterprise.context.Dependent à AuthFilter de laisser le CDI savent qu'il est un objet géré.