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