You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomee.apache.org by Matthew Broadhead <ma...@nbmlaw.co.uk> on 2017/11/27 10:02:41 UTC

@Produces returning null

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

Re: @Produces returning null

Posted by Matthew Broadhead <ma...@nbmlaw.co.uk>.
also i did not realise that @Dependent is a Scope.  so i was declaring 
@RequestScoped and @Dependent at the same time

On 27/11/2017 11:41, Matthew Broadhead wrote:
> looks like it.  another method was injecting the security context, so 
> i moved it to it own class and now it is working.  changing from 
> @ApplicationScoped to @RequestScoped must have uncovered the problem.  
> i set everything to requestscoped now because all only produce on request
>
> On 27/11/2017 11:31, Romain Manni-Bucau wrote:
>> Loops in you generic usages?
>>
>> Romain Manni-Bucau
>> @rmannibucau |  Blog | Old Blog | Github | LinkedIn
>>
>>
>> 2017-11-27 11:29 GMT+01:00 Matthew Broadhead 
>> <ma...@nbmlaw.co.uk>:
>>> starts up ok but then on page load i get
>>>
>>> |java.lang.StackOverflowError at
>>> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:172) 
>>>
>>> at
>>> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:146) 
>>>
>>> at
>>> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:117) 
>>>
>>> at
>>> org.apache.webbeans.util.GenericsUtil.satisfiesDependency(GenericsUtil.java:61) 
>>>
>>> at
>>> org.apache.webbeans.container.BeanManagerImpl.isBeanTypeAssignableToGivenType(BeanManagerImpl.java:923) 
>>>
>>> at
>>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:742) 
>>>
>>> at
>>> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:84) 
>>>
>>> at
>>> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172) 
>>>
>>> at
>>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122) 
>>>
>>> at
>>> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95) 
>>>
>>> at
>>> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68) 
>>>
>>> at 
>>> org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>>> at
>>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799) 
>>>
>>> at
>>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659) 
>>>
>>> at
>>> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103) 
>>>
>>> at
>>> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
>>>
>>> at
>>> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
>>>
>>> at
>>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
>>>
>>> at
>>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
>>>
>>> at
>>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126) 
>>>
>>> at 
>>> org.apache.webbeans.component.ManagedBean.create(ManagedBean.java:67) 
>>> at
>>> org.apache.webbeans.context.creational.BeanInstanceBag.create(BeanInstanceBag.java:76) 
>>>
>>> at
>>> org.apache.webbeans.context.AbstractContext.getInstance(AbstractContext.java:159) 
>>>
>>> at 
>>> org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>>> at
>>> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:101) 
>>>
>>> at
>>> org.apache.webbeans.intercept.RequestScopedBeanInterceptorHandler.getContextualInstance(RequestScopedBeanInterceptorHandler.java:76) 
>>>
>>> at
>>> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:71) 
>>>
>>> at
>>> org.apache.webbeans.proxy.NormalScopeProxyFactory.unwrapInstance(NormalScopeProxyFactory.java:90) 
>>>
>>> at
>>> org.apache.webbeans.inject.InjectableMethod.doInjection(InjectableMethod.java:91) 
>>>
>>> at
>>> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:89) 
>>>
>>> at
>>> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172) 
>>>
>>> at
>>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122) 
>>>
>>> at
>>> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95) 
>>>
>>> at
>>> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68) 
>>>
>>> at 
>>> org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>>> at
>>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799) 
>>>
>>> at
>>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659) 
>>>
>>> at
>>> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103) 
>>>
>>> at
>>> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
>>>
>>> at
>>> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
>>>
>>> at
>>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
>>>
>>> at
>>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
>>>
>>> at
>>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126)| 
>>>
>>>
>>>
>>>
>>>
>>> On 27/11/2017 11:09, Romain Manni-Bucau wrote:
>>>> 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
>>>> <ma...@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
>>>
>


Re: @Produces returning null

Posted by Matthew Broadhead <ma...@nbmlaw.co.uk>.
looks like it.  another method was injecting the security context, so i 
moved it to it own class and now it is working.  changing from 
@ApplicationScoped to @RequestScoped must have uncovered the problem.  i 
set everything to requestscoped now because all only produce on request

On 27/11/2017 11:31, Romain Manni-Bucau wrote:
> Loops in you generic usages?
>
> Romain Manni-Bucau
> @rmannibucau |  Blog | Old Blog | Github | LinkedIn
>
>
> 2017-11-27 11:29 GMT+01:00 Matthew Broadhead <ma...@nbmlaw.co.uk>:
>> starts up ok but then on page load i get
>>
>> |java.lang.StackOverflowError at
>> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:172)
>> at
>> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:146)
>> at
>> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:117)
>> at
>> org.apache.webbeans.util.GenericsUtil.satisfiesDependency(GenericsUtil.java:61)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.isBeanTypeAssignableToGivenType(BeanManagerImpl.java:923)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
>> at
>> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:84)
>> at
>> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122)
>> at
>> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95)
>> at
>> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
>> at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659)
>> at
>> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103)
>> at
>> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126)
>> at org.apache.webbeans.component.ManagedBean.create(ManagedBean.java:67) at
>> org.apache.webbeans.context.creational.BeanInstanceBag.create(BeanInstanceBag.java:76)
>> at
>> org.apache.webbeans.context.AbstractContext.getInstance(AbstractContext.java:159)
>> at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>> at
>> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:101)
>> at
>> org.apache.webbeans.intercept.RequestScopedBeanInterceptorHandler.getContextualInstance(RequestScopedBeanInterceptorHandler.java:76)
>> at
>> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:71)
>> at
>> org.apache.webbeans.proxy.NormalScopeProxyFactory.unwrapInstance(NormalScopeProxyFactory.java:90)
>> at
>> org.apache.webbeans.inject.InjectableMethod.doInjection(InjectableMethod.java:91)
>> at
>> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:89)
>> at
>> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122)
>> at
>> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95)
>> at
>> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
>> at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799)
>> at
>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659)
>> at
>> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103)
>> at
>> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206)
>> at
>> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196)
>> at
>> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126)|
>>
>>
>>
>>
>> On 27/11/2017 11:09, Romain Manni-Bucau wrote:
>>> 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
>>> <ma...@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
>>


