You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "David Maplesden (Jira)" <ji...@apache.org> on 2023/03/06 04:24:00 UTC
[jira] [Commented] (CXF-8824) CDI beans produced by @Produces methods are generated twice
[ https://issues.apache.org/jira/browse/CXF-8824?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17696688#comment-17696688 ]
David Maplesden commented on CXF-8824:
--------------------------------------
I believe this to be a fairly long standing bug, masked by the fact that many {{@Provider}} implementations happen to be tolerant of being initialised twice. However in the case of some of our {{ContainerRequestFilter}} implementations they do not like running twice (specifically some code designed to protect against replay attacks).
We can work around the issue, but it seems like a good one to fix.
I don't understand all the use cases fully, but I suspect the solution is to not listen for {{ProcessBean}} events and instead listen only for the specific {{ProcessManagedBean}} and {{ProcessSessionBean}} events (along with the existing {{ProcessProducerMethod}} and {{ProcessProducerField}} events).
> 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)