@@ -762,7 +762,7 @@ public ManagedChannel build() {
762762 clientTransportFactoryBuilder .buildClientTransportFactory ();
763763 ResolvedNameResolver resolvedResolver =
764764 InternalFeatureFlags .getRfc3986UrisEnabled ()
765- ? getNameResolverProviderRfc3986 (target , nameResolverRegistry )
765+ ? getNameResolverProviderRfc3986 (target , nameResolverRegistry , nameResolverProvider )
766766 : getNameResolverProvider (target , nameResolverRegistry , nameResolverProvider );
767767 resolvedResolver .checkAddressTypes (clientTransportFactory .getSupportedSocketAddressTypes ());
768768 return new ManagedChannelOrphanWrapper (new ManagedChannelImpl (
@@ -902,7 +902,7 @@ static ResolvedNameResolver getNameResolverProvider(
902902 // parsed as the scheme. Will hit the next case and try "dns:///localhost:8080".
903903 // Use the explicit provider if its scheme matches the target URI.
904904 if (nameResolverProvider != null
905- && targetUri .getScheme ().equals (nameResolverProvider .getDefaultScheme ())) {
905+ && targetUri .getScheme ().equals (nameResolverProvider .getScheme ())) {
906906 provider = nameResolverProvider ;
907907 } else {
908908 provider = nameResolverRegistry .getProviderForScheme (targetUri .getScheme ());
@@ -914,7 +914,7 @@ static ResolvedNameResolver getNameResolverProvider(
914914 // the default scheme from the registry (if provider is not specified) or
915915 // the provider's default scheme (if provider is specified).
916916 String scheme = nameResolverProvider != null
917- ? nameResolverProvider .getDefaultScheme ()
917+ ? nameResolverProvider .getScheme ()
918918 : nameResolverRegistry .getDefaultScheme ();
919919 try {
920920 targetUri = new URI (scheme , "" , "/" + target , null );
@@ -940,7 +940,8 @@ static ResolvedNameResolver getNameResolverProvider(
940940
941941 @ VisibleForTesting
942942 static ResolvedNameResolver getNameResolverProviderRfc3986 (
943- String target , NameResolverRegistry nameResolverRegistry ) {
943+ String target , NameResolverRegistry nameResolverRegistry ,
944+ NameResolverProvider nameResolverProvider ) {
944945 // Finding a NameResolver. Try using the target string as the URI. If that fails, try prepending
945946 // "dns:///".
946947 NameResolverProvider provider = null ;
@@ -955,15 +956,25 @@ static ResolvedNameResolver getNameResolverProviderRfc3986(
955956 if (targetUri != null ) {
956957 // For "localhost:8080" this would likely cause provider to be null, because "localhost" is
957958 // parsed as the scheme. Will hit the next case and try "dns:///localhost:8080".
958- provider = nameResolverRegistry .getProviderForScheme (targetUri .getScheme ());
959+ // Use the explicit provider if its scheme matches the target URI.
960+ if (nameResolverProvider != null
961+ && targetUri .getScheme ().equals (nameResolverProvider .getScheme ())) {
962+ provider = nameResolverProvider ;
963+ } else {
964+ provider = nameResolverRegistry .getProviderForScheme (targetUri .getScheme ());
965+ }
959966 }
960967
961968 if (provider == null && !URI_PATTERN .matcher (target ).matches ()) {
962- // It doesn't look like a URI target. Maybe it's an authority string. Try with the default
963- // scheme from the registry.
969+ // It doesn't look like a URI target. Maybe it's an authority string. Try with
970+ // the default scheme from the registry (if provider is not specified) or
971+ // the provider's default scheme (if provider is specified).
972+ String scheme = nameResolverProvider != null
973+ ? nameResolverProvider .getScheme ()
974+ : nameResolverRegistry .getDefaultScheme ();
964975 targetUri =
965976 Uri .newBuilder ()
966- .setScheme (nameResolverRegistry . getDefaultScheme () )
977+ .setScheme (scheme )
967978 .setHost ("" )
968979 .setPath ("/" + target )
969980 .build ();
0 commit comments