grpc/grpc-java · error · IllegalArgumentException
Could not find a NameResolverProvider for %s%s
Error message
Could not find a NameResolverProvider for %s%s
What it means
When building a channel from a target string with a URI-style scheme, gRPC looks up a NameResolverProvider registered for the target URI's scheme. If the URI parses but no provider is registered for that scheme, the builder throws this IllegalArgumentException.
Source
Thrown at core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java:948
// the provider's default scheme (if provider is specified).
String scheme = nameResolverProvider != null
? nameResolverProvider.getScheme()
: nameResolverRegistry.getDefaultScheme();
try {
targetUri = new URI(scheme, "", "/" + target, null);
} catch (URISyntaxException e) {
// Should not be possible
throw new IllegalArgumentException(e);
}
if (nameResolverProvider != null) {
provider = nameResolverProvider;
} else {
provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme());
}
}
if (provider == null) {
throw new IllegalArgumentException(String.format(
"Could not find a NameResolverProvider for %s%s",
target, uriSyntaxErrors.length() > 0 ? " (" + uriSyntaxErrors + ")" : ""));
}
return new ResolvedNameResolver(wrap(targetUri), provider);
}
@VisibleForTesting
static ResolvedNameResolver getNameResolverProviderRfc3986(
String target, NameResolverRegistry nameResolverRegistry,
NameResolverProvider nameResolverProvider) {
// Finding a NameResolver. Try using the target string as the URI. If that fails, try prepending
// "dns:///".
NameResolverProvider provider = null;
Uri targetUri = null;
StringBuilder uriSyntaxErrors = new StringBuilder();
try {
targetUri = Uri.parse(target);View on GitHub (pinned to 64daddc1f3)
Solutions
- Fix the target string's scheme (e.g. use "dns:///host:port") or drop the scheme to use the default resolver
- Register the NameResolverProvider in NameResolverRegistry.getDefaultRegistry() before building the channel
- Add the missing provider dependency to the classpath (e.g. grpc-services for dns)
- Fix URI syntax errors reported in parentheses in the message
Example fix
// before
ManagedChannel c = ManagedChannelBuilder.forTarget("foo://myhost:50051").build();
// after
ManagedChannel c = ManagedChannelBuilder.forTarget("dns:///myhost:50051").build(); Defensive patterns
Strategy: validation
Validate before calling
NameResolverProvider p = NameResolverRegistry.getDefaultRegistry().getProviderForScheme(uri.getScheme());
if (p == null) throw new IllegalArgumentException("No NameResolverProvider for scheme " + uri.getScheme()); Try / catch
try { channel = ManagedChannelBuilder.forTarget(target).build(); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith("Could not find a NameResolverProvider")) { /* fix target or register provider */ } else throw e; } Prevention
- Prefix targets with a known scheme like dns:///
- Register custom NameResolverProviders at startup before building channels
- Keep resolver provider jars on the runtime classpath
When it happens
Trigger: ChannelBuilder.forTarget("foo://host:port") (or nameResolverFactory usage) where targetUri.getScheme() has no registered NameResolverProvider, or provider lookup returned null after URI parsing with syntax errors appended.
Common situations: Typo in scheme (e.g. "dns3://"), relying on a name-resolver provider (like dns) not on the classpath, custom resolver provider never registered in NameResolverRegistry, shaded jars hiding META-INF/services entries.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- Address types of NameResolver '%s' for '%s' not supported by
- Invalid host or port:
- ChannelLogger is not set in Builder
- NameResolverRegistry is not set in Builder
- Invalid authority:
AI-assisted analysis of grpc/grpc-java@64daddc1f3 (2026-09-08).
Data as JSON: /api/errors/7199ca711af2bba2.
Report an issue: GitHub.