Re: @Produces returning null

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Loops in you generic usages?

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


2017-11-27 11:29 GMT+01:00 Matthew Broadhead <ma...@nbmlaw.co.uk>:
> starts up ok but then on page load i get
>
> |java.lang.StackOverflowError at
> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:172)
> at
> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:146)
> at
> org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:117)
> at
> org.apache.webbeans.util.GenericsUtil.satisfiesDependency(GenericsUtil.java:61)
> at
> org.apache.webbeans.container.BeanManagerImpl.isBeanTypeAssignableToGivenType(BeanManagerImpl.java:923)
> at
> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
> at
> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:84)
> at
> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172)
> at
> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122)
> at
> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95)
> at
> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
> at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
> at
> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799)
> at
> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659)
> at
> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103)
> at
> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196)
> at
> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126)
> at org.apache.webbeans.component.ManagedBean.create(ManagedBean.java:67) at
> org.apache.webbeans.context.creational.BeanInstanceBag.create(BeanInstanceBag.java:76)
> at
> org.apache.webbeans.context.AbstractContext.getInstance(AbstractContext.java:159)
> at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
> at
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:101)
> at
> org.apache.webbeans.intercept.RequestScopedBeanInterceptorHandler.getContextualInstance(RequestScopedBeanInterceptorHandler.java:76)
> at
> org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:71)
> at
> org.apache.webbeans.proxy.NormalScopeProxyFactory.unwrapInstance(NormalScopeProxyFactory.java:90)
> at
> org.apache.webbeans.inject.InjectableMethod.doInjection(InjectableMethod.java:91)
> at
> org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:89)
> at
> org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172)
> at
> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122)
> at
> org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95)
> at
> org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68)
> at org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125)
> at
> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799)
> at
> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659)
> at
> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103)
> at
> org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206)
> at
> org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196)
> at
> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126)|
>
>
>
>
> On 27/11/2017 11:09, Romain Manni-Bucau wrote:
>>
>> 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
>> <ma...@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
>
>

Re: @Produces returning null

Posted by Matthew Broadhead <ma...@nbmlaw.co.uk>.
starts up ok but then on page load i get

|java.lang.StackOverflowError at 
org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:172) 
at 
org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:146) 
at 
org.apache.webbeans.util.GenericsUtil.isAssignableFrom(GenericsUtil.java:117) 
at 
org.apache.webbeans.util.GenericsUtil.satisfiesDependency(GenericsUtil.java:61) 
at 
org.apache.webbeans.container.BeanManagerImpl.isBeanTypeAssignableToGivenType(BeanManagerImpl.java:923) 
at 
org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:742) 
at 
org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:84) 
at 
org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172) 
at 
org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122) 
at 
org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95) 
at 
org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68) 
at 
org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125) 
at 
org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799) 
at 
org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659) 
at 
org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103) 
at 
org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
at 
org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
at 
org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
at 
org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
at 
org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126) 
at org.apache.webbeans.component.ManagedBean.create(ManagedBean.java:67) 
at 
org.apache.webbeans.context.creational.BeanInstanceBag.create(BeanInstanceBag.java:76) 
at 
org.apache.webbeans.context.AbstractContext.getInstance(AbstractContext.java:159) 
at 
org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125) 
at 
org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.getContextualInstance(NormalScopedBeanInterceptorHandler.java:101) 
at 
org.apache.webbeans.intercept.RequestScopedBeanInterceptorHandler.getContextualInstance(RequestScopedBeanInterceptorHandler.java:76) 
at 
org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler.get(NormalScopedBeanInterceptorHandler.java:71) 
at 
org.apache.webbeans.proxy.NormalScopeProxyFactory.unwrapInstance(NormalScopeProxyFactory.java:90) 
at 
org.apache.webbeans.inject.InjectableMethod.doInjection(InjectableMethod.java:91) 
at 
org.apache.webbeans.portable.ProducerMethodProducer.produce(ProducerMethodProducer.java:89) 
at 
org.apache.webbeans.portable.AbstractProducer.produce(AbstractProducer.java:172) 
at 
org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:122) 
at 
org.apache.webbeans.component.ProducerMethodBean.create(ProducerMethodBean.java:95) 
at 
org.apache.webbeans.context.DependentContext.getInstance(DependentContext.java:68) 
at 
org.apache.webbeans.context.AbstractContext.get(AbstractContext.java:125) 
at 
org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:799) 
at 
org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:659) 
at 
org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.java:103) 
at 
org.apache.webbeans.inject.InjectableField.doInjection(InjectableField.java:65) 
at 
org.apache.webbeans.portable.InjectionTargetImpl.injectFields(InjectionTargetImpl.java:220) 
at 
org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:206) 
at 
org.apache.webbeans.portable.InjectionTargetImpl.inject(InjectionTargetImpl.java:196) 
at 
org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java:126)|



On 27/11/2017 11:09, Romain Manni-Bucau wrote:
> 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 <ma...@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


Re: @Produces returning null

Posted by Romain Manni-Bucau <rm...@gmail.com>.
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 <ma...@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