You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "shashank (Jira)" <ji...@apache.org> on 2026/10/09 22:16:00 UTC
[jira] [Created] (CAMEL-25510) 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
shashank created CAMEL-25510:
--------------------------------
Summary: 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
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)