@Override public Schema getLatestSchemaByTopic(String topic) throws SchemaRegistryException { String schemaName = topic + this.schemaNameSuffix; try { return new Schema.Parser().parse(this.schemaRegistryClient.getLatestSchemaMetadata(schemaName).getSchema()); } catch (IOException | RestClientException e) { log.error("Failed to get schema for topic " + topic + "; subject " + schemaName); throw new SchemaRegistryException(e); } }
@Override public Schema getLatestSchemaByTopic(String topic) throws SchemaRegistryException { String schemaName = topic + this.schemaNameSuffix; try { return new Schema.Parser().parse(this.schemaRegistryClient.getLatestSchemaMetadata(schemaName).getSchema()); } catch (IOException | RestClientException e) { log.error("Failed to get schema for topic " + topic + "; subject " + schemaName); throw new SchemaRegistryException(e); } }
@Override public Schema retrieveSchema(TableId table, String topic) { String subject = getSubject(topic); try { logger.debug("Retrieving schema information for topic {} with subject {}", topic, subject); SchemaMetadata latestSchemaMetadata = schemaRegistryClient.getLatestSchemaMetadata(subject); org.apache.avro.Schema avroSchema = new Parser().parse(latestSchemaMetadata.getSchema()); return avroData.toConnectSchema(avroSchema); } catch (IOException | RestClientException exception) { throw new ConnectException(String.format( "Exception while fetching latest schema metadata for topic=%s, subject=%s", topic, subject), exception ); } }
@Override public SchemaReference registerSchema(String subject, String schema) throws SchemaManagerException { SchemaReference schemaReference; try { org.apache.avro.Schema avroSchema = new org.apache.avro.Schema.Parser().parse(schema); int id = schemaRegistryClient.register(subject, avroSchema); int version = schemaRegistryClient.getLatestSchemaMetadata(subject).getVersion(); schemaReference = new SchemaReference(subject, id, version); } catch (IOException | RestClientException | RuntimeException e) { log.error("caught an exception while registering a new schema for subject '{}'", subject); throw new SchemaManagerException(e); } return schemaReference; }
private void downloadSchema(final String url, final String subject) { try { final SchemaMetadata metadata = RegistryClientSingleton .getInstance().client(url).getLatestSchemaMetadata(subject); writeSchemas(subject, metadata.getSchema()); } catch (IOException | RestClientException e) { e.printStackTrace(); } }
SchemaMetadata metadata = schemaRegistry.getLatestSchemaMetadata(subject); latestSchema = new Schema.Parser().parse(metadata.getSchema()); latestVersion = metadata.getVersion();
@Test public void testRetrieveSchema() throws Exception { final TableId table = TableId.of("test", "kafka_topic"); final String testTopic = "kafka-topic"; final String testSubject = "kafka-topic-value"; final String testAvroSchemaString = "{\"type\": \"record\", " + "\"name\": \"testrecord\", " + "\"fields\": [{\"name\": \"f1\", \"type\": \"string\"}]}"; final SchemaMetadata testSchemaMetadata = new SchemaMetadata(1, 1, testAvroSchemaString); SchemaRegistryClient schemaRegistryClient = mock(SchemaRegistryClient.class); when(schemaRegistryClient.getLatestSchemaMetadata(testSubject)).thenReturn(testSchemaMetadata); SchemaRegistrySchemaRetriever testSchemaRetriever = new SchemaRegistrySchemaRetriever( schemaRegistryClient, new AvroData(0) ); Schema expectedKafkaConnectSchema = SchemaBuilder.struct().field("f1", Schema.STRING_SCHEMA).name("testrecord").build(); assertEquals(expectedKafkaConnectSchema, testSchemaRetriever.retrieveSchema(table, testTopic)); } }