[ 
https://issues.apache.org/jira/browse/CXF-8824?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17697143#comment-17697143
 ] 

David Maplesden commented on CXF-8824:
--------------------------------------

A little more information.  I was debugging our setup with CXF 3.1.12 when I 
noticed it does not exhibit the same behaviour.  It turns out that under 3.1.12 
both the {{collect(@Observes final ProcessProducerMethod< T, X > event)}} and 
{{collect(@Observes final ProcessBean< T > event)}} are being called (as I 
described for 3.5.5) BUT crucially the check for the {{Provider}} annotation 
within {{collect(@Observes final ProcessBean< T > event)}}  does not find it, I 
believe because the annotation does not exist on the producer method itself.

However in later versions this check was changed (in commit 
https://github.com/apache/cxf/commit/e173fd47157bad61631a2e87415732d524e05c74) 
to resolve CXF-7921 and now the annotation check does find the {{Provider}} on 
the class returned from the method - hence we are getting the provider bean 
loaded twice.

> CDI beans produced by @Produces methods are generated twice
> -----------------------------------------------------------
>
>                 Key: CXF-8824
>                 URL: https://issues.apache.org/jira/browse/CXF-8824
>             Project: CXF
>          Issue Type: Bug
>          Components: Integration, JAX-RS
>    Affects Versions: 3.2.0, 3.5.5
>         Environment: CXF 3.5.5 running in Tomcat 9.0.70 using JBoss Weld 
> 3.1.9 as the CDI implementation.  Using cxf-integration-cdi and CXFCdiServlet
>            Reporter: David Maplesden
>            Priority: Major
>
> We recently upgraded from CXF 3.1.9 to 3.5.5 and after upgrade encountered 
> this bug.
> Specifically we have some {{javax.ws.rs.container.ContainerRequestFilter}} 
> implementations that are built using {{@Produces}} methods on our base 
> {{javax.ws.rs.core.Application}} class. Since the upgrade we have discovered 
> that these filters are being added to the request interceptor chain twice.
> After debugging I found that all CDI managed beans built by {{@Produces}} 
> methods that use the {{@Provider}} annotation for discovery are now processed 
> twice.
> It appears to me that the problem is in the current implementation of 
> {{{}JAXRSCdiResourceExtension{}}}. This implementation has {{@Observes}} 
> methods for both {{ProcessProducerMethod}} events and {{ProcessBean}} events 
> - but {{ProcessProducerMethod}} extends {{ProcessBean}} so both of these 
> handlers get called for each {{ProcessProducerMethod}} event fired by the CDI 
> implementation. This means both handlers add the producer method to the list 
> of {{providerBeans}} and the producer method is subsequently called twice 
> when {{loadProviders()}} is called and two instances of the provider are 
> passed to the {{{}JAXRSServerFactoryBean{}}}.
> I believe this behaviour was introduced by this commit:
> [https://github.com/apache/cxf/commit/4b96a222aea61f9fe80083c4c4bb1519955890ab]



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to