From 5429e0f9b3410ab8416b3771cda949452955d834 Mon Sep 17 00:00:00 2001 From: iliax Date: Wed, 26 Apr 2023 21:57:44 +0400 Subject: [PATCH] wip --- .../kafka/ui/mapper/KafkaSrMapper.java | 8 +++++- .../builtin/sr/SchemaRegistrySerde.java | 4 ++- .../ui/service/SchemaRegistryService.java | 3 +-- .../main/resources/swagger/kafka-sr-api.yaml | 4 +++ .../main/resources/swagger/kafka-ui-api.yaml | 25 +++++++++++++++++-- 5 files changed, 38 insertions(+), 6 deletions(-) diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaSrMapper.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaSrMapper.java index ea3435d4aa..9a5f68cbd1 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaSrMapper.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/mapper/KafkaSrMapper.java @@ -3,18 +3,21 @@ package com.provectus.kafka.ui.mapper; import com.provectus.kafka.ui.model.CompatibilityCheckResponseDTO; import com.provectus.kafka.ui.model.CompatibilityLevelDTO; import com.provectus.kafka.ui.model.NewSchemaSubjectDTO; +import com.provectus.kafka.ui.model.SchemaReferenceDTO; import com.provectus.kafka.ui.model.SchemaSubjectDTO; import com.provectus.kafka.ui.model.SchemaTypeDTO; import com.provectus.kafka.ui.service.SchemaRegistryService; import com.provectus.kafka.ui.sr.model.Compatibility; import com.provectus.kafka.ui.sr.model.CompatibilityCheckResponse; import com.provectus.kafka.ui.sr.model.NewSubject; +import com.provectus.kafka.ui.sr.model.SchemaReference; import com.provectus.kafka.ui.sr.model.SchemaType; +import java.util.List; import java.util.Optional; import org.mapstruct.Mapper; -@Mapper(componentModel = "spring") +@Mapper public interface KafkaSrMapper { default SchemaSubjectDTO toDto(SchemaRegistryService.SubjectWithCompatibilityLevel s) { @@ -24,9 +27,12 @@ public interface KafkaSrMapper { .subject(s.getSubject()) .schema(s.getSchema()) .schemaType(SchemaTypeDTO.fromValue(Optional.ofNullable(s.getSchemaType()).orElse(SchemaType.AVRO).getValue())) + .references(toDto(s.getReferences())) .compatibilityLevel(s.getCompatibility().toString()); } + List toDto(List references); + CompatibilityCheckResponseDTO toDto(CompatibilityCheckResponse ccr); CompatibilityLevelDTO.CompatibilityEnum toDto(Compatibility compatibility); diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/builtin/sr/SchemaRegistrySerde.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/builtin/sr/SchemaRegistrySerde.java index fd5985e20c..08cc3b9d11 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/builtin/sr/SchemaRegistrySerde.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/builtin/sr/SchemaRegistrySerde.java @@ -20,6 +20,7 @@ import io.confluent.kafka.schemaregistry.client.SchemaMetadata; import io.confluent.kafka.schemaregistry.client.SchemaRegistryClient; import io.confluent.kafka.schemaregistry.client.SchemaRegistryClientConfig; import io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException; +import io.confluent.kafka.schemaregistry.json.JsonSchema; import io.confluent.kafka.schemaregistry.json.JsonSchemaProvider; import io.confluent.kafka.schemaregistry.protobuf.ProtobufSchema; import io.confluent.kafka.schemaregistry.protobuf.ProtobufSchemaProvider; @@ -218,7 +219,8 @@ public class SchemaRegistrySerde implements BuiltInSerde { .convert(basePath, ((AvroSchema) schemaById).rawSchema()) .toJson(); case JSON: - return schema.getSchema(); + //need to create confluent JsonSchema object to resolve references + return ((JsonSchema) schemaById).rawSchema().toString(); default: throw new IllegalStateException(); } diff --git a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java index f98bb5d376..99f8af588f 100644 --- a/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java +++ b/kafka-ui-api/src/main/java/com/provectus/kafka/ui/service/SchemaRegistryService.java @@ -14,8 +14,7 @@ import com.provectus.kafka.ui.sr.model.CompatibilityLevelChange; import com.provectus.kafka.ui.sr.model.NewSubject; import com.provectus.kafka.ui.sr.model.SchemaSubject; import com.provectus.kafka.ui.util.ReactiveFailover; -import com.provectus.kafka.ui.util.WebClientConfigurator; -import java.io.IOException; +import java.nio.charset.Charset; import java.util.List; import java.util.stream.Collectors; import lombok.AllArgsConstructor; diff --git a/kafka-ui-contract/src/main/resources/swagger/kafka-sr-api.yaml b/kafka-ui-contract/src/main/resources/swagger/kafka-sr-api.yaml index 84ee36b48d..354b19996e 100644 --- a/kafka-ui-contract/src/main/resources/swagger/kafka-sr-api.yaml +++ b/kafka-ui-contract/src/main/resources/swagger/kafka-sr-api.yaml @@ -317,6 +317,10 @@ components: type: string schemaType: $ref: '#/components/schemas/SchemaType' + references: + type: array + items: + $ref: '#/components/schemas/SchemaReference' required: - id - subject diff --git a/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml b/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml index 78c7cf3bf5..f419800f59 100644 --- a/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml +++ b/kafka-ui-contract/src/main/resources/swagger/kafka-ui-api.yaml @@ -2745,6 +2745,10 @@ components: type: string schemaType: $ref: '#/components/schemas/SchemaType' + references: + type: array + items: + $ref: '#/components/schemas/SchemaReference' required: - id - subject @@ -2762,13 +2766,30 @@ components: schema: type: string schemaType: - $ref: '#/components/schemas/SchemaType' - # upon updating a schema, the type of existing schema can't be changed + $ref: '#/components/schemas/SchemaType' # upon updating a schema, the type of existing schema can't be changed + references: + type: array + items: + $ref: '#/components/schemas/SchemaReference' required: - subject - schema - schemaType + SchemaReference: + type: object + properties: + name: + type: string + subject: + type: string + version: + type: integer + required: + - name + - subject + - version + CompatibilityLevel: type: object properties: