Ok, thanks for the clarification!

----------------------------------------
> From: [email protected]
> Date: Tue, 16 Feb 2016 08:44:31 +0100
> Subject: Re: NPE when creating a bean through Extension and not through 
> Producer
> To: [email protected]
>
> Side note: @CdiExtensions(EmptyExtension.class) = @CdiExtensions({}) =
> @CdiExtensions normally
>
> Difference is the classloader for the producer is the one of the producer
> instance and not the returned type (JAXContextProducer in your sample)
>
>
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> <http://www.tomitribe.com>
>
> 2016-02-16 8:36 GMT+01:00 Xavier Dury <[email protected]>:
>
>> Thanks for your answer,
>>
>> I had doubts it had something to do with the proxying of the JAXBContext
>> but what I don't understand is why the @Produced one does not have this
>> problem. Are @Produced @ApplicationScoped beans not proxied?
>>
>> Xavier
>>
>> ----------------------------------------
>>> From: [email protected]
>>> Date: Tue, 16 Feb 2016 08:25:06 +0100
>>> Subject: Re: NPE when creating a bean through Extension and not through
>> Producer
>>> To: [email protected]
>>>
>>> Hi Xavier,
>>>
>>> it comes from the fact you scoped the context (@ApplicationScoped) so
>>> openwebbeans needs to generate a proxy in the classloader of jaxb which
>> is
>>> probably null there - depends where it is so embedded vs tomee can be
>>> important there.
>>>
>>> The workaround is trivial: wrap the context in an ApplicationScoped bean
>> or
>>> simply use the producer instance (not the produced one) and create the
>>> context in @PostConstruct and in the @Produces always return the same
>>> instance.
>>>
>>> This has a nice side effect: it prevents leaks cause classes not
>> belonging
>>> in the application and proxied can leak generally cause some of them need
>>> to be in the same classloader as the proxied class itself cause of java
>>> rules - whatever container it is.
>>>
>>> That said we can get a better exception on openwebbeans. An alternative
>> fix
>>> is probably to override ApplicationBoundaryService of openwebbeans in
>> your
>>> application (openwebbeans.properties) but this sounds more fragile than
>> the
>>> previous workaround which is safe.
>>>
>>>
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>>> <http://rmannibucau.wordpress.com> | Github <
>> https://github.com/rmannibucau> |
>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>>> <http://www.tomitribe.com>
>>>
>>> 2016-02-16 8:13 GMT+01:00 Xavier Dury <[email protected]>:
>>>
>>>> Hi Romain,
>>>>
>>>> You can find my code at https://github.com/kalgon/jaxb-cdi-test
>>>>
>>>> I've stripped my extension down to the minimum (I removed the scanning
>> and
>>>> I am just instantiating an empty JAXBContext).
>>>>
>>>> It seems that OWB wants to use the JAXBContext ClassLoader (which is
>> null).
>>>>
>>>> The problem could also come from an incorrect use of the BeanBuilder
>> (but
>>>> that extension works well in wildfly, it only fails in my tests with
>>>> OpenEJB).
>>>>
>>>> Thanks,
>>>>
>>>> Xavier
>>>>
>>>> ----------------------------------------
>>>>> From: [email protected]
>>>>> Date: Mon, 15 Feb 2016 17:36:17 +0100
>>>>> Subject: Re: NPE when creating a bean through Extension and not through
>>>> Producer
>>>>> To: [email protected]
>>>>>
>>>>> Hi Xavier,
>>>>>
>>>>> do you have some code to share - hope google didnt eat any snippet
>> again?
>>>>>
>>>>>
>>>>> Romain Manni-Bucau
>>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>>>>> <http://rmannibucau.wordpress.com> | Github <
>>>> https://github.com/rmannibucau> |
>>>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>>>>> <http://www.tomitribe.com>
>>>>>
>>>>> 2016-02-15 16:47 GMT+01:00 Xavier Dury <[email protected]>:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have written a CDI custom extension (with deltaspike BeanBuilder) to
>>>>>> scan all types annotated with @XmlRegistry and create one
>>>>>> @ApplicationScoped JAXBContext for my application.
>>>>>>
>>>>>> But beans referencing/injecting that JAXBContext give a NPE when
>>>> created:
>>>>>>
>>>>>> java.lang.NullPointerException
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.proxy.AbstractProxyFactory.defineAndLoadClass(AbstractProxyFactory.java:329)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.proxy.AbstractProxyFactory.createProxyClass(AbstractProxyFactory.java:240)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.proxy.AbstractProxyFactory.createProxyClass(AbstractProxyFactory.java:214)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.proxy.NormalScopeProxyFactory.createProxyClass(NormalScopeProxyFactory.java:269)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.proxy.NormalScopeProxyFactory.createProxyClass(NormalScopeProxyFactory.java:200)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.proxy.NormalScopeProxyFactory.createNormalScopeProxy(NormalScopeProxyFactory.java:149)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.container.BeanManagerImpl.getReference(BeanManagerImpl.java:767)
>>>>>> at
>>>>>>
>>>>
>> org.apache.webbeans.container.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:668)
>>>>>> 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.inject.OWBInjector.inject(OWBInjector.java:56)
>>>>>> at
>>>>>>
>>>>
>> org.apache.openejb.testing.ApplicationComposers.enrich(ApplicationComposers.java:949)
>>>>>> at
>>>>>>
>>>>
>> org.apache.openejb.testing.ApplicationComposers.deployApp(ApplicationComposers.java:729)
>>>>>> at
>>>>>>
>>>>
>> org.apache.openejb.testing.ApplicationComposers.before(ApplicationComposers.java:383)
>>>>>> at
>>>>>>
>>>>
>> org.apache.openejb.testing.ApplicationComposers.evaluate(ApplicationComposers.java:1060)
>>>>>> at
>>>>>>
>>>>
>> org.apache.openejb.junit.DeployApplication.evaluate(DeployApplication.java:40)
>>>>>>
>>>>>> The weird part is that when I create a JAXBContext through a
>> Producer, I
>>>>>> don't have this error.
>>>>>>
>>>>>> I have written 2 test cases with ApplicationComposer (one which
>> creates
>>>>>> the JAXBContext through @Produces and the other through an extension)
>>>> but I
>>>>>> don't know where to report this error as the problem seems to come
>> from
>>>>>> openwebbeans but I am using deltaspike and openejb to reproduce it.
>>>>>>
>>>>>> Hopefully, some people on this mailing list are members of the 3
>>>> projects
>>>>>> ;-)
>>>>>>
>>>>>> Xavier
>>>>>>
>>>>
>>>>
>>
>>
                                          

Reply via email to