public <T> SchemaProvider getSchemaProvider(TypeDescriptor<T> typeDescriptor)
      throws NoSuchSchemaException {
    for (SchemaProvider provider : providers) {
      Schema schema = provider.schemaFor(typeDescriptor);
      if (schema != null) {
        return provider;
      }
    }
    throw new NoSuchSchemaException();
  }
@Test
  public void testGetSchemaProvider() throws NoSuchSchemaException {
    SchemaRegistry registry = SchemaRegistry.createDefault();

    SchemaProvider testDefaultSchemaProvider =
        registry.getSchemaProvider(TestDefaultSchemaClass.class);
    assertEquals(DefaultSchemaProvider.class, testDefaultSchemaProvider.getClass());
    assertEquals(
        TestDefaultSchemaProvider.class,
        ((DefaultSchemaProvider) testDefaultSchemaProvider)
            .getUnderlyingSchemaProvider(TestDefaultSchemaClass.class)
            .getClass());

    SchemaProvider autoValueSchemaProvider = registry.getSchemaProvider(TestAutoValue.class);
    assertEquals(DefaultSchemaProvider.class, autoValueSchemaProvider.getClass());
    assertEquals(
        AutoValueSchema.class,
        ((DefaultSchemaProvider) autoValueSchemaProvider)
            .getUnderlyingSchemaProvider(TestAutoValue.class)
            .getClass());

    SchemaProvider simpleBeanSchemaProvider = registry.getSchemaProvider(SimpleBean.class);
    assertEquals(DefaultSchemaProvider.class, simpleBeanSchemaProvider.getClass());
    assertEquals(
        JavaBeanSchema.class,
        ((DefaultSchemaProvider) simpleBeanSchemaProvider)
            .getUnderlyingSchemaProvider(SimpleBean.class)
            .getClass());
  }