Search in sources :

Example 6 with RegisteredSchema

use of io.confluent.kafkarest.entities.RegisteredSchema in project kafka-rest by confluentinc.

the class SchemaManagerImplTest method getSchema_avro_schemaId_subject.

@Test
public void getSchema_avro_schemaId_subject() throws Exception {
    String subject = "my-subject";
    ParsedSchema schema = new AvroSchema("{\"type\": \"int\"}");
    int schemaId = schemaRegistryClient.register(subject, schema);
    int schemaVersion = schemaRegistryClient.getVersion(subject, schema);
    RegisteredSchema actual = schemaManager.getSchema(TOPIC_NAME, /* format= */
    Optional.empty(), /* subject= */
    Optional.of(subject), /* subjectNameStrategy= */
    Optional.empty(), /* schemaId= */
    Optional.of(schemaId), /* schemaVersion= */
    Optional.empty(), /* rawSchema= */
    Optional.empty(), /* isKey= */
    true);
    assertEquals(RegisteredSchema.create(subject, schemaId, schemaVersion, schema), actual);
}
Also used : RegisteredSchema(io.confluent.kafkarest.entities.RegisteredSchema) AvroSchema(io.confluent.kafka.schemaregistry.avro.AvroSchema) ParsedSchema(io.confluent.kafka.schemaregistry.ParsedSchema) Test(org.junit.jupiter.api.Test)

Example 7 with RegisteredSchema

use of io.confluent.kafkarest.entities.RegisteredSchema in project kafka-rest by confluentinc.

the class SchemaManagerImplTest method getSchema_avro_schemaId_subjectNameStrategy.

@Test
public void getSchema_avro_schemaId_subjectNameStrategy() throws Exception {
    ParsedSchema schema = new AvroSchema("{\"type\": \"int\"}");
    SubjectNameStrategy strategy = new MySubjectNameStrategy();
    String subject = strategy.subjectName(TOPIC_NAME, /* isKey= */
    true, /* schema= */
    null);
    int schemaId = schemaRegistryClient.register(subject, schema);
    int schemaVersion = schemaRegistryClient.getVersion(subject, schema);
    RegisteredSchema actual = schemaManager.getSchema(TOPIC_NAME, /* format= */
    Optional.empty(), /* subject= */
    Optional.empty(), /* subjectNameStrategy= */
    Optional.of(strategy), /* schemaId= */
    Optional.of(schemaId), /* schemaVersion= */
    Optional.empty(), /* rawSchema= */
    Optional.empty(), /* isKey= */
    true);
    assertEquals(RegisteredSchema.create(subject, schemaId, schemaVersion, schema), actual);
}
Also used : RegisteredSchema(io.confluent.kafkarest.entities.RegisteredSchema) AvroSchema(io.confluent.kafka.schemaregistry.avro.AvroSchema) SubjectNameStrategy(io.confluent.kafka.serializers.subject.strategy.SubjectNameStrategy) ParsedSchema(io.confluent.kafka.schemaregistry.ParsedSchema) Test(org.junit.jupiter.api.Test)

Example 8 with RegisteredSchema

use of io.confluent.kafkarest.entities.RegisteredSchema in project kafka-rest by confluentinc.

the class SchemaManagerImplTest method getSchema_avro_rawSchema_subject.

@Test
public void getSchema_avro_rawSchema_subject() throws Exception {
    String subject = "my-subject";
    RegisteredSchema actual = schemaManager.getSchema(TOPIC_NAME, /* format= */
    Optional.of(EmbeddedFormat.AVRO), /* subject= */
    Optional.of(subject), /* subjectNameStrategy= */
    Optional.empty(), /* schemaId= */
    Optional.empty(), /* schemaVersion= */
    Optional.empty(), /* rawSchema= */
    Optional.of("{\"type\": \"int\"}"), /* isKey= */
    true);
    ParsedSchema schema = schemaRegistryClient.getSchemaById(actual.getSchemaId());
    int schemaId = schemaRegistryClient.getId(subject, schema);
    int schemaVersion = schemaRegistryClient.getVersion(subject, schema);
    assertEquals(RegisteredSchema.create(subject, schemaId, schemaVersion, schema), actual);
}
Also used : RegisteredSchema(io.confluent.kafkarest.entities.RegisteredSchema) ParsedSchema(io.confluent.kafka.schemaregistry.ParsedSchema) Test(org.junit.jupiter.api.Test)

Example 9 with RegisteredSchema

use of io.confluent.kafkarest.entities.RegisteredSchema in project kafka-rest by confluentinc.

the class SchemaManagerImplTest method getSchema_protobuf_rawSchema.

