diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/EndpointContext.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/EndpointContext.java index 09e105ccebc4..2a775ec4dd6c 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/EndpointContext.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/EndpointContext.java @@ -134,6 +134,7 @@ public static EndpointContext getDefaultInstance() { public abstract String resolvedEndpoint(); + @Nullable public abstract String resolvedServerAddress(); @Nullable @@ -410,7 +411,7 @@ private Integer parseServerPort(String endpoint) { return null; } HostAndPort hostAndPort = parseServerHostAndPort(endpoint); - if (!hostAndPort.hasPort()) { + if (hostAndPort == null || !hostAndPort.hasPort()) { return null; } return hostAndPort.getPort(); @@ -466,8 +467,13 @@ public EndpointContext build() throws IOException { setResolvedUniverseDomain(determineUniverseDomain()); String endpoint = determineEndpoint(); setResolvedEndpoint(endpoint); - setResolvedServerAddress(parseServerAddress(resolvedEndpoint())); - setResolvedServerPort(parseServerPort(resolvedEndpoint())); + try { + setResolvedServerAddress(parseServerAddress(resolvedEndpoint())); + setResolvedServerPort(parseServerPort(resolvedEndpoint())); + } catch (Exception throwable) { + // Server address and server port are only used for observability. + // We should ignore any errors parsing them and not affect the main client requests. + } setUseS2A(shouldUseS2A()); return autoBuild(); } diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/EndpointContextTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/EndpointContextTest.java index 99a8f63fcf3e..b8c24cd6248b 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/EndpointContextTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/rpc/EndpointContextTest.java @@ -683,4 +683,19 @@ void endpointContextBuild_resolvesPort() throws IOException { .build(); Truth.assertThat(endpointContext.resolvedServerPort()).isNull(); } + + @Test + void endpointContextBuild_resolvesInvalidEndpointAndPort() throws Exception { + + String endpoint = "localhost:-1"; + + EndpointContext endpointContext = + defaultEndpointContextBuilder + .setClientSettingsEndpoint(endpoint) + .setTransportChannelProviderEndpoint(null) + .build(); + + Truth.assertThat(endpointContext.resolvedServerAddress()).isNull(); + Truth.assertThat(endpointContext.resolvedServerPort()).isNull(); + } }