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));
+    }
 }

Reply via email to