Federico Mariani created CAMEL-24113:
----------------------------------------

             Summary: camel-rest-openapi: producers for the same operation 
share one cached rest: delegate endpoint - produces/consumes/queryParameters 
cross-contamination between routes
                 Key: CAMEL-24113
                 URL: https://issues.apache.org/jira/browse/CAMEL-24113
             Project: Camel
          Issue Type: Bug
          Components: camel-rest-openapi
    Affects Versions: 4.21.0
            Reporter: Federico Mariani


h3. Problem
{{RestOpenApiEndpoint.createProducerFor()}} (RestOpenApiEndpoint.java:550-557) 
builds the delegate URI from method/basePath/uriTemplate/host only, obtains it 
via {{camelContext.getEndpoint(componentEndpointUri)}} (cached by URI), then 
mutates it with {{endpoint.configureProperties(params)}} carrying {{produces}}, 
{{consumes}}, {{queryParameters}} (including endpoint-level literal query 
parameter values), {{producerComponentName}} and {{parameters}}. Two 
rest-openapi endpoints that resolve to the same operation/host but differ in 
those options alias the *same* {{RestEndpoint}} instance - the last 
{{configureProperties}} wins for both. {{RestProducer.prepareExchange}} reads 
{{getEndpoint().getProduces()/getConsumes()/getQueryParameters()}} at runtime, 
so the first route silently switches to the second route's configuration.

h3. Failure scenario
Two routes in one context: 
{{to("rest-openapi:petstore.json#findPetsByStatus?status=available")}} and 
{{to("rest-openapi:petstore.json#findPetsByStatus?status=sold")}}. Both resolve 
to {{rest:GET:/v3:/pet/findByStatus?host=...}} -> same cached endpoint; the 
second startup call overwrites {{queryParameters}} -> route 1 now sends 
{{status=sold}}. Same for {{produces=application/json}} vs 
{{produces=application/xml}} (Content-Type of route 1 flips to XML).

h3. History
Pattern unchanged since the original rest-swagger component; 5133ca3e38b5 
(CAMEL-14516) only switched to configurer usage. No JIRA acknowledges the 
aliasing.

h3. Fix direction
Encode the distinguishing options into the {{rest:}} endpoint URI (options are 
part of the endpoint cache key), or create the delegate as a 
prototype/non-cached endpoint so each rest-openapi producer owns its own 
instance.

----
_This issue was researched and filed by Claude Code on behalf of [~croway] 
(GitHub: Croway), as part of a deep code review of camel-rest-openapi and 
camel-openapi-java on main (4.22.0-SNAPSHOT). Full findings document available 
on request._



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

Reply via email to