diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java index a17c920a0515..5b91e595b4c9 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureEnvironment.java @@ -84,7 +84,9 @@ public String getBaseUrl() { * @return a builder for the rest client. */ public RestClient.Builder newRestClientBuilder() { - return new RestClient.Builder(baseURL).withMapperAdapter(new AzureJacksonMapperAdapter()); + return new RestClient.Builder(baseURL) + .withInterceptor(new RequestIdHeaderInterceptor()) + .withMapperAdapter(new AzureJacksonMapperAdapter()); } /** diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureServiceClient.java b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureServiceClient.java index 94142029cfc6..a3a47dc32b4a 100644 --- a/azure-client-runtime/src/main/java/com/microsoft/azure/AzureServiceClient.java +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/AzureServiceClient.java @@ -17,6 +17,7 @@ public abstract class AzureServiceClient extends ServiceClient { protected AzureServiceClient(String baseUrl) { this(new RestClient.Builder(baseUrl) + .withInterceptor(new RequestIdHeaderInterceptor()) .withMapperAdapter(new AzureJacksonMapperAdapter()).build()); } diff --git a/azure-client-runtime/src/main/java/com/microsoft/azure/RequestIdHeaderInterceptor.java b/azure-client-runtime/src/main/java/com/microsoft/azure/RequestIdHeaderInterceptor.java new file mode 100644 index 000000000000..ddbe0db30ec0 --- /dev/null +++ b/azure-client-runtime/src/main/java/com/microsoft/azure/RequestIdHeaderInterceptor.java @@ -0,0 +1,29 @@ +/** + * + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + * + */ + +package com.microsoft.azure; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +import java.io.IOException; +import java.util.UUID; + +/** + * An instance of this class puts an UUID in the request header. Azure uses + * the request id as the unique identifier for + */ +public class RequestIdHeaderInterceptor implements Interceptor { + @Override + public Response intercept(Chain chain) throws IOException { + Request request = chain.request().newBuilder() + .header("x-ms-client-request-id", UUID.randomUUID().toString()) + .build(); + return chain.proceed(request); + } +} diff --git a/client-runtime/src/main/java/com/microsoft/rest/RestClient.java b/client-runtime/src/main/java/com/microsoft/rest/RestClient.java index 151b6d30d353..529cdb8de549 100644 --- a/client-runtime/src/main/java/com/microsoft/rest/RestClient.java +++ b/client-runtime/src/main/java/com/microsoft/rest/RestClient.java @@ -168,7 +168,6 @@ public Builder(String baseUrl, OkHttpClient.Builder httpClientBuilder, Retrofit. // Set up OkHttp client this.httpClientBuilder = httpClientBuilder .cookieJar(new JavaNetCookieJar(cookieManager)) - .addInterceptor(new RetryHandler()) .addInterceptor(new UserAgentInterceptor()); // Set up rest adapter this.retrofitBuilder = retrofitBuilder.baseUrl(baseUrl); @@ -256,6 +255,7 @@ public RestClient build() { OkHttpClient httpClient = httpClientBuilder .addInterceptor(baseUrlHandler) .addInterceptor(customHeadersInterceptor) + .addInterceptor(new RetryHandler()) .build(); return new RestClient(httpClient, retrofitBuilder