Hi

it looks accurate, a normal scoped instance - request scoped - proxies
a not null instance so you can't return null. Using a @RequestScoped
producer class (the enclosing one) and @Dependent producer can work
too if you inject this context in request scoped instances only.

Romain Manni-Bucau
@rmannibucau |  Blog | Old Blog | Github | LinkedIn


2017-11-27 11:02 GMT+01:00 Matthew Broadhead <matthew.broadh...@nbmlaw.co.uk>:
> if @Produces can produce null e.g.
>
> @Produces
> @Default
> @RequestScoped
> public KeycloakSecurityContext keycloakSecurityContext() {
>     if (httpServletRequest.getUserPrincipal() instanceof KeycloakPrincipal)
> {
>         KeycloakPrincipal<KeycloakSecurityContext> keycloakPrincipal =
> (KeycloakPrincipal<KeycloakSecurityContext>)
> httpServletRequest.getUserPrincipal();
>         return keycloakPrincipal.getKeycloakSecurityContext();
>     }
>     return null;
> }
>
> then i get
> Caused by:
> javax.enterprise.inject.IllegalProductException - WebBeans producer :
> keycloakSecurityContext return type in the component implementation class :
> uk.me.kissy.external.producers.SecurityProducer scope type must be
> @Dependent to create null instance
> at
> org.apache.webbeans.util.WebBeansUtil.checkNullInstance(WebBeansUtil.java:902)
>
> I can't add @Dependent to the KeycloakSecurityContext class but if I add it
> to keycloakSecurityContext() i get
> org.apache.openejb.cdi.OpenEJBLifecycle.startApplication CDI Beans module
> deployment failed
>  org.apache.webbeans.exception.WebBeansConfigurationException: Annotated
> producer method : public org.keycloak.KeycloakSecurityContext
> uk.me.kissy.external.producers.SecurityProducer.token()must declare default
> @Scope annotation

Reply via email to