Package com.linkedin.camus.schemaregistry

Source Code of com.linkedin.camus.schemaregistry.AvroRestSchemaRegistry

package com.linkedin.camus.schemaregistry;

import java.util.Properties;

import org.apache.avro.Schema;
import org.apache.avro.repo.SchemaEntry;
import org.apache.avro.repo.SchemaValidationException;
import org.apache.avro.repo.Subject;
import org.apache.avro.repo.client.RESTRepositoryClient;
import org.apache.hadoop.conf.Configuration;

/**
* An implementation of SchemaRegistry that uses Avro's schema registry to
* manage Avro schemas.
*/
public class AvroRestSchemaRegistry implements SchemaRegistry<Schema> {
  private RESTRepositoryClient client;
  public static final String ETL_SCHEMA_REGISTRY_URL = "etl.schema.registry.url";
 
   @Override
  public void init(Properties props) {
       client = new RESTRepositoryClient(props.getProperty(ETL_SCHEMA_REGISTRY_URL));
  }

  @Override
  public String register(String topic, Schema schema) {
    Subject subject = client.lookup(topic);

    if (subject == null) {
      subject = client.register(topic, "org.apache.avro.repo.Validator");
    }

    try {
      return subject.register(schema.toString()).getId();
    } catch (SchemaValidationException e) {
      throw new SchemaRegistryException(e);
    }
  }

  @Override
  public Schema getSchemaByID(String topic, String id) {
    Subject subject = client.lookup(topic);

    if (subject == null) {
      throw new SchemaNotFoundException("Schema not found for " + topic);
    }

    SchemaEntry entry = subject.lookupById(id);

    if (entry == null)
      throw new SchemaNotFoundException("Schema not found for " + topic
          + " " + id);

    return Schema.parse(entry.getSchema());
  }

  @Override
  public SchemaDetails<Schema> getLatestSchemaByTopic(String topicName) {
    Subject subject = client.lookup(topicName);

    if (subject == null) {
      throw new SchemaNotFoundException("Schema not found for "
          + topicName);
    }

    SchemaEntry entry = subject.latest();

    if (entry == null)
      throw new SchemaNotFoundException("Schema not found for "
          + topicName);

    return new SchemaDetails<Schema>(topicName, entry.getId(),
        Schema.parse(entry.getSchema()));
  }
}
TOP

Related Classes of com.linkedin.camus.schemaregistry.AvroRestSchemaRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.