This is an automated email from the ASF dual-hosted git repository.

zhfeng 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 26ab5de  Fix #3606 to add reflection configs for Schema and its 
subClasses (#3624)
26ab5de is described below

commit 26ab5de9065f481dc369579ac00271365ad59b14
Author: Amos Feng <zh.f...@gmail.com>
AuthorDate: Wed Mar 16 09:04:30 2022 +0800

    Fix #3606 to add reflection configs for Schema and its subClasses (#3624)
---
 .../java/deployment/OpenApiJavaProcessor.java      | 22 ++++++++++++++++++++++
 .../component/openapijava/it/OpenApiRoutes.java    |  5 +++--
 .../component/openapijava/it/model/Fruit.java      |  4 +++-
 .../component/openapijava/it/v2/OpenApiV2Test.java | 16 ++++++++++++++++
 .../component/openapijava/it/v3/OpenApiV3Test.java | 16 ++++++++++++++++
 5 files changed, 60 insertions(+), 3 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 137ec91..07f65a3 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
@@ -36,13 +36,17 @@ import io.quarkus.deployment.Capabilities;
 import io.quarkus.deployment.Capability;
 import io.quarkus.deployment.annotations.BuildProducer;
 import io.quarkus.deployment.annotations.BuildStep;
+import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.FeatureBuildItem;
+import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
+import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
 import 
io.quarkus.smallrye.openapi.deployment.spi.AddToOpenAPIDefinitionBuildItem;
 import io.smallrye.openapi.api.models.OpenAPIImpl;
 import io.smallrye.openapi.api.util.MergeUtil;
 import io.smallrye.openapi.runtime.io.definition.DefinitionReader;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
+import io.swagger.v3.oas.models.media.Schema;
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
@@ -62,6 +66,9 @@ import org.eclipse.microprofile.config.Config;
 import org.eclipse.microprofile.config.ConfigProvider;
 import org.eclipse.microprofile.openapi.OASFilter;
 import org.eclipse.microprofile.openapi.models.OpenAPI;
+import org.jboss.jandex.ClassInfo;
+import org.jboss.jandex.DotName;
+import org.jboss.jandex.IndexView;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,12 +78,27 @@ 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());
 
     @BuildStep
     FeatureBuildItem feature() {
         return new FeatureBuildItem(FEATURE);
     }
 
+    @BuildStep
+    void addDependencies(BuildProducer<IndexDependencyBuildItem> 
indexDependency) {
+        indexDependency.produce(new 
IndexDependencyBuildItem("io.swagger.core.v3", "swagger-models"));
+    }
+
+    @BuildStep
+    void reflectiveClasses(BuildProducer<ReflectiveClassBuildItem> 
reflectiveClasses, CombinedIndexBuildItem combinedIndex) {
+        reflectiveClasses.produce(new ReflectiveClassBuildItem(true, true, 
SCHEMA.toString()));
+
+        IndexView index = combinedIndex.getIndex();
+        
index.getAllKnownSubclasses(SCHEMA).stream().map(ClassInfo::toString).forEach(
+                name -> reflectiveClasses.produce(new 
ReflectiveClassBuildItem(false, false, name)));
+    }
+
     @BuildStep(onlyIf = ExposeOpenApiEnabled.class)
     void exposeOpenAPI(List<CamelRoutesBuilderClassBuildItem> 
routesBuilderClasses,
             BuildProducer<AddToOpenAPIDefinitionBuildItem> openAPI,
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 8e6a1e3..884bf4c 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
@@ -60,6 +60,7 @@ public class OpenApiRoutes extends RouteBuilder {
 
         rest("/api")
                 .get("/fruits/list")
+                .type(Fruit.class)
                 .description("Gets a list of fruits")
                 .id("list")
                 .produces(MediaType.APPLICATION_JSON)
@@ -173,8 +174,8 @@ public class OpenApiRoutes extends RouteBuilder {
 
     private Set<Fruit> getFruits() {
         Set<Fruit> fruits = 
Collections.newSetFromMap(Collections.synchronizedMap(new LinkedHashMap<>()));
-        fruits.add(new Fruit("Apple", "Winter fruit"));
-        fruits.add(new Fruit("Pineapple", "Tropical fruit"));
+        fruits.add(new Fruit("Apple", "Winter fruit", 10));
+        fruits.add(new Fruit("Pineapple", "Tropical fruit", 20));
         return fruits;
     }
 }
diff --git 
a/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/model/Fruit.java
 
b/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/model/Fruit.java
index 44ee9a1..52117e7 100644
--- 
a/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/model/Fruit.java
+++ 
b/integration-tests/openapi-java/src/main/java/org/apache/camel/quarkus/component/openapijava/it/model/Fruit.java
@@ -23,9 +23,11 @@ public class Fruit {
 
     public String name;
     public String description;
+    public Integer num;
 
-    public Fruit(String name, String description) {
+    public Fruit(String name, String description, Integer num) {
         this.name = name;
         this.description = description;
+        this.num = num;
     }
 }
diff --git 
a/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v2/OpenApiV2Test.java
 
b/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v2/OpenApiV2Test.java
index 0b57703..d59ac56 100644
--- 
a/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v2/OpenApiV2Test.java
+++ 
b/integration-tests/openapi-java/src/test/java/org/apache/camel/quarkus/component/openapijava/it/v2/OpenApiV2Test.java
@@ -136,4 +136,20 @@ public class OpenApiV2Test extends OpenApiTest {
                         "basePath", is("/api"),
                         "schemes", contains("http", "https"));
     }
+
+    @ParameterizedTest
+    @EnumSource(OpenApiContentType.class)
+    public void openApiDefinitions(OpenApiContentType contentType) {
+        RestAssured.given()
+                .header("Accept", contentType.getMimeType())
+                .get("/openapi")
+                .then()
+                .contentType(ContentType.JSON)
+                .statusCode(200)
+                .body(
+                        "definitions.Fruit.type", is("object"),
+                        "definitions.Fruit.properties.name.type", is("string"),
+                        "definitions.Fruit.properties.description.type", 
is("string"),
+                        "definitions.Fruit.properties.num.type", 
is("integer"));
+    }
 }
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 463b943..0f7159b 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
@@ -92,4 +92,20 @@ public class OpenApiV3Test extends OpenApiTest {
                 .statusCode(200)
                 .body("servers[0].url", is("http://localhost:8080/api";));
     }
+
+    @ParameterizedTest
+    @EnumSource(OpenApiContentType.class)
+    public void openApiComponents(OpenApiContentType contentType) {
+        RestAssured.given()
+                .header("Accept", contentType.getMimeType())
+                .get("/openapi")
+                .then()
+                .contentType(ContentType.JSON)
+                .statusCode(200)
+                .body(
+                        "components.schemas.Fruit.type", is("object"),
+                        "components.schemas.Fruit.properties.name.type", 
is("string"),
+                        
"components.schemas.Fruit.properties.description.type", is("string"),
+                        "components.schemas.Fruit.properties.num.type", 
is("integer"));
+    }
 }

Reply via email to