
org.elasticsearch.test.rest.client.RestResponse Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of framework Show documentation
Show all versions of framework Show documentation
Elasticsearch subproject :test:framework
/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.elasticsearch.test.rest.client;
import org.elasticsearch.test.rest.Stash;
import org.elasticsearch.test.rest.client.http.HttpResponse;
import org.elasticsearch.test.rest.json.JsonPath;
import java.io.IOException;
/**
* Response obtained from a REST call
* Supports parsing the response body as json when needed and returning specific values extracted from it
*/
public class RestResponse {
private final HttpResponse response;
private JsonPath parsedResponse;
public RestResponse(HttpResponse response) {
this.response = response;
}
public int getStatusCode() {
return response.getStatusCode();
}
public String getReasonPhrase() {
return response.getReasonPhrase();
}
/**
* Returns the body properly parsed depending on the content type.
* Might be a string or a json object parsed as a map.
*/
public Object getBody() throws IOException {
if (isJson()) {
return parsedResponse().evaluate("");
}
return response.getBody();
}
/**
* Returns the body as a string
*/
public String getBodyAsString() {
return response.getBody();
}
public boolean isError() {
return response.isError();
}
/**
* Parses the response body as json and extracts a specific value from it (identified by the provided path)
*/
public Object evaluate(String path) throws IOException {
return evaluate(path, Stash.EMPTY);
}
/**
* Parses the response body as json and extracts a specific value from it (identified by the provided path)
*/
public Object evaluate(String path, Stash stash) throws IOException {
if (response == null) {
return null;
}
JsonPath jsonPath = parsedResponse();
if (jsonPath == null) {
//special case: api that don't support body (e.g. exists) return true if 200, false if 404, even if no body
//is_true: '' means the response had no body but the client returned true (caused by 200)
//is_false: '' means the response had no body but the client returned false (caused by 404)
if ("".equals(path) && !response.supportsBody()) {
return !response.isError();
}
return null;
}
return jsonPath.evaluate(path, stash);
}
private boolean isJson() {
String contentType = response.getHeaders().get("Content-Type");
return contentType != null && contentType.contains("application/json");
}
private JsonPath parsedResponse() throws IOException {
if (parsedResponse != null) {
return parsedResponse;
}
if (response == null || !response.hasBody()) {
return null;
}
return parsedResponse = new JsonPath(response.getBody());
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy