This is an automated email from the ASF dual-hosted git repository. jamesnetherton pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push: new 03e433d285 Fix native issues with REST DSL param arrayType and allowableValues 03e433d285 is described below commit 03e433d285d5c0b3f04c2af8c38955166cd50e49 Author: James Netherton <jamesnether...@gmail.com> AuthorDate: Mon Nov 27 10:12:24 2023 +0000 Fix native issues with REST DSL param arrayType and allowableValues Fixes #5528 Fixes #5554 --- .../java/deployment/OpenApiJavaProcessor.java | 4 ++ extensions/openapi-java/runtime/pom.xml | 5 -- .../java/graal/RestOpenApiReaderSubstitutions.java | 32 --------- .../component/openapijava/it/OpenApiRoutes.java | 79 +++++++++++++++++++++- .../component/openapijava/it/v3/OpenApiV3Test.java | 27 ++++++++ 5 files changed, 108 insertions(+), 39 deletions(-) diff --git a/extensions/openapi-java/deployment/src/main/java/org/apache/camel/quarkus/component/openapi/java/deployment/OpenApiJavaProcessor.java b/extensions/openapi-java/deployment/src/main/java/org/apache/camel/quarkus/component/openapi/java/deployment/OpenApiJavaProcessor.java index e46a387cf7..340523adcf 100644 --- a/extensions/openapi-java/deployment/src/main/java/org/apache/camel/quarkus/component/openapi/java/deployment/OpenApiJavaProcessor.java +++ b/extensions/openapi-java/deployment/src/main/java/org/apache/camel/quarkus/component/openapi/java/deployment/OpenApiJavaProcessor.java @@ -80,6 +80,9 @@ class OpenApiJavaProcessor { private static final String FEATURE = "camel-openapi-java"; private static final Logger LOGGER = LoggerFactory.getLogger(OpenApiJavaProcessor.class); private static final DotName SCHEMA = DotName.createSimple(Schema.class.getName()); + private static final Class<?>[] OPENAPI_ARRAY_TYPES = new Class<?>[] { + Integer.class, Long.class, Float.class, Double.class, Boolean.class + }; @BuildStep FeatureBuildItem feature() { @@ -101,6 +104,7 @@ class OpenApiJavaProcessor { .forEach(name -> reflectiveClasses.produce(ReflectiveClassBuildItem.builder(name).methods().build())); reflectiveClasses.produce(ReflectiveClassBuildItem.builder(Discriminator.class).build()); + reflectiveClasses.produce(ReflectiveClassBuildItem.builder(OPENAPI_ARRAY_TYPES).methods().build()); } @BuildStep(onlyIf = ExposeOpenApiEnabled.class) diff --git a/extensions/openapi-java/runtime/pom.xml b/extensions/openapi-java/runtime/pom.xml index 5052691b33..e011ebce7b 100644 --- a/extensions/openapi-java/runtime/pom.xml +++ b/extensions/openapi-java/runtime/pom.xml @@ -48,11 +48,6 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-support-swagger</artifactId> </dependency> - <dependency> - <groupId>org.graalvm.sdk</groupId> - <artifactId>graal-sdk</artifactId> - <scope>provided</scope> - </dependency> </dependencies> <build> diff --git a/extensions/openapi-java/runtime/src/main/java/org/apache/camel/quarkus/component/openapi/java/graal/RestOpenApiReaderSubstitutions.java b/extensions/openapi-java/runtime/src/main/java/org/apache/camel/quarkus/component/openapi/java/graal/RestOpenApiReaderSubstitutions.java deleted file mode 100644 index fe56946efa..0000000000 --- a/extensions/openapi-java/runtime/src/main/java/org/apache/camel/quarkus/component/openapi/java/graal/RestOpenApiReaderSubstitutions.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.camel.quarkus.component.openapi.java.graal; - -import java.util.List; - -import com.oracle.svm.core.annotate.Substitute; -import com.oracle.svm.core.annotate.TargetClass; -import io.swagger.v3.oas.models.media.Schema; -import org.apache.camel.openapi.RestOpenApiReader; - -@TargetClass(RestOpenApiReader.class) -final class RestOpenApiReaderSubstitutions { - @Substitute - private static void convertAndSetItemsEnum(final Schema items, final List<String> allowableValues, final Class<?> type) { - throw new UnsupportedOperationException("RestOpenApiReader::convertAndSetItemsEnum should not be invoked"); - } -} diff --git a/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/OpenApiRoutes.java b/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/OpenApiRoutes.java index 415dec744e..929098313e 100644 --- a/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/OpenApiRoutes.java +++ b/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/OpenApiRoutes.java @@ -152,7 +152,83 @@ public class OpenApiRoutes extends RouteBuilder { .to("direct:echoMethodPath") .securityDefinitions() .openIdConnect("openId", "https://secure.apache.org/fake/openid-configuration") - .end(); + .end() + + .get("/api/operation/spec/array/params") + .param() + .name("string_array") + .dataType("array") + .arrayType("string") + .allowableValues("A", "B", "C") + .endParam() + .param() + .name("int_array") + .dataType("array") + .arrayType("int") + .allowableValues("1", "2", "3") + .endParam() + .param() + .name("integer_array") + .dataType("array") + .arrayType("integer") + .allowableValues("1", "2", "3") + .endParam() + .param() + .name("long_array") + .dataType("array") + .arrayType("long") + .allowableValues("1", "2", "3") + .endParam() + .param() + .name("float_array") + .dataType("array") + .arrayType("float") + .allowableValues("1.0", "2.0", "3.0") + .endParam() + .param() + .name("double_array") + .dataType("array") + .arrayType("double") + .allowableValues("1.0", "2.0", "3.0") + .endParam() + .param() + .name("boolean_array") + .dataType("array") + .arrayType("boolean") + .allowableValues("true", "false") + .endParam() + // TODO: https://github.com/apache/camel-quarkus/issues/5559 + //.param() + //.name("byte_array") + //.dataType("array") + //.arrayType("byte") + //.allowableValues("1", "2", "3") + //.endParam() + //.param() + //.name("binary_array") + //.dataType("array") + //.arrayType("binary") + //.allowableValues("1", "2", "3") + //.endParam() + //.param() + //.name("date_array") + //.dataType("array") + //.arrayType("date") + //.allowableValues("2023 01 01", "2023 02 02", "2023 03 03") + //.endParam() + //.param() + //.name("datetime_array") + //.dataType("array") + //.arrayType("date-time") + //.allowableValues("2023 01 01 11:11:11", "2023 02 02 12:12:12", "2023 03 03 13:13:13") + //.endParam() + //.param() + //.name("password_array") + //.dataType("array") + //.arrayType("password") + //.allowableValues("foo", "bar", "cheese") + //.endParam() + .to("direct:echoMethodPath"); rest("/form") .post("/oneOf") @@ -198,7 +274,6 @@ public class OpenApiRoutes extends RouteBuilder { .endResponseMessage() .to("direct:res"); - } from("direct:fruits") diff --git a/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v3/OpenApiV3Test.java b/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v3/OpenApiV3Test.java index 552d57981f..45371ac58a 100644 --- a/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v3/OpenApiV3Test.java +++ b/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v3/OpenApiV3Test.java @@ -25,6 +25,7 @@ import org.apache.camel.quarkus.component.openapijava.it.common.OpenApiTest; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; +import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.is; @@ -173,4 +174,30 @@ public class OpenApiV3Test extends OpenApiTest { "components.schemas.AnyOfFormWrapper.properties.formElements.$ref", is("#/components/schemas/AnyOfForm")); } + + @ParameterizedTest + @EnumSource(OpenApiContentType.class) + public void arrayTypes(OpenApiContentType contentType) { + RestAssured.given() + .header("Accept", contentType.getMimeType()) + .get("/openapi") + .then() + .contentType(ContentType.JSON) + .statusCode(200) + .body( + "paths.'/api/operation/spec/array/params'.get.parameters[0].name", is("string_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[0].schema.enum", contains("A", "B", "C"), + "paths.'/api/operation/spec/array/params'.get.parameters[1].name", is("int_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[1].schema.enum", contains(1, 2, 3), + "paths.'/api/operation/spec/array/params'.get.parameters[2].name", is("integer_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[2].schema.enum", contains(1, 2, 3), + "paths.'/api/operation/spec/array/params'.get.parameters[3].name", is("long_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[3].schema.enum", contains(1, 2, 3), + "paths.'/api/operation/spec/array/params'.get.parameters[4].name", is("float_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[4].schema.enum", contains(1.0f, 2.0f, 3.0f), + "paths.'/api/operation/spec/array/params'.get.parameters[5].name", is("double_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[5].schema.enum", contains(1.0f, 2.0f, 3.0f), + "paths.'/api/operation/spec/array/params'.get.parameters[6].name", is("boolean_array"), + "paths.'/api/operation/spec/array/params'.get.parameters[6].schema.enum", contains(true, false)); + } }