use of io.confluent.kafka.schemaregistry.SchemaProvider in project kafka-rest by confluentinc.
the class SchemaManagerImpl method findLatestSchema.
private RegisteredSchema findLatestSchema(String topicName, Optional<String> subject, Optional<SubjectNameStrategy> subjectNameStrategy, boolean isKey) {
String actualSubject = subject.orElse(getSchemaSubjectUnsafe(topicName, isKey, subjectNameStrategy));
SchemaMetadata metadata;
try {
metadata = schemaRegistryClient.getLatestSchemaMetadata(actualSubject);
} catch (IOException | RestClientException e) {
throw Errors.messageSerializationException(String.format("Error when fetching latest schema version. subject = %s", actualSubject), e);
}
SchemaProvider schemaProvider;
try {
schemaProvider = EmbeddedFormat.forSchemaType(metadata.getSchemaType()).getSchemaProvider();
} catch (UnsupportedOperationException e) {
throw new BadRequestException(String.format("Schema subject not supported for schema type = %s", metadata.getSchemaType()), e);
}
ParsedSchema schema;
try {
schema = schemaProvider.parseSchema(metadata.getSchema(), metadata.getReferences(), /* isNew= */
false).orElseThrow(() -> Errors.invalidSchemaException(String.format("Error when fetching latest schema version. subject = %s", actualSubject)));
} catch (SchemaParseException e) {
throw new BadRequestException(String.format("Error parsing schema type = %s", metadata.getSchemaType()), e);
}
return RegisteredSchema.create(actualSubject, metadata.getId(), metadata.getVersion(), schema);
}
use of io.confluent.kafka.schemaregistry.SchemaProvider in project kafka-rest by confluentinc.
the class SchemaManagerImplTest method errorRawSchemaNotSupportedWithSchema.
@Test
public void errorRawSchemaNotSupportedWithSchema() {
EmbeddedFormat embeddedFormatMock = mock(EmbeddedFormat.class);
SchemaProvider schemaProviderMock = mock(SchemaProvider.class);
expect(embeddedFormatMock.requiresSchema()).andReturn(true);
expect(embeddedFormatMock.getSchemaProvider()).andThrow(new UnsupportedOperationException("Reason here"));
expect(schemaProviderMock.parseSchema(TextNode.valueOf("rawSchema").toString(), emptyList(), true)).andReturn(Optional.empty());
replay(embeddedFormatMock, schemaProviderMock);
BadRequestException bre = assertThrows(BadRequestException.class, () -> schemaManager.getSchema(TOPIC_NAME, /* format= */
Optional.of(embeddedFormatMock), /* subject= */
Optional.empty(), /* subjectNameStrategy= */
Optional.empty(), /* schemaId= */
Optional.empty(), /* schemaVersion= */
Optional.empty(), /* rawSchema= */
Optional.of(TextNode.valueOf("rawSchema").toString()), /* isKey= */
true));
assertEquals("Raw schema not supported with format = EasyMock for class io.confluent.kafkarest.entities.EmbeddedFormat", bre.getMessage());
assertEquals(400, bre.getCode());
}
use of io.confluent.kafka.schemaregistry.SchemaProvider in project kafka-rest by confluentinc.
the class SchemaManagerImplTest method errorRegisteringSchema.
@Test
public void errorRegisteringSchema() throws RestClientException, IOException {
SchemaRegistryClient schemaRegistryClientMock = mock(SchemaRegistryClient.class);
ParsedSchema parsedSchemaMock = mock(ParsedSchema.class);
EmbeddedFormat embeddedFormatMock = mock(EmbeddedFormat.class);
SchemaProvider schemaProviderMock = mock(SchemaProvider.class);
expect(embeddedFormatMock.requiresSchema()).andReturn(true);
expect(embeddedFormatMock.getSchemaProvider()).andReturn(schemaProviderMock);
expect(schemaProviderMock.parseSchema(TextNode.valueOf("rawString").toString(), emptyList(), true)).andReturn(Optional.of(parsedSchemaMock));
expect(schemaRegistryClientMock.getId("subject1", parsedSchemaMock)).andThrow(new IOException("Can't get Schema"));
expect(schemaRegistryClientMock.register("subject1", parsedSchemaMock)).andThrow(new IOException("Can't register Schema"));
replay(schemaRegistryClientMock, embeddedFormatMock, schemaProviderMock);
SchemaManager mySchemaManager = new SchemaManagerImpl(schemaRegistryClientMock, new TopicNameStrategy());
RestConstraintViolationException rcve = assertThrows(RestConstraintViolationException.class, () -> mySchemaManager.getSchema(TOPIC_NAME, /* format= */
Optional.of(embeddedFormatMock), /* subject= */
Optional.of("subject1"), /* subjectNameStrategy= */
Optional.empty(), /* schemaId= */
Optional.empty(), /* schemaVersion= */
Optional.empty(), /* rawSchema= */
Optional.of(TextNode.valueOf("rawString").toString()), /* isKey= */
true));
assertEquals("Error serializing message. Error when registering schema. format = EasyMock for class io.confluent.kafkarest.entities.EmbeddedFormat, subject = subject1, schema = null\n" + "Can't register Schema", rcve.getMessage());
assertEquals(42207, rcve.getErrorCode());
}
use of io.confluent.kafka.schemaregistry.SchemaProvider in project kafka-rest by confluentinc.
the class SchemaManagerImplTest method errorRawSchemaCantParseSchema.
@Test
public void errorRawSchemaCantParseSchema() {
SchemaRegistryClient schemaRegistryClientMock = mock(SchemaRegistryClient.class);
EmbeddedFormat embeddedFormatMock = mock(EmbeddedFormat.class);
SchemaProvider schemaProviderMock = mock(SchemaProvider.class);
expect(embeddedFormatMock.requiresSchema()).andReturn(true);
expect(embeddedFormatMock.getSchemaProvider()).andThrow(new UnsupportedOperationException("Unsupported"));
replay(embeddedFormatMock, schemaProviderMock, schemaRegistryClientMock);
SchemaManager mySchemaManager = new SchemaManagerImpl(schemaRegistryClientMock, new TopicNameStrategy());
BadRequestException rcve = assertThrows(BadRequestException.class, () -> mySchemaManager.getSchema(TOPIC_NAME, /* format= */
Optional.of(embeddedFormatMock), /* subject= */
Optional.empty(), /* subjectNameStrategy= */
Optional.empty(), /* schemaId= */
Optional.empty(), /* schemaVersion= */
Optional.empty(), /* rawSchema= */
Optional.of(TextNode.valueOf("rawSchema").toString()), /* isKey= */
true));
assertEquals("Raw schema not supported with format = EasyMock for class io.confluent.kafkarest.entities.EmbeddedFormat", rcve.getMessage());
assertEquals(400, rcve.getCode());
}
use of io.confluent.kafka.schemaregistry.SchemaProvider in project schema-registry by confluentinc.
the class KafkaSchemaRegistry method registerProviders.
private void registerProviders(Map<String, SchemaProvider> providerMap, List<SchemaProvider> schemaProviders) {
for (SchemaProvider schemaProvider : schemaProviders) {
log.info("Registering schema provider for {}: {}", schemaProvider.schemaType(), schemaProvider.getClass().getName());
providerMap.put(schemaProvider.schemaType(), schemaProvider);
}
}
Aggregations