Include an 'Accept' header for Content-Type in requests
We always expect a Content-Type of 'application/json' with a charset of
UTF-8, so we should include that in our request headers. Also improve
the response parsing to use the ContentType helper and ignore case for
compatibility with newer Elasticsearch versions.
Change-Id: I11984a49f0487dc1b8c979c503d3124cf3aa9c50
diff --git a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
index 482868c..58a53b1 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/AbstractElasticIndex.java
@@ -278,9 +278,9 @@
protected boolean hasErrors(Response response) {
try {
- String contentType = response.getEntity().getContentType().getValue();
+ ContentType contentType = ContentType.get(response.getEntity());
Preconditions.checkState(
- contentType.equals(ContentType.APPLICATION_JSON.toString()),
+ contentType.toString().equalsIgnoreCase(ContentType.APPLICATION_JSON.toString()),
String.format("Expected %s, but was: %s", ContentType.APPLICATION_JSON, contentType));
String responseStr = EntityUtils.toString(response.getEntity());
JsonObject responseJson = (JsonObject) new JsonParser().parse(responseStr);
diff --git a/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java b/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
index b41f365..85764f1 100644
--- a/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
+++ b/src/main/java/com/google/gerrit/elasticsearch/ElasticRestClientProvider.java
@@ -22,14 +22,17 @@
import com.google.inject.Provider;
import com.google.inject.Singleton;
import java.io.IOException;
+import org.apache.http.Header;
import org.apache.http.HttpStatus;
import org.apache.http.StatusLine;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.config.RequestConfig;
+import org.apache.http.entity.ContentType;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
+import org.apache.http.message.BasicHeader;
import org.elasticsearch.client.Request;
import org.elasticsearch.client.Response;
import org.elasticsearch.client.RestClient;
@@ -129,6 +132,8 @@
private RestClient build() {
RestClientBuilder builder = RestClient.builder(cfg.getHosts());
+ builder.setDefaultHeaders(
+ new Header[] {new BasicHeader("Accept", ContentType.APPLICATION_JSON.toString())});
setConfiguredTimeouts(builder);
setConfiguredCredentialsIfAny(builder);
return builder.build();