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