{"record":{"id":"7199ca711af2bba2","repo":"grpc/grpc-java","slug":"could-not-find-a-nameresolverprovider-for-s-s","errorCode":null,"errorMessage":"Could not find a NameResolverProvider for %s%s","messagePattern":"Could not find a NameResolverProvider for (.+?)(.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java","lineNumber":948,"sourceCode":"      // the provider's default scheme (if provider is specified).\n      String scheme = nameResolverProvider != null\n          ? nameResolverProvider.getScheme()\n          : nameResolverRegistry.getDefaultScheme();\n      try {\n        targetUri = new URI(scheme, \"\", \"/\" + target, null);\n      } catch (URISyntaxException e) {\n        // Should not be possible\n        throw new IllegalArgumentException(e);\n      }\n      if (nameResolverProvider != null) {\n        provider = nameResolverProvider;\n      } else {\n        provider = nameResolverRegistry.getProviderForScheme(targetUri.getScheme());\n      }\n    }\n\n    if (provider == null) {\n      throw new IllegalArgumentException(String.format(\n          \"Could not find a NameResolverProvider for %s%s\",\n          target, uriSyntaxErrors.length() > 0 ? \" (\" + uriSyntaxErrors + \")\" : \"\"));\n    }\n\n    return new ResolvedNameResolver(wrap(targetUri), provider);\n  }\n\n  @VisibleForTesting\n  static ResolvedNameResolver getNameResolverProviderRfc3986(\n      String target, NameResolverRegistry nameResolverRegistry,\n      NameResolverProvider nameResolverProvider) {\n    // Finding a NameResolver. Try using the target string as the URI. If that fails, try prepending\n    // \"dns:///\".\n    NameResolverProvider provider = null;\n    Uri targetUri = null;\n    StringBuilder uriSyntaxErrors = new StringBuilder();\n    try {\n      targetUri = Uri.parse(target);","sourceCodeStart":930,"sourceCodeEnd":966,"githubUrl":"https://github.com/grpc/grpc-java/blob/64daddc1f3d1975670f769f3e97bde8b2ba32d25/core/src/main/java/io/grpc/internal/ManagedChannelImplBuilder.java#L930-L966","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"// before\nManagedChannel c = ManagedChannelBuilder.forTarget(\"foo://myhost:50051\").build();\n// after\nManagedChannel c = ManagedChannelBuilder.forTarget(\"dns:///myhost:50051\").build();","handlingStrategy":"validation","validationCode":"NameResolverProvider p = NameResolverRegistry.getDefaultRegistry().getProviderForScheme(uri.getScheme());\nif (p == null) throw new IllegalArgumentException(\"No NameResolverProvider for scheme \" + uri.getScheme());","typeGuard":null,"tryCatchPattern":"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; }","preventionTips":["Prefix targets with a known scheme like dns:///","Register custom NameResolverProviders at startup before building channels","Keep resolver provider jars on the runtime classpath"],"tags":["grpc","name-resolver","illegal-argument","uri"],"backgroundTag":"resource-not-found","analyzedSha":"64daddc1f3d1975670f769f3e97bde8b2ba32d25","analyzedAt":"2026-09-08T06:14:57.704Z","contentChangedAt":"2026-09-08T06:14:57.704Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}