David Maplesden created CXF-8824:
------------------------------------

             Summary: 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.5.5, 3.2.0
         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


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