Federico Mariani created CAMEL-24117:
----------------------------------------

             Summary: camel-rest-openapi: one strategy instance shared by all 
consumers - missingOperation/mockIncludePattern cross-talk, second consumer can 
silently disable fail-fast validation
                 Key: CAMEL-24117
                 URL: https://issues.apache.org/jira/browse/CAMEL-24117
             Project: Camel
          Issue Type: Bug
          Components: camel-rest-openapi
    Affects Versions: 4.21.0
            Reporter: Federico Mariani


h3. Problem
{{RestOpenApiComponent.doInit}} creates ONE 
{{DefaultRestOpenapiProcessorStrategy}} and {{createEndpoint}} hands the same 
instance to every endpoint (RestOpenApiComponent.java:181, 199-202). Each 
consumer's {{afterPropertiesConfigured}} then calls 
{{strategy.setMissingOperation(endpoint.getMissingOperation())}} and 
{{setMockIncludePattern(...)}} on the shared object 
(RestOpenApiProcessor.java:218-220) - the last consumer initialized wins for 
all.

Worse: the endpoint field {{missingOperation}} defaults to {{null}} (the 
{{@UriParam defaultValue="fail"}} is doc-only), and the strategy's null -> 
fail/mock resolution in {{doInit}} 
(DefaultRestOpenapiProcessorStrategy.java:429-437) runs only once because 
{{ServiceHelper.initService}} is idempotent. With two consumers, consumer A 
inits -> strategy resolves {{fail}}; consumer B's {{setMissingOperation(null)}} 
resets it to {{null}} and {{initService}} is a no-op -> {{validateOpenApi}} 
matches none of the fail/ignore/mock branches: unmapped operations are silently 
accepted (fail-fast lost) and unmapped requests hit a consumer-less direct 
endpoint -> HTTP 500 at runtime. The strategy's {{uris}} list also mixes both 
consumers' paths, so {{doStop}} would deregister the other consumer's endpoints.

h3. Failure scenario
Two {{rest().openApi()}} blocks in one application - any combination of 
default/mock/fail -> at least one consumer runs with the wrong missingOperation 
mode.

h3. Fix direction
Create a strategy instance per endpoint (share only an explicitly user-supplied 
custom strategy), or move {{missingOperation}}/{{mockIncludePattern}}/{{uris}} 
into per-consumer state passed to the strategy methods.

----
_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