You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/07/16 13:43:00 UTC

[jira] [Commented] (CAMEL-24117) camel-rest-openapi: one strategy instance shared by all consumers - missingOperation/mockIncludePattern cross-talk, second consumer can silently disable fail-fast validation

    [ https://issues.apache.org/jira/browse/CAMEL-24117?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18096797#comment-18096797 ] 

Claus Ibsen commented on CAMEL-24117:
-------------------------------------

Fixed via https://github.com/apache/camel/pull/24783

> 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
>            Assignee: Claus Ibsen
>            Priority: Major
>              Labels: code-review
>             Fix For: 4.22.0
>
>
> 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)