Source:
<code>public ConfigurationAsyncClient buildAsyncClient() { Configuration buildConfiguration = (configuration == null) ? Configuration.getGlobalConfiguration().clone() : configuration; ConfigurationClientCredentials configurationCredentials = getConfigurationCredentials(buildConfiguration); String buildEndpoint = getBuildEndpoint(configurationCredentials); Objects.requireNonNull(buildEndpoint); ConfigurationServiceVersion serviceVersion = version != null ? version : ConfigurationServiceVersion.getLatest(); if (pipeline != null) { return new ConfigurationAsyncClient(buildEndpoint, pipeline, serviceVersion); } ConfigurationClientCredentials buildCredential = (credential == null) ? configurationCredentials : credential; if (buildCredential == null) { throw logger.logExceptionAsWarning(new IllegalStateException("'credential' is required.")); } final List<HttpPipelinePolicy> policies = new ArrayList<>(); policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, buildConfiguration, serviceVersion)); policies.add(new RequestIdPolicy()); policies.add(new AddHeadersPolicy(headers)); policies.add(new AddDatePolicy()); policies.add(new ConfigurationCredentialsPolicy(buildCredential)); HttpPolicyProviders.addBeforeRetryPolicies(policies); RetryPolicy defaultRetryPolicy = new RetryPolicy(new ExponentialBackoff() { @Override public Duration calculateRetryDelay(HttpResponse httpResponse, int retryAttempts) { <START> String delay = httpResponse.getHeaderValue(RETRY_AFTER_MS_HEADER); <END> if (delay != null) { return Duration.ofMillis(Long.parseLong(delay)); } else { return calculateRetryDelay(retryAttempts); } } }); policies.add(retryPolicy == null ? defaultRetryPolicy : retryPolicy); policies.addAll(this.policies); HttpPolicyProviders.addAfterRetryPolicies(policies); policies.add(new HttpLoggingPolicy(httpLogOptions)); HttpPipeline pipeline = new HttpPipelineBuilder() .policies(policies.toArray(new HttpPipelinePolicy[0])) .httpClient(httpClient) .build(); return new ConfigurationAsyncClient(buildEndpoint, pipeline, serviceVersion); }</code><technical_language>default handle headers in RetryStrategy default method: retry-after-ms x-ms-retry-after-ms I guess need this customization in AzConfig</technical_language>

Target:
public ConfigurationAsyncClient buildAsyncClient() { Configuration buildConfiguration = (configuration == null) ? Configuration.getGlobalConfiguration().clone() : configuration; ConfigurationClientCredentials configurationCredentials = getConfigurationCredentials(buildConfiguration); String buildEndpoint = getBuildEndpoint(configurationCredentials); Objects.requireNonNull(buildEndpoint); ConfigurationServiceVersion serviceVersion = version != null ? version : ConfigurationServiceVersion.getLatest(); if (pipeline != null) { return new ConfigurationAsyncClient(buildEndpoint, pipeline, serviceVersion); } ConfigurationClientCredentials buildCredential = (credential == null) ? configurationCredentials : credential; if (buildCredential == null) { throw logger.logExceptionAsWarning(new IllegalStateException("'credential' is required.")); } final List<HttpPipelinePolicy> policies = new ArrayList<>(); policies.add(new UserAgentPolicy(httpLogOptions.getApplicationId(), clientName, clientVersion, buildConfiguration)); policies.add(new RequestIdPolicy()); policies.add(new AddHeadersPolicy(headers)); policies.add(new AddDatePolicy()); policies.add(new ConfigurationCredentialsPolicy(buildCredential)); HttpPolicyProviders.addBeforeRetryPolicies(policies); policies.add(retryPolicy == null ? DEFAULT_RETRY_POLICY : retryPolicy); policies.addAll(this.policies); HttpPolicyProviders.addAfterRetryPolicies(policies); policies.add(new HttpLoggingPolicy(httpLogOptions)); HttpPipeline pipeline = new HttpPipelineBuilder() .policies(policies.toArray(new HttpPipelinePolicy[0])) .httpClient(httpClient) .build(); return new ConfigurationAsyncClient(buildEndpoint, pipeline, serviceVersion); }