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

shashank reassigned CAMEL-25510:
--------------------------------

    Assignee: shashank

> camel-openapi-java - the allowable values of an array parameter are generated 
> as the enum of the array instead of its items, so the parameter accepts no 
> value
> --------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-25510
>                 URL: https://issues.apache.org/jira/browse/CAMEL-25510
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-openapi-java
>            Reporter: shashank
>            Assignee: shashank
>            Priority: Major
>
> For a Rest DSL parameter with {{dataType("array")}}, {{arrayType(...)}} and 
> {{allowableValues(...)}}, {{RestOpenApiReader.defineSchemas}} (lines 812-854 
> at main c578a42a776d) sets the allowable values as the {{enum}} of the 
> parameter schema, which is the array schema, and then adds an {{items}} 
> schema without enum:
> {code}
> "schema" : { "type" : "array", "enum" : [ "red", "green", "blue" ], "items" : 
> { "type" : "string" } }
> {code}
> In OpenAPI 3.0/3.1 (JSON Schema validation) {{enum}} constrains the whole 
> value: an array is valid only if it is equal to one of the listed values, and 
> those are strings or numbers, so no array is valid. Request validators built 
> from the document reject every request with the parameter, and client 
> generators produce a wrong type. The values restrict the items 
> ({{items.enum}}); camel-swagger-java was fixed for the same problem in 
> CAMEL-12420, and the OpenAPI 2.0 path of camel-openapi-java (Camel 3.x) also 
> set them on the items. The OpenAPI 3.0 path already set them on the parameter 
> schema in Camel 3.20 (with the helper {{convertAndSetItemsEnum}}); 
> CAMEL-20156 later added the {{items}} schema next to that enum. The existing 
> {{RestOpenApiReaderTest}} only checks that the enum text appears somewhere in 
> the JSON.
> h3. Reproduction
> New {{RestOpenApiReaderArrayAllowableValuesTest}} (OpenAPI 3.0 and 3.1): a 
> string array and an integer array with allowable values, and a string 
> parameter with allowable values as the control. On main:
> {noformat}
> the array schema of 'colors' must not have an enum ==> expected: <null> but 
> was: <[red, green, blue]>
> {noformat}
> h3. Proposed fix
> {{defineSchemas}} creates the items schema first and sets the enum (converted 
> to the item type as before) on the items. Parameters that are not arrays, and 
> array parameters without allowable values, generate the same schema as 
> before. Upgrade guide note for 4.23 (the generated document changes). 
> camel-openapi-java tests with the fix: 99, 0 failures.
> Found with a Lean 4 model of the generated parameter schema and JSON Schema 
> validation (type, enum, items): "the schema accepts exactly the values the 
> parameter allows" fails for {{["red"]}}, and main's schema is proved to 
> reject every value of an array parameter with allowable values; the fix is 
> proved to satisfy the property for all parameters and to generate the same 
> schema as main for non-array parameters and arrays without allowable values. 
> Confirmed with the real reader.
> Affected: main, camel-4.22.x, camel-4.18.x, camel-4.14.x (same code, GitHub 
> contents API; latest releases 4.22.1, 4.18.4, 4.14.9).
> Duplicate check (2026-10-09, repeated in review): JIRA text "allowableValues" 
> (CAMEL-12420 is the same problem in camel-swagger-java, CAMEL-20156 the 
> NoSuchMethodException for non-JDK item types, CAMEL-9537 enum not output at 
> all), "openapi" + "enum" (unrelated), component camel-openapi-java since 2025 
> (13: CAMEL-24118 fixed seven other defects of the generated document, not 
> this one); GitHub pull requests "openapi allowableValues", "openapi array 
> enum", "RestOpenApiReader enum", "defineSchemas", "allowable values array": 
> none. No open pull request changes {{RestOpenApiReader}}.
> _Filed with Claude Code on behalf of allthingssecurity._



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

Reply via email to