@Test
public void getSchema_protobuf_rawSchema() throws Exception {
    RegisteredSchema actual = schemaManager.getSchema(TOPIC_NAME, /* format= */
    Optional.of(EmbeddedFormat.PROTOBUF), /* subject= */
    Optional.empty(), /* subjectNameStrategy= */
    Optional.empty(), /* schemaId= */
    Optional.empty(), /* schemaVersion= */
    Optional.empty(), /* rawSchema= */
    Optional.of("syntax = \"proto3\"; message MyKey { string foo = 1; }"), /* isKey= */
    true);
    ParsedSchema schema = schemaRegistryClient.getSchemaById(actual.getSchemaId());
    int schemaId = schemaRegistryClient.getId(KEY_SUBJECT, schema);
    int schemaVersion = schemaRegistryClient.getVersion(KEY_SUBJECT, schema);
    assertEquals(RegisteredSchema.create(KEY_SUBJECT, schemaId, schemaVersion, schema), actual);
}
Also used : RegisteredSchema(io.confluent.kafkarest.entities.RegisteredSchema) ParsedSchema(io.confluent.kafka.schemaregistry.ParsedSchema) Test(org.junit.jupiter.api.Test)

Example 10 with RegisteredSchema

use of io.confluent.kafkarest.entities.RegisteredSchema in project kafka-rest by confluentinc.

the class SchemaManagerImpl method getSchemaFromSchemaVersion.

private RegisteredSchema getSchemaFromSchemaVersion(String topicName, Optional<String> subject, Optional<SubjectNameStrategy> subjectNameStrategy, int schemaVersion, boolean isKey) {
    String actualSubject = subject.orElse(getSchemaSubjectUnsafe(topicName, isKey, subjectNameStrategy));
    Schema schema;
    try {
        schema = schemaRegistryClient.getByVersion(actualSubject, schemaVersion, /* lookupDeletedSchema= */
        false);
    } catch (RuntimeException e) {
        throw new BadRequestException(String.format("Schema does not exist for subject: %s, version: %s", actualSubject, schemaVersion), e);
    }
    SchemaProvider schemaProvider;
    try {
        schemaProvider = EmbeddedFormat.forSchemaType(schema.getSchemaType()).getSchemaProvider();
    } catch (UnsupportedOperationException e) {
        throw new BadRequestException(String.format("Schema version not supported for %s", schema.getSchemaType()), e);
    }
    ParsedSchema parsedSchema;
    try {
        parsedSchema = schemaProvider.parseSchema(schema.getSchema(), schema.getReferences(), /* isNew= */
        false).orElseThrow(() -> Errors.invalidSchemaException(String.format("Error when fetching schema by version. subject = %s, version = %d", actualSubject, schemaVersion)));
    } catch (SchemaParseException e) {
        throw new BadRequestException(String.format("Error parsing schema for %s", schema.getSchemaType()), e);
    }
    return RegisteredSchema.create(schema.getSubject(), schema.getId(), schemaVersion, parsedSchema);
}
Also used : SchemaParseException(org.apache.avro.SchemaParseException) ParsedSchema(io.confluent.kafka.schemaregistry.ParsedSchema) Schema(io.confluent.kafka.schemaregistry.client.rest.entities.Schema) RegisteredSchema(io.confluent.kafkarest.entities.RegisteredSchema) BadRequestException(io.confluent.kafkarest.exceptions.BadRequestException) SchemaProvider(io.confluent.kafka.schemaregistry.SchemaProvider) ParsedSchema(io.confluent.kafka.schemaregistry.ParsedSchema)

Aggregations

RegisteredSchema (io.confluent.kafkarest.entities.RegisteredSchema)18 ParsedSchema (io.confluent.kafka.schemaregistry.ParsedSchema)16 Test (org.junit.jupiter.api.Test)15 AvroSchema (io.confluent.kafka.schemaregistry.avro.AvroSchema)10 SubjectNameStrategy (io.confluent.kafka.serializers.subject.strategy.SubjectNameStrategy)4 ByteString (com.google.protobuf.ByteString)2 BadRequestException (io.confluent.kafkarest.exceptions.BadRequestException)2 Instant (java.time.Instant)2 MappingIterator (com.fasterxml.jackson.databind.MappingIterator)1 NullNode (com.fasterxml.jackson.databind.node.NullNode)1 ImmutableMultimap (com.google.common.collect.ImmutableMultimap)1 SchemaProvider (io.confluent.kafka.schemaregistry.SchemaProvider)1 Schema (io.confluent.kafka.schemaregistry.client.rest.entities.Schema)1 Errors (io.confluent.kafkarest.Errors)1 ProducerMetrics (io.confluent.kafkarest.ProducerMetrics)1 ProducerMetricsRegistry (io.confluent.kafkarest.ProducerMetricsRegistry)1 TestUtils.assertOKResponse (io.confluent.kafkarest.TestUtils.assertOKResponse)1 ProduceController (io.confluent.kafkarest.controllers.ProduceController)1 RecordSerializer (io.confluent.kafkarest.controllers.RecordSerializer)1 SchemaManager (io.confluent.kafkarest.controllers.SchemaManager)1