diff --git a/CHANGELOG.md b/CHANGELOG.md index 3025ed0a4e..86adbe733f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ This section is for maintaining a changelog for all breaking changes for the cli ### Added - Document HTTP/2 support ([#330](https://github.com/opensearch-project/opensearch-java/pull/330)) +- Expose HTTP status code through `ResponseException#status` ([#756](https://github.com/opensearch-project/opensearch-java/pull/756)) ### Dependencies diff --git a/java-client/src/main/java/org/opensearch/client/transport/httpclient5/ResponseException.java b/java-client/src/main/java/org/opensearch/client/transport/httpclient5/ResponseException.java index 212efcee64..60850f8e2b 100644 --- a/java-client/src/main/java/org/opensearch/client/transport/httpclient5/ResponseException.java +++ b/java-client/src/main/java/org/opensearch/client/transport/httpclient5/ResponseException.java @@ -64,7 +64,7 @@ static String buildMessage(Response response) throws IOException { response.getRequestLine().getMethod(), response.getHost(), response.getRequestLine().getUri(), - response.getStatusLine().toString() + response.getStatusLine() ); if (response.hasWarnings()) { @@ -92,4 +92,11 @@ static String buildMessage(Response response) throws IOException { public Response getResponse() { return response; } + + /** + * HTTP status code returned by OpenSearch. + */ + public int status() { + return this.response.getStatusLine().getStatusCode(); + } } diff --git a/java-client/src/test/java/org/opensearch/client/transport/httpclient5/ResponseExceptionTest.java b/java-client/src/test/java/org/opensearch/client/transport/httpclient5/ResponseExceptionTest.java new file mode 100644 index 0000000000..41de5ee77e --- /dev/null +++ b/java-client/src/test/java/org/opensearch/client/transport/httpclient5/ResponseExceptionTest.java @@ -0,0 +1,34 @@ +package org.opensearch.client.transport.httpclient5; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + +import java.io.IOException; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.HttpStatus; +import org.apache.hc.core5.http.HttpVersion; +import org.apache.hc.core5.http.message.BasicClassicHttpResponse; +import org.apache.hc.core5.http.message.RequestLine; +import org.junit.Test; + +public class ResponseExceptionTest { + + @Test + public void testStatus() throws IOException { + final var response = this.buildResponseException(HttpStatus.SC_BAD_REQUEST); + assertThat(response.status(), equalTo(HttpStatus.SC_BAD_REQUEST)); + } + + private ResponseException buildResponseException(final int statusCode) throws IOException { + return new ResponseException(this.buildTestResponse(statusCode)); + } + + private Response buildTestResponse(final int statusCode) { + return new Response( + new RequestLine("GET", "/", HttpVersion.HTTP_1_1), + new HttpHost("localhost"), + new BasicClassicHttpResponse(statusCode) + ); + } + +}