private JsonObject performRequest(BoundRequestBuilder requestBuilder,
JsonObject body,
int expectedStatusCode,
String errorMessage) {
if (body != null) {
requestBuilder.setBody(body.toJson());
}
addAuth(requestBuilder);
requestBuilder.setFollowRedirect(true);
requestBuilder.addHeader("Content-Type", JSON.toString());
requestBuilder.addHeader("Accept", JSON.toString());
requestBuilder.setCharset(StandardCharsets.UTF_8);
Request request = requestBuilder.build();
MDC.put(MDC_URL_KEY, request.getUrl());
MDC.put(MDC_METHOD_KEY, request.getMethod());
try {
Response response = httpClient.executeRequest(request).get(stashTimeout, TimeUnit.MILLISECONDS);
validateResponse(response, expectedStatusCode, errorMessage);
return extractResponse(response);
} catch (ExecutionException | TimeoutException e) {
throw new StashClientException(request.getUrl(), e);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new StashClientException(request.getUrl(), e);
} finally {
MDC.remove(MDC_URL_KEY);
MDC.remove(MDC_METHOD_KEY);
}
}