From d1aa036cbd0fd0736738550264f6fbc4287c80b6 Mon Sep 17 00:00:00 2001 From: Timon Back Date: Fri, 12 Apr 2024 14:07:38 +0200 Subject: [PATCH] refactor/use asyncapi headers schema (#658) * refactor(core): switch to asyncapi headers * refactor(core): remove unused jackson-annotations dependency --- springwolf-core/build.gradle | 1 - .../components/ComponentsService.java | 3 +- .../components/DefaultComponentsService.java | 21 +++++---- .../components/SwaggerSchemaUtil.java | 10 ++++ .../components/headers/AsyncHeaderSchema.java | 32 ------------- .../components/headers/AsyncHeaders.java | 38 --------------- .../headers/AsyncHeadersBuilder.java | 4 +- .../headers/AsyncHeadersNotDocumented.java | 18 +++++-- .../headers/AsyncHeadersNotUsed.java | 17 ++++++- .../common/AsyncAnnotationScanner.java | 4 +- .../common/utils/AsyncAnnotationUtil.java | 41 ++++++++-------- .../components/SwaggerSchemaUtilTest.java | 47 +++++++++++++++++-- .../AsyncAnnotationChannelsScannerTest.java | 10 ++-- ...ssLevelChannelsScannerIntegrationTest.java | 6 +-- ...notationClassLevelChannelsScannerTest.java | 8 ++-- ...odLevelChannelsScannerIntegrationTest.java | 8 ++-- ...otationMethodLevelChannelsScannerTest.java | 12 ++--- .../common/utils/AsyncAnnotationUtilTest.java | 15 +++--- .../AsyncAnnotationOperationsScannerTest.java | 10 ++-- ...tationClassLevelOperationsScannerTest.java | 8 ++-- .../headers/AsyncHeadersForAmqpBuilder.java | 14 ++++-- ...unctionChannelsScannerIntegrationTest.java | 16 +++---- .../header/AsyncHeadersForKafkaBuilder.java | 4 +- .../AsyncHeadersForSpringKafkaBuilder.java | 30 +++++++----- 24 files changed, 200 insertions(+), 177 deletions(-) delete mode 100644 springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaderSchema.java delete mode 100644 springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaders.java diff --git a/springwolf-core/build.gradle b/springwolf-core/build.gradle index af015ba3e..9ddd7a706 100644 --- a/springwolf-core/build.gradle +++ b/springwolf-core/build.gradle @@ -13,7 +13,6 @@ dependencies { implementation "io.swagger.core.v3:swagger-core-jakarta:${swaggerVersion}" implementation "com.fasterxml.jackson.core:jackson-core:${jacksonVersion}" - implementation "com.fasterxml.jackson.core:jackson-annotations:${jacksonVersion}" implementation "com.fasterxml.jackson.core:jackson-databind:${jacksonVersion}" implementation "org.slf4j:slf4j-api:${slf4jApiVersion}" 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 dbe0341e7..9c982b3d6 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 @@ -5,7 +5,6 @@ import io.github.springwolf.asyncapi.v3.model.channel.message.MessageObject; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageReference; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; import java.util.Map; @@ -13,7 +12,7 @@ public interface ComponentsService { Map getSchemas(); - String registerSchema(AsyncHeaders headers); + String registerSchema(SchemaObject headers); String registerSchema(Class type); 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 1df1bb520..5556f91c1 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 @@ -6,13 +6,12 @@ import io.github.springwolf.asyncapi.v3.model.channel.message.MessageReference; import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.annotations.AsyncApiPayload; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; import io.github.springwolf.core.asyncapi.components.postprocessors.SchemasPostProcessor; import io.github.springwolf.core.configuration.properties.SpringwolfConfigProperties; import io.swagger.v3.core.converter.ModelConverter; import io.swagger.v3.core.converter.ModelConverters; import io.swagger.v3.core.jackson.TypeNameResolver; -import io.swagger.v3.oas.models.media.MapSchema; +import io.swagger.v3.oas.models.media.ObjectSchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import lombok.extern.slf4j.Slf4j; @@ -62,18 +61,22 @@ public Map getSchemas() { } @Override - public String registerSchema(AsyncHeaders headers) { - log.debug("Registering schema for {}", headers.getSchemaName()); + public String registerSchema(SchemaObject headers) { + log.debug("Registering schema for {}", headers.getTitle()); - MapSchema headerSchema = new MapSchema(); - headerSchema.setName(headers.getSchemaName()); + ObjectSchema headerSchema = new ObjectSchema(); + headerSchema.setName(headers.getTitle()); headerSchema.setDescription(headers.getDescription()); - headerSchema.properties(headers); + Map properties = headers.getProperties().entrySet().stream() + .map((property) -> Map.entry(property.getKey(), (Schema) + swaggerSchemaUtil.mapToSwagger((SchemaObject) property.getValue()))) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + headerSchema.setProperties(properties); - this.schemas.put(headers.getSchemaName(), headerSchema); + this.schemas.put(headers.getTitle(), headerSchema); postProcessSchema(headerSchema, DEFAULT_CONTENT_TYPE); - return headers.getSchemaName(); + return headers.getTitle(); } @Override diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtil.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtil.java index a8a0e6151..f6d6887ec 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtil.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtil.java @@ -141,4 +141,14 @@ public SchemaObject mapSchema(Schema value) { return builder.build(); } + + public Schema mapToSwagger(SchemaObject asyncApiSchema) { + Schema swaggerSchema = new Schema(); + swaggerSchema.setType("string"); + swaggerSchema.setDescription(asyncApiSchema.getDescription()); + swaggerSchema.setExamples(asyncApiSchema.getExamples()); + swaggerSchema.setEnum(asyncApiSchema.getEnumValues()); + + return swaggerSchema; + } } diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaderSchema.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaderSchema.java deleted file mode 100644 index 9ed56855f..000000000 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaderSchema.java +++ /dev/null @@ -1,32 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.core.asyncapi.components.headers; - -import com.fasterxml.jackson.annotation.JsonIgnore; -import io.swagger.v3.oas.models.media.StringSchema; -import lombok.Builder; - -import java.util.List; - -public class AsyncHeaderSchema extends StringSchema { - @JsonIgnore - private final String headerName; - - public AsyncHeaderSchema(String headerName) { - super(); - this.headerName = headerName; - } - - public String getHeaderName() { - return headerName; - } - - @Builder(builderMethodName = "headerBuilder") - private static AsyncHeaderSchema createHeader( - String headerName, String description, String example, List enumValue) { - AsyncHeaderSchema header = new AsyncHeaderSchema(headerName); - header.setDescription(description); - header.setExample(example); - header.setEnum(enumValue); - return header; - } -} diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaders.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaders.java deleted file mode 100644 index 70474fa48..000000000 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/components/headers/AsyncHeaders.java +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -package io.github.springwolf.core.asyncapi.components.headers; - -import io.swagger.v3.oas.models.media.Schema; - -import java.util.HashMap; - -public class AsyncHeaders extends HashMap { - private final String schemaName; - private final String description; - - public AsyncHeaders(String schemaName, String description) { - this.schemaName = schemaName; - this.description = description; - } - - public AsyncHeaders(String schemaName) { - this(schemaName, null); - } - - public String getSchemaName() { - return this.schemaName; - } - - public String getDescription() { - return this.description; - } - - public void addHeader(AsyncHeaderSchema header) { - this.put(header.getHeaderName(), header); - } - - public static AsyncHeaders from(AsyncHeaders source, String newSchemaName) { - AsyncHeaders clone = new AsyncHeaders(newSchemaName, source.getDescription()); - clone.putAll(source); - return clone; - } -} 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/components/headers/AsyncHeadersBuilder.java index 4cf06eb83..195fcb136 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/components/headers/AsyncHeadersBuilder.java @@ -1,6 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 package io.github.springwolf.core.asyncapi.components.headers; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; + public interface AsyncHeadersBuilder { - AsyncHeaders buildHeaders(Class payloadType); + SchemaObject buildHeaders(Class payloadType); } 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/components/headers/AsyncHeadersNotDocumented.java index 627009b5a..b1548c4e2 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/components/headers/AsyncHeadersNotDocumented.java @@ -1,16 +1,28 @@ // SPDX-License-Identifier: Apache-2.0 package io.github.springwolf.core.asyncapi.components.headers; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; + +import java.util.List; +import java.util.Map; + 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 AsyncHeaders NOT_DOCUMENTED = - new AsyncHeaders("HeadersNotDocumented", "There can be headers, but they are not explicitly documented."); + 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())); + } @Override - public AsyncHeaders buildHeaders(Class payloadType) { + public SchemaObject buildHeaders(Class payloadType) { return NOT_DOCUMENTED; } } 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/components/headers/AsyncHeadersNotUsed.java index 8ab081bb4..19ffed265 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/components/headers/AsyncHeadersNotUsed.java @@ -1,14 +1,27 @@ // SPDX-License-Identifier: Apache-2.0 package io.github.springwolf.core.asyncapi.components.headers; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; + +import java.util.List; +import java.util.Map; + public class AsyncHeadersNotUsed implements AsyncHeadersBuilder { /** * Explicitly document that no headers are used. */ - public static final AsyncHeaders NOT_USED = new AsyncHeaders("HeadersNotUsed", "No headers are present."); + 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())); + } @Override - public AsyncHeaders buildHeaders(Class payloadType) { + public SchemaObject buildHeaders(Class payloadType) { return NOT_USED; } } 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 a5a83a41a..2b9b4ad15 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 @@ -11,10 +11,10 @@ import io.github.springwolf.asyncapi.v3.model.operation.Operation; import io.github.springwolf.asyncapi.v3.model.operation.OperationAction; 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.annotations.AsyncOperation; import io.github.springwolf.core.asyncapi.components.ComponentsService; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; 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.common.payload.PayloadClassExtractor; @@ -92,7 +92,7 @@ protected MessageObject buildMessage(AsyncOperation operationData, Method method String modelName = this.componentsService.registerSchema( payloadType, operationData.message().contentType()); - AsyncHeaders asyncHeaders = AsyncAnnotationUtil.getAsyncHeaders(operationData, resolver); + SchemaObject asyncHeaders = AsyncAnnotationUtil.getAsyncHeaders(operationData, resolver); String headerModelName = this.componentsService.registerSchema(asyncHeaders); var headers = MessageHeaders.of(MessageReference.toSchema(headerModelName)); 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 023651350..42d0a0917 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 @@ -5,10 +5,9 @@ import io.github.springwolf.asyncapi.v3.bindings.MessageBinding; import io.github.springwolf.asyncapi.v3.bindings.OperationBinding; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageObject; +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.AsyncHeaderSchema; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; 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; @@ -22,7 +21,9 @@ import java.lang.reflect.AnnotatedElement; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -33,7 +34,7 @@ public class AsyncAnnotationUtil { private AsyncAnnotationUtil() {} - public static AsyncHeaders getAsyncHeaders(AsyncOperation op, StringValueResolver resolver) { + public static SchemaObject getAsyncHeaders(AsyncOperation op, StringValueResolver resolver) { if (op.headers().values().length == 0) { if (op.headers().notUsed()) { return AsyncHeadersNotUsed.NOT_USED; @@ -44,29 +45,29 @@ public static AsyncHeaders getAsyncHeaders(AsyncOperation op, StringValueResolve String headerDescription = StringUtils.hasText(op.headers().description()) ? resolver.resolveStringValue(op.headers().description()) : null; - AsyncHeaders asyncHeaders = new AsyncHeaders(op.headers().schemaName(), headerDescription); + + SchemaObject headerSchema = new SchemaObject(); + headerSchema.setType("object"); + headerSchema.setTitle(op.headers().schemaName()); + headerSchema.setDescription(headerDescription); + headerSchema.setProperties(new HashMap<>()); + Arrays.stream(op.headers().values()) .collect(groupingBy(AsyncOperation.Headers.Header::name)) .forEach((headerName, headers) -> { + String propertyName = resolver.resolveStringValue(headerName); + + SchemaObject property = new SchemaObject(); + property.setType("string"); + property.setTitle(propertyName); + property.setDescription(getDescription(headers, resolver)); List values = getHeaderValues(headers, resolver); - String exampleValue = values.stream().findFirst().orElse(null); - asyncHeaders.addHeader(AsyncHeaderSchema.headerBuilder() - .headerName(resolver.resolveStringValue(headerName)) - .description(getDescription(headers, resolver)) - .enumValue(values) - .example(exampleValue) - .build()); - - // FIXME: Replace AsyncHeaders by proper AsyncAPI v3 Headers - // MessageHeaders.of( - // SchemaObject.builder() - // .description(getDescription(headers, resolver)) - // .enumValues(values) - // .examples(value != null ? List.of(value) : null) - // .build()); + property.setExamples(new ArrayList<>(values)); + property.setEnumValues(values); + headerSchema.getProperties().put(propertyName, property); }); - return asyncHeaders; + return headerSchema; } private static List getHeaderValues( diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtilTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtilTest.java index 831dffda7..a0a430854 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtilTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/components/SwaggerSchemaUtilTest.java @@ -7,6 +7,7 @@ import io.swagger.v3.oas.models.ExternalDocumentation; import io.swagger.v3.oas.models.media.Discriminator; import io.swagger.v3.oas.models.media.ObjectSchema; +import io.swagger.v3.oas.models.media.Schema; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -326,9 +327,7 @@ void mapAdditionalProperties() { SchemaObject componentSchema = swaggerSchemaUtil.mapSchema(schema); // then - assertThat(((ComponentSchema) componentSchema.getAdditionalProperties()) - .getSchema() - .getType()) + assertThat(componentSchema.getAdditionalProperties().getSchema().getType()) .isEqualTo(additionalProperties.getType()); } @@ -491,4 +490,46 @@ void mapMaxItems() { assertThat(componentSchema.getMaxItems()).isEqualTo(schema.getMaxItems()); } } + + @Nested + class MapToSwagger { + @Test + void mapDescription() { + // given + SchemaObject schema = new SchemaObject(); + schema.setDescription("description"); + + // when + Schema componentSchema = swaggerSchemaUtil.mapToSwagger(schema); + + // then + assertThat(componentSchema.getDescription()).isEqualTo(schema.getDescription()); + } + + @Test + void mapExamples() { + // given + SchemaObject schema = new SchemaObject(); + schema.setExamples(List.of("example1", "example2")); + + // when + Schema componentSchema = swaggerSchemaUtil.mapToSwagger(schema); + + // then + assertThat(componentSchema.getExamples()).isEqualTo(schema.getExamples()); + } + + @Test + void mapEnum() { + // given + SchemaObject schema = new SchemaObject(); + schema.setEnumValues(List.of("enum1", "enum2")); + + // when + Schema componentSchema = swaggerSchemaUtil.mapToSwagger(schema); + + // then + assertThat(componentSchema.getEnum()).isEqualTo(schema.getEnumValues()); + } + } } 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 ee5977f84..39b2002da 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 @@ -156,7 +156,7 @@ void scan_componentChannelHasListenerMethod() { .description("SimpleFoo Message Description") .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); @@ -230,7 +230,7 @@ void scan_componentHasMultipleListenerAnnotations() { .title(SimpleFoo.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .description("SimpleFoo Message Description") .build(); @@ -271,7 +271,7 @@ void scan_componentHasAsyncMethodAnnotation() { .description("Message description") .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); @@ -378,7 +378,7 @@ void scan_componentHasOnlyDeclaredMethods(Class clazz) { .description(null) .payload(messagePayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); @@ -443,7 +443,7 @@ void scan_componentHasListenerMethodWithMetaAnnotation() { .description(null) .payload(messagePayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); 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 0de5cef6f..11e2dec6a 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 @@ -135,7 +135,7 @@ void scan_componentWithOneMethodLevelAnnotation() { .title(SimpleFoo.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(TestBindingFactory.defaultMessageBinding) .build(); @@ -176,7 +176,7 @@ void scan_componentWithMultipleRabbitHandlerMethods() { .title(SimpleFoo.class.getSimpleName()) .payload(simpleFooPayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(TestBindingFactory.defaultMessageBinding) .build(); @@ -189,7 +189,7 @@ void scan_componentWithMultipleRabbitHandlerMethods() { .title(String.class.getSimpleName()) .payload(stringPayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(TestBindingFactory.defaultMessageBinding) .build(); 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 fa84d720c..9f0ba78b2 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 @@ -13,9 +13,9 @@ 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.AsyncHeaders; 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.payload.PayloadClassExtractor; @@ -71,9 +71,9 @@ void setUp() { doAnswer(invocation -> invocation.>getArgument(0).getSimpleName()) .when(componentsService) .registerSchema(any(Class.class)); - doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()) + doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()) .when(componentsService) - .registerSchema(any(AsyncHeaders.class)); + .registerSchema(any(SchemaObject.class)); } @Test @@ -93,7 +93,7 @@ void scan_componentHasTestListenerMethods() { .title(String.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(defaultMessageBinding) .build(); 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 98c2cccd7..dcc717171 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 @@ -114,7 +114,7 @@ void scan_componentHasListenerMethod() { .title(SimpleFoo.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(TestBindingFactory.defaultMessageBinding) .build(); @@ -158,7 +158,7 @@ void scan_componentHasTestListenerMethods_multiplePayloads() { .title(SimpleFoo.class.getSimpleName()) .payload(simpleFooPayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(TestBindingFactory.defaultMessageBinding) .build(); MessageObject messageString = MessageObject.builder() @@ -167,7 +167,7 @@ void scan_componentHasTestListenerMethods_multiplePayloads() { .title(String.class.getSimpleName()) .payload(stringPayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(TestBindingFactory.defaultMessageBinding) .build(); @@ -217,7 +217,7 @@ void scan_componentHasListenerMetaMethod() { .title(SimpleFoo.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(defaultMessageBinding) .build(); 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 10e98c8dd..b8f2f756f 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 @@ -13,9 +13,9 @@ 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.AsyncHeaders; 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.payload.PayloadClassExtractor; @@ -70,9 +70,9 @@ void setUp() throws NoSuchMethodException { doAnswer(invocation -> invocation.>getArgument(0).getSimpleName()) .when(componentsService) .registerSchema(any(Class.class)); - doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()) + doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()) .when(componentsService) - .registerSchema(any(AsyncHeaders.class)); + .registerSchema(any(SchemaObject.class)); var stringMethod = ClassWithMultipleTestListenerAnnotation.class.getDeclaredMethod("methodWithAnnotation", String.class); @@ -99,7 +99,7 @@ void scan_componentHasTestListenerMethods() { .title(String.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(defaultMessageBinding) .build(); @@ -139,7 +139,7 @@ void scan_componentHasMultipleTestListenerMethods() { .title(String.class.getSimpleName()) .payload(stringPayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(defaultMessageBinding) .build(); @@ -149,7 +149,7 @@ void scan_componentHasMultipleTestListenerMethods() { .title(SimpleFoo.class.getSimpleName()) .payload(simpleFooPayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(defaultMessageBinding) .build(); diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtilTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtilTest.java index abd9e5af6..27aaa0a27 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtilTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/utils/AsyncAnnotationUtilTest.java @@ -5,10 +5,10 @@ import io.github.springwolf.asyncapi.v3.bindings.MessageBinding; import io.github.springwolf.asyncapi.v3.bindings.OperationBinding; import io.github.springwolf.asyncapi.v3.model.channel.message.MessageObject; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.annotations.AsyncListener; import io.github.springwolf.core.asyncapi.annotations.AsyncMessage; import io.github.springwolf.core.asyncapi.annotations.AsyncOperation; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; import io.github.springwolf.core.asyncapi.scanners.bindings.processor.TestAbstractOperationBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.processor.TestChannelBindingProcessor; import io.github.springwolf.core.asyncapi.scanners.bindings.processor.TestMessageBindingProcessor; @@ -47,13 +47,14 @@ void getAsyncHeaders(Class classWithOperationBindingProcessor) throws NoSuchM .thenAnswer(invocation -> invocation.getArgument(0).toString() + "Resolved"); // then - AsyncHeaders headers = AsyncAnnotationUtil.getAsyncHeaders(operation, resolver); - assertEquals("TestSchema", headers.getSchemaName()); + SchemaObject headers = AsyncAnnotationUtil.getAsyncHeaders(operation, resolver); + assertEquals("TestSchema", headers.getTitle()); assertEquals("header-descriptionResolved", headers.getDescription()); - assertTrue(headers.containsKey("headerResolved")); - assertEquals("string", headers.get("headerResolved").getType()); - assertEquals("valueResolved", headers.get("headerResolved").getExample()); - assertEquals("descriptionResolved", headers.get("headerResolved").getDescription()); + assertTrue(headers.getProperties().containsKey("headerResolved")); + SchemaObject headerResolved = (SchemaObject) headers.getProperties().get("headerResolved"); + assertEquals("string", headerResolved.getType()); + assertEquals("valueResolved", headerResolved.getExamples().get(0)); + assertEquals("descriptionResolved", headerResolved.getDescription()); } @Test 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 d2d3018f2..8473846f3 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 @@ -152,7 +152,7 @@ void scan_componentOperationHasListenerMethod() { .description("SimpleFoo Message Description") .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); @@ -224,7 +224,7 @@ void scan_componentHasMultipleListenerAnnotations() { .title(SimpleFoo.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .description("SimpleFoo Message Description") .build(); @@ -273,7 +273,7 @@ void scan_componentHasAsyncMethodAnnotation() { .description("Message description") .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); @@ -385,7 +385,7 @@ void scan_componentHasOnlyDeclaredMethods(Class clazz) { .description(null) .payload(messagePayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); @@ -460,7 +460,7 @@ void scan_componentHasListenerMethodWithMetaAnnotation() { .description(null) .payload(messagePayload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(EMPTY_MAP) .build(); 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 e03d1cb73..f656cc182 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 @@ -15,9 +15,9 @@ import io.github.springwolf.asyncapi.v3.model.operation.Operation; import io.github.springwolf.asyncapi.v3.model.operation.OperationAction; 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.AsyncHeaders; 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.payload.PayloadClassExtractor; @@ -73,9 +73,9 @@ void setUp() { doAnswer(invocation -> invocation.>getArgument(0).getSimpleName()) .when(componentsService) .registerSchema(any(Class.class)); - doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()) + doAnswer(invocation -> AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()) .when(componentsService) - .registerSchema(any(AsyncHeaders.class)); + .registerSchema(any(SchemaObject.class)); } @Test @@ -95,7 +95,7 @@ void scan_componentHasTestListenerMethods() { .title(String.class.getSimpleName()) .payload(payload) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(defaultMessageBinding) .build(); 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/components/headers/AsyncHeadersForAmqpBuilder.java index 211ce4a01..11857854f 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/components/headers/AsyncHeadersForAmqpBuilder.java @@ -1,15 +1,23 @@ // SPDX-License-Identifier: Apache-2.0 package io.github.springwolf.plugins.amqp.asyncapi.components.headers; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; +import java.util.Map; + public class AsyncHeadersForAmqpBuilder implements AsyncHeadersBuilder { - private static final AsyncHeaders headers = new AsyncHeaders("SpringRabbitListenerDefaultHeaders"); + private static final SchemaObject headers = new SchemaObject(); + + static { + headers.setType("object"); + headers.setTitle("SpringRabbitListenerDefaultHeaders"); + headers.setProperties(Map.of()); + } @Override - public AsyncHeaders buildHeaders(Class payloadType) { + public SchemaObject buildHeaders(Class payloadType) { return headers; } } 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 9699e3f6b..3e3e8c78b 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 @@ -130,7 +130,7 @@ void testConsumerBinding() { .schema(SchemaReference.fromSchema(String.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -174,7 +174,7 @@ void testSupplierBinding() { .schema(SchemaReference.fromSchema(String.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -226,7 +226,7 @@ void testFunctionBinding() { .schema(SchemaReference.fromSchema(Integer.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -251,7 +251,7 @@ void testFunctionBinding() { .schema(SchemaReference.fromSchema(String.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -305,7 +305,7 @@ void testKStreamFunctionBinding() { .schema(SchemaReference.fromSchema(Integer.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -330,7 +330,7 @@ void testKStreamFunctionBinding() { .schema(SchemaReference.fromSchema(String.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -385,7 +385,7 @@ void testFunctionBindingWithSameTopicName() { .schema(SchemaReference.fromSchema(Integer.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); @@ -405,7 +405,7 @@ void testFunctionBindingWithSameTopicName() { .schema(SchemaReference.fromSchema(String.class.getSimpleName())) .build())) .headers(MessageHeaders.of( - MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getSchemaName()))) + MessageReference.toSchema(AsyncHeadersNotDocumented.NOT_DOCUMENTED.getTitle()))) .bindings(Map.of("kafka", new EmptyMessageBinding())) .build(); 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/components/header/AsyncHeadersForKafkaBuilder.java index e79295737..ea7b6bb24 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/components/header/AsyncHeadersForKafkaBuilder.java @@ -1,12 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 package io.github.springwolf.plugins.kafka.asyncapi.components.header; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import io.github.springwolf.core.asyncapi.components.headers.AsyncHeadersBuilder; public class AsyncHeadersForKafkaBuilder implements AsyncHeadersBuilder { @Override - public AsyncHeaders buildHeaders(Class payloadType) { + public SchemaObject buildHeaders(Class payloadType) { return new AsyncHeadersForSpringKafkaBuilder("SpringKafkaDefaultHeaders-" + payloadType.getSimpleName()) .withTypeIdHeader(payloadType.getTypeName()) .build(); 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 12f196b00..d12f05f61 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 @@ -1,21 +1,24 @@ // SPDX-License-Identifier: Apache-2.0 package io.github.springwolf.plugins.kafka.asyncapi.components.header; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaderSchema; -import io.github.springwolf.core.asyncapi.components.headers.AsyncHeaders; +import io.github.springwolf.asyncapi.v3.model.schema.SchemaObject; import org.springframework.kafka.support.mapping.AbstractJavaTypeMapper; +import java.util.HashMap; import java.util.List; public class AsyncHeadersForSpringKafkaBuilder { - private final AsyncHeaders headers; + private final SchemaObject headers; public AsyncHeadersForSpringKafkaBuilder() { this("SpringKafkaDefaultHeaders"); } public AsyncHeadersForSpringKafkaBuilder(String schemaName) { - this.headers = new AsyncHeaders(schemaName); + this.headers = new SchemaObject(); + this.headers.setType("object"); + this.headers.setTitle(schemaName); + this.headers.setProperties(new HashMap<>()); } public AsyncHeadersForSpringKafkaBuilder withTypeIdHeader(String exampleTypeId) { @@ -29,17 +32,18 @@ public AsyncHeadersForSpringKafkaBuilder withTypeIdHeader(String exampleTypeId, private AsyncHeadersForSpringKafkaBuilder withHeader( String headerName, List types, String exampleType, String description) { - AsyncHeaderSchema header = AsyncHeaderSchema.headerBuilder() - .headerName(headerName) - .description(description) - .example(exampleType) - .enumValue(types) - .build(); - headers.addHeader(header); + SchemaObject header = new SchemaObject(); + header.setType("string"); + header.setTitle(headerName); + header.setDescription(description); + header.setExamples(List.of(exampleType)); + header.setEnumValues(types); + + headers.getProperties().put(headerName, header); return this; } - public AsyncHeaders build() { - return AsyncHeaders.from(this.headers, this.headers.getSchemaName()); + public SchemaObject build() { + return this.headers; } }