From 70c69450b0249c7ca629fb757987b9a4bb016cff Mon Sep 17 00:00:00 2001 From: Luca Cavanna Date: Thu, 25 Jan 2018 14:34:56 +0100 Subject: [PATCH] REST high-level client: move to POST when calling API to retrieve which support request body (#28342) It has been pointed out that GET with body may cause problems to some proxies. We are then switching to POST the API that retrieve info and support a request body. Closes #28326 --- .../org/elasticsearch/client/Request.java | 10 ++--- .../elasticsearch/client/RequestTests.java | 39 +++++++++++-------- .../client/RestHighLevelClientTests.java | 2 +- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java b/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java index ab19c96483c9..4bbe6bc91b4e 100755 --- a/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java +++ b/client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java @@ -360,7 +360,7 @@ static Request multiGet(MultiGetRequest multiGetRequest) throws IOException { parameters.withRealtime(multiGetRequest.realtime()); parameters.withRefresh(multiGetRequest.refresh()); HttpEntity entity = createEntity(multiGetRequest, REQUEST_BODY_CONTENT_TYPE); - return new Request(HttpGet.METHOD_NAME, "/_mget", parameters.getParams(), entity); + return new Request(HttpPost.METHOD_NAME, "/_mget", parameters.getParams(), entity); } static Request index(IndexRequest indexRequest) { @@ -449,17 +449,17 @@ static Request search(SearchRequest searchRequest) throws IOException { if (searchRequest.source() != null) { entity = createEntity(searchRequest.source(), REQUEST_BODY_CONTENT_TYPE); } - return new Request(HttpGet.METHOD_NAME, endpoint, params.getParams(), entity); + return new Request(HttpPost.METHOD_NAME, endpoint, params.getParams(), entity); } static Request searchScroll(SearchScrollRequest searchScrollRequest) throws IOException { HttpEntity entity = createEntity(searchScrollRequest, REQUEST_BODY_CONTENT_TYPE); - return new Request("GET", "/_search/scroll", Collections.emptyMap(), entity); + return new Request(HttpPost.METHOD_NAME, "/_search/scroll", Collections.emptyMap(), entity); } static Request clearScroll(ClearScrollRequest clearScrollRequest) throws IOException { HttpEntity entity = createEntity(clearScrollRequest, REQUEST_BODY_CONTENT_TYPE); - return new Request("DELETE", "/_search/scroll", Collections.emptyMap(), entity); + return new Request(HttpDelete.METHOD_NAME, "/_search/scroll", Collections.emptyMap(), entity); } static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOException { @@ -471,7 +471,7 @@ static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOExcep XContent xContent = REQUEST_BODY_CONTENT_TYPE.xContent(); byte[] source = MultiSearchRequest.writeMultiLineFormat(multiSearchRequest, xContent); HttpEntity entity = new ByteArrayEntity(source, createContentType(xContent.type())); - return new Request("GET", "/_msearch", params.getParams(), entity); + return new Request(HttpPost.METHOD_NAME, "/_msearch", params.getParams(), entity); } private static HttpEntity createEntity(ToXContent toXContent, XContentType xContentType) throws IOException { diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java index e4cbfc2c0c98..2ab0aa30ff35 100755 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java @@ -20,6 +20,11 @@ package org.elasticsearch.client; import org.apache.http.HttpEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpHead; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.ByteArrayEntity; import org.apache.http.entity.ContentType; import org.apache.http.entity.StringEntity; @@ -138,7 +143,7 @@ public void testPing() { assertEquals("/", request.getEndpoint()); assertEquals(0, request.getParameters().size()); assertNull(request.getEntity()); - assertEquals("HEAD", request.getMethod()); + assertEquals(HttpHead.METHOD_NAME, request.getMethod()); } public void testInfo() { @@ -146,11 +151,11 @@ public void testInfo() { assertEquals("/", request.getEndpoint()); assertEquals(0, request.getParameters().size()); assertNull(request.getEntity()); - assertEquals("GET", request.getMethod()); + assertEquals(HttpGet.METHOD_NAME, request.getMethod()); } public void testGet() { - getAndExistsTest(Request::get, "GET"); + getAndExistsTest(Request::get, HttpGet.METHOD_NAME); } public void testMultiGet() throws IOException { @@ -200,7 +205,7 @@ public void testMultiGet() throws IOException { } Request request = Request.multiGet(multiGetRequest); - assertEquals("GET", request.getMethod()); + assertEquals(HttpPost.METHOD_NAME, request.getMethod()); assertEquals("/_mget", request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); assertToXContentBody(multiGetRequest, request.getEntity()); @@ -240,7 +245,7 @@ public void testDelete() { } public void testExists() { - getAndExistsTest(Request::exists, "HEAD"); + getAndExistsTest(Request::exists, HttpHead.METHOD_NAME); } private static void getAndExistsTest(Function requestConverter, String method) { @@ -318,7 +323,7 @@ public void testCreateIndex() throws IOException { Request request = Request.createIndex(createIndexRequest); assertEquals("/" + indexName, request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); - assertEquals("PUT", request.getMethod()); + assertEquals(HttpPut.METHOD_NAME, request.getMethod()); assertToXContentBody(createIndexRequest, request.getEntity()); } @@ -367,7 +372,7 @@ public void testPutMapping() throws IOException { assertEquals(endpoint.toString(), request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); - assertEquals("PUT", request.getMethod()); + assertEquals(HttpPut.METHOD_NAME, request.getMethod()); assertToXContentBody(putMappingRequest, request.getEntity()); } @@ -384,7 +389,7 @@ public void testDeleteIndex() { Request request = Request.deleteIndex(deleteIndexRequest); assertEquals("/" + String.join(",", indices), request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); - assertEquals("DELETE", request.getMethod()); + assertEquals(HttpDelete.METHOD_NAME, request.getMethod()); assertNull(request.getEntity()); } @@ -403,7 +408,7 @@ public void testOpenIndex() { StringJoiner endpoint = new StringJoiner("/", "/", "").add(String.join(",", indices)).add("_open"); assertThat(endpoint.toString(), equalTo(request.getEndpoint())); assertThat(expectedParams, equalTo(request.getParameters())); - assertThat(request.getMethod(), equalTo("POST")); + assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME)); assertThat(request.getEntity(), nullValue()); } @@ -420,7 +425,7 @@ public void testCloseIndex() { StringJoiner endpoint = new StringJoiner("/", "/", "").add(String.join(",", indices)).add("_close"); assertThat(endpoint.toString(), equalTo(request.getEndpoint())); assertThat(expectedParams, equalTo(request.getParameters())); - assertThat(request.getMethod(), equalTo("POST")); + assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME)); assertThat(request.getEntity(), nullValue()); } @@ -434,9 +439,9 @@ public void testIndex() throws IOException { Map expectedParams = new HashMap<>(); - String method = "POST"; + String method = HttpPost.METHOD_NAME; if (id != null) { - method = "PUT"; + method = HttpPut.METHOD_NAME; if (randomBoolean()) { indexRequest.opType(DocWriteRequest.OpType.CREATE); } @@ -571,7 +576,7 @@ public void testUpdate() throws IOException { Request request = Request.update(updateRequest); assertEquals("/" + index + "/" + type + "/" + id + "/_update", request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); - assertEquals("POST", request.getMethod()); + assertEquals(HttpPost.METHOD_NAME, request.getMethod()); HttpEntity entity = request.getEntity(); assertTrue(entity instanceof ByteArrayEntity); @@ -685,7 +690,7 @@ public void testBulk() throws IOException { Request request = Request.bulk(bulkRequest); assertEquals("/_bulk", request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); - assertEquals("POST", request.getMethod()); + assertEquals(HttpPost.METHOD_NAME, request.getMethod()); assertEquals(xContentType.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue()); byte[] content = new byte[(int) request.getEntity().getContentLength()]; try (InputStream inputStream = request.getEntity().getContent()) { @@ -896,6 +901,7 @@ public void testSearch() throws Exception { endpoint.add(type); } endpoint.add("_search"); + assertEquals(HttpPost.METHOD_NAME, request.getMethod()); assertEquals(endpoint.toString(), request.getEndpoint()); assertEquals(expectedParams, request.getParameters()); assertToXContentBody(searchSourceBuilder, request.getEntity()); @@ -934,6 +940,7 @@ public void testMultiSearch() throws IOException { Request request = Request.multiSearch(multiSearchRequest); assertEquals("/_msearch", request.getEndpoint()); + assertEquals(HttpPost.METHOD_NAME, request.getMethod()); assertEquals(expectedParams, request.getParameters()); List requests = new ArrayList<>(); @@ -957,7 +964,7 @@ public void testSearchScroll() throws IOException { searchScrollRequest.scroll(randomPositiveTimeValue()); } Request request = Request.searchScroll(searchScrollRequest); - assertEquals("GET", request.getMethod()); + assertEquals(HttpPost.METHOD_NAME, request.getMethod()); assertEquals("/_search/scroll", request.getEndpoint()); assertEquals(0, request.getParameters().size()); assertToXContentBody(searchScrollRequest, request.getEntity()); @@ -971,7 +978,7 @@ public void testClearScroll() throws IOException { clearScrollRequest.addScrollId(randomAlphaOfLengthBetween(5, 10)); } Request request = Request.clearScroll(clearScrollRequest); - assertEquals("DELETE", request.getMethod()); + assertEquals(HttpDelete.METHOD_NAME, request.getMethod()); assertEquals("/_search/scroll", request.getEndpoint()); assertEquals(0, request.getParameters().size()); assertToXContentBody(clearScrollRequest, request.getEntity()); diff --git a/client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java b/client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java index 79150f4f3df7..26370ceed4f3 100644 --- a/client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java +++ b/client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java @@ -179,7 +179,7 @@ public void testSearchScroll() throws IOException { assertEquals(5, searchResponse.getTotalShards()); assertEquals(5, searchResponse.getSuccessfulShards()); assertEquals(100, searchResponse.getTook().getMillis()); - verify(restClient).performRequest(eq("GET"), eq("/_search/scroll"), eq(Collections.emptyMap()), + verify(restClient).performRequest(eq("POST"), eq("/_search/scroll"), eq(Collections.emptyMap()), isNotNull(HttpEntity.class), argThat(new HeadersVarargMatcher(headers))); }