From 29d8857dfdf54ddc494bd2f0103cb59d4bfc290d Mon Sep 17 00:00:00 2001 From: Jianghao Lu Date: Tue, 17 May 2016 14:40:26 -0700 Subject: [PATCH] Fix request id to be generated each time --- .../com/microsoft/azure/AzureEnvironment.java | 4 ++- .../microsoft/azure/AzureServiceClient.java | 1 + .../azure/RequestIdHeaderInterceptor.java | 29 +++++++++++++++++++ .../java/com/microsoft/rest/RestClient.java | 2 +- 4 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 azure-client-runtime/src/main/java/com/microsoft/azure/RequestIdHeaderInterceptor.java 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 a17c920a05158..5b91e595b4c9e 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 94142029cfc67..a3a47dc32b4a1 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 0000000000000..ddbe0db30ec0b --- /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 151b6d30d3539..529cdb8de549a 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