[ 
https://issues.apache.org/jira/browse/CAMEL-24181?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen updated CAMEL-24181:
--------------------------------
    Fix Version/s: 4.22.0

> camel-cxf - CxfSpringEndpoint shuts down the shared application-wide CXF bus 
> on endpoint stop
> ---------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24181
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24181
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-cxf
>            Reporter: Federico Mariani
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.22.0
>
>
> *Severity:* High
> h3. Problem
> {{CxfSpringEndpoint.setApplicationContext}} does:
> {code:java}
> if (bus == null) {
>     createBus = true;
>     bus = BusWiringBeanFactoryPostProcessor.addDefaultBus(ctx);
> }
> {code}
> {{addDefaultBus}} returns the *context-wide singleton* bus bean {{"cxf"}} - 
> creating it only if absent, otherwise returning the user's own bus 
> ({{<cxf:bus>}}, imported {{cxf.xml}}). Setting {{createBus = true}} marks 
> this shared bus as endpoint-owned, so the inherited {{CxfEndpoint.doStop()}} 
> runs {{getBus().shutdown(false)}} on it. Every {{<cxf:cxfEndpoint>}} bean 
> (prototype scope) shares the one {{"cxf"}} bus.
> h3. Impact
> In a Spring context with more than one route using {{<cxf:cxfEndpoint>}} (or 
> a Camel route plus a non-Camel CXF {{<jaxws:endpoint>}} on the default bus), 
> removing/stopping one route while the application keeps running shuts down 
> the *application-wide* bus - every other CXF server/client on that bus stops 
> responding. Worse variant: the user explicitly configured {{<cxf:bus>}}; 
> Camel still sets {{createBus=true}} and destroys a user-managed bean.
> h3. Location
> {{components/camel-cxf/camel-cxf-spring-soap/src/main/java/org/apache/camel/component/cxf/spring/jaxws/CxfSpringEndpoint.java}}
>  ~272-279, with {{CxfEndpoint.doStop()}}. Introduced by CAMEL-12829 (added 
> {{createBus = true}} to fix a leak, without considering the 
> shared/user-supplied bus case).
> h3. Fix
> Do not set {{createBus = true}} when the bus came from / already existed in 
> the application context - its lifecycle belongs to Spring ({{SpringBus}} 
> shuts itself down on {{ContextClosedEvent}}). Only claim ownership of a 
> genuinely auto-created bus (when {{ctx.containsBean("cxf")}} was false) and 
> shut it down on ApplicationContext close, not endpoint stop.
> ----
> _Filed by Claude Code (Claude Fable) on behalf of Federico Mariani (GitHub: 
> Croway). Findings from an AI-assisted code review of the camel-cxf component 
> family; each item was verified against the current source and git history. 
> Items marked *[reproducer attached]* include a failing JUnit test that 
> demonstrates the defect._



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

Reply via email to