diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/ComponentsService.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/ComponentsService.java index f51322574..5ebce2cbd 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/ComponentsService.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/ComponentsService.java @@ -16,8 +16,6 @@ public interface ComponentsService { String registerSchema(SchemaObject headers); - String registerSchema(Class type); - String registerSchema(Class type, String contentType); Map getMessages(); diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/DefaultComponentsService.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/DefaultComponentsService.java index b1ada9e67..b6badb972 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/DefaultComponentsService.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/DefaultComponentsService.java @@ -89,12 +89,6 @@ public String registerSchema(SchemaObject headers) { return headers.getTitle(); } - @Override - public String registerSchema(Class type) { - // FIXME: Move this to the new HeadersService - return this.registerSchema(type, properties.getDocket().getDefaultContentType()); - } - @Override public String registerSchema(Class type, String contentType) { log.debug("Registering schema for {}", type.getSimpleName()); diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScanner.java index 22d882262..b028a9e7d 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScanner.java @@ -5,9 +5,9 @@ import io.github.springwolf.asyncapi.v3.model.channel.ChannelObject; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; import io.github.springwolf.core.asyncapi.scanners.common.ClassLevelAnnotationScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.utils.AnnotationScannerUtil; import lombok.extern.slf4j.Slf4j; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScanner.java index 2321fa214..fe6d879a1 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScanner.java @@ -6,9 +6,9 @@ import io.github.springwolf.asyncapi.v3.model.channel.message.MessageObject; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; import io.github.springwolf.core.asyncapi.scanners.common.MethodLevelAnnotationScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.utils.AnnotationScannerUtil; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/AsyncAnnotationScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/AsyncAnnotationScanner.java index 434627c1d..93c7cf9fe 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/AsyncAnnotationScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/AsyncAnnotationScanner.java @@ -94,10 +94,8 @@ protected Operation buildOperation(AsyncOperation asyncOperation, Method method, protected MessageObject buildMessage(AsyncOperation operationData, Method method) { NamedSchemaObject payloadSchema = payloadService.extractSchema(operationData, method); - // TODO: move block to own HeaderService SchemaObject headerSchema = AsyncAnnotationUtil.getAsyncHeaders(operationData, resolver); String headerSchemaName = this.componentsService.registerSchema(headerSchema); - var headers = MessageHeaders.of(MessageReference.toSchema(headerSchemaName)); Map messageBinding = AsyncAnnotationUtil.processMessageBindingFromAnnotation(method, messageBindingProcessors); @@ -121,7 +119,7 @@ protected MessageObject buildMessage(AsyncOperation operationData, Method method .title(payloadSchema.schema().getTitle()) .description(description) .payload(messagePayload) - .headers(headers) + .headers(MessageHeaders.of(MessageReference.toSchema(headerSchemaName))) .bindings(messageBinding); // Retrieve the Message information obtained from the @AsyncMessage annotation. These values have higher diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/ClassLevelAnnotationScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/ClassLevelAnnotationScanner.java index 8a7f6507d..5aeb45323 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/ClassLevelAnnotationScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/ClassLevelAnnotationScanner.java @@ -7,10 +7,11 @@ import io.github.springwolf.asyncapi.v3.model.channel.message.MessagePayload; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageReference; import io.github.springwolf.asyncapi.v3.model.schema.MultiFormatSchema; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.asyncapi.v3.model.schema.SchemaReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.utils.AnnotationScannerUtil; @@ -83,7 +84,8 @@ protected Map buildMessages( protected MessageObject buildMessage(ClassAnnotation classAnnotation, NamedSchemaObject payloadSchema) { Map messageBinding = bindingFactory.buildMessageBinding(classAnnotation); - String headerModelName = componentsService.registerSchema(asyncHeadersBuilder.buildHeaders(payloadSchema)); + SchemaObject headerSchema = asyncHeadersBuilder.buildHeaders(payloadSchema); + String headerSchemaName = componentsService.registerSchema(headerSchema); MessagePayload payload = MessagePayload.of(MultiFormatSchema.builder() .schema(SchemaReference.fromSchema(payloadSchema.name())) @@ -95,7 +97,7 @@ protected MessageObject buildMessage(ClassAnnotation classAnnotation, NamedSchem .title(payloadSchema.schema().getTitle()) .description(null) .payload(payload) - .headers(MessageHeaders.of(MessageReference.toSchema(headerModelName))) + .headers(MessageHeaders.of(MessageReference.toSchema(headerSchemaName))) .bindings(messageBinding) .build(); diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/MethodLevelAnnotationScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/MethodLevelAnnotationScanner.java index 72f5e8237..0cd193197 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/MethodLevelAnnotationScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/MethodLevelAnnotationScanner.java @@ -7,10 +7,11 @@ import io.github.springwolf.asyncapi.v3.model.channel.message.MessagePayload; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageReference; import io.github.springwolf.asyncapi.v3.model.schema.MultiFormatSchema; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.asyncapi.v3.model.schema.SchemaReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -29,8 +30,8 @@ public abstract class MethodLevelAnnotationScanner messageBinding = bindingFactory.buildMessageBinding(annotation); - // TODO: move block to own HeaderService - String headerModelName = componentsService.registerSchema(asyncHeadersBuilder.buildHeaders(payloadSchema)); + SchemaObject headerSchema = asyncHeadersBuilder.buildHeaders(payloadSchema); + String headerModelName = componentsService.registerSchema(headerSchema); MessagePayload payload = MessagePayload.of(MultiFormatSchema.builder() .schema(SchemaReference.fromSchema(payloadSchema.name())) diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersBuilder.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersBuilder.java similarity index 81% rename from springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersBuilder.java rename to springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersBuilder.java index 0496125f6..0a61613e4 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersBuilder.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersBuilder.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.core.asyncapi.components.headers; +package io.github.springwolf.core.asyncapi.scanners.common.headers; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersCloudEventConstants.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersCloudEventConstants.java similarity index 93% rename from springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersCloudEventConstants.java rename to springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersCloudEventConstants.java index 56a026a9f..277c84290 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersCloudEventConstants.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersCloudEventConstants.java @@ -1,5 +1,5 @@ // SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.core.asyncapi.components.headers; +package io.github.springwolf.core.asyncapi.scanners.common.headers; public class AsyncHeadersCloudEventConstants { public static final String CONTENT_TYPE = "content-type"; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersNotDocumented.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersNotDocumented.java similarity index 54% rename from springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersNotDocumented.java rename to springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersNotDocumented.java index 77b177bfc..5d0f770bf 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersNotDocumented.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersNotDocumented.java @@ -1,10 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.core.asyncapi.components.headers; +package io.github.springwolf.core.asyncapi.scanners.common.headers; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; -import java.util.List; import java.util.Map; public class AsyncHeadersNotDocumented implements AsyncHeadersBuilder { @@ -12,15 +11,12 @@ public class AsyncHeadersNotDocumented implements AsyncHeadersBuilder { * Per default, if no headers are explicitly defined, {@link AsyncHeadersNotUsed#NOT_USED} is used. * There can be headers, but don't have to be. */ - public static final SchemaObject NOT_DOCUMENTED = new SchemaObject(); - - static { - NOT_DOCUMENTED.setType("object"); - NOT_DOCUMENTED.setTitle("HeadersNotDocumented"); - NOT_DOCUMENTED.setDescription("There can be headers, but they are not explicitly documented."); - NOT_DOCUMENTED.setProperties(Map.of()); - NOT_DOCUMENTED.setExamples(List.of(new Object())); - } + public static final SchemaObject NOT_DOCUMENTED = SchemaObject.builder() + .type("object") + .title("HeadersNotDocumented") + .description("There can be headers, but they are not explicitly documented.") + .properties(Map.of()) + .build(); @Override public SchemaObject buildHeaders(NamedSchemaObject payloadSchema) { diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersNotUsed.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersNotUsed.java similarity index 53% rename from springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersNotUsed.java rename to springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersNotUsed.java index 8b026f07b..e5d5fe4a0 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeadersNotUsed.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/headers/AsyncHeadersNotUsed.java @@ -1,25 +1,21 @@ // SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.core.asyncapi.components.headers; +package io.github.springwolf.core.asyncapi.scanners.common.headers; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; -import java.util.List; import java.util.Map; public class AsyncHeadersNotUsed implements AsyncHeadersBuilder { /** * Explicitly document that no headers are used. */ - public static final SchemaObject NOT_USED = new SchemaObject(); - - static { - NOT_USED.setType("object"); - NOT_USED.setTitle("HeadersNotUsed"); - NOT_USED.setDescription("No headers are present."); - NOT_USED.setProperties(Map.of()); - NOT_USED.setExamples(List.of(new Object())); - } + public static final SchemaObject NOT_USED = SchemaObject.builder() + .type("object") + .title("HeadersNotUsed") + .description("No headers are present.") + .properties(Map.of()) + .build(); @Override public SchemaObject buildHeaders(NamedSchemaObject payloadSchema) { diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadService.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadService.java index 69342a90f..39decfe81 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadService.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadService.java @@ -31,8 +31,7 @@ public class PayloadService { public NamedSchemaObject extractSchema(Method method) { Optional> payloadType = payloadClassExtractor.extractFrom(method); - String contentType = properties.getDocket().getDefaultContentType(); - return payloadType.map((type) -> buildSchema(contentType, type)).orElseGet(this::useUnusedPayload); + return payloadType.map(this::buildSchema).orElseGet(this::useUnusedPayload); } public NamedSchemaObject extractSchema(AsyncOperation operationData, Method method) { @@ -41,9 +40,16 @@ public NamedSchemaObject extractSchema(AsyncOperation operationData, Method meth : payloadClassExtractor.extractFrom(method); String contentType = operationData.message().contentType(); + return payloadType.map((type) -> buildSchema(contentType, type)).orElseGet(this::useUnusedPayload); } + private NamedSchemaObject buildSchema(Class payloadType) { + String contentType = properties.getDocket().getDefaultContentType(); + + return buildSchema(contentType, payloadType); + } + private NamedSchemaObject buildSchema(String contentType, Class payloadType) { String componentsSchemaName = this.componentsService.registerSchema(payloadType, contentType); @@ -53,6 +59,12 @@ private NamedSchemaObject buildSchema(String contentType, Class payloadType) return new NamedSchemaObject(componentsSchemaName, schema); } + public String extractSchemaForName(Class payloadType) { + String contentType = properties.getDocket().getDefaultContentType(); + + return this.componentsService.registerSchema(payloadType, contentType); + } + private NamedSchemaObject useUnusedPayload() { this.componentsService.registerSchema(PAYLOAD_NOT_USED.schema()); return PAYLOAD_NOT_USED; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtil.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtil.java index 5fc0cf7f8..38bdb96b2 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtil.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtil.java @@ -8,14 +8,14 @@ import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.annotations.AsyncMessage; import io.github.springwolf.core.asyncapi.annotations.AsyncOperation; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotUsed; import io.github.springwolf.core.asyncapi.scanners.bindings.channels.ChannelBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.channels.ProcessedChannelBinding; import io.github.springwolf.core.asyncapi.scanners.bindings.messages.MessageBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.messages.ProcessedMessageBinding; import io.github.springwolf.core.asyncapi.scanners.bindings.operations.OperationBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.operations.ProcessedOperationBinding; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotUsed; import org.springframework.util.StringUtils; import org.springframework.util.StringValueResolver; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScanner.java index 811669507..efb51aab8 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScanner.java @@ -7,9 +7,9 @@ import io.github.springwolf.asyncapi.v3.model.operation.Operation; import io.github.springwolf.asyncapi.v3.model.operation.OperationAction; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; import io.github.springwolf.core.asyncapi.scanners.common.ClassLevelAnnotationScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.utils.AnnotationScannerUtil; import lombok.extern.slf4j.Slf4j; diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationMethodLevelOperationsScanner.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationMethodLevelOperationsScanner.java index ac5448ac2..df688d8d9 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationMethodLevelOperationsScanner.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationMethodLevelOperationsScanner.java @@ -8,9 +8,9 @@ import io.github.springwolf.asyncapi.v3.model.operation.Operation; import io.github.springwolf.asyncapi.v3.model.operation.OperationAction; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; import io.github.springwolf.core.asyncapi.scanners.common.MethodLevelAnnotationScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.utils.AnnotationScannerUtil; diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/AsyncAnnotationChannelsScannerTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/AsyncAnnotationChannelsScannerTest.java index 7e4bdb5c0..bf6cde9f3 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/AsyncAnnotationChannelsScannerTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/AsyncAnnotationChannelsScannerTest.java @@ -20,13 +20,13 @@ import io.github.springwolf.core.asyncapi.components.ComponentsService; import io.github.springwolf.core.asyncapi.components.DefaultComponentsService; import io.github.springwolf.core.asyncapi.components.SwaggerSchemaUtil; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.messages.MessageBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.operations.OperationBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.processor.TestOperationBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.channels.AsyncAnnotationChannelsScanner; import io.github.springwolf.core.asyncapi.scanners.classes.ClassScanner; import io.github.springwolf.core.asyncapi.scanners.common.AsyncAnnotationScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerIntegrationTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerIntegrationTest.java index 3671c992c..6a4ad8587 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerIntegrationTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerIntegrationTest.java @@ -17,8 +17,8 @@ import io.github.springwolf.core.asyncapi.components.examples.SchemaWalkerProvider; import io.github.springwolf.core.asyncapi.components.examples.walkers.DefaultSchemaWalker; import io.github.springwolf.core.asyncapi.components.examples.walkers.json.ExampleJsonValueGenerator; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerTest.java index 601cf424c..d97f33c72 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationClassLevelChannelsScannerTest.java @@ -16,8 +16,8 @@ import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.asyncapi.v3.model.schema.SchemaReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import lombok.Data; @@ -70,9 +70,6 @@ void setUp() { when(payloadService.extractSchema(any())) .thenReturn(new NamedSchemaObject(String.class.getName(), new SchemaObject())); - doAnswer(invocation -> invocation.>getArgument(0).getSimpleName()) - .when(componentsService) - .registerSchema(any(Class.class)); doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()) .when(componentsService) .registerSchema(any(SchemaObject.class)); diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerIntegrationTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerIntegrationTest.java index 2446885bb..5e9ee2d7f 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerIntegrationTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerIntegrationTest.java @@ -17,8 +17,8 @@ import io.github.springwolf.core.asyncapi.components.examples.SchemaWalkerProvider; import io.github.springwolf.core.asyncapi.components.examples.walkers.DefaultSchemaWalker; import io.github.springwolf.core.asyncapi.components.examples.walkers.json.ExampleJsonValueGenerator; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerTest.java index 3abd046c0..7eda73cde 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/channels/annotations/SpringAnnotationMethodLevelChannelsScannerTest.java @@ -16,8 +16,8 @@ import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.asyncapi.v3.model.schema.SchemaReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import lombok.Data; @@ -65,9 +65,6 @@ void setUp() throws NoSuchMethodException { when(payloadService.extractSchema(any())) .thenReturn(new NamedSchemaObject(String.class.getName(), new SchemaObject())); - doAnswer(invocation -> invocation.>getArgument(0).getSimpleName()) - .when(componentsService) - .registerSchema(any(Class.class)); doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()) .when(componentsService) .registerSchema(any(SchemaObject.class)); diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java index 42b5299f1..ba79d0c29 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/PayloadServiceTest.java @@ -5,6 +5,7 @@ import io.github.springwolf.core.asyncapi.annotations.AsyncMessage; import io.github.springwolf.core.asyncapi.annotations.AsyncOperation; import io.github.springwolf.core.asyncapi.components.ComponentsService; +import io.github.springwolf.core.configuration.properties.SpringwolfConfigProperties; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -20,6 +21,7 @@ import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -31,6 +33,12 @@ class PayloadServiceTest { @Mock private ComponentsService componentsService; + @Mock + private SpringwolfConfigProperties.ConfigDocket docket; + + @Mock + private SpringwolfConfigProperties properties; + @InjectMocks private PayloadService payloadService; @@ -59,7 +67,7 @@ public void shouldUsePayloadFromAsyncOperationAnnotation() { } @Test - public void shouldExtractPayloadFromMethod() { + public void shouldExtractPayloadFromMethodWithAnnotation() { // given AsyncMessage asyncMessage = mock(AsyncMessage.class); when(asyncMessage.contentType()).thenReturn("application/json"); @@ -85,6 +93,29 @@ public void shouldExtractPayloadFromMethod() { assertThat(result.schema()).isEqualTo(schemaObject); } + @Test + public void shouldExtractPayloadFromMethod() { + // given + when(properties.getDocket()).thenReturn(docket); + when(docket.getDefaultContentType()).thenReturn("application/json"); + + Method method = mock(Method.class); + when(payloadClassExtractor.extractFrom(method)).thenReturn(Optional.of(String.class)); + + String schemaName = "my-schema-name"; + when(componentsService.registerSchema(any(), any())).thenReturn(schemaName); + + SchemaObject schemaObject = SchemaObject.builder().build(); + when(componentsService.resolveSchema(schemaName)).thenReturn(schemaObject); + + // when + var result = payloadService.extractSchema(method); + + // then + assertThat(result.name()).isEqualTo(schemaName); + assertThat(result.schema()).isEqualTo(schemaObject); + } + @Test public void shouldReturnPayloadNotUsed() { // given @@ -107,4 +138,21 @@ public void shouldReturnPayloadNotUsed() { assertThat(result.schema().getDescription()).isEqualTo("No payload specified"); verify(componentsService).registerSchema(PAYLOAD_NOT_USED.schema()); } + + @Test + public void shouldExtractSchemaForInteger() { + // given + when(properties.getDocket()).thenReturn(docket); + when(docket.getDefaultContentType()).thenReturn("application/json"); + + String schemaName = "my-schema-name"; + when(componentsService.registerSchema(any(), any())).thenReturn(schemaName); + + // when + var result = payloadService.extractSchemaForName(Integer.class); + + // then + assertThat(result).isEqualTo(schemaName); + verifyNoMoreInteractions(componentsService); + } } diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/AsyncAnnotationOperationsScannerTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/AsyncAnnotationOperationsScannerTest.java index 4119b3b97..2af46328a 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/AsyncAnnotationOperationsScannerTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/AsyncAnnotationOperationsScannerTest.java @@ -19,12 +19,12 @@ import io.github.springwolf.core.asyncapi.components.ComponentsService; import io.github.springwolf.core.asyncapi.components.DefaultComponentsService; import io.github.springwolf.core.asyncapi.components.SwaggerSchemaUtil; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.messages.MessageBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.operations.OperationBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.processor.TestOperationBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.classes.ClassScanner; import io.github.springwolf.core.asyncapi.scanners.common.AsyncAnnotationScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScannerTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScannerTest.java index faf548d69..8540c0f1a 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScannerTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/operations/annotations/SpringAnnotationClassLevelOperationsScannerTest.java @@ -18,8 +18,8 @@ import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.asyncapi.v3.model.schema.SchemaReference; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingFactory; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import lombok.Data; @@ -72,9 +72,6 @@ void setUp() { when(payloadService.extractSchema(any())) .thenReturn(new NamedSchemaObject(String.class.getName(), new SchemaObject())); - doAnswer(invocation -> invocation.>getArgument(0).getSimpleName()) - .when(componentsService) - .registerSchema(any(Class.class)); doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()) .when(componentsService) .registerSchema(any(SchemaObject.class)); diff --git a/springwolf-examples/springwolf-kafka-example/src/main/java/io/github/springwolf/examples/kafka/producers/NestedProducer.java b/springwolf-examples/springwolf-kafka-example/src/main/java/io/github/springwolf/examples/kafka/producers/NestedProducer.java index 9f7317c2f..8487cbfb4 100644 --- a/springwolf-examples/springwolf-kafka-example/src/main/java/io/github/springwolf/examples/kafka/producers/NestedProducer.java +++ b/springwolf-examples/springwolf-kafka-example/src/main/java/io/github/springwolf/examples/kafka/producers/NestedProducer.java @@ -3,7 +3,7 @@ import io.github.springwolf.core.asyncapi.annotations.AsyncOperation; import io.github.springwolf.core.asyncapi.annotations.AsyncPublisher; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersCloudEventConstants; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersCloudEventConstants; import io.github.springwolf.examples.kafka.configuration.KafkaConfiguration; import io.github.springwolf.examples.kafka.dtos.NestedPayloadDto; import io.github.springwolf.plugins.kafka.asyncapi.annotations.KafkaAsyncOperationBinding; diff --git a/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/asyncapi/components/headers/AsyncHeadersForAmqpBuilder.java b/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/asyncapi/scanners/common/headers/AsyncHeadersForAmqpBuilder.java similarity index 51% rename from springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/asyncapi/components/headers/AsyncHeadersForAmqpBuilder.java rename to springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/asyncapi/scanners/common/headers/AsyncHeadersForAmqpBuilder.java index f7328b551..979aefe53 100644 --- a/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/asyncapi/components/headers/AsyncHeadersForAmqpBuilder.java +++ b/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/asyncapi/scanners/common/headers/AsyncHeadersForAmqpBuilder.java @@ -1,21 +1,19 @@ // SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.plugins.amqp.asyncapi.components.headers; +package io.github.springwolf.plugins.amqp.asyncapi.scanners.common.headers; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; import java.util.Map; public class AsyncHeadersForAmqpBuilder implements AsyncHeadersBuilder { - private static final SchemaObject headers = new SchemaObject(); - - static { - headers.setType("object"); - headers.setTitle("SpringRabbitListenerDefaultHeaders"); - headers.setProperties(Map.of()); - } + private static final SchemaObject headers = SchemaObject.builder() + .type("object") + .title("SpringRabbitListenerDefaultHeaders") + .properties(Map.of()) + .build(); @Override public SchemaObject buildHeaders(NamedSchemaObject payloadSchema) { diff --git a/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/configuration/SpringwolfAmqpScannerConfiguration.java b/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/configuration/SpringwolfAmqpScannerConfiguration.java index 62c182c63..415dbd9de 100644 --- a/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/configuration/SpringwolfAmqpScannerConfiguration.java +++ b/springwolf-plugins/springwolf-amqp-plugin/src/main/java/io/github/springwolf/plugins/amqp/configuration/SpringwolfAmqpScannerConfiguration.java @@ -12,10 +12,10 @@ import io.github.springwolf.core.asyncapi.scanners.operations.SpringAnnotationOperationsScanner; import io.github.springwolf.core.asyncapi.scanners.operations.annotations.SpringAnnotationClassLevelOperationsScanner; import io.github.springwolf.core.asyncapi.scanners.operations.annotations.SpringAnnotationMethodLevelOperationsScanner; -import io.github.springwolf.plugins.amqp.asyncapi.components.headers.AsyncHeadersForAmqpBuilder; import io.github.springwolf.plugins.amqp.asyncapi.scanners.bindings.AmqpBindingFactory; import io.github.springwolf.plugins.amqp.asyncapi.scanners.bindings.messages.AmqpMessageBindingProcessor; import io.github.springwolf.plugins.amqp.asyncapi.scanners.bindings.operations.AmqpOperationBindingProcessor; +import io.github.springwolf.plugins.amqp.asyncapi.scanners.common.headers.AsyncHeadersForAmqpBuilder; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.Exchange; import org.springframework.amqp.core.Queue; diff --git a/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScanner.java b/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScanner.java index 9b85c997a..b52678904 100644 --- a/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScanner.java +++ b/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScanner.java @@ -14,13 +14,14 @@ import io.github.springwolf.asyncapi.v3.model.schema.SchemaReference; import io.github.springwolf.asyncapi.v3.model.server.Server; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.ChannelsScanner; import io.github.springwolf.core.asyncapi.scanners.beans.BeanMethodsScanner; import io.github.springwolf.core.asyncapi.scanners.bindings.channels.ChannelBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.messages.MessageBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.channels.ChannelMerger; import io.github.springwolf.core.asyncapi.scanners.classes.spring.ComponentClassScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.utils.AsyncAnnotationUtil; import io.github.springwolf.core.configuration.docket.AsyncApiDocket; import io.github.springwolf.core.configuration.docket.AsyncApiDocketService; @@ -44,6 +45,7 @@ public class CloudStreamFunctionChannelsScanner implements ChannelsScanner { private final BeanMethodsScanner beanMethodsScanner; private final ComponentClassScanner componentClassScanner; private final ComponentsService componentsService; + private final PayloadService payloadService; private final BindingServiceProperties cloudStreamBindingsProperties; private final FunctionalChannelBeanBuilder functionalChannelBeanBuilder; protected final List channelBindingProcessors; @@ -82,8 +84,7 @@ private Map.Entry toChannelEntry(FunctionalChannelBeanDat private ChannelObject buildChannel(FunctionalChannelBeanData beanData) { Class payloadType = beanData.payloadType(); - String modelName = componentsService.registerSchema( - payloadType); // TODO: switch to payloadService? (same for operatoinScanner) + String modelName = payloadService.extractSchemaForName(payloadType); String headerModelName = componentsService.registerSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED); var messagePayload = MessagePayload.of(MultiFormatSchema.builder() diff --git a/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/operations/CloudStreamFunctionOperationsScanner.java b/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/operations/CloudStreamFunctionOperationsScanner.java index a7e0b53b6..40c3dde59 100644 --- a/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/operations/CloudStreamFunctionOperationsScanner.java +++ b/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/operations/CloudStreamFunctionOperationsScanner.java @@ -14,10 +14,11 @@ import io.github.springwolf.asyncapi.v3.model.operation.OperationAction; import io.github.springwolf.asyncapi.v3.model.server.Server; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.OperationsScanner; import io.github.springwolf.core.asyncapi.scanners.beans.BeanMethodsScanner; import io.github.springwolf.core.asyncapi.scanners.classes.spring.ComponentClassScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.operations.OperationMerger; import io.github.springwolf.core.configuration.docket.AsyncApiDocket; import io.github.springwolf.core.configuration.docket.AsyncApiDocketService; @@ -41,6 +42,7 @@ public class CloudStreamFunctionOperationsScanner implements OperationsScanner { private final BeanMethodsScanner beanMethodsScanner; private final ComponentClassScanner componentClassScanner; private final ComponentsService componentsService; + private final PayloadService payloadService; private final BindingServiceProperties cloudStreamBindingsProperties; private final FunctionalChannelBeanBuilder functionalChannelBeanBuilder; @@ -78,7 +80,7 @@ private Map.Entry toOperationEntry(FunctionalChannelBeanData private Operation buildOperation(FunctionalChannelBeanData beanData, String channelName) { Class payloadType = beanData.payloadType(); - String modelName = componentsService.registerSchema(payloadType); + String modelName = payloadService.extractSchemaForName(payloadType); String headerModelName = componentsService.registerSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED); MessageObject message = MessageObject.builder() diff --git a/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/configuration/SpringwolfCloudStreamAutoConfiguration.java b/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/configuration/SpringwolfCloudStreamAutoConfiguration.java index 19bc76cdb..f8f7f9de7 100644 --- a/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/configuration/SpringwolfCloudStreamAutoConfiguration.java +++ b/springwolf-plugins/springwolf-cloud-stream-plugin/src/main/java/io/github/springwolf/plugins/cloudstream/configuration/SpringwolfCloudStreamAutoConfiguration.java @@ -6,6 +6,7 @@ import io.github.springwolf.core.asyncapi.scanners.bindings.channels.ChannelBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.messages.MessageBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.classes.spring.ComponentClassScanner; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; import io.github.springwolf.core.configuration.docket.AsyncApiDocketService; import io.github.springwolf.core.configuration.properties.SpringwolfConfigConstants; @@ -32,6 +33,7 @@ public CloudStreamFunctionChannelsScanner cloudStreamFunctionChannelsScanner( BeanMethodsScanner beanMethodsScanner, ComponentClassScanner componentClassScanner, ComponentsService componentsService, + PayloadService payloadService, BindingServiceProperties cloudstreamBindingServiceProperties, FunctionalChannelBeanBuilder functionalChannelBeanBuilder, List channelBindingProcessors, @@ -41,6 +43,7 @@ public CloudStreamFunctionChannelsScanner cloudStreamFunctionChannelsScanner( beanMethodsScanner, componentClassScanner, componentsService, + payloadService, cloudstreamBindingServiceProperties, functionalChannelBeanBuilder, channelBindingProcessors, @@ -53,6 +56,7 @@ public CloudStreamFunctionOperationsScanner cloudStreamFunctionOperationsScanner BeanMethodsScanner beanMethodsScanner, ComponentClassScanner componentClassScanner, ComponentsService componentsService, + PayloadService payloadService, BindingServiceProperties cloudstreamBindingServiceProperties, FunctionalChannelBeanBuilder functionalChannelBeanBuilder) { return new CloudStreamFunctionOperationsScanner( @@ -60,6 +64,7 @@ public CloudStreamFunctionOperationsScanner cloudStreamFunctionOperationsScanner beanMethodsScanner, componentClassScanner, componentsService, + payloadService, cloudstreamBindingServiceProperties, functionalChannelBeanBuilder); } diff --git a/springwolf-plugins/springwolf-cloud-stream-plugin/src/test/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScannerIntegrationTest.java b/springwolf-plugins/springwolf-cloud-stream-plugin/src/test/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScannerIntegrationTest.java index d13095d40..a8ddc3d0b 100644 --- a/springwolf-plugins/springwolf-cloud-stream-plugin/src/test/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScannerIntegrationTest.java +++ b/springwolf-plugins/springwolf-cloud-stream-plugin/src/test/java/io/github/springwolf/plugins/cloudstream/asyncapi/scanners/channels/CloudStreamFunctionChannelsScannerIntegrationTest.java @@ -22,10 +22,12 @@ import io.github.springwolf.core.asyncapi.components.examples.SchemaWalkerProvider; import io.github.springwolf.core.asyncapi.components.examples.walkers.DefaultSchemaWalker; import io.github.springwolf.core.asyncapi.components.examples.walkers.json.ExampleJsonValueGenerator; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.beans.DefaultBeanMethodsScanner; import io.github.springwolf.core.asyncapi.scanners.classes.spring.ComponentClassScanner; import io.github.springwolf.core.asyncapi.scanners.classes.spring.ConfigurationClassScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; import io.github.springwolf.core.configuration.docket.DefaultAsyncApiDocketService; import io.github.springwolf.core.configuration.properties.SpringwolfConfigProperties; @@ -63,6 +65,8 @@ ComponentClassScanner.class, DefaultBeanMethodsScanner.class, DefaultComponentsService.class, + PayloadService.class, + PayloadClassExtractor.class, SwaggerSchemaUtil.class, TypeToClassConverter.class, DefaultSchemaWalker.class, diff --git a/springwolf-plugins/springwolf-jms-plugin/src/main/java/io/github/springwolf/plugins/jms/configuration/SpringwolfJmsScannerConfiguration.java b/springwolf-plugins/springwolf-jms-plugin/src/main/java/io/github/springwolf/plugins/jms/configuration/SpringwolfJmsScannerConfiguration.java index 400ffdb7f..edbb0056a 100644 --- a/springwolf-plugins/springwolf-jms-plugin/src/main/java/io/github/springwolf/plugins/jms/configuration/SpringwolfJmsScannerConfiguration.java +++ b/springwolf-plugins/springwolf-jms-plugin/src/main/java/io/github/springwolf/plugins/jms/configuration/SpringwolfJmsScannerConfiguration.java @@ -2,12 +2,12 @@ package io.github.springwolf.plugins.jms.configuration; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingProcessorPriority; import io.github.springwolf.core.asyncapi.scanners.channels.ChannelPriority; import io.github.springwolf.core.asyncapi.scanners.channels.SpringAnnotationChannelsScanner; import io.github.springwolf.core.asyncapi.scanners.channels.annotations.SpringAnnotationMethodLevelChannelsScanner; import io.github.springwolf.core.asyncapi.scanners.classes.SpringwolfClassScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.operations.SpringAnnotationOperationsScanner; import io.github.springwolf.core.asyncapi.scanners.operations.annotations.SpringAnnotationMethodLevelOperationsScanner; diff --git a/springwolf-plugins/springwolf-jms-plugin/src/test/java/io/github/springwolf/plugins/jms/controller/SpringwolfJmsControllerIntegrationTest.java b/springwolf-plugins/springwolf-jms-plugin/src/test/java/io/github/springwolf/plugins/jms/controller/SpringwolfJmsControllerIntegrationTest.java index 9c6363aa3..409cb4060 100644 --- a/springwolf-plugins/springwolf-jms-plugin/src/test/java/io/github/springwolf/plugins/jms/controller/SpringwolfJmsControllerIntegrationTest.java +++ b/springwolf-plugins/springwolf-jms-plugin/src/test/java/io/github/springwolf/plugins/jms/controller/SpringwolfJmsControllerIntegrationTest.java @@ -2,6 +2,7 @@ package io.github.springwolf.plugins.jms.controller; import com.fasterxml.jackson.annotation.JsonProperty; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.components.ComponentsService; import io.github.springwolf.core.asyncapi.components.DefaultComponentsService; import io.github.springwolf.core.asyncapi.components.SwaggerSchemaUtil; @@ -9,6 +10,7 @@ import io.github.springwolf.core.asyncapi.components.examples.walkers.DefaultSchemaWalker; import io.github.springwolf.core.asyncapi.components.examples.walkers.json.ExampleJsonValueGenerator; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; import io.github.springwolf.core.configuration.properties.SpringwolfConfigProperties; import io.github.springwolf.core.controller.PublishingPayloadCreator; @@ -29,6 +31,7 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.servlet.MockMvc; +import java.util.HashMap; import java.util.Map; import static java.util.Collections.singletonMap; @@ -50,6 +53,7 @@ PayloadClassExtractor.class, TypeToClassConverter.class, DefaultComponentsService.class, + PayloadService.class, SwaggerSchemaUtil.class, DefaultSchemaWalker.class, SchemaWalkerProvider.class, @@ -86,7 +90,10 @@ class SpringwolfJmsControllerIntegrationTest { void setup() { when(springwolfJmsProducer.isEnabled()).thenReturn(true); - componentsService.registerSchema(PayloadDto.class); + componentsService.registerSchema(SchemaObject.builder() + .title(PayloadDto.class.getName()) + .properties(new HashMap<>()) + .build()); } @Test diff --git a/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForSpringKafkaBuilder.java b/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForSpringKafkaBuilder.java index d12f05f61..28f7d46a3 100644 --- a/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForSpringKafkaBuilder.java +++ b/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForSpringKafkaBuilder.java @@ -15,10 +15,11 @@ public AsyncHeadersForSpringKafkaBuilder() { } public AsyncHeadersForSpringKafkaBuilder(String schemaName) { - this.headers = new SchemaObject(); - this.headers.setType("object"); - this.headers.setTitle(schemaName); - this.headers.setProperties(new HashMap<>()); + this.headers = SchemaObject.builder() + .type("object") + .title(schemaName) + .properties(new HashMap<>()) + .build(); } public AsyncHeadersForSpringKafkaBuilder withTypeIdHeader(String exampleTypeId) { diff --git a/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForKafkaBuilder.java b/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/scanners/common/header/AsyncHeadersForKafkaBuilder.java similarity index 68% rename from springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForKafkaBuilder.java rename to springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/scanners/common/header/AsyncHeadersForKafkaBuilder.java index 247e8bf1c..dc71e4a02 100644 --- a/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/components/header/AsyncHeadersForKafkaBuilder.java +++ b/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/asyncapi/scanners/common/header/AsyncHeadersForKafkaBuilder.java @@ -1,9 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.plugins.kafka.asyncapi.components.header; +package io.github.springwolf.plugins.kafka.asyncapi.scanners.common.header; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersBuilder; import io.github.springwolf.core.asyncapi.scanners.common.payload.NamedSchemaObject; +import io.github.springwolf.plugins.kafka.asyncapi.components.header.AsyncHeadersForSpringKafkaBuilder; public class AsyncHeadersForKafkaBuilder implements AsyncHeadersBuilder { @Override diff --git a/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/configuration/SpringwolfKafkaScannerConfiguration.java b/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/configuration/SpringwolfKafkaScannerConfiguration.java index b8972404e..f24d2cef3 100644 --- a/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/configuration/SpringwolfKafkaScannerConfiguration.java +++ b/springwolf-plugins/springwolf-kafka-plugin/src/main/java/io/github/springwolf/plugins/kafka/configuration/SpringwolfKafkaScannerConfiguration.java @@ -12,10 +12,10 @@ import io.github.springwolf.core.asyncapi.scanners.operations.SpringAnnotationOperationsScanner; import io.github.springwolf.core.asyncapi.scanners.operations.annotations.SpringAnnotationClassLevelOperationsScanner; import io.github.springwolf.core.asyncapi.scanners.operations.annotations.SpringAnnotationMethodLevelOperationsScanner; -import io.github.springwolf.plugins.kafka.asyncapi.components.header.AsyncHeadersForKafkaBuilder; import io.github.springwolf.plugins.kafka.asyncapi.scanners.bindings.KafkaBindingFactory; import io.github.springwolf.plugins.kafka.asyncapi.scanners.bindings.messages.KafkaMessageBindingProcessor; import io.github.springwolf.plugins.kafka.asyncapi.scanners.bindings.operations.KafkaOperationBindingProcessor; +import io.github.springwolf.plugins.kafka.asyncapi.scanners.common.header.AsyncHeadersForKafkaBuilder; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.context.annotation.Bean; diff --git a/springwolf-plugins/springwolf-kafka-plugin/src/test/java/io/github/springwolf/plugins/kafka/controller/SpringwolfKafkaControllerIntegrationTest.java b/springwolf-plugins/springwolf-kafka-plugin/src/test/java/io/github/springwolf/plugins/kafka/controller/SpringwolfKafkaControllerIntegrationTest.java index bb8c91fd3..bcd57a9c2 100644 --- a/springwolf-plugins/springwolf-kafka-plugin/src/test/java/io/github/springwolf/plugins/kafka/controller/SpringwolfKafkaControllerIntegrationTest.java +++ b/springwolf-plugins/springwolf-kafka-plugin/src/test/java/io/github/springwolf/plugins/kafka/controller/SpringwolfKafkaControllerIntegrationTest.java @@ -2,6 +2,7 @@ package io.github.springwolf.plugins.kafka.controller; import com.fasterxml.jackson.annotation.JsonProperty; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.components.ComponentsService; import io.github.springwolf.core.asyncapi.components.DefaultComponentsService; import io.github.springwolf.core.asyncapi.components.SwaggerSchemaUtil; @@ -9,6 +10,7 @@ import io.github.springwolf.core.asyncapi.components.examples.walkers.DefaultSchemaWalker; import io.github.springwolf.core.asyncapi.components.examples.walkers.json.ExampleJsonValueGenerator; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadClassExtractor; +import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.common.payload.TypeToClassConverter; import io.github.springwolf.core.configuration.properties.SpringwolfConfigProperties; import io.github.springwolf.core.controller.PublishingPayloadCreator; @@ -29,6 +31,7 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.web.servlet.MockMvc; +import java.util.HashMap; import java.util.Map; import static java.util.Collections.singletonMap; @@ -48,6 +51,7 @@ PublishingPayloadCreator.class, SpringwolfKafkaProducer.class, DefaultComponentsService.class, + PayloadService.class, SwaggerSchemaUtil.class, PayloadClassExtractor.class, TypeToClassConverter.class, @@ -86,7 +90,10 @@ class SpringwolfKafkaControllerIntegrationTest { void setup() { when(springwolfKafkaProducer.isEnabled()).thenReturn(true); - componentsService.registerSchema(PayloadDto.class); + componentsService.registerSchema(SchemaObject.builder() + .title(PayloadDto.class.getName()) + .properties(new HashMap<>()) + .build()); } @Test diff --git a/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/springwolf/plugins/sqs/configuration/SpringwolfSqsScannerConfiguration.java b/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/springwolf/plugins/sqs/configuration/SpringwolfSqsScannerConfiguration.java index 50ea0ca3c..b80ae4ba9 100644 --- a/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/springwolf/plugins/sqs/configuration/SpringwolfSqsScannerConfiguration.java +++ b/springwolf-plugins/springwolf-sqs-plugin/src/main/java/io/github/springwolf/plugins/sqs/configuration/SpringwolfSqsScannerConfiguration.java @@ -3,12 +3,12 @@ import io.awspring.cloud.sqs.annotation.SqsListener; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.bindings.BindingProcessorPriority; import io.github.springwolf.core.asyncapi.scanners.channels.ChannelPriority; import io.github.springwolf.core.asyncapi.scanners.channels.SpringAnnotationChannelsScanner; import io.github.springwolf.core.asyncapi.scanners.channels.annotations.SpringAnnotationMethodLevelChannelsScanner; import io.github.springwolf.core.asyncapi.scanners.classes.SpringwolfClassScanner; +import io.github.springwolf.core.asyncapi.scanners.common.headers.AsyncHeadersNotDocumented; import io.github.springwolf.core.asyncapi.scanners.common.payload.PayloadService; import io.github.springwolf.core.asyncapi.scanners.operations.SpringAnnotationOperationsScanner; import io.github.springwolf.core.asyncapi.scanners.operations.annotations.SpringAnnotationMethodLevelOperationsScanner;