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();