You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by zh...@apache.org on 2024/03/20 14:05:27 UTC

(camel-quarkus) branch 3.8.x updated: Register Mixin classes for reflection (#5898) (#5900)

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

zhfeng pushed a commit to branch 3.8.x
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/3.8.x by this push:
     new 06d2e7364c Register Mixin classes for reflection (#5898) (#5900)
06d2e7364c is described below

commit 06d2e7364c097bbe30cda3bd903519a82aa54ada
Author: Zheng Feng <zh...@gmail.com>
AuthorDate: Wed Mar 20 22:05:20 2024 +0800

    Register Mixin classes for reflection (#5898) (#5900)
---
 .../java/deployment/OpenApiJavaProcessor.java      | 37 ++++++++++++++++++++++
 .../component/openapijava/it/v3/OpenApiV3Test.java |  8 ++++-
 2 files changed, 44 insertions(+), 1 deletion(-)

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 9c95449fd1..1a0706c54d 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
@@ -28,6 +28,7 @@ import java.util.function.Consumer;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import io.quarkus.bootstrap.classloading.QuarkusClassLoader;
@@ -43,6 +44,23 @@ import io.quarkus.smallrye.openapi.deployment.spi.AddToOpenAPIDefinitionBuildIte
 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.core.jackson.mixin.Components31Mixin;
+import io.swagger.v3.core.jackson.mixin.ComponentsMixin;
+import io.swagger.v3.core.jackson.mixin.DateSchemaMixin;
+import io.swagger.v3.core.jackson.mixin.Discriminator31Mixin;
+import io.swagger.v3.core.jackson.mixin.DiscriminatorMixin;
+import io.swagger.v3.core.jackson.mixin.ExampleMixin;
+import io.swagger.v3.core.jackson.mixin.ExtensionsMixin;
+import io.swagger.v3.core.jackson.mixin.Info31Mixin;
+import io.swagger.v3.core.jackson.mixin.InfoMixin;
+import io.swagger.v3.core.jackson.mixin.LicenseMixin;
+import io.swagger.v3.core.jackson.mixin.MediaTypeMixin;
+import io.swagger.v3.core.jackson.mixin.OpenAPI31Mixin;
+import io.swagger.v3.core.jackson.mixin.OpenAPIMixin;
+import io.swagger.v3.core.jackson.mixin.OperationMixin;
+import io.swagger.v3.core.jackson.mixin.Schema31Mixin;
+import io.swagger.v3.core.jackson.mixin.SchemaConverterMixin;
+import io.swagger.v3.core.jackson.mixin.SchemaMixin;
 import io.swagger.v3.oas.models.info.Contact;
 import io.swagger.v3.oas.models.info.Info;
 import io.swagger.v3.oas.models.media.Discriminator;
@@ -80,9 +98,24 @@ 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 DotName JSON_SERIALIZER = DotName.createSimple(JsonSerializer.class.getName());
     private static final Class<?>[] OPENAPI_ARRAY_TYPES = new Class<?>[] {
             Integer.class, Long.class, Float.class, Double.class, Boolean.class
     };
+    private static final Class<?>[] OPENAPI_MIXIN_TYPES = new Class<?>[] {
+            Components31Mixin.class, ComponentsMixin.class,
+            DateSchemaMixin.class,
+            Discriminator31Mixin.class, DiscriminatorMixin.class,
+            ExampleMixin.class,
+            ExtensionsMixin.class,
+            Info31Mixin.class, InfoMixin.class,
+            LicenseMixin.class,
+            MediaTypeMixin.class,
+            OpenAPI31Mixin.class, OpenAPIMixin.class,
+            OperationMixin.class,
+            Schema31Mixin.class, SchemaMixin.class,
+            SchemaConverterMixin.class
+    };
 
     @BuildStep
     FeatureBuildItem feature() {
@@ -92,6 +125,7 @@ class OpenApiJavaProcessor {
     @BuildStep
     void addDependencies(BuildProducer<IndexDependencyBuildItem> indexDependency) {
         indexDependency.produce(new IndexDependencyBuildItem("io.swagger.core.v3", "swagger-models"));
+        indexDependency.produce(new IndexDependencyBuildItem("io.swagger.core.v3", "swagger-core-jakarta"));
         indexDependency.produce(new IndexDependencyBuildItem("io.swagger", "swagger-models"));
     }
 
@@ -102,9 +136,12 @@ class OpenApiJavaProcessor {
         IndexView index = combinedIndex.getIndex();
         index.getAllKnownSubclasses(SCHEMA).stream().map(ClassInfo::toString)
                 .forEach(name -> reflectiveClasses.produce(ReflectiveClassBuildItem.builder(name).methods().build()));
+        index.getAllKnownSubclasses(JSON_SERIALIZER).stream().map(ClassInfo::toString)
+                .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());
+        reflectiveClasses.produce(ReflectiveClassBuildItem.builder(OPENAPI_MIXIN_TYPES).methods().build());
     }
 
     @BuildStep(onlyIf = ExposeOpenApiEnabled.class)
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 1f30341bc3..b7b4e6323e 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
@@ -28,6 +28,7 @@ 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;
+import static org.hamcrest.Matchers.not;
 
 /**
  * Tests specific to OpenAPI 3.x
@@ -107,7 +108,12 @@ public class OpenApiV3Test extends OpenApiTest {
                         "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"));
+                        "components.schemas.Fruit.properties.num.type", is("integer"),
+                        // Theses fields should be removed by Mixin classes
+                        "components.schemas.Fruit", not(hasKey("extensions")),
+                        "components.schemas.Fruit", not(hasKey("exampleSetFlag")),
+                        "components.schemas.Fruit", not(hasKey("types")),
+                        "components.schemas.Fruit", not(hasKey("jsonSchema")));
     }
 
     @ParameterizedTest