diff --git a/api/src/main/java/io/grpc/NameResolverProvider.java b/api/src/main/java/io/grpc/NameResolverProvider.java index e7cddfc36d0..13cd750c36d 100644 --- a/api/src/main/java/io/grpc/NameResolverProvider.java +++ b/api/src/main/java/io/grpc/NameResolverProvider.java @@ -61,6 +61,8 @@ public abstract class NameResolverProvider extends NameResolver.Factory { * delegates to {@link Factory#getDefaultScheme()} before {@link NameResolver.Factory} is * deprecated in https://github.com/grpc/grpc-java/issues/7133. * + *

The scheme should be lower-case. + * * @since 1.40.0 * */ protected String getScheme() { diff --git a/api/src/main/java/io/grpc/NameResolverRegistry.java b/api/src/main/java/io/grpc/NameResolverRegistry.java index ab8a1e803eb..37dd9283297 100644 --- a/api/src/main/java/io/grpc/NameResolverRegistry.java +++ b/api/src/main/java/io/grpc/NameResolverRegistry.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -162,7 +163,11 @@ private final class NameResolverFactory extends NameResolver.Factory { @Override @Nullable public NameResolver newNameResolver(URI targetUri, NameResolver.Args args) { - NameResolverProvider provider = providers().get(targetUri.getScheme()); + String scheme = targetUri.getScheme(); + if (scheme == null) { + return null; + } + NameResolverProvider provider = providers().get(scheme.toLowerCase(Locale.US)); return provider == null ? null : provider.newNameResolver(targetUri, args); } diff --git a/api/src/test/java/io/grpc/NameResolverRegistryTest.java b/api/src/test/java/io/grpc/NameResolverRegistryTest.java index 55e43128109..19ae09520dd 100644 --- a/api/src/test/java/io/grpc/NameResolverRegistryTest.java +++ b/api/src/test/java/io/grpc/NameResolverRegistryTest.java @@ -183,8 +183,12 @@ public NameResolver newNameResolver(URI passedUri, NameResolver.Args passedArgs) }); assertThat(registry.asFactory().newNameResolver(uri, args)).isNull(); + assertThat(registry.asFactory().newNameResolver(URI.create("/0.0.0.0:80"), args)).isNull(); + assertThat(registry.asFactory().newNameResolver(URI.create("///0.0.0.0:80"), args)).isNull(); assertThat(registry.asFactory().newNameResolver(URI.create("other:///0.0.0.0:80"), args)) .isSameInstanceAs(nr); + assertThat(registry.asFactory().newNameResolver(URI.create("OTHER:///0.0.0.0:80"), args)) + .isSameInstanceAs(nr); assertThat(registry.asFactory().getDefaultScheme()).isEqualTo("dns"); }